summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-20 07:00:10 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-20 07:00:10 +0000
commita9b67cce5ad2a22e916d20b39363b6c2c182e923 (patch)
treec8bd16e60347d317e939688e08308ce5cd4863a7 /lib
parente24a299511f6a23019edfee16e2541c8078d3f5d (diff)
downloadpuppet-a9b67cce5ad2a22e916d20b39363b6c2c182e923.tar.gz
puppet-a9b67cce5ad2a22e916d20b39363b6c2c182e923.tar.xz
puppet-a9b67cce5ad2a22e916d20b39363b6c2c182e923.zip
Adding a "list" class method to most types, and using it in the tests for the pelement server to verify that objects can be copied using it. I expect that most package types other than apt/dpkg are not yet working with these tests.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1124 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/log.rb4
-rw-r--r--lib/puppet/type.rb32
-rwxr-xr-xlib/puppet/type/group.rb11
-rw-r--r--lib/puppet/type/package.rb44
-rwxr-xr-xlib/puppet/type/package/dpkg.rb10
-rwxr-xr-xlib/puppet/type/parsedtype.rb8
-rwxr-xr-xlib/puppet/type/parsedtype/host.rb16
-rwxr-xr-xlib/puppet/type/parsedtype/port.rb1
-rwxr-xr-xlib/puppet/type/pfilebucket.rb4
-rwxr-xr-xlib/puppet/type/schedule.rb4
-rw-r--r--lib/puppet/type/state.rb4
-rwxr-xr-xlib/puppet/type/user.rb16
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