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
|
@@ -61,15 +61,12 @@ class Puppet::Type
|
|
|
61
61
|
# we've set up our naming stuff correctly everywhere.
|
|
62
62
|
|
|
63
63
|
# Mark found objects as present
|
|
64
|
-
obj.is = [:ensure, :present]
|
|
65
64
|
hash.each { |param, value|
|
|
66
65
|
if property = obj.property(param)
|
|
67
|
-
property.is = value
|
|
68
66
|
elsif val = obj[param]
|
|
69
67
|
obj[param] = val
|
|
70
68
|
else
|
|
71
69
|
# There is a value on disk, but it should go away
|
|
72
|
-
obj.is = [param, value]
|
|
73
70
|
obj[param] = :absent
|
|
74
71
|
end
|
|
75
72
|
}
|
|
@@ -82,33 +79,13 @@ class Puppet::Type
|
|
|
82
79
|
# because it sets the should value, not the is value.
|
|
83
80
|
hash.delete(namevar)
|
|
84
81
|
hash.each { |param, value|
|
|
85
|
-
obj
|
|
82
|
+
obj[param] = value unless obj.add_property_parameter(param)
|
|
86
83
|
}
|
|
87
84
|
end
|
|
88
85
|
|
|
89
86
|
return obj
|
|
90
87
|
end
|
|
91
88
|
|
|
92
|
-
# Create a list method that just calls our providers.
|
|
93
|
-
def self.mkprovider_list
|
|
94
|
-
unless respond_to?(:list)
|
|
95
|
-
meta_def(:list) do
|
|
96
|
-
suitableprovider.find_all { |p| p.respond_to?(:list) }.collect { |prov|
|
|
97
|
-
prov.list.each { |h| h[:provider] = prov.name }
|
|
98
|
-
}.flatten.collect do |hash|
|
|
99
|
-
if hash.is_a?(Hash)
|
|
100
|
-
hash2obj(hash)
|
|
101
|
-
elsif hash.is_a?(self)
|
|
102
|
-
hash
|
|
103
|
-
else
|
|
104
|
-
raise Puppet::DevError, "Provider %s returned object of type %s in list" %
|
|
105
|
-
[prov.name, hash.class]
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
|
|
112
89
|
# Retrieve a provider by name.
|
|
113
90
|
def self.provider(name)
|
|
114
91
|
name = Puppet::Util.symbolize(name)
|
|
@@ -153,7 +130,7 @@ class Puppet::Type
|
|
|
153
130
|
Puppet::Type::Provider
|
|
154
131
|
end
|
|
155
132
|
|
|
156
|
-
options[:
|
|
133
|
+
options[:resource_type] ||= self
|
|
157
134
|
|
|
158
135
|
self.providify
|
|
159
136
|
|
|
@@ -174,9 +151,7 @@ class Puppet::Type
|
|
|
174
151
|
# are providers.
|
|
175
152
|
def self.providify
|
|
176
153
|
return if @paramhash.has_key? :provider
|
|
177
|
-
model = self
|
|
178
154
|
|
|
179
|
-
mkprovider_list()
|
|
180
155
|
newparam(:provider) do
|
|
181
156
|
desc "The specific backend for #{self.name.to_s} to use. You will
|
|
182
157
|
seldom need to specify this -- Puppet will usually discover the
|
|
@@ -198,20 +173,24 @@ class Puppet::Type
|
|
|
198
173
|
end
|
|
199
174
|
|
|
200
175
|
defaultto {
|
|
201
|
-
@
|
|
176
|
+
@resource.class.defaultprovider.name
|
|
202
177
|
}
|
|
203
178
|
|
|
204
|
-
validate do |
|
|
205
|
-
|
|
206
|
-
if
|
|
179
|
+
validate do |provider_class|
|
|
180
|
+
provider_class = provider_class[0] if provider_class.is_a? Array
|
|
181
|
+
if provider_class.is_a?(Puppet::Provider)
|
|
182
|
+
provider_class = provider_class.class.name
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
if provider = @resource.class.provider(provider_class)
|
|
207
186
|
unless provider.suitable?
|
|
208
187
|
raise ArgumentError,
|
|
209
188
|
"Provider '%s' is not functional on this platform" %
|
|
210
|
-
[
|
|
189
|
+
[provider_class]
|
|
211
190
|
end
|
|
212
191
|
else
|
|
213
192
|
raise ArgumentError, "Invalid %s provider '%s'" %
|
|
214
|
-
[@
|
|
193
|
+
[@resource.class.name, provider_class]
|
|
215
194
|
end
|
|
216
195
|
end
|
|
217
196
|
|
|
@@ -220,8 +199,13 @@ class Puppet::Type
|
|
|
220
199
|
if provider.is_a? String
|
|
221
200
|
provider = provider.intern
|
|
222
201
|
end
|
|
223
|
-
@
|
|
224
|
-
|
|
202
|
+
@resource.provider = provider
|
|
203
|
+
|
|
204
|
+
if provider.is_a?(Puppet::Provider)
|
|
205
|
+
provider.class.name
|
|
206
|
+
else
|
|
207
|
+
provider
|
|
208
|
+
end
|
|
225
209
|
end
|
|
226
210
|
end.parenttype = self
|
|
227
211
|
end
|
|
@@ -248,13 +232,16 @@ class Puppet::Type
|
|
|
248
232
|
end
|
|
249
233
|
|
|
250
234
|
def provider=(name)
|
|
251
|
-
if
|
|
235
|
+
if name.is_a?(Puppet::Provider)
|
|
236
|
+
@provider = name
|
|
237
|
+
@provider.resource = self
|
|
238
|
+
elsif klass = self.class.provider(name)
|
|
252
239
|
@provider = klass.new(self)
|
|
253
240
|
else
|
|
254
|
-
raise
|
|
241
|
+
raise ArgumentError, "Could not find %s provider of %s" %
|
|
255
242
|
[name, self.class.name]
|
|
256
243
|
end
|
|
257
244
|
end
|
|
258
245
|
end
|
|
259
246
|
|
|
260
|
-
# $Id: providers.rb
|
|
247
|
+
# $Id: providers.rb 2552 2007-06-05 01:17:00Z luke $
|
|
@@ -16,7 +16,7 @@ class Puppet::Network::Client::CA < Puppet::Network::Client
|
|
|
16
16
|
# This client is really only able to request certificates for the
|
|
17
17
|
# current host. It uses the Puppet.config settings to figure everything out.
|
|
18
18
|
def request_cert
|
|
19
|
-
Puppet.config.use(:
|
|
19
|
+
Puppet.config.use(:main, :ssl)
|
|
20
20
|
|
|
21
21
|
if cert = read_cert
|
|
22
22
|
return cert
|
|
@@ -34,8 +34,6 @@ class Puppet::Network::Client::CA < Puppet::Network::Client
|
|
|
34
34
|
if cert.nil? or cert == ""
|
|
35
35
|
return nil
|
|
36
36
|
end
|
|
37
|
-
Puppet.config.write(:hostcert) do |f| f.print cert end
|
|
38
|
-
Puppet.config.write(:localcacert) do |f| f.print cacert end
|
|
39
37
|
|
|
40
38
|
begin
|
|
41
39
|
@cert = OpenSSL::X509::Certificate.new(cert)
|
|
@@ -47,10 +45,15 @@ class Puppet::Network::Client::CA < Puppet::Network::Client
|
|
|
47
45
|
end
|
|
48
46
|
|
|
49
47
|
unless @cert.check_private_key(key)
|
|
50
|
-
raise InvalidCertificate, "Certificate does not match private key"
|
|
48
|
+
raise InvalidCertificate, "Certificate does not match private key. Try 'puppetca --clean %s' on the server." % Facter.value(:fqdn)
|
|
51
49
|
end
|
|
50
|
+
|
|
51
|
+
# Only write the cert out if it passes validating.
|
|
52
|
+
Puppet.config.write(:hostcert) do |f| f.print cert end
|
|
53
|
+
Puppet.config.write(:localcacert) do |f| f.print cacert end
|
|
54
|
+
|
|
52
55
|
return @cert
|
|
53
56
|
end
|
|
54
57
|
end
|
|
55
58
|
|
|
56
|
-
# $Id: ca.rb
|
|
59
|
+
# $Id: ca.rb 2611 2007-06-18 19:33:15Z luke $
|
|
@@ -41,6 +41,11 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
41
41
|
facts
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
+
# Return the list of dynamic facts as an array of symbols
|
|
45
|
+
def self.dynamic_facts
|
|
46
|
+
Puppet.config[:dynamicfacts].split(/\s*,\s*/).collect { |fact| fact.downcase }
|
|
47
|
+
end
|
|
48
|
+
|
|
44
49
|
# This method actually applies the configuration.
|
|
45
50
|
def apply(tags = nil, ignoreschedules = false)
|
|
46
51
|
unless defined? @objects
|
|
@@ -74,7 +79,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
74
79
|
Puppet::Util::Storage.store
|
|
75
80
|
end
|
|
76
81
|
|
|
77
|
-
if Puppet[:report]
|
|
82
|
+
if Puppet[:report] or Puppet[:summarize]
|
|
78
83
|
report(transaction)
|
|
79
84
|
end
|
|
80
85
|
|
|
@@ -103,7 +108,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
103
108
|
end
|
|
104
109
|
|
|
105
110
|
def clear
|
|
106
|
-
@objects.remove(true)
|
|
111
|
+
@objects.remove(true) if @objects
|
|
107
112
|
Puppet::Type.allclear
|
|
108
113
|
mkdefault_objects
|
|
109
114
|
@objects = nil
|
|
@@ -238,7 +243,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
238
243
|
|
|
239
244
|
# Just so we can specify that we are "the" instance.
|
|
240
245
|
def initialize(*args)
|
|
241
|
-
Puppet.config.use(:
|
|
246
|
+
Puppet.config.use(:main, :ssl, :puppetd)
|
|
242
247
|
super
|
|
243
248
|
|
|
244
249
|
# This might be nil
|
|
@@ -288,6 +293,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
288
293
|
# The code that actually runs the configuration.
|
|
289
294
|
def run(tags = nil, ignoreschedules = false)
|
|
290
295
|
got_lock = false
|
|
296
|
+
splay
|
|
291
297
|
Puppet::Util.sync(:puppetrun).synchronize(Sync::EX) do
|
|
292
298
|
if !lockfile.lock
|
|
293
299
|
Puppet.notice "Lock file %s exists; skipping configuration run" %
|
|
@@ -319,6 +325,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
319
325
|
ensure
|
|
320
326
|
# Just make sure we remove the lock file if we set it.
|
|
321
327
|
lockfile.unlock if got_lock and lockfile.locked?
|
|
328
|
+
clear()
|
|
322
329
|
end
|
|
323
330
|
|
|
324
331
|
def running?
|
|
@@ -483,11 +490,11 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
483
490
|
end
|
|
484
491
|
|
|
485
492
|
def self.timeout
|
|
486
|
-
|
|
487
|
-
case
|
|
493
|
+
timeout = Puppet[:configtimeout]
|
|
494
|
+
case timeout
|
|
488
495
|
when String:
|
|
489
|
-
if
|
|
490
|
-
|
|
496
|
+
if timeout =~ /^\d+$/
|
|
497
|
+
timeout = Integer(timeout)
|
|
491
498
|
else
|
|
492
499
|
raise ArgumentError, "Configuration timeout must be an integer"
|
|
493
500
|
end
|
|
@@ -495,18 +502,33 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
495
502
|
else
|
|
496
503
|
raise ArgumentError, "Configuration timeout must be an integer"
|
|
497
504
|
end
|
|
505
|
+
|
|
506
|
+
return timeout
|
|
498
507
|
end
|
|
499
508
|
|
|
500
509
|
# Send off the transaction report.
|
|
501
510
|
def report(transaction)
|
|
502
511
|
begin
|
|
503
512
|
report = transaction.generate_report()
|
|
504
|
-
if Puppet[:rrdgraph] == true
|
|
505
|
-
report.graph()
|
|
506
|
-
end
|
|
507
|
-
reportclient().report(report)
|
|
508
513
|
rescue => detail
|
|
509
|
-
Puppet.err "
|
|
514
|
+
Puppet.err "Could not generate report: %s" % detail
|
|
515
|
+
return
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
if Puppet[:rrdgraph] == true
|
|
519
|
+
report.graph()
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
if Puppet[:summarize]
|
|
523
|
+
puts report.summary
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
if Puppet[:report]
|
|
527
|
+
begin
|
|
528
|
+
reportclient().report(report)
|
|
529
|
+
rescue => detail
|
|
530
|
+
Puppet.err "Reporting failed: %s" % detail
|
|
531
|
+
end
|
|
510
532
|
end
|
|
511
533
|
end
|
|
512
534
|
|
|
@@ -521,13 +543,17 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
521
543
|
end
|
|
522
544
|
|
|
523
545
|
loadfacts()
|
|
524
|
-
|
|
525
|
-
private
|
|
526
546
|
|
|
527
547
|
# Have the facts changed since we last compiled?
|
|
528
548
|
def facts_changed?(facts)
|
|
529
|
-
oldfacts = Puppet::Util::Storage.cache(:configuration)[:facts]
|
|
530
|
-
newfacts = facts
|
|
549
|
+
oldfacts = (Puppet::Util::Storage.cache(:configuration)[:facts] || {}).dup
|
|
550
|
+
newfacts = facts.dup
|
|
551
|
+
self.class.dynamic_facts.each do |fact|
|
|
552
|
+
[oldfacts, newfacts].each do |facthash|
|
|
553
|
+
facthash.delete(fact) if facthash.include?(fact)
|
|
554
|
+
end
|
|
555
|
+
end
|
|
556
|
+
|
|
531
557
|
if oldfacts == newfacts
|
|
532
558
|
return false
|
|
533
559
|
else
|
|
@@ -639,6 +665,22 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
639
665
|
|
|
640
666
|
@lockfile
|
|
641
667
|
end
|
|
668
|
+
|
|
669
|
+
# Sleep when splay is enabled; else just return.
|
|
670
|
+
def splay
|
|
671
|
+
return unless Puppet[:splay]
|
|
672
|
+
|
|
673
|
+
limit = Integer(Puppet[:splaylimit])
|
|
674
|
+
|
|
675
|
+
# Pick a splay time and then cache it.
|
|
676
|
+
unless time = Puppet::Util::Storage.cache(:configuration)[:splay_time]
|
|
677
|
+
time = rand(limit)
|
|
678
|
+
Puppet::Util::Storage.cache(:configuration)[:splay_time] = time
|
|
679
|
+
end
|
|
680
|
+
|
|
681
|
+
Puppet.info "Sleeping for %s seconds (splay is enabled)" % time
|
|
682
|
+
sleep(time)
|
|
683
|
+
end
|
|
642
684
|
end
|
|
643
685
|
|
|
644
|
-
# $Id: master.rb
|
|
686
|
+
# $Id: master.rb 2602 2007-06-18 15:35:57Z luke $
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
require 'puppet/util/docs'
|
|
1
2
|
require 'puppet/util/subclass_loader'
|
|
2
3
|
|
|
3
4
|
module Puppet::Network
|
|
4
5
|
# The base class for the different handlers. The handlers are each responsible
|
|
5
6
|
# for separate xmlrpc namespaces.
|
|
6
7
|
class Handler
|
|
8
|
+
extend Puppet::Util::Docs
|
|
9
|
+
|
|
7
10
|
# This is so that the handlers can subclass just 'Handler', rather
|
|
8
11
|
# then having to specify the full class path.
|
|
9
12
|
Handler = self
|
|
@@ -24,10 +27,24 @@ module Puppet::Network
|
|
|
24
27
|
end
|
|
25
28
|
end
|
|
26
29
|
|
|
30
|
+
# Set/Determine whether we're a client- or server-side handler.
|
|
31
|
+
def self.side(side = nil)
|
|
32
|
+
if side
|
|
33
|
+
side = side.intern if side.is_a?(String)
|
|
34
|
+
unless [:client, :server].include?(side)
|
|
35
|
+
raise ArgumentError, "Invalid side registration '%s' for %s" % [side, self.name]
|
|
36
|
+
end
|
|
37
|
+
@side = side
|
|
38
|
+
else
|
|
39
|
+
@side ||= :server
|
|
40
|
+
return @side
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
27
44
|
# Create an empty init method with the same signature.
|
|
28
45
|
def initialize(hash = {})
|
|
29
46
|
end
|
|
30
47
|
end
|
|
31
48
|
end
|
|
32
49
|
|
|
33
|
-
# $Id: handler.rb
|
|
50
|
+
# $Id: handler.rb 2479 2007-05-07 22:29:44Z luke $
|
|
@@ -10,6 +10,10 @@ class Puppet::Network::Handler
|
|
|
10
10
|
class CA < Handler
|
|
11
11
|
attr_reader :ca
|
|
12
12
|
|
|
13
|
+
desc "Provides an interface for signing CSRs. Accepts a CSR and returns
|
|
14
|
+
the CA certificate and the signed certificate, or returns nil if
|
|
15
|
+
the cert is not signed."
|
|
16
|
+
|
|
13
17
|
@interface = XMLRPC::Service::Interface.new("puppetca") { |iface|
|
|
14
18
|
iface.add_method("array getcert(csr)")
|
|
15
19
|
}
|
|
@@ -56,7 +60,7 @@ class Puppet::Network::Handler
|
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
def initialize(hash = {})
|
|
59
|
-
Puppet.config.use(:
|
|
63
|
+
Puppet.config.use(:main, :ssl, :ca)
|
|
60
64
|
if hash.include? :autosign
|
|
61
65
|
@autosign = hash[:autosign]
|
|
62
66
|
end
|
|
@@ -100,7 +104,9 @@ class Puppet::Network::Handler
|
|
|
100
104
|
cert, cacert = ca.getclientcert(hostname)
|
|
101
105
|
if cert and cacert
|
|
102
106
|
Puppet.info "Retrieving existing certificate for %s" % hostname
|
|
103
|
-
|
|
107
|
+
unless csr.public_key.to_s == cert.public_key.to_s
|
|
108
|
+
raise Puppet::Error, "Certificate request does not match existing certificate; run 'puppetca --clean %s'." % hostname
|
|
109
|
+
end
|
|
104
110
|
return [cert.to_pem, cacert.to_pem]
|
|
105
111
|
elsif @ca
|
|
106
112
|
if self.autosign?(hostname) or client.nil?
|
|
@@ -149,4 +155,4 @@ class Puppet::Network::Handler
|
|
|
149
155
|
end
|
|
150
156
|
end
|
|
151
157
|
|
|
152
|
-
# $Id: ca.rb
|
|
158
|
+
# $Id: ca.rb 2612 2007-06-18 19:51:17Z luke $
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require 'puppet/util/fact_store'
|
|
3
|
+
|
|
4
|
+
class Puppet::Network::Handler
|
|
5
|
+
# Receive logs from remote hosts.
|
|
6
|
+
class Facts < Handler
|
|
7
|
+
desc "An interface for storing and retrieving client facts. Currently only
|
|
8
|
+
used internally by Puppet."
|
|
9
|
+
|
|
10
|
+
@interface = XMLRPC::Service::Interface.new("facts") { |iface|
|
|
11
|
+
iface.add_method("void set(string, string)")
|
|
12
|
+
iface.add_method("string get(string)")
|
|
13
|
+
iface.add_method("integer store_date(string)")
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
def initialize(hash = {})
|
|
17
|
+
super
|
|
18
|
+
|
|
19
|
+
backend = Puppet[:factstore]
|
|
20
|
+
|
|
21
|
+
unless klass = Puppet::Util::FactStore.store(backend)
|
|
22
|
+
raise Puppet::Error, "Could not find fact store %s" % backend
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
@backend = klass.new
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Get the facts from our back end.
|
|
29
|
+
def get(node)
|
|
30
|
+
if facts = @backend.get(node)
|
|
31
|
+
return strip_internal(facts)
|
|
32
|
+
else
|
|
33
|
+
return nil
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Set the facts in the backend.
|
|
38
|
+
def set(node, facts)
|
|
39
|
+
@backend.set(node, add_internal(facts))
|
|
40
|
+
nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Retrieve a client's storage date.
|
|
44
|
+
def store_date(node)
|
|
45
|
+
if facts = get(node)
|
|
46
|
+
facts[:_puppet_timestamp].to_i
|
|
47
|
+
else
|
|
48
|
+
nil
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
# Add internal data to the facts for storage.
|
|
55
|
+
def add_internal(facts)
|
|
56
|
+
facts = facts.dup
|
|
57
|
+
facts[:_puppet_timestamp] = Time.now
|
|
58
|
+
facts
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Strip out that internal data.
|
|
62
|
+
def strip_internal(facts)
|
|
63
|
+
facts = facts.dup
|
|
64
|
+
facts.find_all { |name, value| name.to_s =~ /^_puppet_/ }.each { |name, value| facts.delete(name) }
|
|
65
|
+
facts
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# $Id: facts.rb 2479 2007-05-07 22:29:44Z luke $
|