diff options
| author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-04-05 06:54:13 +0000 |
|---|---|---|
| committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-04-05 06:54:13 +0000 |
| commit | 9697354e81d72027519119753598bd3c5271bbcf (patch) | |
| tree | c37e4fbbed73bd5ffd78203d86645e0f46f227df /lib | |
| parent | f540ec83791181e22c4c4db1b049f44a5970bcf6 (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.rb | 95 | ||||
| -rwxr-xr-x | lib/puppet/type/package/freebsd.rb | 19 | ||||
| -rwxr-xr-x | lib/puppet/type/package/openbsd.rb | 18 |
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 |
