summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2008-03-07 12:28:58 -0600
committerLuke Kanies <luke@madstop.com>2008-03-07 12:28:58 -0600
commit9f8bb7e42aeea4670d9292f935529f8db5d57bc5 (patch)
treeb3b746e516d62d10368d19a197749dd25a54307e /lib
parentc2b33acd5c1e6fe4021d7609f806b7bd8af834f8 (diff)
parente8029cc61a1956263935a0df469cc77b8e80a102 (diff)
downloadpuppet-9f8bb7e42aeea4670d9292f935529f8db5d57bc5.tar.gz
puppet-9f8bb7e42aeea4670d9292f935529f8db5d57bc5.tar.xz
puppet-9f8bb7e42aeea4670d9292f935529f8db5d57bc5.zip
Merge branch '0.24.x'
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/defaults.rb1
-rw-r--r--lib/puppet/indirector/node/exec.rb2
-rw-r--r--lib/puppet/indirector/node/ldap.rb5
-rw-r--r--lib/puppet/node/catalog.rb10
-rw-r--r--lib/puppet/parser/compiler.rb1
-rw-r--r--lib/puppet/parser/resource.rb37
-rw-r--r--lib/puppet/provider/package/portage.rb8
-rw-r--r--lib/puppet/sslcertificates/ca.rb30
-rwxr-xr-xlib/puppet/type/file/checksum.rb3
-rwxr-xr-xlib/puppet/type/tidy.rb2
-rw-r--r--lib/puppet/util/settings.rb96
11 files changed, 92 insertions, 103 deletions
diff --git a/lib/puppet/defaults.rb b/lib/puppet/defaults.rb
index 6dbd7d043..2f5992d22 100644
--- a/lib/puppet/defaults.rb
+++ b/lib/puppet/defaults.rb
@@ -258,6 +258,7 @@ module Puppet
:serial => { :default => "$cadir/serial",
:owner => "$user",
:group => "$group",
+ :mode => 0600,
:desc => "Where the serial number for certificates is stored."
},
:autosign => { :default => "$confdir/autosign.conf",
diff --git a/lib/puppet/indirector/node/exec.rb b/lib/puppet/indirector/node/exec.rb
index ed76bce94..71f4fa8e1 100644
--- a/lib/puppet/indirector/node/exec.rb
+++ b/lib/puppet/indirector/node/exec.rb
@@ -30,7 +30,7 @@ class Puppet::Node::Exec < Puppet::Indirector::Exec
def create_node(name, result)
node = Puppet::Node.new(name)
set = false
- [:parameters, :classes].each do |param|
+ [:parameters, :classes, :environment].each do |param|
if value = result[param]
node.send(param.to_s + "=", value)
set = true
diff --git a/lib/puppet/indirector/node/ldap.rb b/lib/puppet/indirector/node/ldap.rb
index dd11f4e9b..9320f3ba1 100644
--- a/lib/puppet/indirector/node/ldap.rb
+++ b/lib/puppet/indirector/node/ldap.rb
@@ -36,11 +36,14 @@ class Puppet::Node::Ldap < Puppet::Indirector::Ldap
information[:parameters][param] = value unless information[:parameters].include?(param)
end
+ information[:environment] ||= parent_info[:environment]
+
parent = parent_info[:parent]
end
node.classes = information[:classes].uniq unless information[:classes].empty?
node.parameters = information[:parameters] unless information[:parameters].empty?
+ node.environment = information[:environment] if information[:environment]
node.fact_merge
return node
@@ -87,6 +90,8 @@ class Puppet::Node::Ldap < Puppet::Indirector::Ldap
hash
end
+ result[:environment] = result[:parameters]["environment"] if result[:parameters]["environment"]
+
return result
end
diff --git a/lib/puppet/node/catalog.rb b/lib/puppet/node/catalog.rb
index f885a41ee..ecda472be 100644
--- a/lib/puppet/node/catalog.rb
+++ b/lib/puppet/node/catalog.rb
@@ -84,6 +84,7 @@ class Puppet::Node::Catalog < Puppet::PGraph
# Create an alias for a resource.
def alias(resource, name)
+ #set $1
resource.ref =~ /^(.+)\[/
newref = "%s[%s]" % [$1 || resource.class.name, name]
@@ -475,6 +476,15 @@ class Puppet::Node::Catalog < Puppet::PGraph
vertices.each do |resource|
next if resource.respond_to?(:virtual?) and resource.virtual?
+ #This is hackity hack for 1094
+ #Aliases aren't working in the ral catalog because the current instance of the resource
+ #has a reference to the catalog being converted. . . So, give it a reference to the new one
+ #problem solved. . .
+ if resource.is_a?(Puppet::TransObject)
+ resource = resource.dup
+ resource.catalog = result
+ end
+
newres = resource.send(convert)
# We can't guarantee that resources don't munge their names
diff --git a/lib/puppet/parser/compiler.rb b/lib/puppet/parser/compiler.rb
index 70cd6e11a..8fba41121 100644
--- a/lib/puppet/parser/compiler.rb
+++ b/lib/puppet/parser/compiler.rb
@@ -366,7 +366,6 @@ class Puppet::Parser::Compiler
# Make sure all of our resources and such have done any last work
# necessary.
def finish
- #@catalog.resources.each do |name|
@catalog.vertices.each do |resource|
# Add in any resource overrides.
if overrides = resource_overrides(resource)
diff --git a/lib/puppet/parser/resource.rb b/lib/puppet/parser/resource.rb
index b001e165b..4b48ff6cf 100644
--- a/lib/puppet/parser/resource.rb
+++ b/lib/puppet/parser/resource.rb
@@ -233,6 +233,20 @@ class Puppet::Parser::Resource
@ref.to_s
end
+ # Define a parameter in our resource.
+ def set_parameter(param, value = nil)
+ if value
+ param = Puppet::Parser::Resource::Param.new(
+ :name => param, :value => value, :source => self.source
+ )
+ elsif ! param.is_a?(Puppet::Parser::Resource::Param)
+ raise ArgumentError, "Must pass a parameter or all necessary values"
+ end
+
+ # And store it in our parameter hash.
+ @params[param.name] = param
+ end
+
def to_hash
@params.inject({}) do |hash, ary|
param = ary[1]
@@ -331,7 +345,7 @@ class Puppet::Parser::Resource
unless @params.include?(name)
self.debug "Adding default for %s" % name
- @params[name] = param
+ @params[name] = param.dup
end
end
end
@@ -370,11 +384,8 @@ class Puppet::Parser::Resource
# The parameter is already set. Fail if they're not allowed to override it.
unless param.source.child_of?(current.source)
- if Puppet[:trace]
- puts caller
- end
- msg = "Parameter '%s' is already set on %s" %
- [param.name, self.to_s]
+ puts caller if Puppet[:trace]
+ msg = "Parameter '%s' is already set on %s" % [param.name, self.to_s]
if current.source.to_s != ""
msg += " by %s" % current.source
end
@@ -426,20 +437,6 @@ class Puppet::Parser::Resource
end
end
- # Define a parameter in our resource.
- def set_parameter(param, value = nil)
- if value
- param = Puppet::Parser::Resource::Param.new(
- :name => param, :value => value, :source => self.source
- )
- elsif ! param.is_a?(Puppet::Parser::Resource::Param)
- raise ArgumentError, "Must pass a parameter or all necessary values"
- end
-
- # And store it in our parameter hash.
- @params[param.name] = param
- end
-
# Make sure the resource's parameters are all valid for the type.
def validate
@params.each do |name, param|
diff --git a/lib/puppet/provider/package/portage.rb b/lib/puppet/provider/package/portage.rb
index dccfeaf56..f795d0302 100644
--- a/lib/puppet/provider/package/portage.rb
+++ b/lib/puppet/provider/package/portage.rb
@@ -10,8 +10,8 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
defaultfor :operatingsystem => :gentoo
def self.instances
- result_format = /(\S+) (\S+) \[([^\[]*)(\[[^\]]*\])?\] \[[^0-9]*([^\s:\[]*)(\[[^\]]*\])?(:\S*)?\] ([\S]*) (.*)/
- result_fields = [:category, :name, :ensure, :ensure_overlay, :version_available, :overlay, :slot, :vendor, :description]
+ result_format = /(\S+) (\S+) \[(?:([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\([^\)]+\))?(?:\[([^\]]+)\])?[ ]*)*\] \[(?:(?:\{M\})?(?:\([~*]+\))?([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\(([^\)]+)\))?(?:![mf])*(?:\[([^\]]+)\])?)?\] ([\S]*) (.*)/
+ result_fields = [:category, :name, :ensure, :ensure_overlay, :version_available, :slot, :overlay, :vendor, :description]
search_format = "{installedversionsshort}<category> <name> [<installedversionsshort>] [<best>] <homepage> <description>{}"
@@ -67,8 +67,8 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
end
def query
- result_format = /(\S+) (\S+) \[([^\[]*)(\[[^\]]*\])?\] \[[^0-9]*([^\s:\[]*)(\[[^\]]*\])?(:\S*)?\] ([\S]*) (.*)/
- result_fields = [:category, :name, :ensure, :ensure_overlay, :version_available, :overlay, :slot, :vendor, :description]
+ result_format = /(\S+) (\S+) \[(?:([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\([^\)]+\))?(?:\[([^\]]+)\])?[ ]*)*\] \[(?:(?:\{M\})?(?:\([~*]+\))?([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\(([^\)]+)\))?(?:![mf])*(?:\[([^\]]+)\])?)?\] ([\S]*) (.*)/
+ result_fields = [:category, :name, :ensure, :ensure_overlay, :version_available, :slot, :overlay, :vendor, :description]
search_field = @resource[:category] ? "--category-name" : "--name"
search_value = package_name
diff --git a/lib/puppet/sslcertificates/ca.rb b/lib/puppet/sslcertificates/ca.rb
index 888bcf5b2..7386318f4 100644
--- a/lib/puppet/sslcertificates/ca.rb
+++ b/lib/puppet/sslcertificates/ca.rb
@@ -238,33 +238,6 @@ class Puppet::SSLCertificates::CA
}
end
- # Create an exclusive lock for reading and writing, and do the
- # writing in a tmp file.
- def readwritelock(file, mode = 0600)
- tmpfile = file + ".tmp"
- sync = Sync.new
- unless FileTest.directory?(File.dirname(tmpfile))
- raise Puppet::DevError, "Cannot create %s; directory %s does not exist" %
- [file, File.dirname(file)]
- end
- sync.synchronize(Sync::EX) do
- File.open(file, "r+", mode) do |rf|
- rf.lock_exclusive do
- File.open(tmpfile, "w", mode) do |tf|
- yield tf
- end
- begin
- File.rename(tmpfile, file)
- rescue => detail
- Puppet.err "Could not rename %s to %s: %s" %
- [file, tmpfile, detail]
- end
- end
- end
- end
- end
-
-
# Sign a given certificate request.
def sign(csr)
unless csr.is_a?(OpenSSL::X509::Request)
@@ -278,9 +251,8 @@ class Puppet::SSLCertificates::CA
end
serial = nil
- readwritelock(@config[:serial]) { |f|
+ Puppet.settings.readwritelock(:serial) { |f|
serial = File.read(@config[:serial]).chomp.hex
-
# increment the serial
f << "%04X" % (serial + 1)
}
diff --git a/lib/puppet/type/file/checksum.rb b/lib/puppet/type/file/checksum.rb
index debb5a7db..3be147cb7 100755
--- a/lib/puppet/type/file/checksum.rb
+++ b/lib/puppet/type/file/checksum.rb
@@ -66,6 +66,9 @@ Puppet::Type.type(:file).newproperty(:checksum) do
raise ArgumentError, "A type must be specified to cache a checksum"
end
type = symbolize(type)
+ type = :mtime if type == :timestamp
+ type = :ctime if type == :time
+
unless state = @resource.cached(:checksums)
self.debug "Initializing checksum hash"
state = {}
diff --git a/lib/puppet/type/tidy.rb b/lib/puppet/type/tidy.rb
index dacf037ac..fe8bde9ab 100755
--- a/lib/puppet/type/tidy.rb
+++ b/lib/puppet/type/tidy.rb
@@ -1,5 +1,5 @@
module Puppet
- newtype(:tidy, Puppet.type(:file)) do
+ newtype(:tidy, :parent => Puppet.type(:file)) do
@doc = "Remove unwanted files based on specific criteria. Multiple
criteria are OR'd together, so a file that is too large but is not
old enough will still get tidied."
diff --git a/lib/puppet/util/settings.rb b/lib/puppet/util/settings.rb
index 5f4a98558..f4055c304 100644
--- a/lib/puppet/util/settings.rb
+++ b/lib/puppet/util/settings.rb
@@ -243,14 +243,7 @@ class Puppet::Util::Settings
# Make a directory with the appropriate user, group, and mode
def mkdir(default)
- obj = nil
- unless obj = @config[default]
- raise ArgumentError, "Unknown default %s" % default
- end
-
- unless obj.is_a? CFile
- raise ArgumentError, "Default %s is not a file" % default
- end
+ obj = get_config_file_default(default)
Puppet::Util::SUIDManager.asuser(obj.owner, obj.group) do
mode = obj.mode || 0750
@@ -649,49 +642,15 @@ Generated on #{Time.now}.
end
# Open a file with the appropriate user, group, and mode
- def write(default, *args)
- obj = nil
- unless obj = @config[default]
- raise ArgumentError, "Unknown default %s" % default
- end
-
- unless obj.is_a? CFile
- raise ArgumentError, "Default %s is not a file" % default
- end
-
- chown = nil
- if Puppet::Util::SUIDManager.uid == 0
- chown = [obj.owner, obj.group]
- else
- chown = [nil, nil]
- end
- Puppet::Util::SUIDManager.asuser(*chown) do
- mode = obj.mode || 0640
-
- if args.empty?
- args << "w"
- end
-
- args << mode
-
- File.open(value(obj.name), *args) do |file|
- yield file
- end
- end
+ def write(default, *args, &bloc)
+ obj = get_config_file_default(default)
+ writesub(default, value(obj.name), *args, &bloc)
end
# Open a non-default file under a default dir with the appropriate user,
# group, and mode
- def writesub(default, file, *args)
- obj = nil
- unless obj = @config[default]
- raise ArgumentError, "Unknown default %s" % default
- end
-
- unless obj.is_a? CFile
- raise ArgumentError, "Default %s is not a file" % default
- end
-
+ def writesub(default, file, *args, &bloc)
+ obj = get_config_file_default(default)
chown = nil
if Puppet::Util::SUIDManager.uid == 0
chown = [obj.owner, obj.group]
@@ -716,8 +675,51 @@ Generated on #{Time.now}.
end
end
+ def readwritelock(default, *args, &bloc)
+ file = value(get_config_file_default(default).name)
+ tmpfile = file + ".tmp"
+ sync = Sync.new
+ unless FileTest.directory?(File.dirname(tmpfile))
+ raise Puppet::DevError, "Cannot create %s; directory %s does not exist" %
+ [file, File.dirname(file)]
+ end
+
+ sync.synchronize(Sync::EX) do
+ File.open(file, "r+", 0600) do |rf|
+ rf.lock_exclusive do
+ if File.exist?(tmpfile)
+ raise Puppet::Error, ".tmp file already exists for %s; Aborting locked write. Check the .tmp file and delete if appropriate" %
+ [file]
+ end
+
+ writesub(default, tmpfile, *args, &bloc)
+
+ begin
+ File.rename(tmpfile, file)
+ rescue => detail
+ Puppet.err "Could not rename %s to %s: %s" %
+ [file, tmpfile, detail]
+ end
+ end
+ end
+ end
+ end
+
private
+ def get_config_file_default(default)
+ obj = nil
+ unless obj = @config[default]
+ raise ArgumentError, "Unknown default %s" % default
+ end
+
+ unless obj.is_a? CFile
+ raise ArgumentError, "Default %s is not a file" % default
+ end
+
+ return obj
+ end
+
# Create the transportable objects for users and groups.
def add_user_resources(section, obj, done)
resources = []