puppet 0.24.1 → 0.24.2

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 +94 -0
  2. data/Rakefile +0 -4
  3. data/bin/puppet +18 -10
  4. data/bin/puppetd +1 -1
  5. data/bin/puppetdoc +14 -4
  6. data/bin/puppetmasterd +1 -1
  7. data/bin/puppetrun +3 -8
  8. data/bin/ralsh +12 -11
  9. data/conf/freebsd/puppetd +1 -1
  10. data/conf/freebsd/puppetmasterd +1 -1
  11. data/conf/gentoo/puppet/puppet.conf +29 -0
  12. data/conf/namespaceauth.conf +20 -0
  13. data/conf/redhat/puppet.spec +4 -1
  14. data/conf/solaris/smf/puppetd.xml +1 -1
  15. data/conf/solaris/smf/puppetmasterd.xml +1 -1
  16. data/conf/suse/puppet.spec +10 -8
  17. data/examples/root/etc/puppet/{puppetmasterd.conf → puppet.conf} +6 -3
  18. data/ext/logcheck/puppet +7 -0
  19. data/ext/puppet-test +28 -5
  20. data/lib/puppet.rb +2 -1
  21. data/lib/puppet/defaults.rb +12 -5
  22. data/lib/puppet/dsl.rb +43 -45
  23. data/lib/puppet/external/{gratr/rdot.rb → dot.rb} +0 -0
  24. data/lib/puppet/external/nagios.rb +50 -0
  25. data/lib/puppet/external/nagios/base.rb +421 -0
  26. data/lib/puppet/external/nagios/parser.rb +816 -0
  27. data/lib/puppet/file_serving/file_base.rb +16 -3
  28. data/lib/puppet/file_serving/metadata.rb +29 -11
  29. data/lib/puppet/indirector/terminus.rb +1 -0
  30. data/lib/puppet/metatype/closure.rb +4 -0
  31. data/lib/puppet/metatype/evaluation.rb +2 -17
  32. data/lib/puppet/metatype/metaparams.rb +1 -1
  33. data/lib/puppet/network.rb +3 -0
  34. data/lib/puppet/network/client.rb +4 -5
  35. data/lib/puppet/network/client/master.rb +10 -7
  36. data/lib/puppet/network/handler/fileserver.rb +22 -45
  37. data/lib/puppet/network/http_pool.rb +3 -0
  38. data/lib/puppet/network/http_server/mongrel.rb +7 -1
  39. data/lib/puppet/network/http_server/webrick.rb +4 -3
  40. data/lib/puppet/network/xmlrpc/client.rb +12 -1
  41. data/lib/puppet/node/catalog.rb +51 -40
  42. data/lib/puppet/parser/ast.rb +27 -49
  43. data/lib/puppet/parser/ast/astarray.rb +5 -24
  44. data/lib/puppet/parser/ast/caseopt.rb +4 -4
  45. data/lib/puppet/parser/ast/casestatement.rb +4 -5
  46. data/lib/puppet/parser/ast/collection.rb +3 -5
  47. data/lib/puppet/parser/ast/collexpr.rb +3 -5
  48. data/lib/puppet/parser/ast/definition.rb +148 -159
  49. data/lib/puppet/parser/ast/else.rb +2 -3
  50. data/lib/puppet/parser/ast/function.rb +3 -10
  51. data/lib/puppet/parser/ast/hostclass.rb +66 -59
  52. data/lib/puppet/parser/ast/ifstatement.rb +4 -5
  53. data/lib/puppet/parser/ast/leaf.rb +6 -6
  54. data/lib/puppet/parser/ast/node.rb +26 -58
  55. data/lib/puppet/parser/ast/resource.rb +5 -7
  56. data/lib/puppet/parser/ast/resource_defaults.rb +2 -4
  57. data/lib/puppet/parser/ast/resource_override.rb +4 -6
  58. data/lib/puppet/parser/ast/resource_reference.rb +2 -4
  59. data/lib/puppet/parser/ast/resourceparam.rb +2 -4
  60. data/lib/puppet/parser/ast/selector.rb +5 -6
  61. data/lib/puppet/parser/ast/tag.rb +2 -4
  62. data/lib/puppet/parser/ast/vardef.rb +3 -4
  63. data/lib/puppet/parser/collector.rb +5 -5
  64. data/lib/puppet/parser/{compile.rb → compiler.rb} +69 -107
  65. data/lib/puppet/parser/functions.rb +3 -3
  66. data/lib/puppet/parser/interpreter.rb +32 -23
  67. data/lib/puppet/parser/lexer.rb +391 -282
  68. data/lib/puppet/parser/parser.rb +5 -4
  69. data/lib/puppet/parser/parser_support.rb +3 -6
  70. data/lib/puppet/parser/resource.rb +24 -36
  71. data/lib/puppet/parser/resource/param.rb +1 -1
  72. data/lib/puppet/parser/resource/reference.rb +7 -3
  73. data/lib/puppet/parser/scope.rb +12 -7
  74. data/lib/puppet/parser/templatewrapper.rb +1 -1
  75. data/lib/puppet/pgraph.rb +9 -98
  76. data/lib/puppet/provider/interface/redhat.rb +65 -65
  77. data/lib/puppet/provider/mount/parsed.rb +1 -1
  78. data/lib/puppet/provider/naginator.rb +55 -0
  79. data/lib/puppet/provider/nameservice/directoryservice.rb +6 -7
  80. data/lib/puppet/provider/package/fink.rb +0 -2
  81. data/lib/puppet/provider/package/gem.rb +9 -5
  82. data/lib/puppet/provider/package/openbsd.rb +1 -1
  83. data/lib/puppet/provider/package/pkgdmg.rb +3 -8
  84. data/lib/puppet/provider/package/portage.rb +4 -4
  85. data/lib/puppet/provider/package/yumhelper.py +8 -6
  86. data/lib/puppet/provider/parsedfile.rb +7 -1
  87. data/lib/puppet/provider/service/debian.rb +2 -0
  88. data/lib/puppet/provider/service/gentoo.rb +4 -0
  89. data/lib/puppet/provider/service/init.rb +1 -1
  90. data/lib/puppet/provider/sshkey/parsed.rb +2 -0
  91. data/lib/puppet/provider/user/useradd.rb +1 -1
  92. data/lib/puppet/rails.rb +4 -0
  93. data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +17 -0
  94. data/lib/puppet/rails/fact_value.rb +4 -0
  95. data/lib/puppet/rails/host.rb +1 -2
  96. data/lib/puppet/rails/param_value.rb +4 -0
  97. data/lib/puppet/rails/resource_tag.rb +4 -0
  98. data/lib/puppet/rails/source_file.rb +4 -1
  99. data/lib/puppet/relationship.rb +5 -1
  100. data/lib/puppet/reports/tagmail.rb +12 -1
  101. data/lib/puppet/resource_reference.rb +1 -1
  102. data/lib/puppet/simple_graph.rb +78 -11
  103. data/lib/puppet/sslcertificates.rb +1 -1
  104. data/lib/puppet/sslcertificates/ca.rb +3 -3
  105. data/lib/puppet/transaction.rb +7 -4
  106. data/lib/puppet/transportable.rb +1 -1
  107. data/lib/puppet/type.rb +3 -10
  108. data/lib/puppet/type/cron.rb +18 -0
  109. data/lib/puppet/type/exec.rb +18 -12
  110. data/lib/puppet/type/{pfile.rb → file.rb} +66 -84
  111. data/lib/puppet/type/file/checksum.rb +271 -0
  112. data/lib/puppet/type/{pfile → file}/content.rb +10 -15
  113. data/lib/puppet/type/{pfile → file}/ensure.rb +15 -8
  114. data/lib/puppet/type/{pfile → file}/group.rb +0 -0
  115. data/lib/puppet/type/{pfile → file}/mode.rb +0 -0
  116. data/lib/puppet/type/{pfile → file}/owner.rb +0 -0
  117. data/lib/puppet/type/{pfile → file}/source.rb +34 -48
  118. data/lib/puppet/type/{pfile → file}/target.rb +0 -0
  119. data/lib/puppet/type/{pfile → file}/type.rb +0 -0
  120. data/lib/puppet/type/{pfilebucket.rb → filebucket.rb} +0 -0
  121. data/lib/puppet/type/host.rb +13 -0
  122. data/lib/puppet/type/mailalias.rb +1 -1
  123. data/lib/puppet/type/nagios_command.rb +3 -0
  124. data/lib/puppet/type/nagios_contact.rb +3 -0
  125. data/lib/puppet/type/nagios_contactgroup.rb +3 -0
  126. data/lib/puppet/type/nagios_host.rb +3 -0
  127. data/lib/puppet/type/nagios_hostextinfo.rb +3 -0
  128. data/lib/puppet/type/nagios_hostgroup.rb +3 -0
  129. data/lib/puppet/type/nagios_hostgroupescalation.rb +3 -0
  130. data/lib/puppet/type/nagios_service.rb +3 -0
  131. data/lib/puppet/type/nagios_servicedependency.rb +3 -0
  132. data/lib/puppet/type/nagios_serviceescalation.rb +3 -0
  133. data/lib/puppet/type/nagios_serviceextinfo.rb +3 -0
  134. data/lib/puppet/type/nagios_timeperiod.rb +3 -0
  135. data/lib/puppet/type/package.rb +4 -12
  136. data/lib/puppet/type/service.rb +9 -0
  137. data/lib/puppet/type/sshkey.rb +3 -3
  138. data/lib/puppet/util/autoload.rb +5 -5
  139. data/lib/puppet/util/checksums.rb +51 -13
  140. data/lib/puppet/util/constant_inflector.rb +14 -0
  141. data/lib/puppet/util/filetype.rb +1 -1
  142. data/lib/puppet/util/graph.rb +3 -9
  143. data/lib/puppet/util/nagios_maker.rb +57 -0
  144. data/lib/puppet/util/settings.rb +19 -16
  145. data/lib/puppet/util/tagging.rb +39 -0
  146. data/test/executables/puppetbin.rb +17 -0
  147. data/test/language/ast.rb +8 -58
  148. data/test/language/ast/casestatement.rb +3 -3
  149. data/test/language/ast/resource.rb +6 -7
  150. data/test/language/ast/resource_reference.rb +12 -12
  151. data/test/language/ast/selector.rb +2 -2
  152. data/test/language/ast/variable.rb +2 -2
  153. data/test/language/functions.rb +24 -24
  154. data/test/language/parser.rb +20 -8
  155. data/test/language/resource.rb +5 -42
  156. data/test/language/scope.rb +21 -37
  157. data/test/language/snippets.rb +7 -0
  158. data/test/lib/puppettest.rb +28 -14
  159. data/test/lib/puppettest/parsertesting.rb +10 -10
  160. data/test/lib/puppettest/support/resources.rb +1 -1
  161. data/test/network/client/master.rb +10 -0
  162. data/test/network/handler/fileserver.rb +51 -49
  163. data/test/network/server/webrick.rb +1 -1
  164. data/test/other/dsl.rb +3 -4
  165. data/test/other/transactions.rb +6 -4
  166. data/test/rails/ast.rb +2 -2
  167. data/test/rails/configuration.rb +1 -1
  168. data/test/rails/railsparameter.rb +2 -0
  169. data/test/rails/railsresource.rb +1 -0
  170. data/test/ral/manager/type.rb +4 -4
  171. data/test/ral/providers/cron/crontab.rb +3 -1
  172. data/test/ral/providers/package.rb +1 -1
  173. data/test/ral/{types → type}/basic.rb +2 -2
  174. data/test/ral/{types → type}/cron.rb +0 -0
  175. data/test/ral/{types → type}/exec.rb +42 -2
  176. data/test/ral/{types → type}/file.rb +34 -79
  177. data/test/ral/{types → type}/file/target.rb +0 -0
  178. data/test/ral/{types → type}/filebucket.rb +0 -0
  179. data/test/ral/{types → type}/fileignoresource.rb +0 -0
  180. data/test/ral/{types → type}/filesources.rb +8 -27
  181. data/test/ral/{types → type}/group.rb +0 -0
  182. data/test/ral/{types → type}/host.rb +16 -0
  183. data/test/ral/{types → type}/mailalias.rb +0 -0
  184. data/test/ral/{types → type}/parameter.rb +0 -0
  185. data/test/ral/{types → type}/port.rb +0 -0
  186. data/test/ral/{types → type}/property.rb +0 -0
  187. data/test/ral/{types → type}/resources.rb +0 -0
  188. data/test/ral/{types → type}/service.rb +0 -0
  189. data/test/ral/{types → type}/sshkey.rb +0 -0
  190. data/test/ral/{types → type}/tidy.rb +1 -0
  191. data/test/ral/{types → type}/user.rb +0 -0
  192. data/test/ral/{types → type}/yumrepo.rb +0 -0
  193. data/test/ral/{types → type}/zone.rb +0 -0
  194. data/test/util/autoload.rb +24 -5
  195. metadata +60 -107
  196. data/conf/gentoo/puppet/puppetca.conf +0 -29
  197. data/conf/gentoo/puppet/puppetd.conf +0 -29
  198. data/conf/gentoo/puppet/puppetmasterd.conf +0 -29
  199. data/examples/root/etc/puppet/puppetd.conf +0 -4
  200. data/lib/puppet/external/gratr.rb +0 -33
  201. data/lib/puppet/external/gratr/adjacency_graph.rb +0 -257
  202. data/lib/puppet/external/gratr/base.rb +0 -34
  203. data/lib/puppet/external/gratr/biconnected.rb +0 -116
  204. data/lib/puppet/external/gratr/chinese_postman.rb +0 -123
  205. data/lib/puppet/external/gratr/common.rb +0 -73
  206. data/lib/puppet/external/gratr/comparability.rb +0 -92
  207. data/lib/puppet/external/gratr/digraph.rb +0 -116
  208. data/lib/puppet/external/gratr/digraph_distance.rb +0 -185
  209. data/lib/puppet/external/gratr/dot.rb +0 -90
  210. data/lib/puppet/external/gratr/edge.rb +0 -145
  211. data/lib/puppet/external/gratr/graph.rb +0 -303
  212. data/lib/puppet/external/gratr/graph_api.rb +0 -83
  213. data/lib/puppet/external/gratr/import.rb +0 -44
  214. data/lib/puppet/external/gratr/labels.rb +0 -90
  215. data/lib/puppet/external/gratr/maximum_flow.rb +0 -64
  216. data/lib/puppet/external/gratr/search.rb +0 -409
  217. data/lib/puppet/external/gratr/strong_components.rb +0 -127
  218. data/lib/puppet/external/gratr/undirected_graph.rb +0 -153
  219. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +0 -62
  220. data/lib/puppet/rails/external/tagging/init.rb +0 -5
  221. data/lib/puppet/rails/external/tagging/tag.rb +0 -50
  222. data/lib/puppet/rails/external/tagging/tagging.rb +0 -12
  223. data/lib/puppet/rails/puppet_class.rb +0 -6
  224. data/lib/puppet/reference/node_source.rb +0 -9
  225. data/lib/puppet/reference/report.rb +0 -21
  226. data/lib/puppet/type/pfile/checksum.rb +0 -326
  227. data/test/language/ast/definition.rb +0 -166
  228. data/test/language/ast/hostclass.rb +0 -184
  229. data/test/language/compile.rb +0 -569
  230. data/test/language/lexer.rb +0 -276
  231. data/test/lib/mocha.rb +0 -19
  232. data/test/lib/mocha/any_instance_method.rb +0 -35
  233. data/test/lib/mocha/auto_verify.rb +0 -113
  234. data/test/lib/mocha/central.rb +0 -35
  235. data/test/lib/mocha/class_method.rb +0 -62
  236. data/test/lib/mocha/deprecation.rb +0 -22
  237. data/test/lib/mocha/exception_raiser.rb +0 -17
  238. data/test/lib/mocha/expectation.rb +0 -378
  239. data/test/lib/mocha/expectation_error.rb +0 -6
  240. data/test/lib/mocha/infinite_range.rb +0 -25
  241. data/test/lib/mocha/inspect.rb +0 -39
  242. data/test/lib/mocha/instance_method.rb +0 -8
  243. data/test/lib/mocha/is_a.rb +0 -9
  244. data/test/lib/mocha/metaclass.rb +0 -7
  245. data/test/lib/mocha/missing_expectation.rb +0 -27
  246. data/test/lib/mocha/mock.rb +0 -207
  247. data/test/lib/mocha/multiple_yields.rb +0 -20
  248. data/test/lib/mocha/no_yields.rb +0 -11
  249. data/test/lib/mocha/object.rb +0 -110
  250. data/test/lib/mocha/parameter_matchers.rb +0 -9
  251. data/test/lib/mocha/parameter_matchers/all_of.rb +0 -39
  252. data/test/lib/mocha/parameter_matchers/any_of.rb +0 -44
  253. data/test/lib/mocha/parameter_matchers/anything.rb +0 -30
  254. data/test/lib/mocha/parameter_matchers/has_entry.rb +0 -39
  255. data/test/lib/mocha/parameter_matchers/has_key.rb +0 -39
  256. data/test/lib/mocha/parameter_matchers/has_value.rb +0 -39
  257. data/test/lib/mocha/parameter_matchers/includes.rb +0 -37
  258. data/test/lib/mocha/pretty_parameters.rb +0 -28
  259. data/test/lib/mocha/return_values.rb +0 -31
  260. data/test/lib/mocha/setup_and_teardown.rb +0 -23
  261. data/test/lib/mocha/single_return_value.rb +0 -24
  262. data/test/lib/mocha/single_yield.rb +0 -18
  263. data/test/lib/mocha/standalone.rb +0 -32
  264. data/test/lib/mocha/stub.rb +0 -18
  265. data/test/lib/mocha/test_case_adapter.rb +0 -49
  266. data/test/lib/mocha/yield_parameters.rb +0 -31
