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.

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
@@ -74,6 +74,10 @@ class EventLoop
74
74
 
75
75
  @notify_src, @notify_snk = IO.pipe
76
76
 
77
+ # prevent file descriptor leaks
78
+ @notify_src.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
79
+ @notify_snk.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
80
+
77
81
  @notify_src.will_block = false
78
82
  @notify_snk.will_block = false
79
83
 
@@ -1,6 +1,6 @@
1
1
  # rdot.rb
2
2
  #
3
- # $Id: rdot.rb 2119 2007-01-30 05:27:56Z luke $
3
+ # $Id: rdot.rb 1892 2006-11-17 20:15:23Z luke $
4
4
  #
5
5
  # This is a modified version of dot.rb from Dave Thomas's rdoc project. I [Horst Duchene]
6
6
  # renamed it to rdot.rb to avoid collision with an installed rdoc/dot.
@@ -0,0 +1,42 @@
1
+ Puppet::Util::FactStore.newstore(:yaml) do
2
+ desc "Store client facts as flat files, serialized using YAML."
3
+
4
+ # Get a client's facts.
5
+ def get(node)
6
+ file = path(node)
7
+
8
+ return nil unless FileTest.exists?(file)
9
+
10
+ begin
11
+ facts = YAML::load(File.read(file))
12
+ rescue => detail
13
+ Puppet.err "Could not load facts for %s: %s" % [node, detail]
14
+ end
15
+ facts
16
+ end
17
+
18
+ def initialize
19
+ Puppet.config.use(:yamlfacts)
20
+ end
21
+
22
+ # Store the facts to disk.
23
+ def set(node, facts)
24
+ File.open(path(node), "w", 0600) do |f|
25
+ begin
26
+ f.print YAML::dump(facts)
27
+ rescue => detail
28
+ Puppet.err "Could not write facts for %s: %s" % [node, detail]
29
+ end
30
+ end
31
+ nil
32
+ end
33
+
34
+ private
35
+
36
+ # Return the path to a given node's file.
37
+ def path(node)
38
+ File.join(Puppet[:yamlfactdir], node + ".yaml")
39
+ end
40
+ end
41
+
42
+ # $Id: yaml.rb 2457 2007-05-03 05:24:13Z luke $
@@ -17,4 +17,7 @@ Puppet.features.add(:libshadow, :libs => ["shadow"])
17
17
  # We're running as root.
18
18
  Puppet.features.add(:root) { require 'puppet/util/suidmanager'; Puppet::Util::SUIDManager.uid == 0 }
19
19
 
20
- # $Id: base.rb 2441 2007-04-30 19:41:18Z luke $
20
+ # We've got mongrel available
21
+ Puppet.features.add(:mongrel, :libs => %w{rubygems mongrel puppet/network/server/mongrel})
22
+
23
+ # $Id: base.rb 2577 2007-06-14 03:39:23Z luke $
@@ -307,9 +307,7 @@ class Puppet::Type
307
307
  # method on the class.
308
308
  if options[:retrieve]
309
309
  define_method(:retrieve) do
310
- instance_variable_set(
311
- "@is", provider.send(options[:retrieve])
312
- )
310
+ provider.send(options[:retrieve])
313
311
  end
314
312
  end
315
313
 
@@ -415,8 +413,8 @@ class Puppet::Type
415
413
  # This duplication is here because it might be a transobject.
416
414
  hash = oldhash.dup.to_hash
417
415
 
418
- if hash.include?(:parent)
419
- hash.delete(:parent)
416
+ if hash.include?(:resource)
417
+ hash.delete(:resource)
420
418
  end
421
419
  namevar = self.class.namevar
422
420
 
@@ -458,22 +456,16 @@ class Puppet::Type
458
456
  obj = @parameters[:ensure] and obj.should == :absent
459
457
  end
460
458
 
