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
Calls superclass method
Chef::Provider::Package#define_resource_requirements
# 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