@@ -13,3 +13,10 @@
13
13
  ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Caught (TERM|INT); shutting down$
14
14
  ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Shutting down$
15
15
  ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Restarting with .*$
16
+ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Starting catalog run$
17
+ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Finished catalog run in [.0-9]+ seconds$
18
+ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Loading fact .*$
19
+ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Ignoring cache$
20
+ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Ignoring --listen on onetime run$
21
+ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Retrieving plugins$
22
+
@@ -53,6 +53,9 @@
53
53
  # list::
54
54
  # List all available tests.
55
55
  #
56
+ # pause::
57
+ # Pause before starting test (useful for testing with dtrace).
58
+ #
56
59
  # repeat::
57
60
  # How many times to perform the test.
58
61
  #
@@ -88,7 +91,7 @@
88
91
  # Do an initial trap, so that cancels don't get a stack trace.
89
92
  trap(:INT) do
90
93
  $stderr.puts "Cancelling startup"
91
- exit(0)
94
+ exit(1)
92
95
  end
93
96
 
94
97
  require 'puppet'
@@ -165,6 +168,12 @@ class Suite
165
168
  puts "Running %s %s test" % [@name, test]
166
169
  prepare()
167
170
 
171
+ if $options[:pause]
172
+ puts "Hit any key to continue"
173
+ $stdin.readline
174
+ puts "Continuing with test"
175
+ end
176
+
168
177
  if $options[:fork] > 0