461
- # Allow an outside party to specify the 'is' value for a property. The
462
- # arguments are an array because you can't use parens with 'is=' calls.
463
- # Most classes won't use this.
464
- def is=(ary)
465
- param, value = ary
466
- param = attr_alias(param)
467
- if self.class.validproperty?(param)
468
- unless prop = @parameters[param]
469
- prop = self.newattr(param)
470
- end
471
- prop.is = value
472
- else
473
- self[param] = value
459
+ # Create a new property if it is valid but doesn't exist
460
+ # Returns: true if a new parameter was added, false otherwise
461
+ def add_property_parameter(prop_name)
462
+ if self.class.validproperty?(prop_name) && !@parameters[prop_name]
463
+ self.newattr(prop_name)
464
+ return true
474
465
  end
466
+ return false
475
467
  end
476
-
468
+
477
469
  # abstract accessing parameters and properties, and normalize
478
470
  # access to always be symbols, not strings
479
471
  # This returns a value, not an object. It returns the 'is'
@@ -491,8 +483,10 @@ class Puppet::Type
491
483
  end
492
484
 
493
485
  if obj = @parameters[name]
486
+ # We throw a failure here, because this method is too
487
+ # ambiguous when used with properties.
494
488
  if obj.is_a?(Puppet::Type::Property)
495
- return obj.is
489
+ fail "[] called on a property"
496
490
  else
497
491
  return obj.value
498
492
  end
@@ -532,17 +526,10 @@ class Puppet::Type
532
526
  # when an error has been encountered
533
527
  def delete(attr)
534
528
  attr = symbolize(attr)
535
- case attr
536
- when Puppet::Type
537
- if @children.include?(attr)
538
- @children.delete(attr)
539
- end
529
+ if @parameters.has_key?(attr)
530
+ @parameters.delete(attr)
540
531
  else
541
- if @parameters.has_key?(attr)
542
- @parameters.delete(attr)
543
- else
544
- raise Puppet::DevError.new("Undefined attribute '#{attr}' in #{self}")
545
- end
532
+ raise Puppet::DevError.new("Undefined attribute '#{attr}' in #{self}")
546
533
  end
547
534
  end
548
535
 
@@ -554,16 +541,6 @@ class Puppet::Type
554
541
  }
555
542
  end
556
543
 
557
- # retrieve the 'is' value for a specified property
558
- def is(name)
559
- name = attr_alias(name)
560
- if prop = @parameters[name] and prop.is_a?(Puppet::Type::Property)
561
- return prop.is
562
- else
563
- return nil
564
- end
565
- end
566
-
567
544
  # retrieve the 'should' value for a specified property
568
545
  def should(name)
569
546
  name = attr_alias(name)
@@ -598,9 +575,9 @@ class Puppet::Type
598
575
  return nil
599
576
  end
600
577
 
601
- # Add parent information at creation time, so it's available
578
+ # Add resource information at creation time, so it's available
602
579
  # during validation.
603
- options[:parent] = self
580
+ options[:resource] = self
604
581
  begin
605
582
  # make sure the parameter doesn't have any errors
606
583
  return @parameters[name] = klass.new(options)
@@ -716,4 +693,4 @@ class Puppet::Type
716
693
  end
717
694
  end
718
695
 
719
- # $Id: attributes.rb 2444 2007-05-01 03:14:09Z luke $
696
+ # $Id: attributes.rb 2513 2007-05-14 17:27:56Z luke $
@@ -1,5 +1,4 @@
1
1
  class Puppet::Type
2
- attr_accessor :children
3
2
 
4
3
  # this is a retarded hack method to get around the difference between
5
4
  # component children and file children
@@ -31,48 +30,14 @@ class Puppet::Type
31
30
  elsif defined? @parent and @parent.parentof?(child)
32
31
  debug "My parent is parent of child"
33
32
  return true
34
- elsif @children.include?(child)
35
- debug "child is already in children array"
36
- return true
37
33
  else
38
34
  return false
39
35
  end
40
36
  end
41
37
 
