class Inspec::Resources::Package

Public Class Methods

new(package_name, opts = {}) click to toggle source
# File lib/inspec/resources/package.rb, line 23
def initialize(package_name, opts = {}) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
  @package_name = package_name
  @name = @package_name
  @cache = nil
  # select package manager
  @pkgman = nil

  os = inspec.os
  if os.debian?
    @pkgman = Deb.new(inspec)
  elsif os.redhat? || %w{suse amazon fedora}.include?(os[:family])
    @pkgman = Rpm.new(inspec, opts)
  elsif ["arch"].include?(os[:name])
    @pkgman = Pacman.new(inspec)
  elsif ["darwin"].include?(os[:family])
    @pkgman = Brew.new(inspec)
  elsif os.windows?
    @pkgman = WindowsPkg.new(inspec)
  elsif ["aix"].include?(os[:family])
    @pkgman = BffPkg.new(inspec)
  elsif os.solaris?
    @pkgman = SolarisPkg.new(inspec)
  elsif ["hpux"].include?(os[:family])
    @pkgman = HpuxPkg.new(inspec)
  elsif ["alpine"].include?(os[:name])
    @pkgman = AlpinePkg.new(inspec)
  elsif ["freebsd"].include?(os[:name])
    @pkgman = FreebsdPkg.new(inspec)
  else
    raise Inspec::Exceptions::ResourceSkipped, "The `package` resource is not supported on your OS yet."
  end

  evaluate_missing_requirements
end

Public Instance Methods

held?(_provider = nil, _version = nil) click to toggle source

returns true it the package is held (if the OS supports it)

# File lib/inspec/resources/package.rb, line 64
def held?(_provider = nil, _version = nil)
  info[:held] == true
end
info() click to toggle source

returns the package description

# File lib/inspec/resources/package.rb, line 69
def info
  return @cache unless @cache.nil?
  # All `@pkgman.info` methods return `{}`. This matches that
  # behavior if `@pkgman` can't be determined, thus avoiding the
  # `undefined method 'info' for nil:NilClass` error
  return {} if @pkgman.nil?

  @pkgman.info(@package_name)
end
installed?(_provider = nil, _version = nil) click to toggle source

returns true if the package is installed

# File lib/inspec/resources/package.rb, line 59
def installed?(_provider = nil, _version = nil)
  info[:installed] == true
end
to_s() click to toggle source
# File lib/inspec/resources/package.rb, line 85
def to_s
  "System Package #{@package_name}"
end
version() click to toggle source

return the package version

# File lib/inspec/resources/package.rb, line 80
def version
  info = @pkgman.info(@package_name)
  info[:version]
end

Private Instance Methods

evaluate_missing_requirements() click to toggle source
# File lib/inspec/resources/package.rb, line 91
def evaluate_missing_requirements
  missing_requirements_string = @pkgman.missing_requirements.uniq.join(", ")
  return if missing_requirements_string.empty?

  raise Inspec::Exceptions::ResourceSkipped, "The following requirements are not met for this resource: #{missing_requirements_string}"
end