summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Robinson <matt@puppetlabs.com>2010-07-06 17:42:56 -0700
committerMarkus Roberts <Markus@reality.com>2010-07-06 23:58:01 -0700
commit6ac36eb42f0a505fd37d7e600bb0fd8837511b42 (patch)
tree323c1b912930354fbfd75b2c4908e94e77390121
parent45a9f371ac9ee2e5212e4d6fc4f1fb1b08640b32 (diff)
downloadpuppet-6ac36eb42f0a505fd37d7e600bb0fd8837511b42.tar.gz
puppet-6ac36eb42f0a505fd37d7e600bb0fd8837511b42.tar.xz
puppet-6ac36eb42f0a505fd37d7e600bb0fd8837511b42.zip
[#2370] Allow OpenBSD to add packages with versions and flavors
This patch is from Joe McDonagh <joseph.e.mcdonagh@gmail.com>
-rwxr-xr-xlib/puppet/provider/package/openbsd.rb47
-rw-r--r--lib/puppet/type/package.rb5
2 files changed, 43 insertions, 9 deletions
diff --git a/lib/puppet/provider/package/openbsd.rb b/lib/puppet/provider/package/openbsd.rb
index af590eb4d..1c873fdad 100755
--- a/lib/puppet/provider/package/openbsd.rb
+++ b/lib/puppet/provider/package/openbsd.rb
@@ -10,19 +10,21 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
defaultfor :operatingsystem => :openbsd
confine :operatingsystem => :openbsd
+ has_feature :versionable
+
def self.instances
packages = []
begin
execpipe(listcmd()) do |process|
# our regex for matching pkg_info output
- regex = %r{^(\S+)-([^-\s]+)\s+(.+)}
- fields = [:name, :ensure, :description]
+ regex = /^(.*)-(\d[^-]*)[-]?(\D*)(.*)$/
+ fields = [:name, :ensure, :flavor ]
hash = {}
# now turn each returned line into a package object
process.each { |line|
- if match = regex.match(line)
+ if match = regex.match(line.split()[0])
fields.zip(match.captures) { |field,value|
hash[field] = value
}
@@ -59,9 +61,15 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
"You must specify a package source for BSD packages"
end
+ old_ensure = @resource[:ensure]
+
if @resource[:source] =~ /\/$/
withenv :PKG_PATH => @resource[:source] do
- pkgadd @resource[:name]
+ if (@resource[:ensure] = get_version) == nil
+ @resource[:ensure] = old_ensure
+ end
+ full_name = [ @resource[:name], @resource[:ensure], @resource[:flavor] ]
+ pkgadd full_name.join('-').chomp('-')
end
else
pkgadd @resource[:source]
@@ -69,6 +77,32 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
end
+ def get_version
+ begin
+ execpipe([command(:pkginfo), " -I ", @resource[:name]]) do |process|
+ # our regex for matching pkg_info output
+ regex = /^(.*)-(\d[^-]*)[-]?(\D*)(.*)$/
+ fields = [ :name, :version, :flavor ]
+ master_version = 0
+
+ process.each do |line|
+ if match = regex.match(line.split()[0])
+ # now we return the first version, unless ensure is latest
+ version = match.captures[1]
+ return version unless @resource[:ensure] == "latest"
+
+ master_version = version unless master_version > version
+ end
+ end
+
+ return master_version unless master_version == 0
+ raise Puppet::Error, "#{version} is not available for this package"
+ end
+ rescue Puppet::ExecutionFailure
+ return nil
+ end
+ end
+
def query
hash = {}
info = pkginfo @resource[:name]
@@ -80,11 +114,6 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
return nil
end
- # And the description
- if info =~ /Comment:\s*\n(.+)/
- hash[:description] = $1
- end
-
return hash
end
diff --git a/lib/puppet/type/package.rb b/lib/puppet/type/package.rb
index 827fee12b..237cefd46 100644
--- a/lib/puppet/type/package.rb
+++ b/lib/puppet/type/package.rb
@@ -287,6 +287,11 @@ module Puppet
newvalues(:true, :false)
end
+ newparam(:flavor) do
+ desc "Newer versions of OpenBSD support 'flavors', which are
+ further specifications for which type of package you want."
+ end
+
autorequire(:file) do
autos = []
[:responsefile, :adminfile].each { |param|