summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-05 06:54:13 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-05 06:54:13 +0000
commit9697354e81d72027519119753598bd3c5271bbcf (patch)
treec37e4fbbed73bd5ffd78203d86645e0f46f227df /lib
parentf540ec83791181e22c4c4db1b049f44a5970bcf6 (diff)
differentiating openbsd from freebsd, adding freebsd, and autoloading package types instead of manually loading them
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1079 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/type/package.rb95
-rwxr-xr-xlib/puppet/type/package/freebsd.rb19
-rwxr-xr-xlib/puppet/type/package/openbsd.rb18
3 files changed, 75 insertions, 57 deletions
diff --git a/lib/puppet/type/package.rb b/lib/puppet/type/package.rb
index 02a95289d..387a3c451 100644
--- a/lib/puppet/type/package.rb
+++ b/lib/puppet/type/package.rb
@@ -63,7 +63,21 @@ module Puppet
@pkgtypes[name] = mod
end
+ # Autoload the package types, if they're not already defined.
def self.pkgtype(name)
+ @pkgtypes ||= {}
+ unless @pkgtypes.include? name
+ begin
+ require "puppet/type/package/#{name}"
+
+ unless @pkgtypes.include? name
+ raise Puppet::DevError, "Loaded %s but pkgtype was not created" %
+ name
+ end
+ rescue LoadError
+ raise Puppet::Error, "Could not load package type %s" % name
+ end
+ end
@pkgtypes[name]
end
@@ -382,7 +396,8 @@ module Puppet
when "centos": @default = :rpm
when "fedora": @default = :yum
when "redhat": @default = :rpm
- when "openbsd": @default = :bsd
+ when "freebsd": @default = :freebsd
+ when "openbsd": @default = :openbsd
when "darwin": @default = :apple
else
if Facter["kernel"] == "Linux"
@@ -422,47 +437,10 @@ module Puppet
name = hash[:name]
hash.delete(:name)
- # if it already exists, modify the existing one
- if object = Package[name]
- states = {}
- object.eachstate { |state|
- Puppet.debug "Adding %s" % state.name.inspect
- states[state.name] = state
- }
- hash.each { |var,value|
- if states.include?(var)
- Puppet.debug "%s is a set state" % var.inspect
- states[var].is = value
- else
- Puppet.debug "%s is not a set state" % var.inspect
- if object[var] and object[var] != value
- Puppet.warning "Overriding %s => %s on %s with %s" %
- [var,object[var],name,value]
- end
-
- #object.state(var).is = value
+ object = self[name] || self.create(:name => name)
+ object.setparams(hash)
- # swap the values if we're a state
- if states.include?(var)
- Puppet.debug "Swapping %s because it's a state" % var
- states[var].is = value
- states[var].should = nil
- else
- Puppet.debug "%s is not a state" % var.inspect
- Puppet.debug "States are %s" % states.keys.collect { |st|
- st.inspect
- }.join(" ")
- end
- end
- }
- return object
- else # just create it
- obj = self.create(:name => name)
- hash.each { |var,value|
- obj.addis(var,value)
- }
- return obj
- end
+ return object
end
# This only exists for testing.
@@ -512,15 +490,16 @@ module Puppet
# about it and set it appropriately.
#@states[:ensure].retrieve
if hash = self.query
+ if hash == :listed # Mmmm, hackalicious
+ return
+ end
hash.each { |param, value|
unless self.class.validattr?(param)
hash.delete(param)
end
}
- hash.each { |param, value|
- self.is = [param, value]
- }
+ setparams(hash)
else
# Else just mark all of the states absent.
self.class.validstates.each { |name|
@@ -529,6 +508,19 @@ module Puppet
end
end
+ # Set all of the params' "is" value. Most are parameters, but some
+ # are states.
+ def setparams(hash)
+ # Everything on packages is a parameter except :ensure
+ hash.each { |param, value|
+ if self.class.attrtype(param) == :state
+ self.is = [param, value]
+ else
+ self[param] = value
+ end
+ }
+ end
+
# Extend the package with the appropriate package type.
def type2module(typename)
if type = self.class.pkgtype(typename)
@@ -587,12 +579,13 @@ module Puppet
end
# The order these are loaded is important.
-require 'puppet/type/package/dpkg.rb'
-require 'puppet/type/package/apt.rb'
-require 'puppet/type/package/rpm.rb'
-require 'puppet/type/package/yum.rb'
-require 'puppet/type/package/sun.rb'
-require 'puppet/type/package/bsd.rb'
-require 'puppet/type/package/apple.rb'
+require 'puppet/type/package/dpkg'
+require 'puppet/type/package/apt'
+require 'puppet/type/package/rpm'
+require 'puppet/type/package/yum'
+require 'puppet/type/package/sun'
+require 'puppet/type/package/openbsd'
+require 'puppet/type/package/freebsd'
+require 'puppet/type/package/apple'
# $Id$
diff --git a/lib/puppet/type/package/freebsd.rb b/lib/puppet/type/package/freebsd.rb
new file mode 100755
index 000000000..bb36f7650
--- /dev/null
+++ b/lib/puppet/type/package/freebsd.rb
@@ -0,0 +1,19 @@
+module Puppet
+ Puppet.type(:package).newpkgtype(:freebsd, :openbsd) do
+ def listcmd
+ "pkg_info"
+ end
+
+ def query
+ list
+
+ if self[:version]
+ return :listed
+ else
+ return nil
+ end
+ end
+ end
+end
+
+# $Id$
diff --git a/lib/puppet/type/package/openbsd.rb b/lib/puppet/type/package/openbsd.rb
index 376c5296a..56db2d0a3 100755
--- a/lib/puppet/type/package/openbsd.rb
+++ b/lib/puppet/type/package/openbsd.rb
@@ -1,5 +1,9 @@
module Puppet
- Puppet.type(:package).newpkgtype(:bsd) do
+ Puppet.type(:package).newpkgtype(:openbsd) do
+ def listcmd
+ "pkg_info -a"
+ end
+
def install
should = self.should(:ensure)
@@ -43,7 +47,7 @@ module Puppet
packages = []
# list out all of the packages
- open("| pkg_info -a") { |process|
+ open("| #{listcmd()}") { |process|
# our regex for matching dpkg output
regex = %r{^(\S+)-(\d\S+)\s+(.+)}
fields = [:name, :version, :description]
@@ -51,20 +55,22 @@ module Puppet
# now turn each returned line into a package object
process.each { |line|
+ hash.clear
if match = regex.match(line)
- hash.clear
-
fields.zip(match.captures) { |field,value|
hash[field] = value
}
- packages.push Puppet.type(:package).installedpkg(hash)
+ yup = nil
+ name = hash[:name]
+ hash[:ensure] = :present
+ pkg = Puppet.type(:package).installedpkg(hash)
+ packages << pkg
else
raise Puppet::DevError,
"Failed to match dpkg line %s" % line
end
}
}
- ENV["COLUMNS"] = oldcol
return packages
end