diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/puppet/log.rb | 4 | ||||
-rw-r--r-- | lib/puppet/type.rb | 32 | ||||
-rwxr-xr-x | lib/puppet/type/group.rb | 11 | ||||
-rw-r--r-- | lib/puppet/type/package.rb | 44 | ||||
-rwxr-xr-x | lib/puppet/type/package/dpkg.rb | 10 | ||||
-rwxr-xr-x | lib/puppet/type/parsedtype.rb | 8 | ||||
-rwxr-xr-x | lib/puppet/type/parsedtype/host.rb | 16 | ||||
-rwxr-xr-x | lib/puppet/type/parsedtype/port.rb | 1 | ||||
-rwxr-xr-x | lib/puppet/type/pfilebucket.rb | 4 | ||||
-rwxr-xr-x | lib/puppet/type/schedule.rb | 4 | ||||
-rw-r--r-- | lib/puppet/type/state.rb | 4 | ||||
-rwxr-xr-x | lib/puppet/type/user.rb | 16 |
12 files changed, 129 insertions, 25 deletions
diff --git a/lib/puppet/log.rb b/lib/puppet/log.rb index c8a44d14b..d6d2f9090 100644 --- a/lib/puppet/log.rb +++ b/lib/puppet/log.rb @@ -108,6 +108,10 @@ module Puppet @loglevel = @levels.index(level) end + def Log.levels + @levels.dup + end + # Create a new log destination. def Log.newdestination(dest) # Each destination can only occur once. diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb index c11d51b9a..93d0604bb 100644 --- a/lib/puppet/type.rb +++ b/lib/puppet/type.rb @@ -1696,6 +1696,16 @@ class Type < Puppet::Element trans[state.name] = state.is end + @parameters.each do |name, param| + # Avoid adding each instance name as both the name and the namevar + next if param.class.isnamevar? and param.value == self.name + trans[name] = param.value + end + + @metaparams.each do |name, param| + trans[name] = param.value + end + trans.tags = self.tags # FIXME I'm currently ignoring 'parent' and 'path' @@ -2181,23 +2191,15 @@ class Type < Puppet::Element currently the default)." defaultto :notice - validate do |loglevel| - if loglevel.is_a?(String) - loglevel = loglevel.intern - end - unless Puppet::Log.validlevel?(loglevel) - self.fail "Invalid log level %s" % loglevel - end - end + newvalues(*Puppet::Log.levels) + newvalues(:verbose) munge do |loglevel| - if loglevel.is_a?(String) - loglevel = loglevel.intern - end - if loglevel == :verbose - loglevel = :info + val = super + if val == :verbose + val = :info end - loglevel + val end end @@ -2249,7 +2251,7 @@ class Type < Puppet::Element if obj = @parent.class[other] unless obj == @parent self.fail( - "%s an not create alias %s: object already exists" % + "%s can not create alias %s: object already exists" % [@parent.name, other] ) end diff --git a/lib/puppet/type/group.rb b/lib/puppet/type/group.rb index 8815b99ed..5b54cc708 100755 --- a/lib/puppet/type/group.rb +++ b/lib/puppet/type/group.rb @@ -171,6 +171,17 @@ module Puppet isnamevar end + # List all groups + def self.list + groups = [] + while ent = Etc.getgrent + groups << ent.name + end + Etc.endgrent + + return groups + end + def exists? self.class.parentmodule.exists?(self) end diff --git a/lib/puppet/type/package.rb b/lib/puppet/type/package.rb index ddf4f617d..8da557aa7 100644 --- a/lib/puppet/type/package.rb +++ b/lib/puppet/type/package.rb @@ -60,7 +60,21 @@ module Puppet mod.module_eval(&block) + mod.send(:module_function, :list) + + # Add it to our list @pkgtypes[name] = mod + + # And mark it as a valid type + unless defined? @typeparam + @typeparam = @parameters.find { |p| p.name == :type } + + unless @typeparam + Puppet.warning @parameters.inspect + raise Puppet::DevError, "Could not package type parameter" + end + end + @typeparam.newvalues(name) end # Autoload the package types, if they're not already defined. @@ -262,14 +276,15 @@ module Puppet defaultto { @parent.class.default } - # We cannot log in this routine, because this gets called before - # there's a name for the package. + munge do |type| if type.is_a? String type = type.intern end @parent.type2module(type) + type end + end newparam(:source) do @@ -414,6 +429,7 @@ module Puppet end end + # Return a list of valid package types def self.getpkglist if @types.nil? if @default.nil? @@ -434,7 +450,11 @@ module Puppet return list end + # Create a new package object from listed information def self.installedpkg(hash) + unless hash.include? :type + raise Puppet::DevError, "Got installed package with no type" + end # this is from code, so we don't have to do as much checking name = hash[:name] hash.delete(:name) @@ -445,6 +465,26 @@ module Puppet return object end + def self.list + pkgtype(default).list() + + self.collect do |pkg| + pkg.name + end + end + + # Iterate across all packages of a given type and mark them absent + # if they are not in the list + def self.markabsent(pkgtype, packages) + # Mark any packages we didn't find as absent + self.each do |pkg| + next unless packages[:type] == pkgtype + unless packages.include? pkg + pkg.is = [:ensure, :absent] + end + end + end + # This only exists for testing. def clear @states[:ensure].latest = nil diff --git a/lib/puppet/type/package/dpkg.rb b/lib/puppet/type/package/dpkg.rb index 8b6882d3a..c3bbc2317 100755 --- a/lib/puppet/type/package/dpkg.rb +++ b/lib/puppet/type/package/dpkg.rb @@ -67,7 +67,7 @@ module Puppet open("| dpkg -l") { |process| # our regex for matching dpkg output regex = %r{^(\S+)\s+(\S+)\s+(\S+)\s+(.+)$} - fields = [:status, :name, :absent, :description] + fields = [:status, :name, :version, :description] hash = {} 5.times { process.gets } # throw away the header @@ -80,6 +80,14 @@ module Puppet fields.zip(match.captures) { |field,value| hash[field] = value } + + if self.is_a? Puppet::Type and type = self[:type] + hash[:type] = type + elsif self.is_a? Module and self.respond_to? :name + hash[:type] = self.name + else + raise Puppet::DevError, "Cannot determine package type" + end packages.push Puppet.type(:package).installedpkg(hash) else raise Puppet::DevError, diff --git a/lib/puppet/type/parsedtype.rb b/lib/puppet/type/parsedtype.rb index 5fe8dcda6..7812d1fb4 100755 --- a/lib/puppet/type/parsedtype.rb +++ b/lib/puppet/type/parsedtype.rb @@ -207,6 +207,14 @@ module Puppet @instances << obj end + def self.list + retrieve + + self.collect do |obj| + obj.name + end + end + # Retrieve the text for the file. Returns nil in the unlikely # event that it doesn't exist. def self.retrieve diff --git a/lib/puppet/type/parsedtype/host.rb b/lib/puppet/type/parsedtype/host.rb index 6463232c1..548ba543a 100755 --- a/lib/puppet/type/parsedtype/host.rb +++ b/lib/puppet/type/parsedtype/host.rb @@ -35,7 +35,11 @@ module Puppet # value. def should if defined? @should - return @should + if @should == [:absent] + return :absent + else + return @should + end else return [] end @@ -52,9 +56,13 @@ module Puppet end munge do |value| - # Add the :alias metaparam in addition to the state - @parent.newmetaparam(@parent.class.metaparamclass(:alias), value) - value + if value == :absent or value == "absent" + :absent + else + # Add the :alias metaparam in addition to the state + @parent.newmetaparam(@parent.class.metaparamclass(:alias), value) + value + end end end diff --git a/lib/puppet/type/parsedtype/port.rb b/lib/puppet/type/parsedtype/port.rb index 593455761..48cabfe52 100755 --- a/lib/puppet/type/parsedtype/port.rb +++ b/lib/puppet/type/parsedtype/port.rb @@ -223,7 +223,6 @@ module Puppet end if hash.include?(:description) and ! @states.include?(:description) - Puppet.info "Adding description to %s" % hash[:name] self.is = [:description, hash[:description]] end diff --git a/lib/puppet/type/pfilebucket.rb b/lib/puppet/type/pfilebucket.rb index 2122b3f1c..15c968dcf 100755 --- a/lib/puppet/type/pfilebucket.rb +++ b/lib/puppet/type/pfilebucket.rb @@ -53,6 +53,10 @@ module Puppet end end + def self.list + self.collect do |obj| obj.name end + end + def initialize(hash) super diff --git a/lib/puppet/type/schedule.rb b/lib/puppet/type/schedule.rb index a62f41dcf..e09200929 100755 --- a/lib/puppet/type/schedule.rb +++ b/lib/puppet/type/schedule.rb @@ -295,6 +295,10 @@ module Puppet end end + def self.list + self.collect do |obj| obj.name end + end + def self.mkdefaultschedules Puppet.debug "Creating default schedules" # Create our default schedule diff --git a/lib/puppet/type/state.rb b/lib/puppet/type/state.rb index 6d2b14cf2..e9811109c 100644 --- a/lib/puppet/type/state.rb +++ b/lib/puppet/type/state.rb @@ -141,8 +141,8 @@ class State < Puppet::Parameter def inspect str = "State('%s', " % self.name - if defined? @is and @is - str += "@is = '%s', " % @is + if self.is + str += "@is = '%s', " % [self.is] else str += "@is = nil, " end diff --git a/lib/puppet/type/user.rb b/lib/puppet/type/user.rb index 5f728c50b..d31a0fee6 100755 --- a/lib/puppet/type/user.rb +++ b/lib/puppet/type/user.rb @@ -237,6 +237,12 @@ module Puppet # We need to override this because the groups need to # be joined with commas def should + unless defined? @is + retrieve + end + + @should ||= [] + if @parent[:membership] == :inclusive @should.sort.join(",") else @@ -382,6 +388,16 @@ module Puppet end end + def self.list + users = [] + while ent = Etc.getpwent + users << ent.name + end + Etc.endpwent + + return users + end + def exists? self.class.parentmodule.exists?(self) end |