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.
Files changed (266) hide show
  1. data/CHANGELOG +156 -0
  2. data/README +2 -2
  3. data/Rakefile +6 -6
  4. data/bin/filebucket +212 -0
  5. data/bin/puppet +2 -0
  6. data/bin/puppetca +2 -4
  7. data/bin/puppetd +16 -15
  8. data/bin/puppetdoc +46 -496
  9. data/bin/puppetmasterd +3 -5
  10. data/bin/puppetrun +8 -3
  11. data/bin/ralsh +271 -0
  12. data/conf/redhat/client.init +1 -1
  13. data/conf/redhat/puppet.spec +13 -2
  14. data/conf/solaris/pkginfo +1 -1
  15. data/ext/puppet-test +374 -0
  16. data/install.rb +40 -31
  17. data/lib/puppet.rb +39 -4
  18. data/lib/puppet/config_stores/rest.rb +60 -0
  19. data/lib/puppet/configuration.rb +312 -17
  20. data/lib/puppet/external/event-loop/event-loop.rb +4 -0
  21. data/lib/puppet/external/gratr/rdot.rb +1 -1
  22. data/lib/puppet/fact_stores/yaml.rb +42 -0
  23. data/lib/puppet/feature/base.rb +4 -1
  24. data/lib/puppet/metatype/attributes.rb +20 -43
  25. data/lib/puppet/metatype/container.rb +1 -36
  26. data/lib/puppet/metatype/evaluation.rb +48 -19
  27. data/lib/puppet/metatype/instances.rb +35 -1
  28. data/lib/puppet/metatype/metaparams.rb +23 -19
  29. data/lib/puppet/metatype/providers.rb +25 -38
  30. data/lib/puppet/network/client/ca.rb +8 -5
  31. data/lib/puppet/network/client/master.rb +59 -17
  32. data/lib/puppet/network/handler.rb +18 -1
  33. data/lib/puppet/network/handler/ca.rb +9 -3
  34. data/lib/puppet/network/handler/facts.rb +70 -0
  35. data/lib/puppet/network/handler/filebucket.rb +4 -1
  36. data/lib/puppet/network/handler/fileserver.rb +65 -21
  37. data/lib/puppet/network/handler/master.rb +6 -3
  38. data/lib/puppet/network/handler/report.rb +12 -26
  39. data/lib/puppet/network/handler/resource.rb +14 -2
  40. data/lib/puppet/network/handler/runner.rb +5 -1
  41. data/lib/puppet/network/handler/status.rb +5 -1
  42. data/lib/puppet/network/server/mongrel.rb +4 -4
  43. data/lib/puppet/network/server/webrick.rb +14 -3
  44. data/lib/puppet/parameter.rb +30 -25
  45. data/lib/puppet/parser/ast.rb +1 -6
  46. data/lib/puppet/parser/ast/component.rb +23 -20
  47. data/lib/puppet/parser/ast/hostclass.rb +7 -11
  48. data/lib/puppet/parser/ast/leaf.rb +4 -1
  49. data/lib/puppet/parser/ast/node.rb +6 -8
  50. data/lib/puppet/parser/functions.rb +7 -4
  51. data/lib/puppet/parser/interpreter.rb +155 -205
  52. data/lib/puppet/parser/lexer.rb +35 -2
  53. data/lib/puppet/parser/parser.rb +705 -612
  54. data/lib/puppet/parser/resource.rb +91 -48
  55. data/lib/puppet/parser/resource/param.rb +52 -29
  56. data/lib/puppet/parser/scope.rb +28 -23
  57. data/lib/puppet/pgraph.rb +26 -21
  58. data/lib/puppet/propertychange.rb +12 -12
  59. data/lib/puppet/provider.rb +102 -31
  60. data/lib/puppet/provider/cron/crontab.rb +7 -8
  61. data/lib/puppet/provider/group/groupadd.rb +4 -4
  62. data/lib/puppet/provider/group/pw.rb +3 -3
  63. data/lib/puppet/provider/mount.rb +8 -8
  64. data/lib/puppet/provider/mount/netinfo.rb +5 -5
  65. data/lib/puppet/provider/mount/parsed.rb +2 -2
  66. data/lib/puppet/provider/nameservice.rb +19 -31
  67. data/lib/puppet/provider/nameservice/netinfo.rb +14 -14
  68. data/lib/puppet/provider/nameservice/objectadd.rb +4 -4
  69. data/lib/puppet/provider/nameservice/pw.rb +4 -4
  70. data/lib/puppet/provider/package.rb +31 -0
  71. data/lib/puppet/provider/package/appdmg.rb +118 -0
  72. data/lib/puppet/provider/package/apple.rb +18 -16
  73. data/lib/puppet/provider/package/apt.rb +13 -15
  74. data/lib/puppet/provider/package/aptitude.rb +5 -3
  75. data/lib/puppet/provider/package/aptrpm.rb +9 -11
  76. data/lib/puppet/provider/package/blastwave.rb +9 -9
  77. data/lib/puppet/provider/package/darwinport.rb +12 -11
  78. data/lib/puppet/provider/package/dpkg.rb +20 -12
  79. data/lib/puppet/provider/package/fink.rb +87 -0
  80. data/lib/puppet/provider/package/freebsd.rb +10 -11
  81. data/lib/puppet/provider/package/gem.rb +15 -15
  82. data/lib/puppet/provider/package/openbsd.rb +12 -17
  83. data/lib/puppet/provider/package/pkgdmg.rb +90 -16
  84. data/lib/puppet/provider/package/portage.rb +20 -14
  85. data/lib/puppet/provider/package/ports.rb +15 -13
  86. data/lib/puppet/provider/package/rpm.rb +20 -23
  87. data/lib/puppet/provider/package/rug.rb +6 -8
  88. data/lib/puppet/provider/package/sun.rb +20 -18
  89. data/lib/puppet/provider/package/sunfreeware.rb +2 -2
  90. data/lib/puppet/provider/package/up2date.rb +6 -10
  91. data/lib/puppet/provider/package/urpmi.rb +51 -0
  92. data/lib/puppet/provider/package/yum.rb +15 -13
  93. data/lib/puppet/provider/parsedfile.rb +53 -63
  94. data/lib/puppet/provider/service/base.rb +13 -15
  95. data/lib/puppet/provider/service/debian.rb +4 -4
  96. data/lib/puppet/provider/service/gentoo.rb +4 -4
  97. data/lib/puppet/provider/service/init.rb +22 -15
  98. data/lib/puppet/provider/service/redhat.rb +6 -6
  99. data/lib/puppet/provider/service/smf.rb +6 -6
  100. data/lib/puppet/provider/user/netinfo.rb +5 -5
  101. data/lib/puppet/provider/user/pw.rb +10 -5
  102. data/lib/puppet/provider/user/useradd.rb +9 -14
  103. data/lib/puppet/provider/zone/solaris.rb +80 -45
  104. data/lib/puppet/rails.rb +3 -34
  105. data/lib/puppet/rails/database/schema.rb +45 -24
  106. data/lib/puppet/rails/fact_value.rb +1 -0
  107. data/lib/puppet/rails/host.rb +69 -40
  108. data/lib/puppet/rails/param_name.rb +3 -8
  109. data/lib/puppet/rails/param_value.rb +2 -1
  110. data/lib/puppet/rails/puppet_class.rb +0 -2
  111. data/lib/puppet/rails/puppet_tag.rb +5 -0
  112. data/lib/puppet/rails/resource.rb +41 -17
  113. data/lib/puppet/rails/resource_tag.rb +4 -0
  114. data/lib/puppet/reference/configuration.rb +149 -0
  115. data/lib/puppet/reference/function.rb +13 -0
  116. data/lib/puppet/reference/network.rb +37 -0
  117. data/lib/puppet/reference/providers.rb +118 -0
  118. data/lib/puppet/reference/report.rb +21 -0
  119. data/lib/puppet/reference/type.rb +152 -0
  120. data/lib/puppet/reports/rrdgraph.rb +21 -7
  121. data/lib/puppet/reports/tagmail.rb +4 -1
  122. data/lib/puppet/sslcertificates.rb +1 -49
  123. data/lib/puppet/sslcertificates/ca.rb +2 -79
  124. data/lib/puppet/sslcertificates/inventory.rb +0 -10
  125. data/lib/puppet/transaction.rb +24 -41
  126. data/lib/puppet/transaction/report.rb +27 -1
  127. data/lib/puppet/type.rb +7 -43
  128. data/lib/puppet/type/component.rb +198 -124
  129. data/lib/puppet/type/cron.rb +51 -42
  130. data/lib/puppet/type/exec.rb +20 -19
  131. data/lib/puppet/type/group.rb +6 -55
  132. data/lib/puppet/type/host.rb +16 -37
  133. data/lib/puppet/type/mount.rb +30 -17
  134. data/lib/puppet/type/notify.rb +7 -8
  135. data/lib/puppet/type/package.rb +44 -80
  136. data/lib/puppet/type/pfile.rb +50 -41
  137. data/lib/puppet/type/pfile/checksum.rb +82 -95
  138. data/lib/puppet/type/pfile/content.rb +21 -25
  139. data/lib/puppet/type/pfile/ensure.rb +32 -30
  140. data/lib/puppet/type/pfile/group.rb +21 -26
  141. data/lib/puppet/type/pfile/mode.rb +25 -32
  142. data/lib/puppet/type/pfile/owner.rb +23 -27
  143. data/lib/puppet/type/pfile/source.rb +42 -33
  144. data/lib/puppet/type/pfile/target.rb +20 -18
  145. data/lib/puppet/type/pfile/type.rb +6 -7
  146. data/lib/puppet/type/pfilebucket.rb +3 -3
  147. data/lib/puppet/type/port.rb +5 -7
  148. data/lib/puppet/type/property.rb +58 -61
  149. data/lib/puppet/type/resources.rb +12 -8
  150. data/lib/puppet/type/schedule.rb +8 -8
  151. data/lib/puppet/type/service.rb +26 -33
  152. data/lib/puppet/type/sshkey.rb +6 -7
  153. data/lib/puppet/type/tidy.rb +41 -35
  154. data/lib/puppet/type/user.rb +34 -67
  155. data/lib/puppet/type/yumrepo.rb +27 -12
  156. data/lib/puppet/type/zone.rb +71 -110
  157. data/lib/puppet/util.rb +46 -61
  158. data/lib/puppet/util/autoload.rb +59 -47
  159. data/lib/puppet/util/config.rb +160 -18
  160. data/lib/puppet/util/config_store.rb +61 -0
  161. data/lib/puppet/util/fact_store.rb +60 -0
  162. data/lib/puppet/util/instance_loader.rb +74 -0
  163. data/lib/puppet/util/loadedfile.rb +5 -8
  164. data/lib/puppet/util/metric.rb +17 -25
  165. data/lib/puppet/util/posix.rb +39 -7
  166. data/lib/puppet/util/provider_features.rb +9 -1
  167. data/lib/puppet/util/rails/collection_merger.rb +16 -1
  168. data/lib/puppet/util/reference.rb +189 -0
  169. data/lib/puppet/util/storage.rb +2 -2
  170. data/lib/puppet/util/subclass_loader.rb +9 -2
  171. data/test/language/ast.rb +4 -148
  172. data/test/language/ast/component.rb +10 -1
  173. data/test/language/collector.rb +1 -191
  174. data/test/language/interpreter.rb +284 -327
  175. data/test/language/lexer.rb +13 -1
  176. data/test/language/node.rb +1 -1
  177. data/test/language/parser.rb +17 -4
  178. data/test/language/resource.rb +67 -101
  179. data/test/language/scope.rb +18 -3
  180. data/test/language/snippets.rb +114 -151
  181. data/test/lib/puppettest.rb +13 -0
  182. data/test/lib/puppettest/exetest.rb +7 -0
  183. data/test/lib/puppettest/fakes.rb +39 -28
  184. data/test/lib/puppettest/railstesting.rb +1 -1
  185. data/test/lib/puppettest/support/assertions.rb +2 -2
  186. data/test/lib/puppettest/support/collection.rb +30 -0
  187. data/test/network/client/ca.rb +27 -1
  188. data/test/network/client/client.rb +3 -3
  189. data/test/network/client/master.rb +102 -1
  190. data/test/network/handler/ca.rb +35 -1
  191. data/test/network/handler/facts.rb +112 -0
  192. data/test/network/handler/fileserver.rb +25 -1
  193. data/test/network/handler/handler.rb +2 -2
  194. data/test/network/handler/master.rb +2 -49
  195. data/test/network/handler/resource.rb +5 -6
  196. data/test/network/server/mongrel_test.rb +65 -0
  197. data/test/network/server/webrick.rb +2 -2
  198. data/test/network/xmlrpc/client.rb +2 -1
  199. data/test/network/xmlrpc/processor.rb +2 -1
  200. data/test/other/pgraph.rb +6 -5
  201. data/test/other/propertychange.rb +11 -12
  202. data/test/other/report.rb +44 -27
  203. data/test/other/transactions.rb +17 -16
  204. data/test/puppet/tc_suidmanager.rb +2 -2
  205. data/test/rails/ast.rb +74 -0
  206. data/test/rails/collection.rb +214 -0
  207. data/test/rails/host.rb +49 -24
  208. data/test/rails/interpreter.rb +91 -0
  209. data/test/rails/railsparameter.rb +22 -11
  210. data/test/rails/railsresource.rb +140 -7
  211. data/test/ral/manager/attributes.rb +37 -13
  212. data/test/ral/manager/instances.rb +82 -0
  213. data/test/ral/manager/provider.rb +60 -22
  214. data/test/ral/manager/type.rb +9 -6
  215. data/test/ral/providers/cron/crontab.rb +59 -7
  216. data/test/ral/providers/group.rb +7 -7
  217. data/test/ral/providers/host/netinfo.rb +5 -6
  218. data/test/ral/providers/host/parsed.rb +4 -4
  219. data/test/ral/providers/mount/parsed.rb +11 -6
  220. data/test/ral/providers/nameservice.rb +2 -2
  221. data/test/ral/providers/package.rb +39 -14
  222. data/test/ral/providers/package/apt.rb +72 -3
  223. data/test/ral/providers/package/aptitude.rb +15 -12
  224. data/test/ral/providers/package/aptrpm.rb +3 -3
  225. data/test/ral/providers/package/dpkg.rb +2 -2
  226. data/test/ral/providers/parsedfile.rb +114 -88
  227. data/test/ral/providers/{parsedport.rb → port/parsed.rb} +1 -1
  228. data/test/ral/providers/provider.rb +93 -13
  229. data/test/ral/providers/service.rb +52 -26
  230. data/test/ral/providers/sshkey/parsed.rb +3 -3
  231. data/test/ral/providers/user.rb +19 -20
  232. data/test/ral/providers/user/useradd.rb +1 -5
  233. data/test/ral/types/cron.rb +49 -36
  234. data/test/ral/types/file.rb +38 -35
  235. data/test/ral/types/file/target.rb +4 -4
  236. data/test/ral/types/filesources.rb +24 -22
  237. data/test/ral/types/group.rb +4 -2
  238. data/test/ral/types/host.rb +17 -10
  239. data/test/ral/types/mount.rb +40 -23
  240. data/test/ral/types/package.rb +62 -5
  241. data/test/ral/types/parameter.rb +2 -2
  242. data/test/ral/types/property.rb +27 -20
  243. data/test/ral/types/resources.rb +4 -16
  244. data/test/ral/types/schedule.rb +2 -2
  245. data/test/ral/types/service.rb +2 -3
  246. data/test/ral/types/sshkey.rb +3 -3
  247. data/test/ral/types/tidy.rb +6 -15
  248. data/test/ral/types/user.rb +17 -17
  249. data/test/ral/types/yumrepo.rb +2 -2
  250. data/test/ral/types/zone.rb +71 -87
  251. data/test/util/autoload.rb +6 -21
  252. data/test/util/config.rb +201 -101
  253. data/test/util/fact_store.rb +67 -0
  254. data/test/util/features.rb +9 -6
  255. data/test/util/instance_loader.rb +53 -0
  256. data/test/util/loadedfile.rb +17 -1
  257. data/test/util/metrics.rb +54 -57
  258. data/test/util/posixtest.rb +8 -11
  259. data/test/util/utiltest.rb +31 -2
  260. metadata +520 -492
  261. data/TODO +0 -4
  262. data/lib/puppet/network/client/logger.rb +0 -6
  263. data/lib/puppet/network/handler/logger.rb +0 -52
  264. data/lib/puppet/rails/database/001_add_indexes.rb +0 -38
  265. data/lib/puppet/type/parsedtype.rb +0 -219
  266. data/test/network/handler/logger.rb +0 -183
