puppet 0.22.4 → 0.23.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- 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
@@ -49,7 +49,7 @@ module Puppet
|
|
49
49
|
cache(type, sum)
|
50
50
|
return type
|
51
51
|
else
|
52
|
-
if FileTest.directory?(@
|
52
|
+
if FileTest.directory?(@resource[:path])
|
53
53
|
return :time
|
54
54
|
else
|
55
55
|
return symbolize(value)
|
@@ -64,10 +64,10 @@ module Puppet
|
|
64
64
|
raise ArgumentError, "A type must be specified to cache a checksum"
|
65
65
|
end
|
66
66
|
type = symbolize(type)
|
67
|
-
unless state = @
|
67
|
+
unless state = @resource.cached(:checksums)
|
68
68
|
self.debug "Initializing checksum hash"
|
69
69
|
state = {}
|
70
|
-
@
|
70
|
+
@resource.cache(:checksums, state)
|
71
71
|
end
|
72
72
|
|
73
73
|
if sum
|
@@ -83,9 +83,8 @@ module Puppet
|
|
83
83
|
# Because source and content and whomever else need to set the checksum
|
84
84
|
# and do the updating, we provide a simple mechanism for doing so.
|
85
85
|
def checksum=(value)
|
86
|
-
@is = value
|
87
86
|
munge(@should)
|
88
|
-
self.updatesum
|
87
|
+
self.updatesum(value)
|
89
88
|
end
|
90
89
|
|
91
90
|
def checktype
|
@@ -93,21 +92,21 @@ module Puppet
|
|
93
92
|
end
|
94
93
|
|
95
94
|
# Checksums need to invert how changes are printed.
|
96
|
-
def change_to_s
|
95
|
+
def change_to_s(currentvalue, newvalue)
|
97
96
|
begin
|
98
|
-
if
|
97
|
+
if currentvalue == :absent
|
99
98
|
return "defined '%s' as '%s'" %
|
100
99
|
[self.name, self.currentsum]
|
101
|
-
elsif
|
100
|
+
elsif newvalue == :absent
|
102
101
|
return "undefined %s from '%s'" %
|
103
|
-
[self.name, self.is_to_s]
|
102
|
+
[self.name, self.is_to_s(currentvalue)]
|
104
103
|
else
|
105
104
|
if defined? @cached and @cached
|
106
105
|
return "%s changed '%s' to '%s'" %
|
107
|
-
[self.name, @cached, self.is_to_s]
|
106
|
+
[self.name, @cached, self.is_to_s(currentvalue)]
|
108
107
|
else
|
109
108
|
return "%s changed '%s' to '%s'" %
|
110
|
-
[self.name, self.currentsum, self.is_to_s]
|
109
|
+
[self.name, self.currentsum, self.is_to_s(currentvalue)]
|
111
110
|
end
|
112
111
|
end
|
113
112
|
rescue Puppet::Error, Puppet::DevError
|
@@ -126,16 +125,16 @@ module Puppet
|
|
126
125
|
# Retrieve the cached sum
|
127
126
|
def getcachedsum
|
128
127
|
hash = nil
|
129
|
-
unless hash = @
|
128
|
+
unless hash = @resource.cached(:checksums)
|
130
129
|
hash = {}
|
131
|
-
@
|
130
|
+
@resource.cache(:checksums, hash)
|
132
131
|
end
|
133
132
|
|
134
133
|
sumtype = self.should
|
135
134
|
|
136
135
|
if hash.include?(sumtype)
|
137
136
|
#self.notice "Found checksum %s for %s" %
|
138
|
-
# [hash[sumtype] ,@
|
137
|
+
# [hash[sumtype] ,@resource[:path]]
|
139
138
|
sum = hash[sumtype]
|
140
139
|
|
141
140
|
unless sum =~ /^\{\w+\}/
|
@@ -147,7 +146,7 @@ module Puppet
|
|
147
146
|
return :nosum
|
148
147
|
else
|
149
148
|
#self.notice "Found checksum for %s but not of type %s" %
|
150
|
-
# [@
|
149
|
+
# [@resource[:path],sumtype]
|
151
150
|
return :nosum
|
152
151
|
end
|
153
152
|
end
|
@@ -159,45 +158,39 @@ module Puppet
|
|
159
158
|
checktype = checktype.intern if checktype.is_a? String
|
160
159
|
case checktype
|
161
160
|
when :md5, :md5lite:
|
162
|
-
if ! FileTest.file?(@
|
163
|
-
@
|
164
|
-
[@
|
165
|
-
sum = @
|
161
|
+
if ! FileTest.file?(@resource[:path])
|
162
|
+
@resource.debug "Cannot MD5 sum %s; using mtime" %
|
163
|
+
[@resource.stat.ftype]
|
164
|
+
sum = @resource.stat.mtime.to_s
|
166
165
|
else
|
167
166
|
begin
|
168
|
-
File.open(@
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
self.debug "Not checksumming empty file %s" %
|
179
|
-
@parent[:path]
|
180
|
-
sum = 0
|
181
|
-
else
|
182
|
-
sum = Digest::MD5.hexdigest(text)
|
183
|
-
end
|
167
|
+
File.open(@resource[:path]) { |file|
|
168
|
+
hashfunc = Digest::MD5.new
|
169
|
+
while (!file.eof)
|
170
|
+
readBuf = file.read(512)
|
171
|
+
hashfunc.update(readBuf)
|
172
|
+
if checktype == :md5lite then
|
173
|
+
break
|
174
|
+
end
|
175
|
+
end
|
176
|
+
sum = hashfunc.hexdigest
|
184
177
|
}
|
185
178
|
rescue Errno::EACCES => detail
|
186
179
|
self.notice "Cannot checksum %s: permission denied" %
|
187
|
-
@
|
188
|
-
@
|
180
|
+
@resource[:path]
|
181
|
+
@resource.delete(self.class.name)
|
189
182
|
rescue => detail
|
190
183
|
self.notice "Cannot checksum: %s" %
|
191
184
|
detail
|
192
|
-
@
|
185
|
+
@resource.delete(self.class.name)
|
193
186
|
end
|
194
187
|
end
|
195
188
|
when :timestamp, :mtime:
|
196
|
-
sum = @
|
197
|
-
#sum = File.stat(@
|
189
|
+
sum = @resource.stat.mtime.to_s
|
190
|
+
#sum = File.stat(@resource[:path]).mtime.to_s
|
198
191
|
when :time:
|
199
|
-
sum = @
|
200
|
-
#sum = File.stat(@
|
192
|
+
sum = @resource.stat.ctime.to_s
|
193
|
+
#sum = File.stat(@resource[:path]).ctime.to_s
|
201
194
|
else
|
202
195
|
raise Puppet::Error, "Invalid sum type %s" % checktype
|
203
196
|
end
|
@@ -209,80 +202,75 @@ module Puppet
|
|
209
202
|
# the stored state to reflect the current state, and then kick
|
210
203
|
# off an event to mark any changes.
|
211
204
|
def handlesum
|
212
|
-
|
205
|
+
currentvalue = self.retrieve
|
206
|
+
if currentvalue.nil?
|
213
207
|
raise Puppet::Error, "Checksum state for %s is somehow nil" %
|
214
|
-
@
|
208
|
+
@resource.title
|
215
209
|
end
|
216
210
|
|
217
|
-
if
|
218
|
-
self.
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
end
|
224
|
-
#@parent.debug "%s(%s): after refresh, is '%s'" %
|
225
|
-
# [self.class.name,@parent.name,@is]
|
211
|
+
if self.insync?(currentvalue)
|
212
|
+
self.debug "Checksum is already in sync"
|
213
|
+
return nil
|
214
|
+
end
|
215
|
+
# @resource.debug "%s(%s): after refresh, is '%s'" %
|
216
|
+
# [self.class.name,@resource.name,@is]
|
226
217
|
|
227
218
|
# If we still can't retrieve a checksum, it means that
|
228
219
|
# the file still doesn't exist
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
)
|
237
|
-
end
|
238
|
-
return nil
|
220
|
+
if currentvalue == :absent
|
221
|
+
# if they're copying, then we won't worry about the file
|
222
|
+
# not existing yet
|
223
|
+
unless @resource.property(:source)
|
224
|
+
self.warning("File %s does not exist -- cannot checksum" %
|
225
|
+
@resource[:path]
|
226
|
+
)
|
239
227
|
end
|
228
|
+
return nil
|
240
229
|
end
|
241
|
-
|
230
|
+
|
242
231
|
# If the sums are different, then return an event.
|
243
|
-
if self.updatesum
|
232
|
+
if self.updatesum(currentvalue)
|
244
233
|
return :file_changed
|
245
234
|
else
|
246
235
|
return nil
|
247
236
|
end
|
248
237
|
end
|
249
238
|
|
250
|
-
def insync?
|
251
|
-
@should = [checktype]
|
239
|
+
def insync?(currentvalue)
|
240
|
+
@should = [checktype()]
|
252
241
|
if cache(checktype())
|
253
|
-
return
|
242
|
+
return currentvalue == currentsum()
|
254
243
|
else
|
255
244
|
# If there's no cached sum, then we don't want to generate
|
256
245
|
# an event.
|
257
246
|
return true
|
258
247
|
end
|
259
248
|
end
|
260
|
-
|
249
|
+
|
261
250
|
# Even though they can specify multiple checksums, the insync?
|
262
251
|
# mechanism can really only test against one, so we'll just retrieve
|
263
252
|
# the first specified sum type.
|
264
253
|
def retrieve(usecache = false)
|
265
254
|
# When the 'source' is retrieving, it passes "true" here so
|
266
255
|
# that we aren't reading the file twice in quick succession, yo.
|
267
|
-
|
268
|
-
|
256
|
+
currentvalue = currentsum()
|
257
|
+
if usecache and currentvalue
|
258
|
+
return currentvalue
|
269
259
|
end
|
270
260
|
|
271
261
|
stat = nil
|
272
|
-
unless stat = @
|
273
|
-
|
274
|
-
return
|
262
|
+
unless stat = @resource.stat
|
263
|
+
return :absent
|
275
264
|
end
|
276
265
|
|
277
|
-
if stat.ftype == "link" and @
|
266
|
+
if stat.ftype == "link" and @resource[:links] != :follow
|
278
267
|
self.debug "Not checksumming symlink"
|
279
|
-
|
280
|
-
|
281
|
-
return
|
268
|
+
# @resource.delete(:checksum)
|
269
|
+
return currentvalue
|
282
270
|
end
|
283
271
|
|
284
272
|
# Just use the first allowed check type
|
285
|
-
|
273
|
+
currentvalue = getsum(checktype())
|
286
274
|
|
287
275
|
# If there is no sum defined, then store the current value
|
288
276
|
# into the cache, so that we're not marked as being
|
@@ -290,18 +278,19 @@ module Puppet
|
|
290
278
|
# time we get a sum.
|
291
279
|
unless cache(checktype())
|
292
280
|
# FIXME we should support an updatechecksums-like mechanism
|
293
|
-
self.updatesum
|
281
|
+
self.updatesum(currentvalue)
|
294
282
|
end
|
295
|
-
|
296
|
-
|
283
|
+
|
284
|
+
# @resource.debug "checksum state is %s" % self.is
|
285
|
+
return currentvalue
|
297
286
|
end
|
298
287
|
|
299
288
|
# Store the new sum to the state db.
|
300
|
-
def updatesum
|
289
|
+
def updatesum(newvalue)
|
301
290
|
result = false
|
302
291
|
|
303
|
-
if
|
304
|
-
raise Puppet::Error, "%s has invalid checksum" % @
|
292
|
+
if newvalue.is_a?(Symbol)
|
293
|
+
raise Puppet::Error, "%s has invalid checksum" % @resource.title
|
305
294
|
end
|
306
295
|
|
307
296
|
# if we're replacing, vs. updating
|
@@ -309,32 +298,30 @@ module Puppet
|
|
309
298
|
# unless defined? @should
|
310
299
|
# raise Puppet::Error.new(
|
311
300
|
# ("@should is not initialized for %s, even though we " +
|
312
|
-
# "found a checksum") % @
|
301
|
+
# "found a checksum") % @resource[:path]
|
313
302
|
# )
|
314
303
|
# end
|
315
304
|
|
316
|
-
if
|
305
|
+
if newvalue == sum
|
317
306
|
return false
|
318
307
|
end
|
319
308
|
|
320
|
-
#if cache(self.should) == @is
|
321
|
-
# raise Puppet::Error, "Got told to update same sum twice"
|
322
|
-
#end
|
323
309
|
self.debug "Replacing %s checksum %s with %s" %
|
324
|
-
[@
|
325
|
-
|
310
|
+
[@resource.title, sum, newvalue]
|
311
|
+
# @resource.debug "currentvalue: %s; @should: %s" %
|
312
|
+
# [newvalue,@should]
|
326
313
|
result = true
|
327
314
|
else
|
328
|
-
@
|
315
|
+
@resource.debug "Creating checksum %s" % newvalue
|
329
316
|
result = false
|
330
317
|
end
|
331
318
|
|
332
319
|
# Cache the sum so the log message can be right if possible.
|
333
320
|
@cached = sum
|
334
|
-
cache(checktype(),
|
321
|
+
cache(checktype(), newvalue)
|
335
322
|
return result
|
336
323
|
end
|
337
324
|
end
|
338
325
|
end
|
339
326
|
|
340
|
-
# $Id: checksum.rb
|
327
|
+
# $Id: checksum.rb 2629 2007-06-19 22:18:55Z luke $
|
@@ -20,13 +20,13 @@ module Puppet
|
|
20
20
|
This attribute is especially useful when used with
|
21
21
|
`PuppetTemplating templating`:trac:."
|
22
22
|
|
23
|
-
def change_to_s
|
24
|
-
|
25
|
-
if
|
26
|
-
return "created file with contents %s" %
|
23
|
+
def change_to_s(currentvalue, newvalue)
|
24
|
+
newvalue = "{md5}" + Digest::MD5.hexdigest(newvalue)
|
25
|
+
if currentvalue == :absent
|
26
|
+
return "created file with contents %s" % newvalue
|
27
27
|
else
|
28
|
-
|
29
|
-
return "changed file contents from %s to %s" % [
|
28
|
+
currentvalue = "{md5}" + Digest::MD5.hexdigest(currentvalue)
|
29
|
+
return "changed file contents from %s to %s" % [currentvalue, newvalue]
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -34,43 +34,39 @@ module Puppet
|
|
34
34
|
# but I really don't feel like dealing with the complexity right now.
|
35
35
|
def retrieve
|
36
36
|
stat = nil
|
37
|
-
unless stat = @
|
38
|
-
|
39
|
-
return
|
37
|
+
unless stat = @resource.stat
|
38
|
+
return :absent
|
40
39
|
end
|
41
40
|
|
42
|
-
if stat.ftype == "link" and @
|
43
|
-
|
44
|
-
return
|
41
|
+
if stat.ftype == "link" and @resource[:links] == :ignore
|
42
|
+
return self.should
|
45
43
|
end
|
46
44
|
|
47
45
|
# Don't even try to manage the content on directories
|
48
|
-
if stat.ftype == "directory" and @
|
49
|
-
@
|
50
|
-
return
|
46
|
+
if stat.ftype == "directory" and @resource[:links] == :ignore
|
47
|
+
@resource.delete(:content)
|
48
|
+
return nil
|
51
49
|
end
|
52
50
|
|
53
51
|
begin
|
54
|
-
|
52
|
+
currentvalue = File.read(@resource[:path])
|
53
|
+
return currentvalue
|
55
54
|
rescue => detail
|
56
|
-
@is = nil
|
57
55
|
raise Puppet::Error, "Could not read %s: %s" %
|
58
|
-
[@
|
56
|
+
[@resource.title, detail]
|
59
57
|
end
|
60
58
|
end
|
61
59
|
|
62
60
|
|
63
61
|
# Just write our content out to disk.
|
64
62
|
def sync
|
65
|
-
@
|
63
|
+
return_event = @resource.stat ? :file_changed : :file_created
|
64
|
+
|
65
|
+
@resource.write { |f| f.print self.should }
|
66
66
|
|
67
|
-
|
68
|
-
return :file_created
|
69
|
-
else
|
70
|
-
return :file_changed
|
71
|
-
end
|
67
|
+
return return_event
|
72
68
|
end
|
73
69
|
end
|
74
70
|
end
|
75
71
|
|
76
|
-
# $Id: content.rb
|
72
|
+
# $Id: content.rb 2500 2007-05-09 22:05:32Z luke $
|
@@ -36,18 +36,18 @@ module Puppet
|
|
36
36
|
nodefault
|
37
37
|
|
38
38
|
newvalue(:absent) do
|
39
|
-
File.unlink(@
|
39
|
+
File.unlink(@resource[:path])
|
40
40
|
end
|
41
41
|
|
42
42
|
aliasvalue(:false, :absent)
|
43
43
|
|
44
44
|
newvalue(:file) do
|
45
45
|
# Make sure we're not managing the content some other way
|
46
|
-
if property = (@
|
46
|
+
if property = (@resource.property(:content) || @resource.property(:source))
|
47
47
|
property.sync
|
48
48
|
else
|
49
|
-
@
|
50
|
-
mode = @
|
49
|
+
@resource.write(false) { |f| f.flush }
|
50
|
+
mode = @resource.should(:mode)
|
51
51
|
end
|
52
52
|
return :file_created
|
53
53
|
end
|
@@ -60,30 +60,30 @@ module Puppet
|
|
60
60
|
end
|
61
61
|
|
62
62
|
newvalue(:directory) do
|
63
|
-
mode = @
|
64
|
-
parent = File.dirname(@
|
63
|
+
mode = @resource.should(:mode)
|
64
|
+
parent = File.dirname(@resource[:path])
|
65
65
|
unless FileTest.exists? parent
|
66
66
|
raise Puppet::Error,
|
67
67
|
"Cannot create %s; parent directory %s does not exist" %
|
68
|
-
[@
|
68
|
+
[@resource[:path], parent]
|
69
69
|
end
|
70
|
-
@
|
70
|
+
@resource.write_if_writable(parent) do
|
71
71
|
if mode
|
72
72
|
Puppet::Util.withumask(000) do
|
73
|
-
Dir.mkdir(@
|
73
|
+
Dir.mkdir(@resource[:path],mode)
|
74
74
|
end
|
75
75
|
else
|
76
|
-
Dir.mkdir(@
|
76
|
+
Dir.mkdir(@resource[:path])
|
77
77
|
end
|
78
78
|
end
|
79
|
-
@
|
80
|
-
@
|
79
|
+
@resource.send(:property_fix)
|
80
|
+
@resource.setchecksum
|
81
81
|
return :directory_created
|
82
82
|
end
|
83
83
|
|
84
84
|
|
85
85
|
newvalue(:link) do
|
86
|
-
if property = @
|
86
|
+
if property = @resource.property(:target)
|
87
87
|
property.retrieve
|
88
88
|
|
89
89
|
return property.mklink
|
@@ -103,62 +103,64 @@ module Puppet
|
|
103
103
|
|
104
104
|
return value if value.is_a? Symbol
|
105
105
|
|
106
|
-
@
|
106
|
+
@resource[:target] = value
|
107
107
|
|
108
108
|
return :link
|
109
109
|
end
|
110
110
|
|
111
|
-
def change_to_s
|
112
|
-
if property = (@
|
113
|
-
|
111
|
+
def change_to_s(currentvalue, newvalue)
|
112
|
+
if property = (@resource.property(:content) || @resource.property(:source)) and ! property.insync?(currentvalue)
|
113
|
+
currentvalue = property.retrieve
|
114
|
+
|
115
|
+
return property.change_to_s(property.retrieve, property.should)
|
114
116
|
else
|
115
|
-
super
|
117
|
+
super(currentvalue, newvalue)
|
116
118
|
end
|
117
119
|
end
|
118
120
|
|
119
121
|
# Check that we can actually create anything
|
120
122
|
def check
|
121
|
-
basedir = File.dirname(@
|
123
|
+
basedir = File.dirname(@resource[:path])
|
122
124
|
|
123
125
|
if ! FileTest.exists?(basedir)
|
124
126
|
raise Puppet::Error,
|
125
127
|
"Can not create %s; parent directory does not exist" %
|
126
|
-
@
|
128
|
+
@resource.title
|
127
129
|
elsif ! FileTest.directory?(basedir)
|
128
130
|
raise Puppet::Error,
|
129
131
|
"Can not create %s; %s is not a directory" %
|
130
|
-
[@
|
132
|
+
[@resource.title, dirname]
|
131
133
|
end
|
132
134
|
end
|
133
135
|
|
134
136
|
# We have to treat :present specially, because it works with any
|
135
137
|
# type of file.
|
136
|
-
def insync?
|
138
|
+
def insync?(currentvalue)
|
137
139
|
if self.should == :present
|
138
|
-
if
|
140
|
+
if currentvalue.nil? or currentvalue == :absent
|
139
141
|
return false
|
140
142
|
else
|
141
143
|
return true
|
142
144
|
end
|
143
145
|
else
|
144
|
-
return super
|
146
|
+
return super(currentvalue)
|
145
147
|
end
|
146
148
|
end
|
147
149
|
|
148
150
|
def retrieve
|
149
|
-
if stat = @
|
150
|
-
|
151
|
+
if stat = @resource.stat(false)
|
152
|
+
return stat.ftype.intern
|
151
153
|
else
|
152
154
|
if self.should == :false
|
153
|
-
|
155
|
+
return :false
|
154
156
|
else
|
155
|
-
|
157
|
+
return :absent
|
156
158
|
end
|
157
159
|
end
|
158
160
|
end
|
159
161
|
|
160
162
|
def sync
|
161
|
-
@
|
163
|
+
@resource.remove_existing(self.should)
|
162
164
|
if self.should == :absent
|
163
165
|
return :file_removed
|
164
166
|
end
|
@@ -170,4 +172,4 @@ module Puppet
|
|
170
172
|
end
|
171
173
|
end
|
172
174
|
|
173
|
-
# $Id: ensure.rb
|
175
|
+
# $Id: ensure.rb 2500 2007-05-09 22:05:32Z luke $
|