Included Modules

Files

Class/Module Index [+]

Quicksearch

Chef::Provider::Package::Apt

Attributes

is_virtual_package[RW]

Public Instance Methods

check_package_state(package) click to toggle source
# File lib/chef/provider/package/apt.rb, line 54
def check_package_state(package)
  Chef::Log.debug("#{@new_resource} checking package status for #{package}")
  installed = false

  shell_out!("apt-cache#{expand_options(default_release_options)} policy #{package}", :timeout => @new_resource.timeout).stdout.each_line do |line|
    case line
    when /^\s{2}Installed: (.+)$/
      installed_version = $1
      if installed_version == '(none)'
        Chef::Log.debug("#{@new_resource} current version is nil")
        @current_resource.version(nil)
      else
        Chef::Log.debug("#{@new_resource} current version is #{installed_version}")
        @current_resource.version(installed_version)
        installed = true
      end
    when /^\s{2}Candidate: (.+)$/
      candidate_version = $1
      if candidate_version == '(none)'
        # This may not be an appropriate assumption, but it shouldn't break anything that already worked -- btm
        @is_virtual_package = true
        showpkg = shell_out!("apt-cache showpkg #{package}", :timeout => @new_resource.timeout).stdout
        providers = Hash.new
        # Returns all lines after 'Reverse Provides:'
        showpkg.rpartition(/Reverse Provides:\s*#{$/}/)[2].each_line do |line|
          provider, version = line.split
          providers[provider] = version
        end
        # Check if the package providing this virtual package is installed
        num_providers = providers.length
        raise Chef::Exceptions::Package, "#{@new_resource.package_name} has no candidate in the apt-cache" if num_providers == 0
        # apt will only install a virtual package if there is a single providing package
        raise Chef::Exceptions::Package, "#{@new_resource.package_name} is a virtual package provided by #{num_providers} packages, you must explicitly select one to install" if num_providers > 1
        # Check if the package providing this virtual package is installed
        Chef::Log.info("#{@new_resource} is a virtual package, actually acting on package[#{providers.keys.first}]")
        installed = check_package_state(providers.keys.first)
      else
        Chef::Log.debug("#{@new_resource} candidate version is #{$1}")
        @candidate_version = $1
      end
    end
  end

  return installed
end
default_release_options() click to toggle source
# File lib/chef/provider/package/apt.rb, line 49
def default_release_options
  # Use apt::Default-Release option only if provider was explicitly defined
  "-o APT::Default-Release=#{@new_resource.default_release}" if @new_resource.provider && @new_resource.default_release
end
define_resource_requirements() click to toggle source
# File lib/chef/provider/package/apt.rb, line 40
def define_resource_requirements
  super

  requirements.assert(:all_actions) do |a|
    a.assertion { !@new_resource.source }
    a.failure_message(Chef::Exceptions::Package, 'apt package provider cannot handle source attribute. Use dpkg provider instead')
  end
end
install_package(name, version) click to toggle source
# File lib/chef/provider/package/apt.rb, line 100
def install_package(name, version)
  package_name = "#{name}=#{version}"
  package_name = name if @is_virtual_package
  run_noninteractive("apt-get -q -y#{expand_options(default_release_options)}#{expand_options(@new_resource.options)} install #{package_name}")
end
load_current_resource() click to toggle source
# File lib/chef/provider/package/apt.rb, line 33
def load_current_resource
  @current_resource = Chef::Resource::Package.new(@new_resource.name)
  @current_resource.package_name(@new_resource.package_name)
  check_package_state(@new_resource.package_name)
  @current_resource
end
preseed_package(preseed_file) click to toggle source
# File lib/chef/provider/package/apt.rb, line 119
def preseed_package(preseed_file)
  Chef::Log.info("#{@new_resource} pre-seeding package installation instructions")
  run_noninteractive("debconf-set-selections #{preseed_file}")
end
purge_package(name, version) click to toggle source
# File lib/chef/provider/package/apt.rb, line 115
def purge_package(name, version)
  run_noninteractive("apt-get -q -y#{expand_options(@new_resource.options)} purge #{@new_resource.package_name}")
end
reconfig_package(name, version) click to toggle source
# File lib/chef/provider/package/apt.rb, line 124
def reconfig_package(name, version)
  Chef::Log.info("#{@new_resource} reconfiguring")
  run_noninteractive("dpkg-reconfigure #{name}")
end
remove_package(name, version) click to toggle source
# File lib/chef/provider/package/apt.rb, line 110
def remove_package(name, version)
  package_name = "#{name}"
  run_noninteractive("apt-get -q -y#{expand_options(@new_resource.options)} remove #{package_name}")
end
upgrade_package(name, version) click to toggle source
# File lib/chef/provider/package/apt.rb, line 106
def upgrade_package(name, version)
  install_package(name, version)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.