@@ -22,7 +22,7 @@ module Puppet
22
22
  "The provider can modify user passwords, by accepting a password
23
23
  hash."
24
24
 
25
- newproperty(:ensure) do
25
+ newproperty(:ensure, :parent => Puppet::Property::Ensure) do
26
26
  newvalue(:present, :event => :user_created) do
27
27
  provider.create
28
28
  end
@@ -36,49 +36,30 @@ module Puppet
36
36
  # If they're talking about the thing at all, they generally want to
37
37
  # say it should exist.
38
38
  defaultto do
39
- if @parent.managed?
39
+ if @resource.managed?
40
40
  :present
41
41
  else
42
42
  nil
43
43
  end
44
44
  end
45
45
 
46
- def change_to_s
47
- begin
48
- if @is == :absent
49
- return "created"
50
- elsif self.should == :absent
51
- return "removed"
52
- else
53
- return "%s changed '%s' to '%s'" %
54
- [self.name, self.is_to_s, self.should_to_s]
55
- end
56
- rescue Puppet::Error, Puppet::DevError
57
- raise
58
- rescue => detail
59
- raise Puppet::DevError,
60
- "Could not convert change %s to string: %s" %
61
- [self.name, detail]
62
- end
63
- end
64
-
65
46
  def retrieve
