class Chef::Provider::Package::Habitat
Public Instance Methods
install_package(names, versions)
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 41 def install_package(names, versions) # License acceptance needed outside of local Chef Client shell_out!("hab license accept") if Chef::Config.target_mode? names.zip(versions).map do |n, v| opts = ["pkg", "install", "--channel", new_resource.channel, "--url", new_resource.bldr_url] opts += ["--auth", new_resource.auth_token] if new_resource.auth_token opts += ["#{strip_version(n)}/#{v}", new_resource.options] opts += ["--binlink"] if new_resource.binlink opts += ["--force"] if new_resource.binlink.eql? :force hab(opts) end end
Also aliased as: upgrade_package
load_current_resource()
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 31 def load_current_resource @current_resource = Chef::Resource::HabitatPackage.new(new_resource.name) current_resource.package_name(strip_version(new_resource.package_name)) @candidate_version = candidate_versions current_resource.version(current_versions) current_resource end
remove_package(names, versions)
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 57 def remove_package(names, versions) # raise 'It is too dangerous to :remove packages with the habitat_package resource right now. This functionality should be deferred to the hab cli.' names.zip(versions).map do |n, v| opts = %w{pkg uninstall} opts += ["--keep-latest", new_resource.keep_latest ] if new_resource.keep_latest opts += ["#{strip_version(n).chomp("/")}#{v}", new_resource.options] opts += ["--exclude"] if new_resource.exclude opts += ["--no-deps"] if new_resource.no_deps hab(opts) # action :remove end end
Also aliased as: purge_package
Private Instance Methods
candidate_versions()
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 128 def candidate_versions package_name_array.zip(new_version_array).map do |n, v| package_version(n, v) end end
current_versions()
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 134 def current_versions package_name_array.map do |n| installed_version(n) end end
depot_package(name, version = nil)
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 95 def depot_package(name, version = nil) @depot_package ||= {} @depot_package[name] ||= begin origin, pkg_name = name.split("/") name_version = [pkg_name, version].compact.join("/").squeeze("/").chomp("/").sub(%r{^\/}, "") url = if new_resource.bldr_url.include?("/v1/") "#{new_resource.bldr_url.chomp("/")}/depot/channels/#{origin}/#{new_resource.channel}/pkgs/#{name_version}" else "#{new_resource.bldr_url.chomp("/")}/v1/depot/channels/#{origin}/#{new_resource.channel}/pkgs/#{name_version}" end url << "/latest" unless name_version.count("/") >= 2 url << "?#{platform_target}" unless platform_target.empty? headers = {} headers["Authorization"] = "Bearer #{new_resource.auth_token}" if new_resource.auth_token Chef::JSONCompat.parse(http.get(url, headers)) rescue Net::HTTPClientException nil end end
http()
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 123 def http # FIXME: use SimpleJSON when the depot mime-type is fixed @http ||= TargetIO::HTTP.new(new_resource.bldr_url.to_s) end
installed_version(ident)
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 140 def installed_version(ident) hab("pkg", "path", ident).stdout.chomp.split(windows? ? "\\" : "/")[-2..-1].join("/") rescue Mixlib::ShellOut::ShellCommandFailed nil end
package_version(name, version = nil)
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 118 def package_version(name, version = nil) p = depot_package(name, version) "#{p["ident"]["version"]}/#{p["ident"]["release"]}" unless p.nil? end
platform_target()
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 85 def platform_target if windows? "target=x86_64-windows" elsif node["kernel"]["release"].to_i < 3 "target=x86_64-linux-kernel2" else "" end end
strip_version(name)
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 78 def strip_version(name) validate_name!(name) n = name.squeeze("/").chomp("/").sub(%r{^\/}, "") n = n[0..(n.rindex("/") - 1)] while n.count("/") >= 2 n end
validate_name!(name)
click to toggle source
# File lib/chef/provider/package/habitat.rb, line 74 def validate_name!(name) raise ArgumentError, "package name must be specified as 'origin/name', use the 'version' property to specify a version" unless name.squeeze("/").count("/") < 2 end
version_compare(v1, v2)
click to toggle source
This is used by the superclass Chef::Provider::Package
# File lib/chef/provider/package/habitat.rb, line 160 def version_compare(v1, v2) require "mixlib/versioning" unless defined?(Mixlib::Versioning) # Convert the package version (X.Y.Z/DATE) into a version that Mixlib::Versioning understands (X.Y.Z+DATE) hab_v1 = Mixlib::Versioning.parse(v1.tr("/", "+")) hab_v2 = Mixlib::Versioning.parse(v2.tr("/", "+")) hab_v1 <=> hab_v2 end
version_requirement_satisfied?(current_version, new_version)
click to toggle source
This is used by the superclass Chef::Provider::Package
# File lib/chef/provider/package/habitat.rb, line 147 def version_requirement_satisfied?(current_version, new_version) return false if new_version.nil? || current_version.nil? nv_parts = new_version.squeeze("/").split("/") if nv_parts.count < 2 current_version.squeeze("/").split("/")[0] == new_version.squeeze("/") else current_version.squeeze("/") == new_resource.version.squeeze("/") end end