42
- def push(*childs)
43
- unless defined? @children
44
- @children = []
45
- end
46
- childs.each { |child|
47
- # Make sure we don't have any loops here.
48
- if parentof?(child)
49
- devfail "Already the parent of %s[%s]" % [child.class.name, child.title]
50
- end
51
- unless child.is_a?(Puppet::Element)
52
- self.debug "Got object of type %s" % child.class
53
- self.devfail(
54
- "Containers can only contain Puppet::Elements, not %s" %
55
- child.class
56
- )
57
- end
58
- @children.push(child)
59
- child.parent = self
60
- }
61
- end
62
-
63
38
  # Remove an object. The argument determines whether the object's
64
39
  # subscriptions get eliminated, too.
65
40
  def remove(rmdeps = true)
66
- # Our children remove themselves from our @children array (else the object
67
- # we called this on at the top would not be removed), so we duplicate the
68
- # array and iterate over that. If we don't do this, only half of the
69
- # objects get removed.
70
- @children.dup.each { |child|
71
- child.remove(rmdeps)
72
- }
73
-
74
- @children.clear
75
-
76
41
  # This is hackish (mmm, cut and paste), but it works for now, and it's
77
42
  # better than warnings.
78
43
  @parameters.each do |name, obj|
@@ -91,4 +56,4 @@ class Puppet::Type
91
56
  end
92
57
  end
93
58
 
94
- # $Id: container.rb 2169 2007-02-07 06:47:10Z luke $
59
+ # $Id: container.rb 2499 2007-05-09 21:30:44Z luke $
@@ -20,9 +20,9 @@ class Puppet::Type
20
20
  # it's important that we call retrieve() on the type instance,
21
21
  # not directly on the property, because it allows the type to override
22
22
  # the method, like pfile does
23
- self.retrieve
23
+ currentvalues = self.retrieve
24
24
 
25
- changes = propertychanges().flatten
25
+ changes = propertychanges(currentvalues).flatten
26
26
 
27
27
  # now record how many changes we've resulted in
28
28
  if changes.length > 0
@@ -44,19 +44,32 @@ class Puppet::Type
44
44
  # if all contained objects are in sync, then we're in sync
45
45
  # FIXME I don't think this is used on the type instances any more,
46
46
  # it's really only used for testing
47
- def insync?
47
+ def insync?(is)
48
48
  insync = true
49
-
49
+
50
50
  if property = @parameters[:ensure]
51
- if property.insync? and property.should == :absent
51
+ unless is.include? property
52
+ raise Puppet::DevError,
53
+ "The is value is not in the is array for '%s'" %
54
+ [property.name]
55
+ end
56
+ ensureis = is[property]
57
+ if property.insync?(ensureis) and property.should == :absent
52
58
  return true
53
59
  end
54
60
  end
55
61
 
56
62
  properties.each { |property|
57
- unless property.insync?
63
+ unless is.include? property
64
+ raise Puppet::DevError,
65
+ "The is value is not in the is array for '%s'" %
66
+ [property.name]
67
+ end
68
+
69
+ propis = is[property]
70
+ unless property.insync?(propis)
58
71
  property.debug("Not in sync: %s vs %s" %
59
- [property.is.inspect, property.should.inspect])
72
+ [propis.inspect, property.should.inspect])
60
73
  insync = false
61
74
  #else
62
75
  # property.debug("In sync")
@@ -66,28 +79,40 @@ class Puppet::Type
66
79
  #self.debug("%s sync status is %s" % [self,insync])
67
80
  return insync
68
81
  end
69
-
82
+
70
83
  # retrieve the current value of all contained properties
71
84
  def retrieve
85
+ return currentpropvalues
86
+ end
87
+
88
+ # get a hash of the current properties.
89
+ def currentpropvalues(override_value = nil)
72
90
  # it's important to use the method here, as it follows the order
73
91
  # in which they're defined in the object
74
- properties().each { |property|
75
- property.retrieve
76
- }
92
+ return properties().inject({}) { | prophash, property|
93
+ prophash[property] = override_value.nil? ?
94
+ property.retrieve :
95
+ override_value
96
+ prophash
97
+ }
77
98
  end
78
-
99
+
79
100
  # Retrieve the changes associated with all of the properties.
80
- def propertychanges
101
+ def propertychanges(currentvalues)
81
102
  # If we are changing the existence of the object, then none of
82
103
  # the other properties matter.