66
47
  if provider.exists?
67
- @is = :present
48
+ return :present
68
49
  else
69
- @is = :absent
50
+ return :absent
70
51
  end
71
52
  end
72
53
 
73
54
  # The default 'sync' method only selects among a list of registered
74
55
  # values.
75
56
  def sync
76
- if self.insync?
77
- self.info "already in sync"
78
- return nil
57
+ # if self.insync?
58
+ # self.info "already in sync"
59
+ # return nil
79
60
  #else
80
61
  #self.info "%s vs %s" % [self.is.inspect, self.should.inspect]
81
- end
62
+ # end
82
63
  unless self.class.values
83
64
  self.devfail "No values defined for %s" %
84
65
  self.class.name
@@ -177,7 +158,7 @@ module Puppet
177
158
  end
178
159
 
179
160
  newproperty(:password, :required_features => :manages_passwords) do
180
- desc "The user's password, in whatever encrypted format the local machine requires."
161
+ desc "The user's password, in whatever encrypted format the local machine requires. Be sure to enclose any value that includes a dollar sign ($) in single quotes (\')."
181
162
  end
182
163
 
183
164
  newproperty(:groups) do
@@ -185,54 +166,52 @@ module Puppet
185
166
  group should not be listed. Multiple groups should be
186
167
  specified as an array."
