class Wright::Provider::Package::Apt

Apt package provider. Used as a provider for {Resource::Package} on Debian-based systems.

Public Instance Methods

installed_versions() click to toggle source

@return [Array<String>] the installed package versions

# File lib/wright/provider/package/apt.rb, line 13
def installed_versions
  package = "package '#{package_name}'"
  err = "Cannot determine installed versions for #{package}"
  apt_policy = exec_or_fail('apt-cache', ['policy', package_name], err)

  version_re = /(?!\(none\)).*/
  installed_re = /^  Installed: (?<version>#{version_re})$/
  match = installed_re.match(apt_policy)
  match ? [match['version']] : virtual_package_versions
end

Private Instance Methods

apt_get(action, options, package, version = nil) click to toggle source
# File lib/wright/provider/package/apt.rb, line 34
def apt_get(action, options, package, version = nil)
  package_version = version.nil? ? '' : "=#{version}"
  cmd = 'apt-get'
  args = ['-qy', *options, action.to_s, package + package_version]
  exec_or_fail(cmd, args, "cannot #{action} package '#{package}'")
end
env() click to toggle source
# File lib/wright/provider/package/apt.rb, line 63
def env
  { 'DEBIAN_FRONTEND' => 'noninteractive' }
end
install_package() click to toggle source
# File lib/wright/provider/package/apt.rb, line 26
def install_package
  apt_get(:install, package_options, package_name, package_version)
end
remove_package() click to toggle source
# File lib/wright/provider/package/apt.rb, line 30
def remove_package
  apt_get(:remove, package_options, package_name)
end
reverse_provides() click to toggle source
# File lib/wright/provider/package/apt.rb, line 56
def reverse_provides
  err = 'Error executing apt-cache'
  showpkg = exec_or_fail('apt-cache', ['showpkg', package_name], err)
  packages = showpkg.partition("Reverse Provides: \n").last.split("\n")
  Hash[packages.map { |p| p.split(' ', 2) }]
end
virtual_package_installed?() click to toggle source

@todo replace the OpenStruct hack below by a direct

instantiation of {Wright::Resource::Package} as soon as
the resource-provider mapping can be changed more easily
# File lib/wright/provider/package/apt.rb, line 48
def virtual_package_installed?
  reverse_provides.any? do |name, version|
    resource = OpenStruct.new(name: name, version: version)
    package = Wright::Provider::Package::Apt.new(resource)
    package.installed?
  end
end
virtual_package_versions() click to toggle source
# File lib/wright/provider/package/apt.rb, line 41
def virtual_package_versions
  virtual_package_installed? ? ['virtual'] : []
end