83
104
  changes = []
84
- if @parameters.include?(:ensure) and ! @parameters[:ensure].insync?
105
+ ensureparam = @parameters[:ensure]
106
+ if @parameters.include?(:ensure) && !currentvalues.include?(ensureparam)
107
+ raise Puppet::DevError, "Parameter ensure defined but missing from current values"
108
+ end
109
+ if @parameters.include?(:ensure) and ! ensureparam.insync?(currentvalues[ensureparam])
85
110
  # self.info "ensuring %s from %s" %
86
111
  # [@parameters[:ensure].should, @parameters[:ensure].is]
87
- changes = [Puppet::PropertyChange.new(@parameters[:ensure])]
112
+ changes << Puppet::PropertyChange.new(ensureparam, currentvalues[ensureparam])
88
113
  # Else, if the 'ensure' property is correctly absent, then do
89
114
  # nothing
90
- elsif @parameters.include?(:ensure) and @parameters[:ensure].is == :absent
115
+ elsif @parameters.include?(:ensure) and currentvalues[ensureparam] == :absent
91
116
  # self.info "Object is correctly absent"
92
117
  return []
93
118
  else
@@ -98,9 +123,13 @@ class Puppet::Type
98
123
  # self.info "no ensure property"
99
124
  # end
100
125
  changes = properties().find_all { |property|
101
- ! property.insync?
126
+ unless currentvalues.include?(property)
127
+ raise Puppet::DevError, "Property %s does not have a current value",
128
+ [property.name]
129
+ end
130
+ ! property.insync?(currentvalues[property])
102
131
  }.collect { |property|
103
- Puppet::PropertyChange.new(property)
132
+ Puppet::PropertyChange.new(property, currentvalues[property])
104
133
  }
105
134
  end
106
135
 
@@ -115,4 +144,4 @@ class Puppet::Type
115
144
  end
116
145
  end
117
146
 
118
- # $Id: evaluation.rb 2275 2007-03-08 21:18:43Z luke $
147
+ # $Id: evaluation.rb 2488 2007-05-09 12:30:03Z ballman $
@@ -248,6 +248,40 @@ class Puppet::Type
248
248
  return trans
249
249
  end
250
250
 
251
+ # Retrieve all known instances. Either requires providers or must be overridden.
252
+ def self.instances
253
+ unless defined?(@providers) and ! @providers.empty?
254
+ raise Puppet::DevError, "%s has no providers and has not overridden 'instances'" % self.name
255
+ end
256
+
257
+ # Put the default provider first, then the rest of the suitable providers.
258
+ packages = {}
259
+ providers_by_source.collect do |provider|
260
+ provider.instances.collect do |instance|
261
+ if other = packages[instance.name]
262
+ Puppet.warning "Package %s found in both %s and %s; skipping the %s version" %
263
+ [instance.name, other.class.name, instance.class.name, instance.class.name]
264
+ next
265
+ end
266
+ packages[instance.name] = instance
267
+
268
+ create(:name => instance.name, :provider => instance, :check => :all)
269
+ end
270
+ end.flatten.compact
271
+ end
272
+
273
+ # Return a list of one suitable provider per source, with the default provider first.
274
+ def self.providers_by_source
275
+ # Put the default provider first, then the rest of the suitable providers.
276
+ sources = []
277
+ [defaultprovider, suitableprovider].flatten.uniq.collect do |provider|
278
+ next if sources.include?(provider.source)
279
+
280
+ sources << provider.source
281
+ provider
282
+ end.compact
283
+ end
284
+
251
285
  # Create the path for logging and such.
252
286
  def pathbuilder
253
287
  if defined? @parent and @parent
@@ -258,4 +292,4 @@ class Puppet::Type
258
292
  end
259
293
  end
260
294
 
261
- # $Id: instances.rb 1977 2006-12-28 06:49:03Z luke $
295
+ # $Id: instances.rb 2555 2007-06-08 17:20:00Z luke $
@@ -16,8 +16,8 @@ class Puppet::Type
16
16
  newvalues(:true, :false)
17
17
  munge do |value|
18
18
  case value
19
- when true, :true, "true": @parent.noop = true
20
- when false, :false, "false": @parent.noop = false
19
+ when true, :true, "true": @resource.noop = true
20
+ when false, :false, "false": @resource.noop = false
21
21
  end
22
22
  end
23
23
  end
@@ -59,7 +59,7 @@ class Puppet::Type
59
59
  munge do |args|
60
60
  # If they've specified all, collect all known properties
61
61
  if args == :all
62
- args = @parent.class.properties.collect do |property|
62
+ args = @resource.class.properties.collect do |property|
63
63
  property.name
64
64
  end
65
65
  end
@@ -68,7 +68,7 @@ class Puppet::Type
68
68
  args = [args]
69
69
  end
70
70
 
71
- unless defined? @parent
71
+ unless defined? @resource
72
72
  self.devfail "No parent for %s, %s?" %
73
73
  [self.class, self.name]
74
74
  end
@@ -77,14 +77,18 @@ class Puppet::Type
77
77
  unless property.is_a?(Symbol)
78
78
  property = property.intern
79
79
  end
80
- next if @parent.propertydefined?(property)
80
+ next if @resource.propertydefined?(property)
81
81
 
82
- unless propertyklass = @parent.class.validproperty?(property)
83
- raise Puppet::Error, "%s is not a valid attribute for %s" %
84
- [property, self.class.name]
82
+ unless propertyklass = @resource.class.validproperty?(property)
83
+ if @resource.class.validattr?(property)
84
+ next
85
+ else
86
+ raise Puppet::Error, "%s is not a valid attribute for %s" %
87
+ [property, self.class.name]
88
+ end
85
89
  end
86
90
  next unless propertyklass.checkable?
87
- @parent.newattr(property)
91
+ @resource.newattr(property)
88
92
  }
89
93
  end
90
94
  end
@@ -191,20 +195,20 @@ class Puppet::Type
191
195
  unless aliases.is_a?(Array)
192
196
  aliases = [aliases]
193
197
  end
194
- @parent.info "Adding aliases %s" % aliases.collect { |a|
198
+ @resource.info "Adding aliases %s" % aliases.collect { |a|
195
199
  a.inspect
196
200
  }.join(", ")
197
201
  aliases.each do |other|
198
- if obj = @parent.class[other]
199
- unless obj == @parent
202
+ if obj = @resource.class[other]
203
+ unless obj == @resource
200
204
  self.fail(
201
205
  "%s can not create alias %s: object already exists" %
202
- [@parent.title, other]
206
+ [@resource.title, other]
203
207
  )
204
208
  end
205
209
  next
206
210
  end
207
- @parent.class.alias(other, @parent)
211
+ @resource.class.alias(other, @resource)
208
212
  end
209
213
  end
210
214
  end
@@ -227,7 +231,7 @@ class Puppet::Type
227
231
  tags = [tags] unless tags.is_a? Array
228
232
 
229
233
  tags.each do |tag|
230
- @parent.tag(tag)
234
+ @resource.tag(tag)
231
235
  end
232
236
  end
233
237
  end
@@ -244,7 +248,7 @@ class Puppet::Type
244
248
  end
245
249
 
246
250
  def munge(rels)
247
- @parent.store_relationship(self.class.name, rels)
251
+ @resource.store_relationship(self.class.name, rels)
248
252
  end
249
253
 
250
254
  # Create edges from each of our relationships. :in
@@ -278,9 +282,9 @@ class Puppet::Type
278
282
  # for futher info on this.
279
283
  if self.class.direction == :in
280
284
  source = object
281
- target = @parent
285
+ target = @resource
282
286
  else
283
- source = @parent
287
+ source = @resource
284
288
  target = object
285
289
  end
286
290
 
@@ -406,4 +410,4 @@ class Puppet::Type
406
410
  end
407
411
  end # Puppet::Type
408
412
 
409
- # $Id: metaparams.rb 2410 2007-04-24 06:39:22Z luke $
413
+ # $Id: metaparams.rb 2591 2007-06-15 19:49:26Z luke $