169
178
  @forking = true
170
179
  $options[:fork].times {
@@ -200,6 +209,17 @@ class Suite
200
209
  end
201
210
  end
202
211
 
212
+ Suite.new :parser, "Manifest parsing" do
213
+ def prepare
214
+ end
215
+
216
+ newtest :parse, "Parsed files" do
217
+ @parser = Puppet::Parser::Parser.new(:environment => Puppet[:environment])
218
+ @parser.file = Puppet[:manifest]
219
+ @parser.parse
220
+ end
221
+ end
222
+
203
223
  Suite.new :catalog, "Catalog handling" do
204
224
  def prepare
205
225
  $args[:cache] = false
@@ -325,12 +345,13 @@ end
325
345
 
326
346
  $cmdargs = [
327
347
  [ "--compile", "-c", GetoptLong::NO_ARGUMENT ],
328
- [ "--describe", "-D", GetoptLong::REQUIRED_ARGUMENT ],
348
+ [ "--describe", GetoptLong::REQUIRED_ARGUMENT ],
329
349
  [ "--retrieve", "-R", GetoptLong::REQUIRED_ARGUMENT ],
330
350
  [ "--fork", GetoptLong::REQUIRED_ARGUMENT ],
331
351
  [ "--fqdn", "-F", GetoptLong::REQUIRED_ARGUMENT ],
332
352
  [ "--suite", "-s", GetoptLong::REQUIRED_ARGUMENT ],
333
353
  [ "--test", "-t", GetoptLong::REQUIRED_ARGUMENT ],
354
+ [ "--pause", "-p", GetoptLong::NO_ARGUMENT ],
334
355
  [ "--repeat", "-r", GetoptLong::REQUIRED_ARGUMENT ],
335
356
  [ "--debug", "-d", GetoptLong::NO_ARGUMENT ],
336
357
  [ "--help", "-h", GetoptLong::NO_ARGUMENT ],
@@ -340,14 +361,14 @@ $cmdargs = [
340
361
  ]
341
362
 
342
363
  # Add all of the config parameters as valid $options.
343
- Puppet.config.addargs($cmdargs)
364
+ Puppet.settings.addargs($cmdargs)
344
365
  Puppet::Util::Log.newdestination(:console)
345
366
 
346
367
  result = GetoptLong.new(*$cmdargs)
347
368
 
348
369
  $args = {}
349
370
 
350
- $options = {:repeat => 1, :fork => 0}
371
+ $options = {:repeat => 1, :fork => 0, :pause => false}
351
372
 
352
373
  begin
353
374
  explicit_waitforcert = false
@@ -399,6 +420,8 @@ begin
399
420
  $options[:test] = arg.intern
400
421
  when "--file"
401
422
  $options[:file] = arg
423
+ when "--pause"
424
+ $options[:pause] = true
402
425
  when "--list"
403
426
  Suite.suites.sort { |a,b| a.to_s <=> b.to_s }.each do |suite_name|
404
427
  suite = Suite[suite_name]
@@ -407,7 +430,7 @@ begin
407
430
  end
408
431
  exit(0)
409
432
  else
410
- Puppet.config.handlearg(opt, arg)
433
+ Puppet.settings.handlearg(opt, arg)
411
434
  end
412
435
  }
413
436
  rescue GetoptLong::InvalidOption => detail
@@ -25,7 +25,7 @@ require 'puppet/util/suidmanager'
25
25
  # it's also a place to find top-level commands like 'debug'
26
26
 
27
27
  module Puppet
28
- PUPPETVERSION = '0.24.1'
28
+ PUPPETVERSION = '0.24.2'
29
29
 
30
30
  def Puppet.version
31
31
  return PUPPETVERSION
@@ -423,6 +423,7 @@ module Puppet
423
423
  end
424
424
 
425
425
  require 'puppet/type'
426
+ require 'puppet/network'
426
427
  require 'puppet/module'
427
428
  require 'puppet/util/storage'
428
429
  require 'puppet/parser/interpreter'
@@ -66,7 +66,11 @@ module Puppet
66
66
  :owner => "root",
67
67
  :desc => "Where SSL certificates are kept."
68
68
  },
