class Chef::Provider::Package::Openbsd

Public Class Methods

new(*args) click to toggle source
Calls superclass method Chef::Mixin::GetSourceFromPackage::new
# File lib/chef/provider/package/openbsd.rb, line 39
def initialize(*args)
  super
  @current_resource = Chef::Resource::Package.new(new_resource.name)
end

Public Instance Methods

define_resource_requirements() click to toggle source
# File lib/chef/provider/package/openbsd.rb, line 50
def define_resource_requirements
  super

  # Below are incomplete/missing features for this package provider
  requirements.assert(:all_actions) do |a|
    a.assertion { !new_resource.source }
    a.failure_message(Chef::Exceptions::Package, "The openbsd package provider does not support the source property")
  end
  requirements.assert(:all_actions) do |a|
    a.assertion do
      if /^(.+?)--(.+)/.match?(new_resource.package_name)
        !new_resource.version
      else
        true
      end
    end
    a.failure_message(Chef::Exceptions::Package, "The openbsd package provider does not support providing a version and flavor")
  end
end
install_package(name, version) click to toggle source
# File lib/chef/provider/package/openbsd.rb, line 70
def install_package(name, version)
  unless current_resource.version
    if parts = name.match(/^(.+?)--(.+)/) # use double-dash for stems with flavors, see man page for pkg_add
      name = parts[1]
    end
    shell_out!("pkg_add", "-r", package_string(name, version), env: { "PKG_PATH" => pkg_path }).status
    logger.trace("#{new_resource.package_name} installed")
  end
end
load_current_resource() click to toggle source
# File lib/chef/provider/package/openbsd.rb, line 44
def load_current_resource
  current_resource.package_name(new_resource.package_name)
  current_resource.version(installed_version)
  current_resource
end
remove_package(name, version) click to toggle source
# File lib/chef/provider/package/openbsd.rb, line 80
def remove_package(name, version)
  if parts = name.match(/^(.+?)--(.+)/)
    name = parts[1]
  end
  shell_out!("pkg_delete", package_string(name, version), env: nil).status
end

Private Instance Methods

candidate_version() click to toggle source
# File lib/chef/provider/package/openbsd.rb, line 101
def candidate_version
  @candidate_version ||= begin
    results = []
    shell_out!("pkg_info", "-I", package_string(new_resource.package_name, new_resource.version), env: nil, returns: [0, 1]).stdout.each_line do |line|
      results << if parts = new_resource.package_name.match(/^(.+?)--(.+)/)
                   line[/^#{Regexp.escape(parts[1])}-(.+?)\s/, 1]
                 else
                   line[/^#{Regexp.escape(new_resource.package_name)}-(.+?)\s/, 1]
                 end
    end
    results = results.reject(&:nil?)
    logger.trace("Candidate versions of '#{new_resource.package_name}' are '#{results}'")
    case results.length
    when 0
      []
    when 1
      results[0]
    else
      raise Chef::Exceptions::Package, "#{new_resource.package_name} has multiple matching candidates. Please use a more specific name" if results.length > 1
    end
  end
end
installed_version() click to toggle source
# File lib/chef/provider/package/openbsd.rb, line 89
def installed_version
  name = if parts = new_resource.package_name.match(/^(.+?)--(.+)/)
           parts[1]
         else
           new_resource.package_name
         end
  pkg_info = shell_out!("pkg_info", "-e", "#{name}->0", env: nil, returns: [0, 1])
  result = pkg_info.stdout[/^inst:#{Regexp.escape(name)}-(.+?)\s/, 1]
  logger.trace("installed_version of '#{new_resource.package_name}' is '#{result}'")
  result
end
package_string(name, version) click to toggle source
# File lib/chef/provider/package/openbsd.rb, line 124
def package_string(name, version)
  if version
    "#{name}-#{version}"
  else
    name
  end
end
pkg_path() click to toggle source
# File lib/chef/provider/package/openbsd.rb, line 132
def pkg_path
  ENV["PKG_PATH"] || "http://ftp.OpenBSD.org/pub/#{node["kernel"]["name"]}/#{node["kernel"]["release"]}/packages/#{node["kernel"]["machine"]}/"
end