Skip to content

Instantly share code, notes, and snippets.

@rottenbytes
Created August 28, 2012 20:11
Show Gist options
  • Save rottenbytes/3503596 to your computer and use it in GitHub Desktop.
Save rottenbytes/3503596 to your computer and use it in GitHub Desktop.
quick & dirty chef pkgng provider
require 'chef/mixin/command'
require 'chef/log'
require 'chef/file_cache'
require 'chef/platform'
require 'chef'
class Chef
class Provider
class Package
class Pkgng < Chef::Provider::Package
include Chef::Mixin::ShellOut
def initialize(*args)
super
@current_resource = Chef::Resource::Package.new(@new_resource.name)
@current_resource.package_name(@new_resource.package_name)
@current_resource
end
def check_package_state
pkg_info = shell_out!("pkg info #{package_name}", :env => nil, :returns => [0,70])
version = nil
t = pkg_info.stdout.match(/(.*)-(\d+\.\d+\.\d+(\.\d+.*\s)?)\s+(.*)/)
unless t.nil?
version = t[2].strip
end
return version
end
def load_current_resource
@current_resource.package_name(@new_resource.package_name)
@current_resource.version(self.check_package_state())
@candidate_version = ""
end
def package_name
@new_resource.package_name
end
def install_package(name, version = "")
shell_out!("pkg install -y #{package_name}", :env => nil).status
Chef::Log.debug("#{@new_resource} installed from: #{@new_resource.source}")
end
def remove_package(name, version = nil)
shell_out!("pkg delete -y #{package_name}", :env => nil).status
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment