puppet 0.22.4 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +156 -0
- data/README +2 -2
- data/Rakefile +6 -6
- data/bin/filebucket +212 -0
- data/bin/puppet +2 -0
- data/bin/puppetca +2 -4
- data/bin/puppetd +16 -15
- data/bin/puppetdoc +46 -496
- data/bin/puppetmasterd +3 -5
- data/bin/puppetrun +8 -3
- data/bin/ralsh +271 -0
- data/conf/redhat/client.init +1 -1
- data/conf/redhat/puppet.spec +13 -2
- data/conf/solaris/pkginfo +1 -1
- data/ext/puppet-test +374 -0
- data/install.rb +40 -31
- data/lib/puppet.rb +39 -4
- data/lib/puppet/config_stores/rest.rb +60 -0
- data/lib/puppet/configuration.rb +312 -17
- data/lib/puppet/external/event-loop/event-loop.rb +4 -0
- data/lib/puppet/external/gratr/rdot.rb +1 -1
- data/lib/puppet/fact_stores/yaml.rb +42 -0
- data/lib/puppet/feature/base.rb +4 -1
- data/lib/puppet/metatype/attributes.rb +20 -43
- data/lib/puppet/metatype/container.rb +1 -36
- data/lib/puppet/metatype/evaluation.rb +48 -19
- data/lib/puppet/metatype/instances.rb +35 -1
- data/lib/puppet/metatype/metaparams.rb +23 -19
- data/lib/puppet/metatype/providers.rb +25 -38
- data/lib/puppet/network/client/ca.rb +8 -5
- data/lib/puppet/network/client/master.rb +59 -17
- data/lib/puppet/network/handler.rb +18 -1
- data/lib/puppet/network/handler/ca.rb +9 -3
- data/lib/puppet/network/handler/facts.rb +70 -0
- data/lib/puppet/network/handler/filebucket.rb +4 -1
- data/lib/puppet/network/handler/fileserver.rb +65 -21
- data/lib/puppet/network/handler/master.rb +6 -3
- data/lib/puppet/network/handler/report.rb +12 -26
- data/lib/puppet/network/handler/resource.rb +14 -2
- data/lib/puppet/network/handler/runner.rb +5 -1
- data/lib/puppet/network/handler/status.rb +5 -1
- data/lib/puppet/network/server/mongrel.rb +4 -4
- data/lib/puppet/network/server/webrick.rb +14 -3
- data/lib/puppet/parameter.rb +30 -25
- data/lib/puppet/parser/ast.rb +1 -6
- data/lib/puppet/parser/ast/component.rb +23 -20
- data/lib/puppet/parser/ast/hostclass.rb +7 -11
- data/lib/puppet/parser/ast/leaf.rb +4 -1
- data/lib/puppet/parser/ast/node.rb +6 -8
- data/lib/puppet/parser/functions.rb +7 -4
- data/lib/puppet/parser/interpreter.rb +155 -205
- data/lib/puppet/parser/lexer.rb +35 -2
- data/lib/puppet/parser/parser.rb +705 -612
- data/lib/puppet/parser/resource.rb +91 -48
- data/lib/puppet/parser/resource/param.rb +52 -29
- data/lib/puppet/parser/scope.rb +28 -23
- data/lib/puppet/pgraph.rb +26 -21
- data/lib/puppet/propertychange.rb +12 -12
- data/lib/puppet/provider.rb +102 -31
- data/lib/puppet/provider/cron/crontab.rb +7 -8
- data/lib/puppet/provider/group/groupadd.rb +4 -4
- data/lib/puppet/provider/group/pw.rb +3 -3
- data/lib/puppet/provider/mount.rb +8 -8
- data/lib/puppet/provider/mount/netinfo.rb +5 -5
- data/lib/puppet/provider/mount/parsed.rb +2 -2
- data/lib/puppet/provider/nameservice.rb +19 -31
- data/lib/puppet/provider/nameservice/netinfo.rb +14 -14
- data/lib/puppet/provider/nameservice/objectadd.rb +4 -4
- data/lib/puppet/provider/nameservice/pw.rb +4 -4
- data/lib/puppet/provider/package.rb +31 -0
- data/lib/puppet/provider/package/appdmg.rb +118 -0
- data/lib/puppet/provider/package/apple.rb +18 -16
- data/lib/puppet/provider/package/apt.rb +13 -15
- data/lib/puppet/provider/package/aptitude.rb +5 -3
- data/lib/puppet/provider/package/aptrpm.rb +9 -11
- data/lib/puppet/provider/package/blastwave.rb +9 -9
- data/lib/puppet/provider/package/darwinport.rb +12 -11
- data/lib/puppet/provider/package/dpkg.rb +20 -12
- data/lib/puppet/provider/package/fink.rb +87 -0
- data/lib/puppet/provider/package/freebsd.rb +10 -11
- data/lib/puppet/provider/package/gem.rb +15 -15
- data/lib/puppet/provider/package/openbsd.rb +12 -17
- data/lib/puppet/provider/package/pkgdmg.rb +90 -16
- data/lib/puppet/provider/package/portage.rb +20 -14
- data/lib/puppet/provider/package/ports.rb +15 -13
- data/lib/puppet/provider/package/rpm.rb +20 -23
- data/lib/puppet/provider/package/rug.rb +6 -8
- data/lib/puppet/provider/package/sun.rb +20 -18
- data/lib/puppet/provider/package/sunfreeware.rb +2 -2
- data/lib/puppet/provider/package/up2date.rb +6 -10
- data/lib/puppet/provider/package/urpmi.rb +51 -0
- data/lib/puppet/provider/package/yum.rb +15 -13
- data/lib/puppet/provider/parsedfile.rb +53 -63
- data/lib/puppet/provider/service/base.rb +13 -15
- data/lib/puppet/provider/service/debian.rb +4 -4
- data/lib/puppet/provider/service/gentoo.rb +4 -4
- data/lib/puppet/provider/service/init.rb +22 -15
- data/lib/puppet/provider/service/redhat.rb +6 -6
- data/lib/puppet/provider/service/smf.rb +6 -6
- data/lib/puppet/provider/user/netinfo.rb +5 -5
- data/lib/puppet/provider/user/pw.rb +10 -5
- data/lib/puppet/provider/user/useradd.rb +9 -14
- data/lib/puppet/provider/zone/solaris.rb +80 -45
- data/lib/puppet/rails.rb +3 -34
- data/lib/puppet/rails/database/schema.rb +45 -24
- data/lib/puppet/rails/fact_value.rb +1 -0
- data/lib/puppet/rails/host.rb +69 -40
- data/lib/puppet/rails/param_name.rb +3 -8
- data/lib/puppet/rails/param_value.rb +2 -1
- data/lib/puppet/rails/puppet_class.rb +0 -2
- data/lib/puppet/rails/puppet_tag.rb +5 -0
- data/lib/puppet/rails/resource.rb +41 -17
- data/lib/puppet/rails/resource_tag.rb +4 -0
- data/lib/puppet/reference/configuration.rb +149 -0
- data/lib/puppet/reference/function.rb +13 -0
- data/lib/puppet/reference/network.rb +37 -0
- data/lib/puppet/reference/providers.rb +118 -0
- data/lib/puppet/reference/report.rb +21 -0
- data/lib/puppet/reference/type.rb +152 -0
- data/lib/puppet/reports/rrdgraph.rb +21 -7
- data/lib/puppet/reports/tagmail.rb +4 -1
- data/lib/puppet/sslcertificates.rb +1 -49
- data/lib/puppet/sslcertificates/ca.rb +2 -79
- data/lib/puppet/sslcertificates/inventory.rb +0 -10
- data/lib/puppet/transaction.rb +24 -41
- data/lib/puppet/transaction/report.rb +27 -1
- data/lib/puppet/type.rb +7 -43
- data/lib/puppet/type/component.rb +198 -124
- data/lib/puppet/type/cron.rb +51 -42
- data/lib/puppet/type/exec.rb +20 -19
- data/lib/puppet/type/group.rb +6 -55
- data/lib/puppet/type/host.rb +16 -37
- data/lib/puppet/type/mount.rb +30 -17
- data/lib/puppet/type/notify.rb +7 -8
- data/lib/puppet/type/package.rb +44 -80
- data/lib/puppet/type/pfile.rb +50 -41
- data/lib/puppet/type/pfile/checksum.rb +82 -95
- data/lib/puppet/type/pfile/content.rb +21 -25
- data/lib/puppet/type/pfile/ensure.rb +32 -30
- data/lib/puppet/type/pfile/group.rb +21 -26
- data/lib/puppet/type/pfile/mode.rb +25 -32
- data/lib/puppet/type/pfile/owner.rb +23 -27
- data/lib/puppet/type/pfile/source.rb +42 -33
- data/lib/puppet/type/pfile/target.rb +20 -18
- data/lib/puppet/type/pfile/type.rb +6 -7
- data/lib/puppet/type/pfilebucket.rb +3 -3
- data/lib/puppet/type/port.rb +5 -7
- data/lib/puppet/type/property.rb +58 -61
- data/lib/puppet/type/resources.rb +12 -8
- data/lib/puppet/type/schedule.rb +8 -8
- data/lib/puppet/type/service.rb +26 -33
- data/lib/puppet/type/sshkey.rb +6 -7
- data/lib/puppet/type/tidy.rb +41 -35
- data/lib/puppet/type/user.rb +34 -67
- data/lib/puppet/type/yumrepo.rb +27 -12
- data/lib/puppet/type/zone.rb +71 -110
- data/lib/puppet/util.rb +46 -61
- data/lib/puppet/util/autoload.rb +59 -47
- data/lib/puppet/util/config.rb +160 -18
- data/lib/puppet/util/config_store.rb +61 -0
- data/lib/puppet/util/fact_store.rb +60 -0
- data/lib/puppet/util/instance_loader.rb +74 -0
- data/lib/puppet/util/loadedfile.rb +5 -8
- data/lib/puppet/util/metric.rb +17 -25
- data/lib/puppet/util/posix.rb +39 -7
- data/lib/puppet/util/provider_features.rb +9 -1
- data/lib/puppet/util/rails/collection_merger.rb +16 -1
- data/lib/puppet/util/reference.rb +189 -0
- data/lib/puppet/util/storage.rb +2 -2
- data/lib/puppet/util/subclass_loader.rb +9 -2
- data/test/language/ast.rb +4 -148
- data/test/language/ast/component.rb +10 -1
- data/test/language/collector.rb +1 -191
- data/test/language/interpreter.rb +284 -327
- data/test/language/lexer.rb +13 -1
- data/test/language/node.rb +1 -1
- data/test/language/parser.rb +17 -4
- data/test/language/resource.rb +67 -101
- data/test/language/scope.rb +18 -3
- data/test/language/snippets.rb +114 -151
- data/test/lib/puppettest.rb +13 -0
- data/test/lib/puppettest/exetest.rb +7 -0
- data/test/lib/puppettest/fakes.rb +39 -28
- data/test/lib/puppettest/railstesting.rb +1 -1
- data/test/lib/puppettest/support/assertions.rb +2 -2
- data/test/lib/puppettest/support/collection.rb +30 -0
- data/test/network/client/ca.rb +27 -1
- data/test/network/client/client.rb +3 -3
- data/test/network/client/master.rb +102 -1
- data/test/network/handler/ca.rb +35 -1
- data/test/network/handler/facts.rb +112 -0
- data/test/network/handler/fileserver.rb +25 -1
- data/test/network/handler/handler.rb +2 -2
- data/test/network/handler/master.rb +2 -49
- data/test/network/handler/resource.rb +5 -6
- data/test/network/server/mongrel_test.rb +65 -0
- data/test/network/server/webrick.rb +2 -2
- data/test/network/xmlrpc/client.rb +2 -1
- data/test/network/xmlrpc/processor.rb +2 -1
- data/test/other/pgraph.rb +6 -5
- data/test/other/propertychange.rb +11 -12
- data/test/other/report.rb +44 -27
- data/test/other/transactions.rb +17 -16
- data/test/puppet/tc_suidmanager.rb +2 -2
- data/test/rails/ast.rb +74 -0
- data/test/rails/collection.rb +214 -0
- data/test/rails/host.rb +49 -24
- data/test/rails/interpreter.rb +91 -0
- data/test/rails/railsparameter.rb +22 -11
- data/test/rails/railsresource.rb +140 -7
- data/test/ral/manager/attributes.rb +37 -13
- data/test/ral/manager/instances.rb +82 -0
- data/test/ral/manager/provider.rb +60 -22
- data/test/ral/manager/type.rb +9 -6
- data/test/ral/providers/cron/crontab.rb +59 -7
- data/test/ral/providers/group.rb +7 -7
- data/test/ral/providers/host/netinfo.rb +5 -6
- data/test/ral/providers/host/parsed.rb +4 -4
- data/test/ral/providers/mount/parsed.rb +11 -6
- data/test/ral/providers/nameservice.rb +2 -2
- data/test/ral/providers/package.rb +39 -14
- data/test/ral/providers/package/apt.rb +72 -3
- data/test/ral/providers/package/aptitude.rb +15 -12
- data/test/ral/providers/package/aptrpm.rb +3 -3
- data/test/ral/providers/package/dpkg.rb +2 -2
- data/test/ral/providers/parsedfile.rb +114 -88
- data/test/ral/providers/{parsedport.rb → port/parsed.rb} +1 -1
- data/test/ral/providers/provider.rb +93 -13
- data/test/ral/providers/service.rb +52 -26
- data/test/ral/providers/sshkey/parsed.rb +3 -3
- data/test/ral/providers/user.rb +19 -20
- data/test/ral/providers/user/useradd.rb +1 -5
- data/test/ral/types/cron.rb +49 -36
- data/test/ral/types/file.rb +38 -35
- data/test/ral/types/file/target.rb +4 -4
- data/test/ral/types/filesources.rb +24 -22
- data/test/ral/types/group.rb +4 -2
- data/test/ral/types/host.rb +17 -10
- data/test/ral/types/mount.rb +40 -23
- data/test/ral/types/package.rb +62 -5
- data/test/ral/types/parameter.rb +2 -2
- data/test/ral/types/property.rb +27 -20
- data/test/ral/types/resources.rb +4 -16
- data/test/ral/types/schedule.rb +2 -2
- data/test/ral/types/service.rb +2 -3
- data/test/ral/types/sshkey.rb +3 -3
- data/test/ral/types/tidy.rb +6 -15
- data/test/ral/types/user.rb +17 -17
- data/test/ral/types/yumrepo.rb +2 -2
- data/test/ral/types/zone.rb +71 -87
- data/test/util/autoload.rb +6 -21
- data/test/util/config.rb +201 -101
- data/test/util/fact_store.rb +67 -0
- data/test/util/features.rb +9 -6
- data/test/util/instance_loader.rb +53 -0
- data/test/util/loadedfile.rb +17 -1
- data/test/util/metrics.rb +54 -57
- data/test/util/posixtest.rb +8 -11
- data/test/util/utiltest.rb +31 -2
- metadata +520 -492
- data/TODO +0 -4
- data/lib/puppet/network/client/logger.rb +0 -6
- data/lib/puppet/network/handler/logger.rb +0 -52
- data/lib/puppet/rails/database/001_add_indexes.rb +0 -38
- data/lib/puppet/type/parsedtype.rb +0 -219
- data/test/network/handler/logger.rb +0 -183
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module Puppet::Util
|
|
2
|
+
# The abstract base class for client configuration storage.
|
|
3
|
+
class ConfigStore
|
|
4
|
+
extend Puppet::Util
|
|
5
|
+
extend Puppet::Util::Docs
|
|
6
|
+
extend Puppet::Util::ClassGen
|
|
7
|
+
|
|
8
|
+
@loader = Puppet::Util::Autoload.new(self, "puppet/config_stores")
|
|
9
|
+
@stores = {}
|
|
10
|
+
|
|
11
|
+
# Add a new report type.
|
|
12
|
+
def self.newstore(name, options = {}, &block)
|
|
13
|
+
klass = genclass(name,
|
|
14
|
+
:block => block,
|
|
15
|
+
:prefix => "ConfigStore",
|
|
16
|
+
:hash => @stores,
|
|
17
|
+
:attributes => options
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Remove a store; really only used for testing.
|
|
22
|
+
def self.rmstore(name)
|
|
23
|
+
rmclass(name, :hash => @stores)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Load a store.
|
|
27
|
+
def self.store(name)
|
|
28
|
+
name = symbolize(name)
|
|
29
|
+
unless @stores.include? name
|
|
30
|
+
if @loader.load(name)
|
|
31
|
+
unless @stores.include? name
|
|
32
|
+
Puppet.warning(
|
|
33
|
+
"Loaded report file for %s but report was not defined" %
|
|
34
|
+
name
|
|
35
|
+
)
|
|
36
|
+
return nil
|
|
37
|
+
end
|
|
38
|
+
else
|
|
39
|
+
return nil
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
@stores[name]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Retrieve the config for a client.
|
|
46
|
+
def get(client)
|
|
47
|
+
raise Puppet::DevError, "%s has not overridden get" % self.class.name
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Store the config for a client.
|
|
51
|
+
def store(client, config)
|
|
52
|
+
raise Puppet::DevError, "%s has not overridden store" % self.class.name
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def collect_exported(client, conditions)
|
|
56
|
+
raise Puppet::DevError, "%s has not overridden collect_exported" % self.class.name
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Created on 2007-05-02
|
|
2
|
+
# Copyright Luke Kanies
|
|
3
|
+
|
|
4
|
+
module Puppet::Util
|
|
5
|
+
# The abstract base class for client fact storage.
|
|
6
|
+
class FactStore
|
|
7
|
+
extend Puppet::Util
|
|
8
|
+
extend Puppet::Util::Docs
|
|
9
|
+
extend Puppet::Util::ClassGen
|
|
10
|
+
|
|
11
|
+
@loader = Puppet::Util::Autoload.new(self, "puppet/fact_stores")
|
|
12
|
+
@stores = {}
|
|
13
|
+
|
|
14
|
+
# Add a new report type.
|
|
15
|
+
def self.newstore(name, options = {}, &block)
|
|
16
|
+
klass = genclass(name,
|
|
17
|
+
:block => block,
|
|
18
|
+
:prefix => "FactStore",
|
|
19
|
+
:hash => @stores,
|
|
20
|
+
:attributes => options
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Remove a store; really only used for testing.
|
|
25
|
+
def self.rmstore(name)
|
|
26
|
+
rmclass(name, :hash => @stores)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Load a store.
|
|
30
|
+
def self.store(name)
|
|
31
|
+
name = symbolize(name)
|
|
32
|
+
unless @stores.include? name
|
|
33
|
+
if @loader.load(name)
|
|
34
|
+
unless @stores.include? name
|
|
35
|
+
Puppet.warning(
|
|
36
|
+
"Loaded report file for %s but report was not defined" %
|
|
37
|
+
name
|
|
38
|
+
)
|
|
39
|
+
return nil
|
|
40
|
+
end
|
|
41
|
+
else
|
|
42
|
+
return nil
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
@stores[name]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Retrieve the facts for a node.
|
|
49
|
+
def get(node)
|
|
50
|
+
raise Puppet::DevError, "%s has not overridden get" % self.class.name
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Set the facts for a node.
|
|
54
|
+
def set(node, facts)
|
|
55
|
+
raise Puppet::DevError, "%s has not overridden set" % self.class.name
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# $Id: fact_store.rb 2457 2007-05-03 05:24:13Z luke $
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'puppet/util/autoload'
|
|
2
|
+
require 'puppet/util'
|
|
3
|
+
|
|
4
|
+
# A module that can easily autoload things for us. Uses an instance
|
|
5
|
+
# of Puppet::Util::Autoload
|
|
6
|
+
module Puppet::Util::InstanceLoader
|
|
7
|
+
include Puppet::Util
|
|
8
|
+
# Define a new type of autoloading.
|
|
9
|
+
def autoload(type, path, options = {})
|
|
10
|
+
@autoloaders ||= {}
|
|
11
|
+
@instances ||= {}
|
|
12
|
+
type = symbolize(type)
|
|
13
|
+
@instances[type] = {}
|
|
14
|
+
@autoloaders[type] = Puppet::Util::Autoload.new(self, path, options)
|
|
15
|
+
|
|
16
|
+
# Now define our new simple methods
|
|
17
|
+
unless respond_to?(type)
|
|
18
|
+
meta_def(type) do |name|
|
|
19
|
+
loaded_instance(type, name)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Return a list of the names of all instances
|
|
25
|
+
def loaded_instances(type)
|
|
26
|
+
@instances[type].keys
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Collect the docs for all of our instances.
|
|
30
|
+
def instance_docs(type)
|
|
31
|
+
docs = ""
|
|
32
|
+
|
|
33
|
+
# Use this method so they all get loaded
|
|
34
|
+
loaded_instances(type).sort { |a,b| a.to_s <=> b.to_s }.each do |name|
|
|
35
|
+
mod = self.loaded_instance(name)
|
|
36
|
+
docs += "%s\n%s\n" % [name, "-" * name.to_s.length]
|
|
37
|
+
|
|
38
|
+
docs += Puppet::Util::Docs.scrub(mod.doc) + "\n\n"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
docs
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Return the instance hash for our type.
|
|
45
|
+
def instance_hash(type)
|
|
46
|
+
@instances[symbolize(type)]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Return the Autoload object for a given type.
|
|
50
|
+
def instance_loader(type)
|
|
51
|
+
@autoloaders[symbolize(type)]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Retrieve an alread-loaded instance, or attempt to load our instance.
|
|
55
|
+
def loaded_instance(type, name)
|
|
56
|
+
name = symbolize(name)
|
|
57
|
+
instances = instance_hash(type)
|
|
58
|
+
unless instances.include? name
|
|
59
|
+
if instance_loader(type).load(name)
|
|
60
|
+
unless instances.include? name
|
|
61
|
+
Puppet.warning(
|
|
62
|
+
"Loaded %s file for %s but %s was not defined" % [type, name, type]
|
|
63
|
+
)
|
|
64
|
+
return nil
|
|
65
|
+
end
|
|
66
|
+
else
|
|
67
|
+
return nil
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
instances[name]
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# $Id: instance_loader.rb 2476 2007-05-07 18:59:40Z luke $
|
|
@@ -12,16 +12,13 @@ module Puppet
|
|
|
12
12
|
# have to depend on the granularity of the filesystem.
|
|
13
13
|
attr_writer :tstamp
|
|
14
14
|
|
|
15
|
-
Puppet.config.setdefaults(:puppet,
|
|
16
|
-
:filetimeout => [ 15,
|
|
17
|
-
"The minimum time to wait between checking for updates in
|
|
18
|
-
configuration files."
|
|
19
|
-
]
|
|
20
|
-
)
|
|
21
|
-
|
|
22
15
|
# Determine whether the file has changed and thus whether it should
|
|
23
16
|
# be reparsed.
|
|
24
17
|
def changed?
|
|
18
|
+
# Allow the timeout to be disabled entirely.
|
|
19
|
+
if Puppet[:filetimeout] < 0
|
|
20
|
+
return true
|
|
21
|
+
end
|
|
25
22
|
tmp = stamp()
|
|
26
23
|
|
|
27
24
|
# We use a different internal variable than the stamp method
|
|
@@ -68,4 +65,4 @@ module Puppet
|
|
|
68
65
|
end
|
|
69
66
|
end
|
|
70
67
|
|
|
71
|
-
# $Id: loadedfile.rb
|
|
68
|
+
# $Id: loadedfile.rb 2629 2007-06-19 22:18:55Z luke $
|
data/lib/puppet/util/metric.rb
CHANGED
|
@@ -3,23 +3,12 @@ require 'puppet'
|
|
|
3
3
|
|
|
4
4
|
# A class for handling metrics. This is currently ridiculously hackish.
|
|
5
5
|
class Puppet::Util::Metric
|
|
6
|
-
Puppet.config.setdefaults("metrics",
|
|
7
|
-
:rrddir => {:default => "$vardir/rrd",
|
|
8
|
-
:owner => "$user",
|
|
9
|
-
:group => "$group",
|
|
10
|
-
:desc => "The directory where RRD database files are stored.
|
|
11
|
-
Directories for each reporting host will be created under
|
|
12
|
-
this directory."
|
|
13
|
-
},
|
|
14
|
-
:rrdgraph => [false, "Whether RRD information should be graphed."],
|
|
15
|
-
:rrdinterval => ["$runinterval", "How often RRD should expect data.
|
|
16
|
-
This should match how often the hosts report back to the server."]
|
|
17
|
-
)
|
|
18
6
|
|
|
19
7
|
# Load the library as a feature, so we can test its presence.
|
|
20
|
-
Puppet.features.add :rrd, :libs => '
|
|
8
|
+
Puppet.features.add :rrd, :libs => 'RRDtool'
|
|
21
9
|
|
|
22
10
|
attr_accessor :type, :name, :value, :label
|
|
11
|
+
attr_writer :values
|
|
23
12
|
|
|
24
13
|
attr_writer :basedir
|
|
25
14
|
|
|
@@ -36,12 +25,8 @@ class Puppet::Util::Metric
|
|
|
36
25
|
|
|
37
26
|
start ||= Time.now.to_i - 5
|
|
38
27
|
|
|
39
|
-
|
|
40
|
-
args = [
|
|
41
|
-
path,
|
|
42
|
-
"--start", start,
|
|
43
|
-
"--step", Puppet[:rrdinterval]
|
|
44
|
-
]
|
|
28
|
+
@rrd = RRDtool.new(self.path)
|
|
29
|
+
args = []
|
|
45
30
|
|
|
46
31
|
values.each { |value|
|
|
47
32
|
# the 7200 is the heartbeat -- this means that any data that isn't
|
|
@@ -51,14 +36,14 @@ class Puppet::Util::Metric
|
|
|
51
36
|
args.push "RRA:AVERAGE:0.5:1:300"
|
|
52
37
|
|
|
53
38
|
begin
|
|
54
|
-
|
|
39
|
+
@rrd.create( Puppet[:rrdinterval].to_i, start, args)
|
|
55
40
|
rescue => detail
|
|
56
41
|
raise "Could not create RRD file %s: %s" % [path,detail]
|
|
57
42
|
end
|
|
58
43
|
end
|
|
59
44
|
|
|
60
45
|
def dump
|
|
61
|
-
puts
|
|
46
|
+
puts @rrd.info
|
|
62
47
|
end
|
|
63
48
|
|
|
64
49
|
def graph(range = nil)
|
|
@@ -68,7 +53,7 @@ class Puppet::Util::Metric
|
|
|
68
53
|
end
|
|
69
54
|
|
|
70
55
|
unit = 60 * 60 * 24
|
|
71
|
-
colorstack = %w{#
|
|
56
|
+
colorstack = %w{#00ff00 #ff0000 #0000ff #ffff00 #ff99ff #ff9966 #66ffff #990000 #099000 #000990 #f00990 #0f0f0f #555555 #333333 #ffffff}
|
|
72
57
|
|
|
73
58
|
{:daily => unit, :weekly => unit * 7, :monthly => unit * 30, :yearly => unit * 365}.each do |name, time|
|
|
74
59
|
file = self.path.sub(/\.rrd$/, "-%s.png" % name)
|
|
@@ -97,7 +82,8 @@ class Puppet::Util::Metric
|
|
|
97
82
|
end
|
|
98
83
|
|
|
99
84
|
begin
|
|
100
|
-
|
|
85
|
+
#Puppet.warning "args = #{args}"
|
|
86
|
+
RRDtool.graph( args )
|
|
101
87
|
rescue => detail
|
|
102
88
|
Puppet.err "Failed to graph %s: %s" % [self.name,detail]
|
|
103
89
|
end
|
|
@@ -136,14 +122,20 @@ class Puppet::Util::Metric
|
|
|
136
122
|
self.create(time - 5)
|
|
137
123
|
end
|
|
138
124
|
|
|
125
|
+
@rrd ||= RRDtool.new(self.path)
|
|
126
|
+
|
|
139
127
|
# XXX this is not terribly error-resistant
|
|
140
128
|
args = [time]
|
|
129
|
+
temps = []
|
|
141
130
|
values.each { |value|
|
|
131
|
+
#Puppet.warning "value[0]: #{value[0]}; value[1]: #{value[1]}; value[2]: #{value[2]}; "
|
|
142
132
|
args.push value[2]
|
|
133
|
+
temps.push value[0]
|
|
143
134
|
}
|
|
144
135
|
arg = args.join(":")
|
|
136
|
+
template = temps.join(":")
|
|
145
137
|
begin
|
|
146
|
-
|
|
138
|
+
@rrd.update( template, [ arg ] )
|
|
147
139
|
#system("rrdtool updatev %s '%s'" % [self.path, arg])
|
|
148
140
|
rescue => detail
|
|
149
141
|
raise Puppet::Error, "Failed to update %s: %s" % [self.name,detail]
|
|
@@ -157,4 +149,4 @@ end
|
|
|
157
149
|
|
|
158
150
|
Puppet::Metric = Puppet::Util::Metric
|
|
159
151
|
|
|
160
|
-
# $Id: metric.rb
|
|
152
|
+
# $Id: metric.rb 2584 2007-06-14 14:23:58Z luke $
|
data/lib/puppet/util/posix.rb
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
# Utility methods for interacting with POSIX objects; mostly user and group
|
|
2
2
|
module Puppet::Util::POSIX
|
|
3
|
+
|
|
3
4
|
# Retrieve a field from a POSIX Etc object. The id can be either an integer
|
|
4
|
-
# or a name. This only works for users and groups.
|
|
5
|
-
|
|
5
|
+
# or a name. This only works for users and groups. It's also broken on
|
|
6
|
+
# some platforms, unfortunately.
|
|
7
|
+
def old_get_posix_field(space, field, id)
|
|
8
|
+
unless id
|
|
9
|
+
raise ArgumentError, "Did not get id"
|
|
10
|
+
end
|
|
6
11
|
if id =~ /^\d+$/
|
|
7
12
|
id = Integer(id)
|
|
8
13
|
end
|
|
@@ -24,8 +29,35 @@ module Puppet::Util::POSIX
|
|
|
24
29
|
return nil
|
|
25
30
|
end
|
|
26
31
|
end
|
|
32
|
+
|
|
33
|
+
# A degenerate method of retrieving name/id mappings. The job of this method is
|
|
34
|
+
# to find a specific entry and then return a given field from that entry.
|
|
35
|
+
def get_posix_field(type, field, id)
|
|
36
|
+
idmethod = idfield(type)
|
|
37
|
+
integer = false
|
|
38
|
+
if id =~ /^\d+$/
|
|
39
|
+
id = Integer(id)
|
|
40
|
+
end
|
|
41
|
+
if id.is_a?(Integer)
|
|
42
|
+
integer = true
|
|
43
|
+
if id > 1000000
|
|
44
|
+
Puppet.err "Tried to get %s field for silly id %s" % [field, id]
|
|
45
|
+
return nil
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
Etc.send(type) do |object|
|
|
50
|
+
if integer and object.send(idmethod) == id
|
|
51
|
+
return object.send(field)
|
|
52
|
+
elsif object.name == id
|
|
53
|
+
return object.send(field)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
return nil
|
|
57
|
+
end
|
|
27
58
|
|
|
28
59
|
# Look in memory for an already-managed type and use its info if available.
|
|
60
|
+
# Currently unused.
|
|
29
61
|
def get_provider_value(type, field, id)
|
|
30
62
|
unless typeklass = Puppet::Type.type(type)
|
|
31
63
|
raise ArgumentError, "Invalid type %s" % type
|
|
@@ -37,7 +69,7 @@ module Puppet::Util::POSIX
|
|
|
37
69
|
obj = typeklass.find { |obj|
|
|
38
70
|
if id =~ /^\d+$/
|
|
39
71
|
obj.should(chkfield).to_s == id ||
|
|
40
|
-
obj.
|
|
72
|
+
obj.provider.send(chkfield) == id
|
|
41
73
|
else
|
|
42
74
|
obj[:name] == id
|
|
43
75
|
end
|
|
@@ -67,7 +99,7 @@ module Puppet::Util::POSIX
|
|
|
67
99
|
def idfield(space)
|
|
68
100
|
case Puppet::Util.symbolize(space)
|
|
69
101
|
when :gr, :group: return :gid
|
|
70
|
-
when :pw, :user: return :uid
|
|
102
|
+
when :pw, :user, :passwd: return :uid
|
|
71
103
|
else
|
|
72
104
|
raise ArgumentError.new("Can only handle users and groups")
|
|
73
105
|
end
|
|
@@ -75,13 +107,13 @@ module Puppet::Util::POSIX
|
|
|
75
107
|
|
|
76
108
|
# Get the GID of a given group, provided either a GID or a name
|
|
77
109
|
def gid(group)
|
|
78
|
-
|
|
110
|
+
get_posix_field(:group, :gid, group)
|
|
79
111
|
end
|
|
80
112
|
|
|
81
113
|
# Get the UID of a given user, whether a UID or name is provided
|
|
82
114
|
def uid(user)
|
|
83
|
-
|
|
115
|
+
get_posix_field(:passwd, :uid, user)
|
|
84
116
|
end
|
|
85
117
|
end
|
|
86
118
|
|
|
87
|
-
# $Id: posix.rb
|
|
119
|
+
# $Id: posix.rb 2598 2007-06-17 23:11:14Z luke $
|
|
@@ -100,6 +100,12 @@ module Puppet::Util::ProviderFeatures
|
|
|
100
100
|
str
|
|
101
101
|
end
|
|
102
102
|
|
|
103
|
+
# Return a list of features.
|
|
104
|
+
def features
|
|
105
|
+
@features ||= {}
|
|
106
|
+
@features.keys
|
|
107
|
+
end
|
|
108
|
+
|
|
103
109
|
# Generate a module that sets up the boolean methods to test for given
|
|
104
110
|
# features.
|
|
105
111
|
def feature_module
|
|
@@ -162,9 +168,11 @@ module Puppet::Util::ProviderFeatures
|
|
|
162
168
|
@declared_features << name
|
|
163
169
|
end
|
|
164
170
|
end
|
|
171
|
+
# Aaah, grammatical correctness
|
|
172
|
+
@feature_module.send(:alias_method, :has_feature, :has_features)
|
|
165
173
|
end
|
|
166
174
|
@feature_module
|
|
167
175
|
end
|
|
168
176
|
end
|
|
169
177
|
|
|
170
|
-
# $Id: provider_features.rb
|
|
178
|
+
# $Id: provider_features.rb 2542 2007-05-30 20:36:29Z mpalmer $
|
|
@@ -37,6 +37,21 @@ module Puppet::Util::CollectionMerger
|
|
|
37
37
|
send(collection).delete(object)
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
|
+
|
|
41
|
+
def ar_hash_merge(db_hash, mem_hash, args)
|
|
42
|
+
(db_hash.keys | mem_hash.keys).each do |key|
|
|
43
|
+
if (db_hash[key] && mem_hash[key])
|
|
44
|
+
# in both, update value
|
|
45
|
+
args[:modify].call(db_hash[key], mem_hash[key])
|
|
46
|
+
elsif (db_hash[key])
|
|
47
|
+
# in db, not memory, delete from database
|
|
48
|
+
args[:delete].call(db_hash[key])
|
|
49
|
+
else
|
|
50
|
+
# in mem, not in db, insert into the database
|
|
51
|
+
args[:create].call(key, mem_hash[key])
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
40
55
|
end
|
|
41
56
|
|
|
42
|
-
# $Id: collection_merger.rb
|
|
57
|
+
# $Id: collection_merger.rb 2565 2007-06-12 00:31:16Z ballman $
|