diff options
Diffstat (limited to 'modules/slackware/lib/puppet/provider/package')
| -rw-r--r-- | modules/slackware/lib/puppet/provider/package/slackware.rb | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/modules/slackware/lib/puppet/provider/package/slackware.rb b/modules/slackware/lib/puppet/provider/package/slackware.rb new file mode 100644 index 0000000..32ab31f --- /dev/null +++ b/modules/slackware/lib/puppet/provider/package/slackware.rb @@ -0,0 +1,73 @@ +# puppet/provider/package/slackware.rb +require 'puppet/provider/package' + +# Slackware Linux pkgtools +Puppet::Type.type(:package).provide :slackware, :parent => Puppet::Provider::Package do + desc "Slackware package maintenance system. Requires `/sbin/removepkg` and `/sbin/upgradepkg`." + + has_feature :installable + has_feature :uninstallable + + # Regex to match Slackware packages + # Name, Version, Architecure, and Build + SLACK_REGEX = /^(.*)-(\d|\w[^-]*)[-]([\w_]+)[-](\d+?.*?)$/ + SLACK_NVAB_FIELDS = [:name, :version, :arch, :build] + + commands :upgradepkg => "/sbin/upgradepkg", + :removepkg => "/sbin/removepkg" + + defaultfor :operatingsystem => :slackware + confine :operatingsystem => :slackware + + + def self.instances + packages = [] + # list the contents of /var/log/packages + cmd = "/bin/ls -1 /var/log/packages/" + execpipe(cmd) do |process| + hash = {} + # now turn each returned line into a package object + process.each_line { |line| + if hash = nvab_to_hash(line) + packages << new(hash) + end + } + end + packages + end + + + def query + self.class.instances.each do |provider| + if provider.name == @resource.name + return provider.properties + end + end + nil + end + + + def install + unless source = @resource[:source] + raise ArgumentError, "You cannot install Slackware packages without a source" + end + upgradepkg("--install-new", source) + end + + + def uninstall + nvab = "#{get(:name)}-#{get(:version)}-#{get(:arch)}-#{get(:build)}" + removepkg(nvab) + end + + + def self.nvab_to_hash(line) + line.chomp! + hash = {} + match = SLACK_REGEX.match(line.split[0]) + SLACK_NVAB_FIELDS.zip(match[1,4]) { |f, v| hash[f] = v } + hash[:provider] = self.name + hash[:ensure] = "present" + hash + end +end |