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
@@ -8,6 +8,9 @@ class Puppet::Network::Handler # :nodoc:
8
8
  # to the client. Alternatively, accept an md5 sum and return the
9
9
  # associated content.
10
10
  class FileBucket < Handler
11
+ desc "The interface to Puppet's FileBucket system. Can be used to store
12
+ files in and retrieve files from a filebucket."
13
+
11
14
  @interface = XMLRPC::Service::Interface.new("puppetbucket") { |iface|
12
15
  iface.add_method("string addfile(string, string)")
13
16
  iface.add_method("string getfile(string)")
@@ -177,4 +180,4 @@ class Puppet::Network::Handler # :nodoc:
177
180
  end
178
181
  end
179
182
 
180
- # $Id: filebucket.rb 2348 2007-03-24 21:16:20Z luke $
183
+ # $Id: filebucket.rb 2479 2007-05-07 22:29:44Z luke $
@@ -3,10 +3,14 @@ require 'puppet/network/authstore'
3
3
  require 'webrick/httpstatus'
4
4
  require 'cgi'
5
5
  require 'delegate'
6
+ require 'sync'
6
7
 
7
8
  class Puppet::Network::Handler
9
+ AuthStoreError = Puppet::AuthStoreError
8
10
  class FileServerError < Puppet::Error; end
9
11
  class FileServer < Handler
12
+ desc "The interface to Puppet's fileserving abilities."
13
+
10
14
  attr_accessor :local
11
15
 
12
16
  CHECKPARAMS = [:mode, :type, :owner, :group, :checksum]
@@ -40,20 +44,18 @@ class Puppet::Network::Handler
40
44
  end
41
45
 
42
46
  obj = nil
43
- unless obj = mount.check(path, links)
47
+ unless obj = mount.getfileobject(path, links)
44
48
  return ""
45
49
  end
46
50
 
51
+ currentvalues = mount.check(obj)
52
+
47
53
  desc = []
48
54
  CHECKPARAMS.each { |check|
49
- if property = obj.property(check)
50
- unless property.is
51
- mount.debug "Manually retrieving info for %s" % check
52
- property.retrieve
53
- end
54
- desc << property.is
55
+ if value = currentvalues[check]
56
+ desc << value
55
57
  else
56
- if check == "checksum" and obj.property(:type).is == "file"
58
+ if check == "checksum" and currentvalues[:type] == "file"
57
59
  mount.notice "File %s does not have data for %s" %
58
60
  [obj.name, check]
59
61
  end
@@ -96,6 +98,7 @@ class Puppet::Network::Handler
96
98
  self.mount(dir, name)
97
99
  end
98
100
  }
101
+ self.mount(nil, MODULES)
99
102
  else
100
103
  @passedconfig = false
101
104
  readconfig(false) # don't check the file the first time.
@@ -420,31 +423,62 @@ class Puppet::Network::Handler
420
423
  class Mount < Puppet::Network::AuthStore
421
424
  attr_reader :name
422
425
 
426
+ @@syncs = {}
427
+
428
+ @@files = {}
429
+
423
430
  Puppet::Util.logmethods(self, true)
424
431
 
425
- # Run 'retrieve' on a file. This gets the actual parameters, so
426
- # we can pass them to the client.
427
- def check(dir, links)
432
+ def getfileobject(dir, links)
428
433
  unless FileTest.exists?(dir)
429
434
  self.notice "File source %s does not exist" % dir
430
435
  return nil
431
436
  end
432
437
 
433
- obj = fileobj(dir, links)
434
-
435
- # FIXME we should really have a timeout here -- we don't
436
- # want to actually check on every connection, maybe no more
437
- # than every 60 seconds or something. It'd be nice if we
438
- # could use the builtin scheduling to do this.
439
-
438
+ return fileobj(dir, links)
439
+ end
440
+
441
+ # Run 'retrieve' on a file. This gets the actual parameters, so
442
+ # we can pass them to the client.
443
+ def check(obj)
440
444
  # Retrieval is enough here, because we don't want to cache
441
445
  # any information in the state file, and we don't want to generate
442
446
  # any state changes or anything. We don't even need to sync
443
447
  # the checksum, because we're always going to hit the disk
444
448
  # directly.
445
- obj.retrieve
446
449
 
447
- return obj
450
+ # We're now caching file data, using the LoadedFile to check the
451
+ # disk no more frequently than the :filetimeout.
452
+ path = obj[:path]
453
+ sync = sync(path)
454
+ unless data = @@files[path]
455
+ data = {}
456
+ sync.synchronize(Sync::EX) do
457
+ @@files[path] = data
458
+ data[:loaded_obj] = Puppet::Util::LoadedFile.new(path)
459
+ Puppet.notice "Initializing values for %s" % path
460
+ data[:values] = properties(obj)
461
+ return data[:values]
462
+ end
463
+ end
464
+
465
+ changed = nil
466
+ sync.synchronize(Sync::SH) do
467
+ changed = data[:loaded_obj].changed?
468
+ end
469
+
470
+ if changed
471
+ sync.synchronize(Sync::EX) do
472
+ Puppet.notice "Getting values for %s" % path
473
+ data[:values] = properties(obj)
474
+ return data[:values]
475
+ end
476
+ else
477
+ sync.synchronize(Sync::SH) do
478
+ Puppet.info "Using cached values for %s" % path
479
+ return data[:values]
480
+ end
481
+ end
448
482
  end
449
483
 
450
484
  # Create a map for a specific client.
@@ -576,6 +610,11 @@ class Puppet::Network::Handler
576
610
  @path = path
577
611
  end
578
612
 
613
+ # Return the current values for the object.
614
+ def properties(obj)
615
+ obj.retrieve.inject({}) { |props, ary| props[ary[0].name] = ary[1]; props }
616
+ end
617
+
579
618
  # Retrieve a specific directory relative to a mount point.
580
619
  # If they pass in a client, then expand as necessary.
581
620
  def subdir(dir = nil, client = nil)
@@ -590,6 +629,11 @@ class Puppet::Network::Handler
590
629
  dirname
591
630
  end
592
631
 
632
+ def sync(path)
633
+ @@syncs[path] ||= Sync.new
634
+ @@syncs[path]
635
+ end
636
+
593
637
  def to_s
594
638
  "mount[#{@name}]"
595
639
  end
@@ -616,4 +660,4 @@ class Puppet::Network::Handler
616
660
  end
617
661
  end
618
662
 
619
- # $Id: fileserver.rb 2434 2007-04-30 15:57:57Z luke $
663
+ # $Id: fileserver.rb 2629 2007-06-19 22:18:55Z luke $
@@ -8,6 +8,9 @@ require 'yaml'
8
8
  class Puppet::Network::Handler
9
9
  class MasterError < Puppet::Error; end
10
10
  class Master < Handler
11
+ desc "Puppet's configuration interface. Used for all interactions related to
12
+ generating client configurations."
13
+
11
14
  include Puppet::Util
12
15
 
13
16
  attr_accessor :ast, :local
@@ -68,7 +71,7 @@ class Puppet::Network::Handler
68
71
 
69
72
  host = Puppet::Rails::Host.find_or_create_by_name(client)
70
73
  host.last_freshcheck = Time.now
71
- if clientip and (! host.ip or host.ip == "")
74
+ if clientip and (! host.ip or host.ip == "" or host.ip == "NULL")
72
75
  host.ip = clientip
73
76
  end
74
77
  host.save
@@ -200,7 +203,7 @@ class Puppet::Network::Handler
200
203
  when "marshal":
201
204
  str = Marshal::dump(retobjects)
202
205
  when "yaml":
203
- str = YAML.dump(retobjects)
206
+ str = retobjects.to_yaml(:UseBlock => true)
204
207
  else
205
208
  raise XMLRPC::FaultException.new(
206
209
  1, "Unavailable config format %s" % format
@@ -220,4 +223,4 @@ class Puppet::Network::Handler
220
223
  end
221
224
  end
222
225
 
223
- # $Id: master.rb 2334 2007-03-19 23:04:32Z luke $
226
+ # $Id: master.rb 2616 2007-06-18 21:03:18Z luke $
@@ -1,7 +1,12 @@
1
+ require 'puppet/util/instance_loader'
2
+
1
3
  # A simple server for triggering a new run on a Puppet client.
2
4
  class Puppet::Network::Handler
3
5
  class Report < Handler
6
+ desc "Accepts a Puppet transaction report and processes it."
7
+
4
8
  extend Puppet::Util::ClassGen
9
+ extend Puppet::Util::InstanceLoader
5
10
 
6
11
  module ReportBase
7
12
  include Puppet::Util::Docs
@@ -20,8 +25,8 @@ class Puppet::Network::Handler
20
25
  iface.add_method("string report(array)")
21
26
  }
22
27
 
23
- @reports = {}
24
- @reportloader = Puppet::Util::Autoload.new(self, "puppet/reports")
28
+ # Set up autoloading and retrieving of reports.
29
+ autoload :report, 'puppet/reports'
25
30
 
26
31
  class << self
27
32
  attr_reader :hooks
@@ -31,7 +36,7 @@ class Puppet::Network::Handler
31
36
  def self.newreport(name, options = {}, &block)
32
37
  name = symbolize(name)
33
38
 
34
- mod = genmodule(name, :extend => ReportBase, :hash => @reports, :block => block)
39
+ mod = genmodule(name, :extend => ReportBase, :hash => instance_hash(:report), :block => block)
35
40
 
36
41
  if options[:useyaml]
37
42
  mod.useyaml = true
@@ -42,31 +47,12 @@ class Puppet::Network::Handler
42
47
  end
43
48
  end
44
49
 
45
- # Load a report.
46
- def self.report(name)
47
- name = name.intern if name.is_a? String
48
- unless @reports.include? name
49
- if @reportloader.load(name)
50
- unless @reports.include? name
51
- Puppet.warning(
52
- "Loaded report file for %s but report was not defined" %
53
- name
54
- )
55
- return nil
56
- end
57
- else
58
- return nil
59
- end
60
- end
61
- @reports[symbolize(name)]
62
- end
63
-
64
50
  # Collect the docs for all of our reports.
65
51
  def self.reportdocs
66
52
  docs = ""
67
53
 
68
54
  # Use this method so they all get loaded
69
- reports.sort { |a,b| a.to_s <=> b.to_s }.each do |name|
55
+ loaded_instances(:report).sort { |a,b| a.to_s <=> b.to_s }.each do |name|
70
56
  mod = self.report(name)
71
57
  docs += "%s\n%s\n" % [name, "-" * name.to_s.length]
72
58
 
@@ -78,8 +64,8 @@ class Puppet::Network::Handler
78
64
 
79
65
  # List each of the reports.
80
66
  def self.reports
81
- @reportloader.loadall
82
- @reports.keys
67
+ instance_loader(:report).loadall
68
+ loaded_instances(:report)
83
69
  end
84
70
 
85
71
  def initialize(*args)
@@ -155,4 +141,4 @@ class Puppet::Network::Handler
155
141
  end
156
142
  end
157
143
 
158
- # $Id: report.rb 2406 2007-04-23 06:16:10Z luke $
144
+ # $Id: report.rb 2517 2007-05-15 19:22:36Z luke $
@@ -4,6 +4,16 @@ require 'puppet/network/handler'
4
4
  # Serve Puppet elements. Useful for querying, copying, and, um, other stuff.
5
5
  class Puppet::Network::Handler
6
6
  class Resource < Handler
7
+ desc "An interface for interacting with client-based resources that can
8
+ be used for querying or managing remote machines without using Puppet's
9
+ central server tools.
10
+
11
+ The ``describe`` and ``list`` methods return TransBuckets containing
12
+ TransObject instances (``describe`` returns a single TransBucket),
13
+ and the ``apply`` method accepts a TransBucket of TransObjects and
14
+ applies them locally.
15
+ "
16
+
7
17
  attr_accessor :local
8
18
 
9
19
  @interface = XMLRPC::Service::Interface.new("resource") { |iface|
@@ -12,6 +22,8 @@ class Puppet::Network::Handler
12
22
  iface.add_method("string list(string, array, string)")
13
23
  }
14
24
 
25
+ side :client
26
+
15
27
  # Apply a TransBucket as a transaction.
16
28
  def apply(bucket, format = "yaml", client = nil, clientip = nil)
17
29
  unless @local
@@ -133,7 +145,7 @@ class Puppet::Network::Handler
133
145
  bucket = Puppet::TransBucket.new
134
146
  bucket.type = typeklass.name
135
147
 
136
- typeklass.list.each do |obj|
148
+ typeklass.instances.each do |obj|
137
149
  next if ignore.include? obj.name
138
150
 
139
151
  #object = Puppet::TransObject.new(obj.name, typeklass.name)
@@ -187,4 +199,4 @@ class Puppet::Network::Handler
187
199
  end
188
200
  end
189
201
 
190
- # $Id: resource.rb 2433 2007-04-30 15:43:50Z luke $
202
+ # $Id: resource.rb 2551 2007-06-04 20:37:14Z luke $
@@ -2,10 +2,14 @@ class Puppet::Network::Handler
2
2
  class MissingMasterError < RuntimeError; end # Cannot find the master client
3
3
  # A simple server for triggering a new run on a Puppet client.
4
4
  class Runner < Handler
5
+ desc "An interface for triggering client configuration runs."
6
+
5
7
  @interface = XMLRPC::Service::Interface.new("puppetrunner") { |iface|
6
8
  iface.add_method("string run(string, string)")
7
9
  }
8
10
 
11
+ side :client
12
+
9
13
  # Run the client configuration right now, optionally specifying
10
14
  # tags and whether to ignore schedules
11
15
  def run(tags = nil, ignoreschedules = false, fg = true, client = nil, clientip = nil)
@@ -58,4 +62,4 @@ class Puppet::Network::Handler
58
62
  end
59
63
  end
60
64
 
61
- # $Id: runner.rb 2259 2007-03-06 19:03:05Z luke $
65
+ # $Id: runner.rb 2479 2007-05-07 22:29:44Z luke $
@@ -1,5 +1,9 @@
1
1
  class Puppet::Network::Handler
2
2
  class Status < Handler
3
+ desc "A simple interface for testing Puppet connectivity."
4
+
5
+ side :client
6
+
3
7
  @interface = XMLRPC::Service::Interface.new("status") { |iface|
4
8
  iface.add_method("int status()")
5
9
  }
@@ -10,4 +14,4 @@ class Puppet::Network::Handler
10
14
  end
11
15
  end
12
16
 
13
- # $Id: status.rb 2259 2007-03-06 19:03:05Z luke $
17
+ # $Id: status.rb 2479 2007-05-07 22:29:44Z luke $
@@ -47,8 +47,8 @@ require 'resolv'
47
47
  # handler = XmlRpcHandler.new
48
48
  # handler.xmlrpc_server.add_handler("my.add") { |a, b| a.to_i + b.to_i }
49
49
  # </pre>
50
- class Puppet::Network::Server
51
- class MongrelHandler < Mongrel::HttpHandler
50
+ module Puppet::Network
51
+ class Server::Mongrel < ::Mongrel::HttpHandler
52
52
  attr_reader :xmlrpc_server
53
53
 
54
54
  def initialize(handlers)
@@ -114,7 +114,7 @@ class Puppet::Network::Server
114
114
  def client_info(request)
115
115
  params = request.params
116
116
  ip = params["REMOTE_ADDR"]
117
- if dn = params["HTTP_X_CLIENT_DN"]
117
+ if dn = params[Puppet[:ssl_client_header]]
118
118
  client = dn.sub("/CN=", '')
119
119
  valid = true
120
120
  else
@@ -135,4 +135,4 @@ class Puppet::Network::Server
135
135
  end
136
136
  end
137
137
 
138
- # $Id: mongrel.rb 2259 2007-03-06 19:03:05Z luke $
138
+ # $Id: mongrel.rb 2558 2007-06-11 18:07:34Z luke $
@@ -2,6 +2,7 @@ require 'puppet'
2
2
  require 'puppet/daemon'
3
3
  require 'webrick'
4
4
  require 'webrick/https'
5
+ require 'fcntl'
5
6
 
6
7
  require 'puppet/sslcertificates/support'
7
8
  require 'puppet/network/xmlrpc/webrick_servlet'
@@ -47,14 +48,19 @@ module Puppet
47
48
 
48
49
  # yuck; separate http logs
49
50
  file = nil
50
- Puppet.config.use(:puppet, :certificates, Puppet.name)
51
+ Puppet.config.use(:main, :ssl, Puppet[:name])
51
52
  if Puppet[:name] == "puppetmasterd"
52
53
  file = Puppet[:masterhttplog]
53
54
  else
54
55
  file = Puppet[:httplog]
55
56
  end
56
57
 
57
- args << file
58
+ # open the log manually to prevent file descriptor leak
59
+ file_io = open(file, "a+")
60
+ file_io.sync
61
+ file_io.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
62
+
63
+ args << file_io
58
64
  if Puppet[:debug]
59
65
  args << WEBrick::Log::DEBUG
60
66
  end
@@ -87,6 +93,11 @@ module Puppet
87
93
 
88
94
  super(hash)
89
95
 
96
+ # make sure children don't inherit the sockets
97
+ listeners.each { |sock|
98
+ sock.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
99
+ }
100
+
90
101
  Puppet.info "Listening on port %s" % hash[:Port]
91
102
 
92
103
  # this creates a new servlet for every connection,
@@ -150,4 +161,4 @@ module Puppet
150
161
  end
151
162
  end
152
163
 
153
- # $Id: webrick.rb 2259 2007-03-06 19:03:05Z luke $
164
+ # $Id: webrick.rb 2553 2007-06-05 18:12:42Z luke $
@@ -240,6 +240,8 @@ class Puppet::Parameter < Puppet::Element
240
240
  # ParamHandler class.
241
241
  proxymethods("required?", "isnamevar?")
242
242
 
243
+ attr_accessor :resource
244
+ # LAK 2007-05-09: Keep the @parent around for backward compatibility.
243
245
  attr_accessor :parent
244
246
  attr_reader :shadow
245
247
 
@@ -257,12 +259,12 @@ class Puppet::Parameter < Puppet::Element
257
259
 
258
260
  error = type.new(args.join(" "))
259
261
 
260
- if defined? @parent and @parent and @parent.line
261
- error.line = @parent.line
262
+ if defined? @resource and @resource and @resource.line
263
+ error.line = @resource.line
262
264
  end
263
265
 
264
- if defined? @parent and @parent and @parent.file
265
- error.file = @parent.file
266
+ if defined? @resource and @resource and @resource.file
267
+ error.file = @resource.file
266
268
  end
267
269
 
268
270
  raise error
@@ -271,13 +273,16 @@ class Puppet::Parameter < Puppet::Element
271
273
  # Basic parameter initialization.
272
274
  def initialize(options = {})
273
275
  options = symbolize_options(options)
274
- if parent = options[:parent]
275
- self.parent = parent
276
- options.delete(:parent)
276
+ if resource = options[:resource]
277
+ self.resource = resource
278
+ options.delete(:resource)
277
279
  else
278
- raise Puppet::DevError, "No parent set for %s" % self.class.name
280
+ raise Puppet::DevError, "No resource set for %s" % self.class.name
279
281
  end
280
282
 
283
+ # LAK 2007-05-09: Keep the @parent around for backward compatibility.
284
+ #@parent = @resource
285
+
281
286
  if ! self.metaparam? and klass = Puppet::Type.metaparamclass(self.class.name)
282
287
  setup_shadow(klass)
283
288
  end
@@ -285,15 +290,15 @@ class Puppet::Parameter < Puppet::Element
285
290
  set_options(options)
286
291
  end
287
292
 
288
- # Log a message using the parent's log level.
293
+ # Log a message using the resource's log level.
289
294
  def log(msg)
290
- unless @parent[:loglevel]
291
- p @parent
295
+ unless @resource[:loglevel]
296
+ p @resource
292
297
  self.devfail "Parent %s has no loglevel" %
293
- @parent.name
298
+ @resource.name
294
299
  end
295
300
  Puppet::Util::Log.create(
296
- :level => @parent[:loglevel],
301
+ :level => @resource[:loglevel],
297
302
  :message => msg,
298
303
  :source => self
299
304
  )
@@ -317,7 +322,7 @@ class Puppet::Parameter < Puppet::Element
317
322
  unless defined? @noop
318
323
  @noop = false
319
324
  end
320
- tmp = @noop || self.parent.noop || Puppet[:noop] || false
325
+ tmp = @noop || self.resource.noop || Puppet[:noop] || false
321
326
  #debug "noop is %s" % tmp
322
327
  return tmp
323
328
  end
@@ -325,8 +330,8 @@ class Puppet::Parameter < Puppet::Element
325
330
  # return the full path to us, for logging and rollback; not currently
326
331
  # used
327
332
  def pathbuilder
328
- if defined? @parent and @parent
329
- return [@parent.pathbuilder, self.name]
333
+ if defined? @resource and @resource
334
+ return [@resource.pathbuilder, self.name]
330
335
  else
331
336
  return [self.name]
332
337
  end
@@ -397,7 +402,7 @@ class Puppet::Parameter < Puppet::Element
397
402
  end
398
403
 
399
404
  def remove
400
- @parent = nil
405
+ @resource = nil
401
406
  @shadow = nil
402
407
  end
403
408
 
@@ -414,7 +419,7 @@ class Puppet::Parameter < Puppet::Element
414
419
  if self.should
415
420
  return self.should
416
421
  else
417
- return self.is
422
+ return self.retrieve
418
423
  end
419
424
  else
420
425
  if defined? @value
@@ -446,17 +451,17 @@ class Puppet::Parameter < Puppet::Element
446
451
 
447
452
  def inspect
448
453
  s = "Parameter(%s = %s" % [self.name, self.value || "nil"]
449
- if defined? @parent
450
- s += ", @parent = %s)" % @parent
454
+ if defined? @resource
455
+ s += ", @resource = %s)" % @resource
451
456
  else
452
457
  s += ")"
453
458
  end
454
459
  end
455
460
 
456
- # Retrieve the parent's provider. Some types don't have providers, in which
457
- # case we return the parent object itself.
461
+ # Retrieve the resource's provider. Some types don't have providers, in which
462
+ # case we return the resource object itself.
458
463
  def provider
459
- @parent.provider || @parent
464
+ @resource.provider || @resource
460
465
  end
461
466
 
462
467
  # If there's a shadowing metaparam, instantiate it now.
@@ -464,7 +469,7 @@ class Puppet::Parameter < Puppet::Element
464
469
  # same name as a metaparameter, and the metaparam will only be
465
470
  # stored as a shadow.
466
471
  def setup_shadow(klass)
467
- @shadow = klass.new(:parent => self.parent)
472
+ @shadow = klass.new(:resource => self.resource)
468
473
  end
469
474
 
470
475
  def to_s
@@ -472,4 +477,4 @@ class Puppet::Parameter < Puppet::Element
472
477
  end
473
478
  end
474
479
 
475
- # $Id: parameter.rb 2414 2007-04-25 20:59:00Z luke $
480
+ # $Id: parameter.rb 2503 2007-05-10 21:46:59Z luke $