187
168
 
188
- def should_to_s
169
+ def should_to_s(newvalue)
189
170
  self.should
190
171
  end
191
172
 
192
- def is_to_s
193
- @is.join(",")
173
+ def is_to_s(currentvalue)
174
+ currentvalue.join(",")
194
175
  end
195
176
 
196
177
  # We need to override this because the groups need to
197
178
  # be joined with commas
198
179
  def should
199
- unless defined? @is
200
- retrieve
201
- end
180
+ current_value = retrieve
202
181
 
203
182
  unless defined? @should and @should
204
183
  return nil
205
184
  end
206
185
 
207
- if @parent[:membership] == :inclusive
186
+ if @resource[:membership] == :inclusive
208
187
  return @should.sort.join(",")
209
188
  else
210
189
  members = @should
211
- if @is.is_a?(Array)
212
- members += @is
190
+ if current_value.is_a?(Array)
191
+ members += current_value
213
192
  end
214
193
  return members.uniq.sort.join(",")
215
194
  end
216
195
  end
217
196
 
218
197
  def retrieve
219
- if tmp = provider.groups
220
- @is = tmp.split(",")
198
+ if tmp = provider.groups and tmp != :absent
199
+ return tmp.split(",")
221
200
  else
222
- @is = :absent
201
+ return :absent
223
202
  end