69
- :rundir => { :default => rundir,
69
+ :rundir => {
70
+ :default => rundir,
71
+ :mode => 01777,
72
+ :owner => "$user",
73
+ :group => "$group",
70
74
  :desc => "Where Puppet PID files are kept."
71
75
  },
72
76
  :genconfig => [false,
@@ -136,8 +140,6 @@ module Puppet
136
140
  :show_diff => [false, "Whether to print a contextual diff when files are being replaced. The diff
137
141
  is printed on stdout, so this option is meaningless unless you are running Puppet interactively.
138
142
  This feature currently requires the ``diff/lcs`` Ruby library."],
139
- :yamldir => {:default => "$vardir/yaml", :owner => "$user", :group => "$user", :mode => "750",
140
- :desc => "The directory in which YAML data is stored, usually in a subdirectory."},
141
143
  :daemonize => { :default => true,
142
144
  :desc => "Send the process into the background. This is the default.",
143
145
  :short => "D"
@@ -228,7 +230,7 @@ module Puppet
228
230
  :owner => "$user",
229
231
  :group => "$group",
230
232
  :mode => 0664,
231
- :desc => "The certificate revocation list (CRL) for the CA. Set this to 'none' if you do not want to use a CRL."
233
+ :desc => "The certificate revocation list (CRL) for the CA. Set this to 'false' if you do not want to use a CRL."
232
234
  },
233
235
  :caprivatedir => { :default => "$cadir/private",
234
236
  :owner => "$user",
@@ -305,7 +307,7 @@ module Puppet
305
307
  :manifest => ["$manifestdir/site.pp",
306
308
  "The entry-point manifest for puppetmasterd."],
307
309
  :code => ["", "Code to parse directly. This is essentially only used
308
- by ``puppet`, and should only be set if you're writing your own Puppet
310
+ by ``puppet``, and should only be set if you're writing your own Puppet
309
311
  executable"],
310
312
  :masterlog => { :default => "$logdir/puppetmaster.log",
311
313
  :owner => "$user",
@@ -668,5 +670,10 @@ module Puppet
668
670
  :rrdinterval => ["$runinterval", "How often RRD should expect data.
669
671
  This should match how often the hosts report back to the server."]
670
672
  )
673
+
674
+ Puppet.setdefaults(:yaml,
675
+ :yamldir => {:default => "$vardir/yaml", :owner => "$user", :group => "$user", :mode => "750",
676
+ :desc => "The directory in which YAML data is stored, usually in a subdirectory."}
677
+ )
671
678
  end
672
679
 
@@ -46,58 +46,56 @@
46
46
  #
47
47
  # apply
48
48
 
49
- module Puppet
50
- # Provide the actual commands for acting like a language.
51
- module DSL
52
- def aspect(name, options = {}, &block)
53
- Puppet::Aspect.new(name, options, &block)
54
- end
49
+ require 'puppet'
55
50
 
56
- def acquire(*names)
57
- names.each do |name|
58
- if aspect = Puppet::Aspect[name]
59
- unless aspect.evaluated?
60
- aspect.evaluate
61
- end
62
- else
63
- raise "Could not find aspect %s" % name
51
+ # Provide the actual commands for acting like a language.
52
+ module Puppet::DSL
53
+ def aspect(name, options = {}, &block)
54
+ Puppet::DSL::Aspect.new(name, options, &block)
55
+ end
56
+
57
+ def acquire(*names)
58
+ names.each do |name|
59
+ if aspect = Puppet::DSL::Aspect[name]
60
+ unless aspect.evaluated?
61
+ aspect.evaluate
64
62
  end
63
+ else
64
+ raise "Could not find aspect %s" % name
65
65
  end
66
66
  end
67
+ end
67
68
 
68
- def apply
69
- bucket = export()
70
- catalog = bucket.to_catalog
71
- catalog.apply
72
- end
69
+ def apply
70
+ bucket = export()
71
+ catalog = bucket.to_catalog
72
+ catalog.apply
73
+ end
73
74
 
74
- def export
75
- objects = Puppet::Aspect.collect do |name, aspect|
76
- if aspect.evaluated?
77
- aspect.export
78
- end
79
- end.reject { |a| a.nil? }.flatten.collect do |obj|
80
- obj.to_trans
75
+ def export
76
+ objects = Puppet::DSL::Aspect.collect do |name, aspect|
77
+ if aspect.evaluated?
78
+ aspect.export
81
79
  end
82
- bucket = Puppet::TransBucket.new(objects)
83
- bucket.name = "top"
84
- bucket.type = "class"
85
-
86
- return bucket
80
+ end.reject { |a| a.nil? }.flatten.collect do |obj|
81
+ obj.to_trans
87
82
  end
83
+ bucket = Puppet::TransBucket.new(objects)
84
+ bucket.name = "top"
85
+ bucket.type = "class"
88
86
 
89
- def init
90
- unless Process.uid == 0
91
- Puppet[:confdir] = File.expand_path("~/.puppet")
92
- Puppet[:vardir] = File.expand_path("~/.puppet/var")
93
- end
94
- Puppet[:user] = Process.uid
95
- Puppet[:group] = Process.gid
96
- Puppet::Util::Log.newdestination(:console)
97
- Puppet::Util::Log.level = :info
98
- end
87
+ return bucket
88
+ end
99
89
 
100
- private
90
+ def init
91
+ unless Process.uid == 0
92
+ Puppet[:confdir] = File.expand_path("~/.puppet")
93
+ Puppet[:vardir] = File.expand_path("~/.puppet/var")
94
+ end
95
+ Puppet[:user] = Process.uid
96
+ Puppet[:group] = Process.gid
97
+ Puppet::Util::Log.newdestination(:console)
98
+ Puppet::Util::Log.level = :info
101
99
  end
102
100
 
103
101
  class Aspect
@@ -224,10 +222,10 @@ module Puppet
224
222
  end
225
223
 
226
224
  def newresource(type, name, params = {})
227
- if self.is_a?(Puppet::Aspect)
225
+ if self.is_a?(Puppet::DSL::Aspect)
228
226
  source = self
229
227
  else
230
- source = Puppet::Aspect[:main]
228
+ source = Puppet::DSL::Aspect[:main]
231
229
  end
232
230
  unless obj = @@objects[type][name]
233
231
  obj = Resource.new :title => name, :type => type.name,
@@ -262,7 +260,7 @@ module Puppet
262
260
  env = nil
263
261
  end
264
262
  @node.parameters = Facter.to_hash
265
- @compile = Puppet::Parser::Compile.new(@node, @interp.send(:parser, env))
263
+ @compile = Puppet::Parser::Compiler.new(@node, @interp.send(:parser, env))
266
264
  @scope = @compile.topscope
267
265
  end
268
266
  @scope
@@ -0,0 +1,50 @@
1
+ #!/usr/local/bin/ruby -w
2
+
3
+ #--------------------
4
+ # A script to retrieve hosts from ldap and create an importable
5
+ # cfservd file from them
6
+ #
7
+ # $Id: nagios.rb,v 1.3 2004/06/09 20:32:46 luke Exp $
8
+
9
+ require 'digest/md5'
10
+ #require 'ldap'
11
+ require 'puppet/external/nagios/parser.rb'
12
+ require 'puppet/external/nagios/base.rb'
13
+
14
+ module Nagios
15
+ NAGIOSVERSION = '1.1'
16
+ # yay colors
17
+ PINK = ""
18
+ GREEN = ""
19
+ YELLOW = ""
20
+ SLATE = ""
21
+ ORANGE = ""
22
+ BLUE = ""
23
+ NOCOLOR = ""
24
+ RESET = ""
25
+
26
+ def self.version
27
+ NAGIOSVERSION
28
+ end
29
+
30
+ class Config
31
+ def Config.import(config)
32
+
33
+ text = String.new
34
+
35
+ File.open(config) { |file|
36
+ file.each { |line|
37
+ text += line
38
+ }
39
+ }
40
+ parser = Nagios::Parser.new
41
+ return parser.parse(text)
42
+ end
43
+
44
+ def Config.each
45
+ Nagios::Object.objects.each { |object|
46
+ yield object
47
+ }
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,421 @@
1
+ # The base class for all of our Nagios object types. Everything else
2
+ # is mostly just data.
3
+ class Nagios::Base
4
+
5
+ class UnknownNagiosType < RuntimeError # When an unknown type is asked for by name.
6
+ end
7
+
8
+ include Enumerable
9
+
10
+ class << self
11
+ attr_accessor :parameters, :derivatives, :ocs, :name, :att
12
+ attr_accessor :ldapbase
13
+
14
+ attr_writer :namevar
15
+
16
+ attr_reader :superior
17
+ end
18
+
19
+ # Attach one class to another.
20
+ def self.attach(hash)
21
+ @attach ||= {}
22
+ hash.each do |n, v| @attach[n] = v end
23
+ end
24
+
25
+ # Convert a parameter to camelcase
26
+ def self.camelcase(param)
27
+ param.gsub(/_./) do |match|
28
+ match.sub(/_/,'').capitalize
29
+ end
30
+ end
31
+
32
+ # Uncamelcase a parameter.
33
+ def self.decamelcase(param)
34
+ param.gsub(/[A-Z]/) do |match|
35
+ "_" + match.downcase
36
+ end
37
+ end
38
+
39
+ # Create a new instance of a given class.
40
+ def self.create(name, args = {})
41
+ name = name.intern if name.is_a? String
42
+
43
+ if @types.include?(name)
44
+ @types[name].new(args)
45
+ else
46
+ raise UnknownNagiosType, "Unknown type %s" % name
47
+ end
48
+ end
49
+
50
+ # Yield each type in turn.
51
+ def self.eachtype
52
+ @types.each do |name, type|
53
+ yield [name, type]
54
+ end
55
+ end
56
+
57
+ # Create a mapping.
58
+ def self.map(hash)
59
+ @map ||= {}
60
+ hash.each do |n, v| @map[n] = v end
61
+ end
62
+
63
+ # Return a mapping (or nil) for a param
64
+ def self.mapping(name)
65
+ name = name.intern if name.is_a? String
66
+ if defined? @map
67
+ @map[name]
68
+ else
69
+ nil
70
+ end
71
+ end
72
+
73
+ # Return the namevar for the canonical name.
74
+ def self.namevar
75
+ if defined? @namevar
76
+ return @namevar
77
+ else
78
+ if parameter?(:name)
79
+ return :name
80
+ elsif tmp = (self.name.to_s + "_name").intern and parameter?(tmp)
81
+ @namevar = tmp
82
+ return @namevar
83
+ else
84
+ raise "Type %s has no name var" % self.name
85
+ end
86
+ end
87
+ end
88
+
89
+ # Create a new type.
90
+ def self.newtype(name, &block)
91
+ name = name.intern if name.is_a? String
92
+
93
+ @types ||= {}
94
+
95
+ # Create the class, with the correct name.
96
+ t = Class.new(self)
97
+ t.name = name
98
+
99
+ # Everyone gets this. There should probably be a better way, and I
100
+ # should probably hack the attribute system to look things up based on
101
+ # this "use" setting, but, eh.
102
+ t.parameters = [:use]
103
+
104
+ const_set(name.to_s.capitalize,t)
105
+
106
+ # Evaluate the passed block. This should usually define all of the work.
107
+ t.class_eval(&block)
108
+
109
+ @types[name] = t
110
+ end
111
+
112
+ # Define both the normal case and camelcase method for a parameter
113
+ def self.paramattr(name)
114
+ camel = camelcase(name)
115
+ param = name
116
+
117
+ [name, camel].each do |method|
118
+ define_method(method) do
119
+ @parameters[param]
120
+ end
121
+
122
+ define_method(method.to_s + "=") do |value|
123
+ @parameters[param] = value
124
+ end
125
+ end
126
+
127
+ end
128
+
129
+ # Is the specified name a valid parameter?
130
+ def self.parameter?(name)
131
+ name = name.intern if name.is_a? String
132
+ return @parameters.include?(name)
133
+ end
134
+
135
+ # Manually set the namevar
136
+ def self.setnamevar(name)
137
+ name = name.intern if name.is_a? String
138
+ @namevar = name
139
+ end
140
+
141
+ # Set the valid parameters for this class
142
+ def self.setparameters(*array)
143
+ @parameters += array
144
+ end
145
+
146
+ # Set the superior ldap object class. Seems silly to include this
147
+ # in this class, but, eh.
148
+ def self.setsuperior(name)
149
+ @superior = name
150
+ end
151
+
152
+ # Parameters to suppress in output.
153
+ def self.suppress(name)
154
+ @suppress ||= []
155
+ @suppress << name
156
+ end
157
+
158
+ # Whether a given parameter is suppressed.
159
+ def self.suppress?(name)
160
+ defined? @suppress and @suppress.include?(name)
161
+ end
162
+
163
+ # Return our name as the string.
164
+ def self.to_s
165
+ self.name.to_s
166
+ end
167
+
168
+ # Return a type by name.
169
+ def self.type(name)
170
+ name = name.intern if name.is_a? String
171
+
172
+ @types[name]
173
+ end
174
+
175
+ # Convenience methods.
176
+ def [](param)
177
+ send(param)
178
+ end
179
+
180
+ # Convenience methods.
181
+ def []=(param,value)
182
+ send(param.to_s + "=", value)
183
+ end
184
+
185
+ # Iterate across all ofour set parameters.
186
+ def each
187
+ @parameters.each { |param,value|
188
+ yield(param,value)
189
+ }
190
+ end
191
+
192
+ # Initialize our object, optionally with a list of parameters.
193
+ def initialize(args = {})
194
+ @parameters = {}
195
+
196
+ args.each { |param,value|
197
+ self[param] = value
198
+ }
199
+ end
200
+
201
+ # Handle parameters like attributes.
202
+ def method_missing(mname, *args)
203
+ pname = mname.to_s
204
+ pname.sub!(/=/, '')
205
+
206
+ if self.class.parameter?(pname)
207
+ if pname =~ /A-Z/
208
+ pname = self.class.decamelcase(pname)
209
+ end
210
+ self.class.paramattr(pname)
211
+
212
+ # Now access the parameters directly, to make it at least less
213
+ # likely we'll end up in an infinite recursion.
214
+ if mname.to_s =~ /=$/
215
+ @parameters[pname] = *args
216
+ else
217
+ return @parameters[mname]
218
+ end
219
+ else
220
+ super
221
+ end
222
+ end
223
+
224
+ # Retrieve our name, through a bit of redirection.
225
+ def name
226
+ send(self.class.namevar)
227
+ end
228
+
229
+ # This is probably a bad idea.
230
+ def name=(value)
231
+ send(self.class.namevar.to_s + "=", value)
232
+ end
233
+
234
+ def namevar
235
+ return (self.type + "_name").intern
236
+ end
237
+
238
+ def parammap(param)
239
+ unless defined? @map
240
+ map = {
241
+ self.namevar => "cn"
242
+ }
243
+ if self.class.map
244
+ map.update(self.class.map)
245
+ end
246
+ end
247
+ if map.include?(param)
248
+ return map[param]
249
+ else
250
+ return "nagios-" + param.id2name.gsub(/_/,'-')
251
+ end
252
+ end
253
+
254
+ def parent
255
+ unless defined? self.class.attached
256
+ puts "Duh, you called parent on an unattached class"
257
+ return
258
+ end
259
+
260
+ klass,param = self.class.attached
261
+ unless @parameters.include?(param)
262
+ puts "Huh, no attachment param"
263
+ return
264
+ end
265
+ klass[@parameters[param]]
266
+ end
267
+
268
+ # okay, this sucks
269
+ # how do i get my list of ocs?
270
+ def to_ldif
271
+ base = self.class.ldapbase
272
+ str = self.dn + "\n"
273
+ ocs = Array.new
274
+ if self.class.ocs
275
+ # i'm storing an array, so i have to flatten it and stuff
276
+ kocs = self.class.ocs
277
+ ocs.push(*kocs)
278
+ end
279
+ ocs.push "top"
280
+ oc = self.class.to_s
281
+ oc.sub!(/Nagios/,'nagios')
282
+ oc.sub!(/::/,'')
283
+ ocs.push oc
284
+ ocs.each { |oc|
285
+ str += "objectclass: " + oc + "\n"
286
+ }
287
+ @parameters.each { |name,value|
288
+ if self.class.suppress.include?(name)
289
+ next
290
+ end
291
+ ldapname = self.parammap(name)
292
+ str += ldapname + ": " + value + "\n"
293
+ }
294
+ str += "\n"
295
+ str
296
+ end
297
+
298
+ def to_s
299
+ str = "define #{self.type} {\n"
300
+
301
+ self.each { |param,value|
302
+ str += %{\t%-30s %s\n} % [ param,
303
+ if value.is_a? Array
304
+ value.join(",")
305
+ else
306
+ value
307
+ end
308
+ ]
309
+ }
310
+
311
+ str += "}\n"
312
+
313
+ str
314
+ end
315
+
316
+ # The type of object we are.
317
+ def type
318
+ self.class.name
319
+ end
320
+
321
+ # object types
322
+ newtype :command do
323
+ setparameters :command_name, :command_line
324
+ end
325
+
326
+ newtype :contact do
327
+ setparameters :contact_name, :alias, :host_notification_period,
328
+ :host_notification_commands, :service_notification_period,
329
+ :service_notification_commands,
330
+ :email, :pager, :service_notification_options, :host_notification_options
331
+
332
+ setsuperior "person"
333
+ end
334
+
335
+ newtype :contactgroup do
336
+ setparameters :contactgroup_name, :alias, :members
337
+ end
338
+
339
+ newtype :host do
340
+ setparameters :host_name, :notifications_enabled, :event_handler_enabled,
341
+ :flap_detection_enabled, :process_perf_data, :retain_status_information,
342
+ :retain_nonstatus_information, :register, :use, :alias,
343
+ :address, :check_command, :max_check_attempts, :notification_interval,
344
+ :notification_period, :notification_options, :checks_enabled,
345
+ :failure_prediction_enabled, :parents
346
+
347
+ setsuperior "person"
348
+
349
+ map :address => "ipHostNumber"
350
+ end
351
+
352
+ newtype :hostextinfo do
353
+ auxiliary = true
354
+
355
+ setparameters :host_name, :notes_url, :icon_image, :icon_image_alt, :vrml_image,
356
+ "2d_coords".intern, "3d_coords".intern
357
+
358
+ setnamevar :host_name
359
+ end
360
+
361
+ newtype :hostgroup do
362
+ setparameters :hostgroup_name, :alias, :contact_groups, :members
363
+ end
364
+
365
+ newtype :hostgroupescalation do
366
+ auxiliary = true
367
+ setparameters :hostgroup_name, :first_notification, :last_notification,
368
+ :contact_groups, :notification_interval
369
+
370
+ setnamevar :hostgroup_name
371
+ end
372
+
373
+ newtype :service do
374
+ attach :host => :host_name
375
+ setparameters :name, :active_checks_enabled, :passive_checks_enabled,
376
+ :parallelize_check, :obsess_over_service, :check_freshness,
377
+ :notifications_enabled, :event_handler_enabled,
378
+ :flap_detection_enabled, :process_perf_data,
379
+ :retain_status_information, :retain_nonstatus_information, :register,
380
+ :is_volatile, :check_period, :max_check_attempts,
381
+ :normal_check_interval, :retry_check_interval, :contact_groups,
382
+ :notification_interval, :notification_period, :notification_options,
383
+ :service_description, :host_name, :freshness_threshold,
384
+ :check_command
385
+
386
+ suppress :host_name
387
+
388
+ setnamevar :service_description
389
+ end
390
+
391
+ newtype :servicedependency do
392
+ auxiliary = true
393
+ setparameters :host_name, :service_description, :dependent_host_name,
394
+ :dependent_service_description, :execution_failure_criteria,
395
+ :notification_failure_criteria
396
+
397
+ setnamevar :host_name
398
+ end
399
+
400
+ newtype :serviceescalation do
401
+ setparameters :host_name, :service_description, :first_notification,
402
+ :last_notification, :contact_groups, :notification_interval
403
+
404
+ setnamevar :host_name
405
+ end
406
+
407
+ newtype :serviceextinfo do
408
+ auxiliary = true
409
+
410
+ setparameters :host_name, :service_description, :icon_image, :icon_image_alt
411
+
412
+ setnamevar :host_name
413
+ end
414
+
415
+ newtype :timeperiod do
416
+ setparameters :timeperiod_name, :alias, :sunday, :monday, :tuesday, :wednesday,
417
+ :thursday, :friday, :saturday
418
+ end
419
+ end
420
+
421
+ # $Id$