224
203
  end
225
204
 
226
- def insync?
205
+ def insync?(is)
227
206
  unless defined? @should and @should
228
207
  return true
229
208
  end
230
- unless defined? @is and @is
209
+ unless defined? is and is
231
210
  return true
232
211
  end
233
- tmp = @is
234
- if @is.is_a? Array
235
- tmp = @is.sort.join(",")
212
+ tmp = is
213
+ if is.is_a? Array
214
+ tmp = is.sort.join(",")
236
215
  end
237
216
 
238
217
  return tmp == self.should
@@ -343,38 +322,26 @@ module Puppet
343
322
  autos
344
323
  end
345
324
 
346
- def self.list_by_name
347
- users = []
348
- defaultprovider.listbyname do |user|
349
- users << user
350
- end
351
- return users
352
- end
353
-
354
- def self.list
355
- defaultprovider.list
356
-
357
- self.collect do |user|
358
- user
359
- end
360
- end
361
-
362
325
  def retrieve
363
326
  absent = false
364
- properties().each { |property|
327
+ properties().inject({}) { |prophash, property|
328
+ current_value = :absent
329
+
365
330
  if absent
366
- property.is = :absent
331
+ prophash[property] = :absent
367
332
  else
368
- property.retrieve
333
+ current_value = property.retrieve
334
+ prophash[property] = current_value
369
335
  end
370
336
 
371
- if property.name == :ensure and property.is == :absent
337
+ if property.name == :ensure and current_value == :absent
372
338
  absent = true
373
- next
339
+ # next
374
340
  end
341
+ prophash
375
342
  }
376
343
  end
377
344
  end
378
345
  end
379
346
 
380
- # $Id: user.rb 2414 2007-04-25 20:59:00Z luke $
347
+ # $Id: user.rb 2571 2007-06-13 20:01:34Z ajax $
@@ -2,35 +2,34 @@
2
2
 
3
3
  require 'puppet/propertychange'
4
4
  require 'puppet/util/inifile'
5
- require 'puppet/type/parsedtype'
6
5
 
7
6
  module Puppet
8
7
  # A property for one entry in a .ini-style file
9
8
  class IniProperty < Puppet::Property
10
- def insync?
9
+ def insync?(is)
11
10
  # A should property of :absent is the same as nil
12
11
  if is.nil? && (should.nil? || should == :absent)
13
12
  return true
14
13
  end
15
- return super
14
+ return super(is)
16
15
  end
17
16
 
18
17
  def sync
19
- if insync?
18
+ if insync?(retrieve)
20
19
  result = nil
21
20
  else
22
21
  result = set(self.should)
23
22
  if should == :absent
24
- parent.section[inikey] = nil
23
+ resource.section[inikey] = nil
25
24
  else
26
- parent.section[inikey] = should
25
+ resource.section[inikey] = should
27
26
  end
28
27
  end
29
28
  return result
30
29
  end
31
30
 
32
31
  def retrieve
33
- @is = parent.section[inikey]
32
+ return resource.section[inikey]
34
33
  end
35
34
 
36
35
  def inikey
@@ -81,19 +80,19 @@ module Puppet
81
80
  # Where to put files for brand new sections
82
81
  @defaultrepodir = nil
83
82
 
84
- def self.list
83
+ def self.instances
85
84
  l = []
86
85
  check = validproperties
87
86
  clear
88
87
  inifile.each_section do |s|
89
88
  next if s.name == "main"
90
89
  obj = create(:name => s.name, :check => check)
91
- obj.retrieve
90
+ current_values = obj.retrieve
92
91
  obj.eachproperty do |property|
93
- if property.is.nil?
92
+ if current_values[property].nil?
94
93
  obj.delete(property.name)
95
94
  else
96
- property.should = property.is
95
+ property.should = current_values[property]
97
96
  end
98
97
  end
99
98
  obj.delete(:check)
@@ -210,7 +209,7 @@ module Puppet
210
209
  class << changes[-1]
211
210
  def go
212
211
  result = super
213
- self.property.parent.store
212
+ self.property.resource.store
214
213
  return result
215
214
  end
216
215
  end
@@ -332,6 +331,22 @@ module Puppet
332
331
  newvalue(%r{[0-9]+}) { }
333
332
  end
334
333
 
334
+ newproperty(:protect, :parent => Puppet::IniProperty) do
335
+ desc "Enable or disable protection for this repository. Requires
336
+ that the protectbase plugin is installed and enabled.
337
+ #{ABSENT_DOC}"
338
+ newvalue(:absent) { self.should = :absent }
339
+ newvalue(%r{(0|1)}) { }
340
+ end
341
+
342
+ newproperty(:priority, :parent => Puppet::IniProperty) do
343
+ desc "Priority of this repository from 1-99. Requires that
344
+ the priorities plugin is installed and enabled.
345
+ #{ABSENT_DOC}"
346
+ newvalue(:absent) { self.should = :absent }
347
+ newvalue(%r{[1-9][0-9]?}) { }
348
+ end
349
+
335
350
 
336
351
 
337
352
  end
@@ -15,23 +15,25 @@ Puppet::Type.newtype(:zone) do
15
15
  class ZoneMultiConfigProperty < ZoneConfigProperty
16
16
  def configtext
17
17
  list = @should
18
+
19
+ current_value = self.retrieve
18
20
 
19
- unless @is.is_a? Symbol
20
- if @is.is_a? Array
21
- list += @is
21
+ unless current_value.is_a? Symbol
22
+ if current_value.is_a? Array
23
+ list += current_value
22
24
  else
23
- if @is
24
- list << @is
25
+ if current_value
26
+ list << current_value
25
27
  end
26
28
  end
27
29
  end
28
30
 
29
- # Some hackery so we can test whether @is is an array or a symbol
30
- if @is.is_a? Array
31
- tmpis = @is
31
+ # Some hackery so we can test whether current_value is an array or a symbol
32
+ if current_value.is_a? Array
33
+ tmpis = current_value
32
34
  else
33
- if @is
34
- tmpis = [@is]
35
+ if current_value
36
+ tmpis = [current_value]
35
37
  else
36
38
  tmpis = []
37
39
  end
@@ -39,6 +41,7 @@ Puppet::Type.newtype(:zone) do
39
41
 
40
42
  rms = []
41
43
  adds = []
44
+
42
45
  # Collect the modifications to make
43
46
  list.sort.uniq.collect do |obj|
44
47
  # Skip objectories that are configured and should be
@@ -51,16 +54,17 @@ Puppet::Type.newtype(:zone) do
51
54
  end
52
55
  end
53
56
 
57
+
54
58
  # And then perform all of the removals before any of the adds.
55
59
  (rms.collect { |o| rm(o) } + adds.collect { |o| add(o) }).join("\n")
56
60
  end
57
61
 
58
62
  # We want all specified directories to be included.
59
- def insync?
60
- if @is.is_a? Array and @should.is_a? Array
61
- @is.sort == @should.sort
63
+ def insync?(current_value)
64
+ if current_value.is_a? Array and @should.is_a? Array
65
+ current_value.sort == @should.sort
62
66
  else
63
- @is == @should
67
+ current_value == @should
64
68
  end
65
69
  end
66
70
  end
@@ -72,7 +76,14 @@ Puppet::Type.newtype(:zone) do
72
76
  only then can be ``running``. Note also that ``halt`` is currently
73
77
  used to stop zones."
74
78
 
75
- @properties = {}
79
+ @states = {}
80
+
81
+ def self.alias_state(values)
82
+ @state_aliases ||= {}
83
+ values.each do |nick, name|
84
+ @state_aliases[nick] = name
85
+ end
86
+ end
76
87
 
77
88
  def self.newvalue(name, hash)
78
89
  if @parametervalues.is_a? Hash
@@ -81,29 +92,39 @@ Puppet::Type.newtype(:zone) do
81
92
 
82
93
  @parametervalues << name
83
94
 
84
- @properties[name] = hash
95
+ @states[name] = hash
85
96
  hash[:name] = name
86
97
  end
87
98
 
99
+ def self.state_name(name)
100
+ if other = @state_aliases[name]
101
+ other
102
+ else
103
+ name
104
+ end
105
+ end
106
+
88
107
  newvalue :absent, :down => :destroy
89
108
  newvalue :configured, :up => :configure, :down => :uninstall
90
109
  newvalue :installed, :up => :install, :down => :stop
91
110
  newvalue :running, :up => :start
92
111
 
112
+ alias_state :incomplete => :installed, :ready => :installed, :shutting_down => :running
113
+
93
114
  defaultto :running
94
115
 
95
- def self.valueindex(value)
96
- @parametervalues.index(value)
116
+ def self.state_index(value)
117
+ @parametervalues.index(state_name(value))
97
118
  end
98
119
 
99
120
  # Return all of the states between two listed values, exclusive
100
121
  # of the first item.
101
- def self.valueslice(first, second)
122
+ def self.state_sequence(first, second)
102
123
  findex = sindex = nil
103
- unless findex = @parametervalues.index(first)
124
+ unless findex = @parametervalues.index(state_name(first))
104
125
  raise ArgumentError, "'%s' is not a valid zone state" % first
105
126
  end
106
- unless sindex = @parametervalues.index(second)
127
+ unless sindex = @parametervalues.index(state_name(second))
107
128
  raise ArgumentError, "'%s' is not a valid zone state" % first
108
129
  end
109
130
  list = nil
@@ -112,11 +133,11 @@ Puppet::Type.newtype(:zone) do
112
133
  # the range op twice.
113
134
  if findex > sindex
114
135
  list = @parametervalues[sindex..findex].collect do |name|
115
- @properties[name]
136
+ @states[name]
116
137
  end.reverse
117
138
  else
118
139
  list = @parametervalues[findex..sindex].collect do |name|
119
- @properties[name]
140
+ @states[name]
120
141
  end
121
142
  end
122
143
 
@@ -124,27 +145,24 @@ Puppet::Type.newtype(:zone) do
124
145
  list[1..-1]
125
146
  end
126
147
 
127
- def is=(value)
128
- value = value.intern if value.is_a? String
129
- @is = value
148
+ def retrieve
149
+ provider.properties[:ensure]
130
150
  end
131
151
 
132
152
  def sync
133
153
  method = nil
134
154
  if up?
135
- dir = :up
155
+ direction = :up
136
156
  else
137
- dir = :down
157
+ direction = :down
138
158
  end
139
159
 
140
160
  # We need to get the state we're currently in and just call
141
161
  # everything between it and us.
142
- states = self.class.valueslice(self.is, self.should)
143
-
144
- properties.each do |prop|
145
- if method = prop[dir]
162
+ self.class.state_sequence(self.retrieve, self.should).each do |state|
163
+ if method = state[direction]
146
164
  warned = false
147
- while @parent.processing?
165
+ while provider.processing?
148
166
  unless warned
149
167
  info "Waiting for zone to finish processing"
150
168
  warned = true
@@ -154,7 +172,7 @@ Puppet::Type.newtype(:zone) do
154
172
  provider.send(method)
155
173
  else
156
174
  raise Puppet::DevError, "Cannot move %s from %s" %
157
- [dir, st[:name]]
175
+ [direction, st[:name]]
158
176
  end
159
177
  end
160
178
 
@@ -163,7 +181,8 @@ Puppet::Type.newtype(:zone) do
163
181
 
164
182
  # Are we moving up the property tree?
165
183
  def up?
166
- self.class.valueindex(self.is) < self.class.valueindex(self.should)
184
+ current_value = self.retrieve
185
+ self.class.state_index(current_value) < self.class.state_index(self.should)
167
186
  end
168
187
  end
169
188
 
@@ -200,7 +219,7 @@ Puppet::Type.newtype(:zone) do
200
219
  end
201
220
  end
202
221
 
203
- # Add a directory to our list of inherited directories.
222
+ # Add an interface.
204
223
  def add(str)
205
224
  interface, ip = ipsplit(str)
206
225
  "add net
@@ -216,6 +235,7 @@ end
216
235
  return interface, address
217
236
  end
218
237
 
238
+ # Remove an interface.
219
239
  def rm(str)
220
240
  interface, ip = ipsplit(str)
221
241
  # Reality seems to disagree with the documentation here; the docs
@@ -260,7 +280,7 @@ end
260
280
 
261
281
  validate do |value|
262
282
  unless value =~ /^\//
263
- raise ArgumentError, "The zone base must be fully qualified"
283
+ raise ArgumentError, "Inherited filesystems must be fully qualified"
264
284
  end
265
285
  end
266
286
 
@@ -330,7 +350,7 @@ end
330
350
 
331
351
  munge do |value|
332
352
  if value =~ /%s/
333
- value % @parent[:name]
353
+ value % @resource[:name]
334
354
  else
335
355
  value
336
356
  end
@@ -351,92 +371,33 @@ end
351
371
  end
352
372
  end
353
373
 
354
- # Perform all of our configuration steps.
355
- def configure
356
- # If the thing is entirely absent, then we need to create the config.
357
- str = %{create -b
358
- set zonepath=%s
359
- } % self[:path]
360
-
361
- # Then perform all of our configuration steps.
362
- properties().each do |property|
363
- if property.is_a? ZoneConfigProperty and ! property.insync?
364
- str += property.configtext + "\n"
365
- end
366
- end
367
-
368
- str += "commit\n"
369
- provider.setconfig(str)
370
- end
371
-
372
- # We need a way to test whether a zone is in process. Our 'ensure'
373
- # property models the static states, but we need to handle the temporary ones.
374
- def processing?
375
- if hash = provider.statushash()
376
- case hash[:ensure]
377
- when "incomplete", "ready", "shutting_down"
378
- true
379
- else
380
- false
381
- end
382
- else
383
- false
384
- end
385
- end
386
-
387
374
  def retrieve
388
- if hash = provider.statushash()
389
- setstatus(hash)
390
-
391
- # Now retrieve the configuration itself and set appropriately.
392
- config2status(provider.getconfig())
375
+ provider.flush
376
+ if hash = provider.properties() and hash[:ensure] != :absent
377
+ result = setstatus(hash)
378
+ result
393
379
  else
394
- properties().each do |pr|
395
- pr.is = :absent
396
- end
380
+ return currentpropvalues(:absent)
397
381
  end
398
382
  end
399
383
 
400
384
  # Take the results of a listing and set everything appropriately.
401
385
  def setstatus(hash)
386
+ prophash = {}
402
387
  hash.each do |param, value|
403
388
  next if param == :name
404
389
  case self.class.attrtype(param)
405
- when :pr:
406
- self.is = [param, value]
390
+ when :property:
391
+ # Only try to provide values for the properties we're managing
392
+ if prop = self.property(param)
393
+ prophash[prop] = value
394
+ end
407
395
  else
408
396
  self[param] = value
409
397
  end
410
398
  end
411
- end
412
-
413
- private
414
- # Turn the results of getconfig into status information.
415
- def config2status(config)
416
- config.each do |name, value|
417
- case name
418
- when :autoboot:
419
- self.is = [:autoboot, value.intern]
420
- when :zonepath:
421
- # Nothing; this is set in the zoneadm list command
422
- when :pool:
423
- self.is = [:pool, value]
424
- when :shares:
425
- self.is = [:shares, value]
426
- when "inherit-pkg-dir":
427
- dirs = value.collect do |hash|
428
- hash[:dir]
429
- end
430
-
431
- self.is = [:inherit, dirs]
432
- when "net":
433
- vals = value.collect do |hash|
434
- "%s:%s" % [hash[:physical], hash[:address]]
435
- end
436
- self.is = [:ip, vals]
437
- end
438
- end
399
+ return prophash
439
400
  end
440
401
  end
441
402
 
442
- # $Id: zone.rb 2408 2007-04-24 02:41:16Z luke $
403
+ # $Id: zone.rb 2576 2007-06-14 03:39:00Z luke $