puppet 0.18.4 → 0.22.4

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 (673) hide show
  1. data/CHANGELOG +288 -0
  2. data/README +2 -2
  3. data/Rakefile +78 -5
  4. data/bin/puppet +28 -36
  5. data/bin/puppetca +81 -38
  6. data/bin/puppetd +65 -62
  7. data/bin/puppetdoc +409 -140
  8. data/bin/puppetmasterd +59 -47
  9. data/bin/puppetrun +38 -23
  10. data/conf/freebsd/puppetd +26 -0
  11. data/conf/freebsd/puppetmasterd +26 -0
  12. data/conf/gentoo/conf.d/puppet +5 -0
  13. data/conf/gentoo/conf.d/puppetmaster +12 -0
  14. data/conf/gentoo/init.d/puppet +38 -0
  15. data/conf/gentoo/init.d/puppetmaster +50 -0
  16. data/conf/gentoo/puppet/fileserver.conf +12 -0
  17. data/conf/gentoo/puppet/puppetca.conf +29 -0
  18. data/conf/gentoo/puppet/puppetd.conf +29 -0
  19. data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
  20. data/conf/redhat/client.init +10 -5
  21. data/conf/redhat/client.sysconfig +1 -1
  22. data/conf/redhat/fileserver.conf +2 -2
  23. data/conf/redhat/logrotate +1 -1
  24. data/conf/redhat/no-lockdir.patch +13 -0
  25. data/conf/redhat/puppet.spec +65 -8
  26. data/conf/redhat/puppetd.conf +0 -4
  27. data/conf/redhat/server.init +3 -6
  28. data/conf/solaris/pkginfo +1 -1
  29. data/conf/solaris/smf/svc-puppetd +2 -2
  30. data/conf/suse/client.init +142 -0
  31. data/conf/suse/puppet.spec +221 -0
  32. data/conf/suse/server.init +162 -0
  33. data/examples/code/mac_automount.pp +16 -0
  34. data/examples/root/bin/sleeper +3 -5
  35. data/examples/root/etc/init.d/sleeper +8 -2
  36. data/examples/root/etc/puppet/fileserver.conf +12 -2
  37. data/examples/root/etc/puppet/namespaceauth.conf +20 -0
  38. data/examples/root/etc/puppet/puppetd.conf +4 -0
  39. data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
  40. data/examples/root/etc/puppet/tagmail.conf +1 -0
  41. data/ext/emacs/puppet-mode.el +46 -1
  42. data/ext/logcheck/puppet +15 -0
  43. data/ext/module_puppet +15 -23
  44. data/ext/vim/puppet.vim +4 -2
  45. data/install.rb +2 -1
  46. data/lib/puppet.rb +76 -207
  47. data/lib/puppet/configuration.rb +331 -0
  48. data/lib/puppet/daemon.rb +63 -246
  49. data/lib/puppet/dsl.rb +371 -0
  50. data/lib/puppet/element.rb +8 -26
  51. data/lib/puppet/error.rb +54 -0
  52. data/lib/puppet/event.rb +8 -243
  53. data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
  54. data/lib/puppet/external/event-loop.rb +1 -0
  55. data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
  56. data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
  57. data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
  58. data/lib/puppet/external/gratr.rb +33 -0
  59. data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
  60. data/lib/puppet/external/gratr/base.rb +34 -0
  61. data/lib/puppet/external/gratr/biconnected.rb +116 -0
  62. data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
  63. data/lib/puppet/external/gratr/common.rb +73 -0
  64. data/lib/puppet/external/gratr/comparability.rb +92 -0
  65. data/lib/puppet/external/gratr/digraph.rb +116 -0
  66. data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
  67. data/lib/puppet/external/gratr/dot.rb +90 -0
  68. data/lib/puppet/external/gratr/edge.rb +145 -0
  69. data/lib/puppet/external/gratr/graph.rb +303 -0
  70. data/lib/puppet/external/gratr/graph_api.rb +83 -0
  71. data/lib/puppet/external/gratr/import.rb +44 -0
  72. data/lib/puppet/external/gratr/labels.rb +90 -0
  73. data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
  74. data/lib/puppet/external/gratr/rdot.rb +327 -0
  75. data/lib/puppet/external/gratr/search.rb +409 -0
  76. data/lib/puppet/external/gratr/strong_components.rb +127 -0
  77. data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
  78. data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
  79. data/lib/puppet/feature/base.rb +20 -0
  80. data/lib/puppet/feature/rails.rb +52 -0
  81. data/lib/puppet/metatype/attributes.rb +719 -0
  82. data/lib/puppet/metatype/closure.rb +111 -0
  83. data/lib/puppet/metatype/container.rb +94 -0
  84. data/lib/puppet/metatype/evaluation.rb +118 -0
  85. data/lib/puppet/metatype/instances.rb +261 -0
  86. data/lib/puppet/metatype/manager.rb +169 -0
  87. data/lib/puppet/metatype/metaparams.rb +409 -0
  88. data/lib/puppet/metatype/providers.rb +260 -0
  89. data/lib/puppet/metatype/relationships.rb +116 -0
  90. data/lib/puppet/metatype/schedules.rb +39 -0
  91. data/lib/puppet/metatype/tags.rb +39 -0
  92. data/lib/puppet/modules.rb +113 -0
  93. data/lib/puppet/network/authconfig.rb +168 -0
  94. data/lib/puppet/network/authorization.rb +84 -0
  95. data/lib/puppet/network/authstore.rb +293 -0
  96. data/lib/puppet/network/client.rb +187 -0
  97. data/lib/puppet/network/client/ca.rb +56 -0
  98. data/lib/puppet/network/client/dipper.rb +81 -0
  99. data/lib/puppet/network/client/file.rb +7 -0
  100. data/lib/puppet/network/client/logger.rb +6 -0
  101. data/lib/puppet/network/client/master.rb +644 -0
  102. data/lib/puppet/{client → network/client}/proxy.rb +3 -3
  103. data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
  104. data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
  105. data/lib/puppet/network/client/runner.rb +13 -0
  106. data/lib/puppet/network/client/status.rb +5 -0
  107. data/lib/puppet/network/client_request.rb +32 -0
  108. data/lib/puppet/network/handler.rb +33 -0
  109. data/lib/puppet/{server → network/handler}/ca.rb +5 -6
  110. data/lib/puppet/network/handler/filebucket.rb +180 -0
  111. data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
  112. data/lib/puppet/{server → network/handler}/logger.rb +3 -5
  113. data/lib/puppet/{server → network/handler}/master.rb +42 -8
  114. data/lib/puppet/network/handler/report.rb +158 -0
  115. data/lib/puppet/network/handler/resource.rb +190 -0
  116. data/lib/puppet/{server → network/handler}/runner.rb +17 -18
  117. data/lib/puppet/network/handler/status.rb +13 -0
  118. data/lib/puppet/network/rights.rb +74 -0
  119. data/lib/puppet/network/server.rb +5 -0
  120. data/lib/puppet/network/server/mongrel.rb +138 -0
  121. data/lib/puppet/network/server/webrick.rb +153 -0
  122. data/lib/puppet/network/xmlrpc/client.rb +129 -0
  123. data/lib/puppet/network/xmlrpc/processor.rb +91 -0
  124. data/lib/puppet/network/xmlrpc/server.rb +20 -0
  125. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
  126. data/lib/puppet/parameter.rb +390 -346
  127. data/lib/puppet/parser/ast.rb +116 -147
  128. data/lib/puppet/parser/ast/astarray.rb +17 -33
  129. data/lib/puppet/parser/ast/branch.rb +2 -0
  130. data/lib/puppet/parser/ast/caseopt.rb +7 -12
  131. data/lib/puppet/parser/ast/casestatement.rb +23 -32
  132. data/lib/puppet/parser/ast/collection.rb +19 -80
  133. data/lib/puppet/parser/ast/collexpr.rb +81 -0
  134. data/lib/puppet/parser/ast/component.rb +160 -89
  135. data/lib/puppet/parser/ast/else.rb +30 -0
  136. data/lib/puppet/parser/ast/function.rb +9 -2
  137. data/lib/puppet/parser/ast/hostclass.rb +47 -131
  138. data/lib/puppet/parser/ast/ifstatement.rb +43 -0
  139. data/lib/puppet/parser/ast/leaf.rb +10 -21
  140. data/lib/puppet/parser/ast/node.rb +32 -79
  141. data/lib/puppet/parser/ast/resourcedef.rb +222 -0
  142. data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
  143. data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
  144. data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
  145. data/lib/puppet/parser/ast/resourceref.rb +44 -0
  146. data/lib/puppet/parser/ast/selector.rb +16 -8
  147. data/lib/puppet/parser/ast/tag.rb +3 -1
  148. data/lib/puppet/parser/ast/vardef.rb +8 -12
  149. data/lib/puppet/parser/collector.rb +181 -0
  150. data/lib/puppet/parser/functions.rb +191 -36
  151. data/lib/puppet/parser/interpreter.rb +802 -380
  152. data/lib/puppet/parser/lexer.rb +86 -19
  153. data/lib/puppet/parser/parser.rb +1123 -960
  154. data/lib/puppet/parser/resource.rb +353 -0
  155. data/lib/puppet/parser/resource/param.rb +57 -0
  156. data/lib/puppet/parser/resource/reference.rb +71 -0
  157. data/lib/puppet/parser/scope.rb +573 -1000
  158. data/lib/puppet/parser/templatewrapper.rb +54 -0
  159. data/lib/puppet/pgraph.rb +208 -0
  160. data/lib/puppet/propertychange.rb +143 -0
  161. data/lib/puppet/provider.rb +302 -0
  162. data/lib/puppet/provider/cron/crontab.rb +187 -0
  163. data/lib/puppet/provider/group/groupadd.rb +29 -0
  164. data/lib/puppet/provider/group/netinfo.rb +12 -0
  165. data/lib/puppet/provider/group/pw.rb +31 -0
  166. data/lib/puppet/provider/host/netinfo.rb +18 -0
  167. data/lib/puppet/provider/host/parsed.rb +73 -0
  168. data/lib/puppet/provider/mount.rb +57 -0
  169. data/lib/puppet/provider/mount/netinfo.rb +38 -0
  170. data/lib/puppet/provider/mount/parsed.rb +37 -0
  171. data/lib/puppet/provider/nameservice.rb +344 -0
  172. data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
  173. data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
  174. data/lib/puppet/provider/nameservice/pw.rb +22 -0
  175. data/lib/puppet/provider/package/apple.rb +53 -0
  176. data/lib/puppet/provider/package/apt.rb +119 -0
  177. data/lib/puppet/provider/package/aptitude.rb +30 -0
  178. data/lib/puppet/provider/package/aptrpm.rb +79 -0
  179. data/lib/puppet/provider/package/blastwave.rb +114 -0
  180. data/lib/puppet/provider/package/darwinport.rb +88 -0
  181. data/lib/puppet/provider/package/dpkg.rb +109 -0
  182. data/lib/puppet/provider/package/freebsd.rb +43 -0
  183. data/lib/puppet/provider/package/gem.rb +104 -0
  184. data/lib/puppet/provider/package/openbsd.rb +93 -0
  185. data/lib/puppet/provider/package/pkgdmg.rb +119 -0
  186. data/lib/puppet/provider/package/portage.rb +112 -0
  187. data/lib/puppet/provider/package/ports.rb +94 -0
  188. data/lib/puppet/provider/package/rpm.rb +125 -0
  189. data/lib/puppet/provider/package/rug.rb +53 -0
  190. data/lib/puppet/provider/package/sun.rb +168 -0
  191. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  192. data/lib/puppet/provider/package/up2date.rb +45 -0
  193. data/lib/puppet/provider/package/yum.rb +54 -0
  194. data/lib/puppet/provider/parsedfile.rb +342 -0
  195. data/lib/puppet/provider/port/parsed.rb +174 -0
  196. data/lib/puppet/provider/service/base.rb +136 -0
  197. data/lib/puppet/provider/service/debian.rb +32 -0
  198. data/lib/puppet/provider/service/gentoo.rb +49 -0
  199. data/lib/puppet/{type → provider}/service/init.rb +42 -40
  200. data/lib/puppet/provider/service/redhat.rb +59 -0
  201. data/lib/puppet/{type → provider}/service/smf.rb +24 -13
  202. data/lib/puppet/provider/sshkey/parsed.rb +36 -0
  203. data/lib/puppet/provider/user/netinfo.rb +106 -0
  204. data/lib/puppet/provider/user/pw.rb +41 -0
  205. data/lib/puppet/provider/user/useradd.rb +67 -0
  206. data/lib/puppet/provider/zone/solaris.rb +208 -0
  207. data/lib/puppet/rails.rb +102 -66
  208. data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
  209. data/lib/puppet/rails/database/schema.rb +89 -0
  210. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
  211. data/lib/puppet/rails/external/tagging/init.rb +5 -0
  212. data/lib/puppet/rails/external/tagging/tag.rb +50 -0
  213. data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
  214. data/lib/puppet/rails/fact_name.rb +7 -0
  215. data/lib/puppet/rails/fact_value.rb +5 -0
  216. data/lib/puppet/rails/host.rb +95 -46
  217. data/lib/puppet/rails/param_name.rb +28 -0
  218. data/lib/puppet/rails/param_value.rb +5 -0
  219. data/lib/puppet/rails/puppet_class.rb +9 -0
  220. data/lib/puppet/rails/resource.rb +95 -0
  221. data/lib/puppet/rails/source_file.rb +5 -0
  222. data/lib/puppet/relationship.rb +63 -0
  223. data/lib/puppet/reports/log.rb +14 -0
  224. data/lib/puppet/reports/rrdgraph.rb +114 -10
  225. data/lib/puppet/reports/store.rb +64 -0
  226. data/lib/puppet/reports/tagmail.rb +144 -71
  227. data/lib/puppet/sslcertificates.rb +38 -5
  228. data/lib/puppet/sslcertificates/ca.rb +142 -37
  229. data/lib/puppet/sslcertificates/certificate.rb +3 -3
  230. data/lib/puppet/sslcertificates/inventory.rb +53 -0
  231. data/lib/puppet/sslcertificates/support.rb +128 -0
  232. data/lib/puppet/transaction.rb +568 -189
  233. data/lib/puppet/transaction/report.rb +14 -3
  234. data/lib/puppet/transportable.rb +18 -10
  235. data/lib/puppet/type.rb +279 -2299
  236. data/lib/puppet/type/component.rb +63 -63
  237. data/lib/puppet/type/cron.rb +294 -710
  238. data/lib/puppet/type/exec.rb +185 -129
  239. data/lib/puppet/type/group.rb +38 -89
  240. data/lib/puppet/type/host.rb +110 -0
  241. data/lib/puppet/type/mount.rb +189 -0
  242. data/lib/puppet/type/notify.rb +47 -0
  243. data/lib/puppet/type/package.rb +129 -257
  244. data/lib/puppet/type/parsedtype.rb +172 -297
  245. data/lib/puppet/type/pfile.rb +540 -319
  246. data/lib/puppet/type/pfile/checksum.rb +103 -76
  247. data/lib/puppet/type/pfile/content.rb +16 -10
  248. data/lib/puppet/type/pfile/ensure.rb +52 -34
  249. data/lib/puppet/type/pfile/group.rb +25 -18
  250. data/lib/puppet/type/pfile/mode.rb +7 -4
  251. data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
  252. data/lib/puppet/type/pfile/source.rb +119 -124
  253. data/lib/puppet/type/pfile/target.rb +29 -45
  254. data/lib/puppet/type/pfile/type.rb +2 -2
  255. data/lib/puppet/type/pfilebucket.rb +18 -14
  256. data/lib/puppet/type/port.rb +121 -0
  257. data/lib/puppet/type/property.rb +530 -0
  258. data/lib/puppet/type/resources.rb +150 -0
  259. data/lib/puppet/type/schedule.rb +38 -22
  260. data/lib/puppet/type/service.rb +70 -326
  261. data/lib/puppet/type/sshkey.rb +76 -0
  262. data/lib/puppet/type/tidy.rb +197 -97
  263. data/lib/puppet/type/user.rb +107 -183
  264. data/lib/puppet/type/yumrepo.rb +53 -34
  265. data/lib/puppet/type/zone.rb +55 -208
  266. data/lib/puppet/util.rb +239 -201
  267. data/lib/puppet/util/autoload.rb +107 -0
  268. data/lib/puppet/util/classgen.rb +208 -0
  269. data/lib/puppet/{config.rb → util/config.rb} +102 -54
  270. data/lib/puppet/util/docs.rb +104 -0
  271. data/lib/puppet/util/errors.rb +55 -0
  272. data/lib/puppet/util/execution.rb +22 -0
  273. data/lib/puppet/util/feature.rb +76 -0
  274. data/lib/puppet/util/fileparsing.rb +380 -0
  275. data/lib/puppet/util/filetype.rb +300 -0
  276. data/lib/puppet/util/graph.rb +39 -0
  277. data/lib/puppet/util/inifile.rb +209 -0
  278. data/lib/puppet/util/loadedfile.rb +71 -0
  279. data/lib/puppet/util/log.rb +549 -0
  280. data/lib/puppet/util/logging.rb +20 -0
  281. data/lib/puppet/util/metaid.rb +22 -0
  282. data/lib/puppet/util/methodhelper.rb +37 -0
  283. data/lib/puppet/util/metric.rb +160 -0
  284. data/lib/puppet/util/package.rb +31 -0
  285. data/lib/puppet/util/pidlock.rb +68 -0
  286. data/lib/puppet/util/plist.rb +24 -0
  287. data/lib/puppet/util/plist/generator.rb +226 -0
  288. data/lib/puppet/util/plist/parser.rb +227 -0
  289. data/lib/puppet/util/posix.rb +87 -0
  290. data/lib/puppet/util/provider_features.rb +170 -0
  291. data/lib/puppet/util/rails/collection_merger.rb +42 -0
  292. data/lib/puppet/util/storage.rb +103 -0
  293. data/lib/puppet/util/subclass_loader.rb +83 -0
  294. data/lib/puppet/util/suidmanager.rb +86 -0
  295. data/lib/puppet/util/variables.rb +39 -0
  296. data/lib/puppet/util/warnings.rb +15 -0
  297. data/test/Rakefile +97 -0
  298. data/test/certmgr/ca.rb +81 -0
  299. data/test/certmgr/certmgr.rb +77 -50
  300. data/test/certmgr/inventory.rb +79 -0
  301. data/test/certmgr/support.rb +81 -0
  302. data/test/executables/filebucket.rb +49 -0
  303. data/test/executables/puppetbin.rb +28 -12
  304. data/test/executables/puppetca.rb +75 -54
  305. data/test/executables/puppetd.rb +10 -13
  306. data/test/executables/puppetmasterd.rb +12 -17
  307. data/test/executables/puppetmodule.rb +18 -17
  308. data/test/language/ast.rb +242 -798
  309. data/test/language/ast/casestatement.rb +104 -0
  310. data/test/language/ast/component.rb +133 -0
  311. data/test/language/ast/hostclass.rb +162 -0
  312. data/test/language/ast/selector.rb +62 -0
  313. data/test/language/ast/variable.rb +31 -0
  314. data/test/language/collector.rb +369 -0
  315. data/test/language/functions.rb +305 -18
  316. data/test/language/interpreter.rb +894 -125
  317. data/test/language/lexer.rb +98 -12
  318. data/test/language/node.rb +37 -53
  319. data/test/language/parser.rb +455 -148
  320. data/test/language/resource.rb +535 -0
  321. data/test/language/scope.rb +451 -561
  322. data/test/language/snippets.rb +101 -111
  323. data/test/language/transportable.rb +6 -8
  324. data/test/lib/mocha.rb +19 -0
  325. data/test/lib/mocha/any_instance_method.rb +35 -0
  326. data/test/lib/mocha/auto_verify.rb +113 -0
  327. data/test/lib/mocha/central.rb +35 -0
  328. data/test/lib/mocha/class_method.rb +62 -0
  329. data/test/lib/mocha/expectation.rb +295 -0
  330. data/test/lib/mocha/expectation_error.rb +6 -0
  331. data/test/lib/mocha/infinite_range.rb +27 -0
  332. data/test/lib/mocha/inspect.rb +37 -0
  333. data/test/lib/mocha/instance_method.rb +8 -0
  334. data/test/lib/mocha/metaclass.rb +7 -0
  335. data/test/lib/mocha/mock.rb +20 -0
  336. data/test/lib/mocha/mock_methods.rb +122 -0
  337. data/test/lib/mocha/object.rb +100 -0
  338. data/test/lib/mocha/pretty_parameters.rb +28 -0
  339. data/test/lib/mocha/setup_and_teardown.rb +23 -0
  340. data/test/lib/mocha/standalone.rb +30 -0
  341. data/test/lib/mocha/test_case_adapter.rb +49 -0
  342. data/test/lib/mocha_standalone.rb +2 -0
  343. data/test/lib/puppettest.rb +294 -0
  344. data/test/lib/puppettest/certificates.rb +61 -0
  345. data/test/lib/puppettest/exetest.rb +123 -0
  346. data/test/lib/puppettest/fakes.rb +194 -0
  347. data/test/lib/puppettest/fileparsing.rb +33 -0
  348. data/test/lib/puppettest/filetesting.rb +231 -0
  349. data/test/lib/puppettest/graph.rb +41 -0
  350. data/test/lib/puppettest/parsertesting.rb +392 -0
  351. data/test/lib/puppettest/railstesting.rb +56 -0
  352. data/test/lib/puppettest/reporttesting.rb +19 -0
  353. data/test/lib/puppettest/resourcetesting.rb +73 -0
  354. data/test/lib/puppettest/servertest.rb +72 -0
  355. data/test/lib/puppettest/support.rb +8 -0
  356. data/test/lib/puppettest/support/assertions.rb +101 -0
  357. data/test/lib/puppettest/support/helpers.rb +23 -0
  358. data/test/lib/puppettest/support/resources.rb +37 -0
  359. data/test/lib/puppettest/support/utils.rb +160 -0
  360. data/test/lib/puppettest/testcase.rb +48 -0
  361. data/test/lib/rake/puppet_test_loader.rb +17 -0
  362. data/test/lib/rake/puppet_testtask.rb +17 -0
  363. data/test/lib/spec.rb +8 -0
  364. data/test/lib/spec/callback.rb +11 -0
  365. data/test/lib/spec/callback/callback_container.rb +60 -0
  366. data/test/lib/spec/callback/extensions/module.rb +24 -0
  367. data/test/lib/spec/callback/extensions/object.rb +37 -0
  368. data/test/lib/spec/deprecated.rb +3 -0
  369. data/test/lib/spec/expectations.rb +59 -0
  370. data/test/lib/spec/expectations/differs/default.rb +62 -0
  371. data/test/lib/spec/expectations/errors.rb +6 -0
  372. data/test/lib/spec/expectations/extensions.rb +3 -0
  373. data/test/lib/spec/expectations/extensions/object.rb +109 -0
  374. data/test/lib/spec/expectations/extensions/proc.rb +57 -0
  375. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  376. data/test/lib/spec/expectations/handler.rb +47 -0
  377. data/test/lib/spec/expectations/should.rb +5 -0
  378. data/test/lib/spec/expectations/should/base.rb +64 -0
  379. data/test/lib/spec/expectations/should/change.rb +69 -0
  380. data/test/lib/spec/expectations/should/have.rb +128 -0
  381. data/test/lib/spec/expectations/should/not.rb +74 -0
  382. data/test/lib/spec/expectations/should/should.rb +81 -0
  383. data/test/lib/spec/expectations/sugar.rb +47 -0
  384. data/test/lib/spec/matchers.rb +160 -0
  385. data/test/lib/spec/matchers/be.rb +161 -0
  386. data/test/lib/spec/matchers/be_close.rb +37 -0
  387. data/test/lib/spec/matchers/change.rb +120 -0
  388. data/test/lib/spec/matchers/eql.rb +43 -0
  389. data/test/lib/spec/matchers/equal.rb +43 -0
  390. data/test/lib/spec/matchers/has.rb +44 -0
  391. data/test/lib/spec/matchers/have.rb +140 -0
  392. data/test/lib/spec/matchers/include.rb +50 -0
  393. data/test/lib/spec/matchers/match.rb +41 -0
  394. data/test/lib/spec/matchers/raise_error.rb +100 -0
  395. data/test/lib/spec/matchers/respond_to.rb +35 -0
  396. data/test/lib/spec/matchers/satisfy.rb +47 -0
  397. data/test/lib/spec/matchers/throw_symbol.rb +75 -0
  398. data/test/lib/spec/mocks.rb +232 -0
  399. data/test/lib/spec/mocks/argument_expectation.rb +132 -0
  400. data/test/lib/spec/mocks/error_generator.rb +85 -0
  401. data/test/lib/spec/mocks/errors.rb +10 -0
  402. data/test/lib/spec/mocks/extensions/object.rb +3 -0
  403. data/test/lib/spec/mocks/message_expectation.rb +231 -0
  404. data/test/lib/spec/mocks/methods.rb +40 -0
  405. data/test/lib/spec/mocks/mock.rb +26 -0
  406. data/test/lib/spec/mocks/mock_handler.rb +166 -0
  407. data/test/lib/spec/mocks/order_group.rb +29 -0
  408. data/test/lib/spec/rake/spectask.rb +173 -0
  409. data/test/lib/spec/rake/verify_rcov.rb +47 -0
  410. data/test/lib/spec/runner.rb +132 -0
  411. data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
  412. data/test/lib/spec/runner/command_line.rb +34 -0
  413. data/test/lib/spec/runner/context.rb +154 -0
  414. data/test/lib/spec/runner/context_eval.rb +142 -0
  415. data/test/lib/spec/runner/context_runner.rb +55 -0
  416. data/test/lib/spec/runner/drb_command_line.rb +21 -0
  417. data/test/lib/spec/runner/execution_context.rb +17 -0
  418. data/test/lib/spec/runner/extensions/kernel.rb +17 -0
  419. data/test/lib/spec/runner/extensions/object.rb +32 -0
  420. data/test/lib/spec/runner/formatter.rb +5 -0
  421. data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
  422. data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
  423. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
  424. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
  425. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
  426. data/test/lib/spec/runner/heckle_runner.rb +71 -0
  427. data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
  428. data/test/lib/spec/runner/option_parser.rb +224 -0
  429. data/test/lib/spec/runner/reporter.rb +105 -0
  430. data/test/lib/spec/runner/spec_matcher.rb +25 -0
  431. data/test/lib/spec/runner/spec_parser.rb +41 -0
  432. data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
  433. data/test/lib/spec/runner/specification.rb +114 -0
  434. data/test/lib/spec/translator.rb +87 -0
  435. data/test/lib/spec/version.rb +30 -0
  436. data/test/lib/stubba.rb +2 -0
  437. data/test/network/authconfig.rb +72 -0
  438. data/test/network/authorization.rb +138 -0
  439. data/test/network/authstore.rb +450 -0
  440. data/test/network/client/ca.rb +38 -0
  441. data/test/{client → network/client}/client.rb +107 -24
  442. data/test/network/client/dipper.rb +35 -0
  443. data/test/network/client/master.rb +627 -0
  444. data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
  445. data/test/network/client_request.rb +39 -0
  446. data/test/network/daemon.rb +71 -0
  447. data/test/{server → network/handler}/bucket.rb +103 -27
  448. data/test/{server → network/handler}/ca.rb +14 -19
  449. data/test/{server → network/handler}/fileserver.rb +443 -68
  450. data/test/network/handler/handler.rb +64 -0
  451. data/test/{server → network/handler}/logger.rb +26 -26
  452. data/test/network/handler/master.rb +352 -0
  453. data/test/network/handler/report.rb +185 -0
  454. data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
  455. data/test/{server → network/handler}/runner.rb +17 -16
  456. data/test/network/rights.rb +38 -0
  457. data/test/network/server/webrick.rb +140 -0
  458. data/test/network/xmlrpc/client.rb +68 -0
  459. data/test/network/xmlrpc/processor.rb +80 -0
  460. data/test/network/xmlrpc/server.rb +28 -0
  461. data/test/network/xmlrpc/webrick_servlet.rb +26 -0
  462. data/test/other/dsl.rb +218 -0
  463. data/test/other/events.rb +22 -15
  464. data/test/other/overrides.rb +9 -14
  465. data/test/other/pgraph.rb +289 -0
  466. data/test/other/propertychange.rb +142 -0
  467. data/test/other/provider.rb +162 -0
  468. data/test/other/puppet.rb +63 -10
  469. data/test/other/relationship.rb +74 -0
  470. data/test/other/relationships.rb +199 -123
  471. data/test/other/report.rb +152 -23
  472. data/test/other/transactions.rb +824 -78
  473. data/test/puppet/conffiles.rb +16 -11
  474. data/test/puppet/defaults.rb +7 -10
  475. data/test/puppet/{error.rb → errortest.rb} +5 -8
  476. data/test/puppet/modules.rb +58 -0
  477. data/test/puppet/tc_suidmanager.rb +107 -0
  478. data/test/rails/host.rb +177 -0
  479. data/test/rails/rails.rb +27 -0
  480. data/test/rails/railsparameter.rb +62 -0
  481. data/test/rails/railsresource.rb +100 -0
  482. data/test/ral/manager/attributes.rb +296 -0
  483. data/test/ral/manager/manager.rb +55 -0
  484. data/test/ral/manager/provider.rb +54 -0
  485. data/test/ral/manager/type.rb +837 -0
  486. data/test/ral/providers/cron/crontab.rb +346 -0
  487. data/test/ral/providers/group.rb +252 -0
  488. data/test/ral/providers/host/netinfo.rb +58 -0
  489. data/test/ral/providers/host/parsed.rb +226 -0
  490. data/test/ral/providers/mount/netinfo.rb +80 -0
  491. data/test/ral/providers/mount/parsed.rb +223 -0
  492. data/test/ral/providers/nameservice.rb +33 -0
  493. data/test/ral/providers/package.rb +253 -0
  494. data/test/ral/providers/package/apt.rb +89 -0
  495. data/test/ral/providers/package/aptitude.rb +69 -0
  496. data/test/ral/providers/package/aptrpm.rb +89 -0
  497. data/test/ral/providers/package/dpkg.rb +64 -0
  498. data/test/ral/providers/parsedfile.rb +668 -0
  499. data/test/ral/providers/parsedport.rb +233 -0
  500. data/test/ral/providers/provider.rb +423 -0
  501. data/test/{types → ral/providers}/service.rb +20 -121
  502. data/test/ral/providers/service/base.rb +75 -0
  503. data/test/ral/providers/sshkey/parsed.rb +111 -0
  504. data/test/ral/providers/user.rb +567 -0
  505. data/test/ral/providers/user/useradd.rb +250 -0
  506. data/test/ral/types/basic.rb +90 -0
  507. data/test/ral/types/component.rb +113 -0
  508. data/test/ral/types/cron.rb +480 -0
  509. data/test/{types → ral/types}/exec.rb +278 -82
  510. data/test/ral/types/file.rb +1799 -0
  511. data/test/ral/types/file/target.rb +363 -0
  512. data/test/{types → ral/types}/filebucket.rb +15 -17
  513. data/test/{types → ral/types}/fileignoresource.rb +9 -15
  514. data/test/ral/types/filesources.rb +1046 -0
  515. data/test/ral/types/group.rb +169 -0
  516. data/test/ral/types/host.rb +155 -0
  517. data/test/ral/types/mount.rb +312 -0
  518. data/test/ral/types/package.rb +85 -0
  519. data/test/ral/types/parameter.rb +172 -0
  520. data/test/ral/types/port.rb +148 -0
  521. data/test/ral/types/property.rb +343 -0
  522. data/test/ral/types/resources.rb +221 -0
  523. data/test/{types → ral/types}/schedule.rb +34 -12
  524. data/test/ral/types/service.rb +37 -0
  525. data/test/{types → ral/types}/sshkey.rb +75 -65
  526. data/test/ral/types/tidy.rb +240 -0
  527. data/test/ral/types/user.rb +493 -0
  528. data/test/{types → ral/types}/yumrepo.rb +7 -11
  529. data/test/{types → ral/types}/zone.rb +45 -45
  530. data/test/tagging/tagging.rb +17 -26
  531. data/test/util/autoload.rb +130 -0
  532. data/test/util/classgen.rb +227 -0
  533. data/test/{other → util}/config.rb +373 -113
  534. data/test/util/execution.rb +34 -0
  535. data/test/util/features.rb +94 -0
  536. data/test/util/fileparsing.rb +677 -0
  537. data/test/{other → util}/filetype.rb +9 -12
  538. data/test/util/graph.rb +108 -0
  539. data/test/{other → util}/inifile.rb +24 -11
  540. data/test/util/loadedfile.rb +106 -0
  541. data/test/{other → util}/log.rb +96 -50
  542. data/test/{other → util}/metrics.rb +7 -17
  543. data/test/util/package.rb +27 -0
  544. data/test/util/pidlock.rb +126 -0
  545. data/test/util/posixtest.rb +173 -0
  546. data/test/util/storage.rb +123 -0
  547. data/test/util/subclass_loader.rb +100 -0
  548. data/test/util/utiltest.rb +368 -0
  549. metadata +449 -169
  550. data/examples/code/classing +0 -35
  551. data/examples/code/failers/badclassnoparam +0 -10
  552. data/examples/code/failers/badclassparam +0 -10
  553. data/examples/code/failers/badcompnoparam +0 -9
  554. data/examples/code/failers/badcompparam +0 -9
  555. data/examples/code/failers/badtypeparam +0 -3
  556. data/examples/code/failers/noobjectrvalue +0 -1
  557. data/examples/code/snippets/aliastest.pp +0 -16
  558. data/examples/code/snippets/argumentdefaults +0 -14
  559. data/examples/code/snippets/casestatement.pp +0 -58
  560. data/examples/code/snippets/classheirarchy.pp +0 -15
  561. data/examples/code/snippets/classincludes.pp +0 -17
  562. data/examples/code/snippets/classpathtest +0 -11
  563. data/examples/code/snippets/componentmetaparams.pp +0 -11
  564. data/examples/code/snippets/deepclassheirarchy.pp +0 -23
  565. data/examples/code/snippets/defineoverrides.pp +0 -17
  566. data/examples/code/snippets/dirchmod +0 -19
  567. data/examples/code/snippets/emptyclass.pp +0 -9
  568. data/examples/code/snippets/emptyexec.pp +0 -3
  569. data/examples/code/snippets/failmissingexecpath.pp +0 -13
  570. data/examples/code/snippets/falsevalues.pp +0 -3
  571. data/examples/code/snippets/filecreate +0 -11
  572. data/examples/code/snippets/implicititeration +0 -15
  573. data/examples/code/snippets/multipleinstances +0 -7
  574. data/examples/code/snippets/namevartest +0 -9
  575. data/examples/code/snippets/scopetest +0 -13
  576. data/examples/code/snippets/selectorvalues.pp +0 -42
  577. data/examples/code/snippets/simpledefaults +0 -5
  578. data/examples/code/snippets/simpleselector +0 -38
  579. data/examples/code/snippets/singleary.pp +0 -19
  580. data/examples/code/snippets/singlequote.pp +0 -11
  581. data/examples/code/snippets/singleselector.pp +0 -22
  582. data/examples/code/snippets/tag.pp +0 -9
  583. data/examples/code/snippets/tagged.pp +0 -35
  584. data/lib/puppet/client.rb +0 -177
  585. data/lib/puppet/client/ca.rb +0 -21
  586. data/lib/puppet/client/dipper.rb +0 -76
  587. data/lib/puppet/client/file.rb +0 -20
  588. data/lib/puppet/client/log.rb +0 -17
  589. data/lib/puppet/client/master.rb +0 -531
  590. data/lib/puppet/client/runner.rb +0 -17
  591. data/lib/puppet/client/status.rb +0 -7
  592. data/lib/puppet/event-loop.rb +0 -1
  593. data/lib/puppet/filetype.rb +0 -308
  594. data/lib/puppet/inifile.rb +0 -201
  595. data/lib/puppet/log.rb +0 -524
  596. data/lib/puppet/metric.rb +0 -132
  597. data/lib/puppet/networkclient.rb +0 -175
  598. data/lib/puppet/parsedfile.rb +0 -58
  599. data/lib/puppet/parser/ast/classdef.rb +0 -79
  600. data/lib/puppet/parser/ast/compdef.rb +0 -75
  601. data/lib/puppet/parser/ast/nodedef.rb +0 -73
  602. data/lib/puppet/parser/ast/objectdef.rb +0 -284
  603. data/lib/puppet/parser/ast/objectref.rb +0 -77
  604. data/lib/puppet/rails/database.rb +0 -40
  605. data/lib/puppet/rails/rails_object.rb +0 -42
  606. data/lib/puppet/rails/rails_parameter.rb +0 -5
  607. data/lib/puppet/server.rb +0 -196
  608. data/lib/puppet/server/authconfig.rb +0 -177
  609. data/lib/puppet/server/authstore.rb +0 -226
  610. data/lib/puppet/server/filebucket.rb +0 -155
  611. data/lib/puppet/server/pelement.rb +0 -188
  612. data/lib/puppet/server/report.rb +0 -184
  613. data/lib/puppet/server/rights.rb +0 -78
  614. data/lib/puppet/server/servlet.rb +0 -274
  615. data/lib/puppet/statechange.rb +0 -129
  616. data/lib/puppet/storage.rb +0 -98
  617. data/lib/puppet/type/nameservice.rb +0 -264
  618. data/lib/puppet/type/nameservice/netinfo.rb +0 -232
  619. data/lib/puppet/type/nameservice/objectadd.rb +0 -146
  620. data/lib/puppet/type/nameservice/posix.rb +0 -12
  621. data/lib/puppet/type/nameservice/pw.rb +0 -107
  622. data/lib/puppet/type/package/apple.rb +0 -41
  623. data/lib/puppet/type/package/apt.rb +0 -107
  624. data/lib/puppet/type/package/blastwave.rb +0 -136
  625. data/lib/puppet/type/package/darwinport.rb +0 -97
  626. data/lib/puppet/type/package/dpkg.rb +0 -113
  627. data/lib/puppet/type/package/freebsd.rb +0 -19
  628. data/lib/puppet/type/package/gem.rb +0 -119
  629. data/lib/puppet/type/package/openbsd.rb +0 -112
  630. data/lib/puppet/type/package/ports.rb +0 -103
  631. data/lib/puppet/type/package/rpm.rb +0 -121
  632. data/lib/puppet/type/package/sun.rb +0 -174
  633. data/lib/puppet/type/package/sunfreeware.rb +0 -7
  634. data/lib/puppet/type/package/yum.rb +0 -52
  635. data/lib/puppet/type/parsedtype/host.rb +0 -144
  636. data/lib/puppet/type/parsedtype/mount.rb +0 -271
  637. data/lib/puppet/type/parsedtype/port.rb +0 -261
  638. data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
  639. data/lib/puppet/type/service/base.rb +0 -12
  640. data/lib/puppet/type/service/debian.rb +0 -46
  641. data/lib/puppet/type/service/redhat.rb +0 -38
  642. data/lib/puppet/type/state.rb +0 -393
  643. data/lib/puppet/type/symlink.rb +0 -186
  644. data/test/client/master.rb +0 -207
  645. data/test/language/rails.rb +0 -105
  646. data/test/other/parsedfile.rb +0 -58
  647. data/test/other/storage.rb +0 -100
  648. data/test/puppet/utiltest.rb +0 -299
  649. data/test/puppettest.rb +0 -1170
  650. data/test/server/authconfig.rb +0 -56
  651. data/test/server/authstore.rb +0 -218
  652. data/test/server/master.rb +0 -201
  653. data/test/server/report.rb +0 -93
  654. data/test/server/rights.rb +0 -41
  655. data/test/server/server.rb +0 -152
  656. data/test/test +0 -61
  657. data/test/types/basic.rb +0 -117
  658. data/test/types/component.rb +0 -298
  659. data/test/types/cron.rb +0 -718
  660. data/test/types/file.rb +0 -1314
  661. data/test/types/filesources.rb +0 -590
  662. data/test/types/group.rb +0 -323
  663. data/test/types/host.rb +0 -186
  664. data/test/types/mount.rb +0 -294
  665. data/test/types/package.rb +0 -538
  666. data/test/types/parameter.rb +0 -107
  667. data/test/types/port.rb +0 -201
  668. data/test/types/query.rb +0 -101
  669. data/test/types/state.rb +0 -92
  670. data/test/types/symlink.rb +0 -120
  671. data/test/types/tidy.rb +0 -102
  672. data/test/types/type.rb +0 -469
  673. data/test/types/user.rb +0 -563
@@ -0,0 +1,150 @@
1
+ # Created by Luke Kanies on 2006-12-12.
2
+ # Copyright (c) 2006. All rights reserved.
3
+
4
+ require 'puppet'
5
+
6
+ Puppet::Type.newtype(:resources) do
7
+ @doc = "This is a metatype that can manage other resource types. Any
8
+ metaparams specified here will be passed on to any generated resources,
9
+ so you can purge umanaged resources but set ``noop`` to true so the
10
+ purging is only logged and does not actually happen."
11
+
12
+
13
+ newparam(:name) do
14
+ desc "The name of the type to be managed."
15
+
16
+ validate do |name|
17
+ unless Puppet::Type.type(name)
18
+ raise ArgumentError, "Could not find resource type '%s'" % name
19
+ end
20
+ end
21
+
22
+ munge { |v| v.to_s }
23
+ end
24
+
25
+ newparam(:purge, :boolean => true) do
26
+ desc "Purge unmanaged resources. This will delete any resource
27
+ that is not specified in your configuration
28
+ and is not required by any specified resources."
29
+
30
+ newvalues(:true, :false)
31
+
32
+ validate do |value|
33
+ if [:true, true, "true"].include?(value)
34
+ unless @parent.resource_type.respond_to?(:list)
35
+ raise ArgumentError, "Purging resources of type %s is not supported, since they cannot be listed" % @parent[:name]
36
+ end
37
+ unless @parent.resource_type.validproperty?(:ensure)
38
+ raise ArgumentError, "Purging is only supported on types that accept 'ensure'"
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ newparam(:unless_system_user) do
45
+ desc "This keeps system users from being purged. By default, it
46
+ does not purge users whose UIDs are less than or equal to 500, but you can specify
47
+ a different UID as the inclusive limit."
48
+
49
+ newvalues(:true, :false, /^\d+$/)
50
+
51
+ munge do |value|
52
+ case value
53
+ when /^\d+/
54
+ Integer(value)
55
+ when :true, true
56
+ 500
57
+ when :false, false
58
+ false
59
+ when Integer: value
60
+ else
61
+ raise ArgumentError, "Invalid value %s" % value.inspect
62
+ end
63
+ end
64
+
65
+ defaultto {
66
+ if @parent[:name] == "user"
67
+ 500
68
+ else
69
+ nil
70
+ end
71
+ }
72
+ end
73
+
74
+ def check(resource)
75
+ unless defined? @checkmethod
76
+ @checkmethod = "%s_check" % self[:name]
77
+ end
78
+ unless defined? @hascheck
79
+ @hascheck = respond_to?(@checkmethod)
80
+ end
81
+ if @hascheck
82
+ return send(@checkmethod, resource)
83
+ else
84
+ return true
85
+ end
86
+ end
87
+
88
+ # Generate any new resources we need to manage. This is pretty hackish
89
+ # right now, because it only supports purging.
90
+ def generate
91
+ return [] unless self.purge?
92
+ hascheck = false
93
+ method =
94
+ resource_type.list.find_all do |resource|
95
+ ! resource.managed?
96
+ end.find_all do |resource|
97
+ check(resource)
98
+ end.each do |resource|
99
+ begin
100
+ resource[:ensure] = :absent
101
+ rescue ArgumentError, Puppet::Error => detail
102
+ err "The 'ensure' attribute on %s resources does not accept 'absent' as a value" %
103
+ [self[:name]]
104
+ return []
105
+ end
106
+ @parameters.each do |name, param|
107
+ next unless param.metaparam?
108
+ resource[name] = param.value
109
+ end
110
+
111
+ # Mark that we're purging, so transactions can handle relationships
112
+ # correctly
113
+ resource.purging
114
+ end
115
+ end
116
+
117
+ def resource_type
118
+ unless defined? @resource_type
119
+ unless type = Puppet::Type.type(self[:name])
120
+ raise Puppet::DevError, "Could not find resource type"
121
+ end
122
+ @resource_type = type
123
+ end
124
+ @resource_type
125
+ end
126
+
127
+ def user_check(resource)
128
+ return true unless self[:name] == "user"
129
+ return true unless self[:unless_system_user]
130
+
131
+ resource[:check] = :uid
132
+ resource.retrieve
133
+
134
+ if system_users().include?(resource[:name])
135
+ return false
136
+ end
137
+
138
+ if resource.is(:uid) <= self[:unless_system_user]
139
+ return false
140
+ else
141
+ return true
142
+ end
143
+ end
144
+
145
+ def system_users
146
+ %w{root nobody bin noaccess daemon sys}
147
+ end
148
+ end
149
+
150
+ # $Id: resources.rb 2286 2007-03-17 23:16:37Z luke $
@@ -16,7 +16,7 @@ module Puppet
16
16
  Thus, it behooves you to use wider scheduling (e.g., over a couple of
17
17
  hours) combined with periods and repetitions. For instance, if you
18
18
  wanted to restrict certain elements to only running once, between
19
- the hours of two and 4 AM, then you would use this schedule:
19
+ the hours of two and 4 AM, then you would use this schedule::
20
20
 
21
21
  schedule { maint:
22
22
  range => \"2 - 4\",
@@ -33,7 +33,7 @@ module Puppet
33
33
  Puppet automatically creates a schedule for each valid period with the
34
34
  same name as that period (e.g., hourly and daily). Additionally,
35
35
  a schedule named *puppet* is created and used as the default,
36
- with the following attributes:
36
+ with the following attributes::
37
37
 
38
38
  schedule { puppet:
39
39
  period => hourly,
@@ -43,11 +43,9 @@ module Puppet
43
43
  This will cause elements to be applied every 30 minutes by default.
44
44
  "
45
45
 
46
- @states = []
47
-
48
46
  newparam(:name) do
49
47
  desc "The name of the schedule. This name is used to retrieve the
50
- schedule when assigning it to an object:
48
+ schedule when assigning it to an object::
51
49
 
52
50
  schedule { daily:
53
51
  period => daily,
@@ -67,7 +65,7 @@ module Puppet
67
65
  is always a range within a 24 hour period, and hours must be
68
66
  specified in numbers between 0 and 23, inclusive. Minutes and
69
67
  seconds can be provided, using the normal colon as a separator.
70
- For instance:
68
+ For instance::
71
69
 
72
70
  schedule { maintenance:
73
71
  range => \"1:30 - 4:30\"
@@ -76,7 +74,7 @@ module Puppet
76
74
  This is mostly useful for restricting certain elements to being
77
75
  applied in maintenance windows or during off-peak hours."
78
76
 
79
- # This is lame; states all use arrays as values, but parameters don't.
77
+ # This is lame; properties all use arrays as values, but parameters don't.
80
78
  # That's going to hurt eventually.
81
79
  validate do |values|
82
80
  values = [values] unless values.is_a?(Array)
@@ -104,6 +102,18 @@ module Puppet
104
102
  self.fail "Invalid range %s" % value
105
103
  end
106
104
 
105
+ # Make sure the hours are valid
106
+ [range[0][0], range[1][0]].each do |n|
107
+ if n < 0 or n > 23
108
+ raise ArgumentError, "Invalid hour '%s'" % n
109
+ end
110
+ end
111
+
112
+ [range[0][1], range[1][1]].each do |n|
113
+ if n and (n < 0 or n > 59)
114
+ raise ArgumentError, "Invalid minute '%s'" % n
115
+ end
116
+ end
107
117
  if range[0][0] > range[1][0]
108
118
  self.fail(("Invalid range %s; " % value) +
109
119
  "ranges cannot span days."
@@ -179,7 +189,7 @@ module Puppet
179
189
  newparam(:periodmatch) do
180
190
  desc "Whether periods should be matched by number (e.g., the two times
181
191
  are in the same hour) or by distance (e.g., the two times are
182
- 60 minutes apart). *number*/**distance**"
192
+ 60 minutes apart)."
183
193
 
184
194
  newvalues(:number, :distance)
185
195
 
@@ -200,7 +210,7 @@ module Puppet
200
210
  If the provided periods are not sufficient, you can provide a
201
211
  value to the *repeat* attribute, which will cause Puppet to
202
212
  schedule the affected elements evenly in the period the
203
- specified number of times. Take this schedule:
213
+ specified number of times. Take this schedule::
204
214
 
205
215
  schedule { veryoften:
206
216
  period => hourly,
@@ -218,7 +228,7 @@ module Puppet
218
228
  See the ``periodmatch`` attribute for tuning whether to match
219
229
  times by their distance apart or by their specific value."
220
230
 
221
- newvalues(:hourly, :daily, :weekly, :monthly)
231
+ newvalues(:hourly, :daily, :weekly, :monthly, :never)
222
232
 
223
233
  @@scale = {
224
234
  :hourly => 3600,
@@ -236,6 +246,8 @@ module Puppet
236
246
  }
237
247
 
238
248
  def match?(previous, now)
249
+ return false if value == :never
250
+
239
251
  value = self.value
240
252
  case @parent[:periodmatch]
241
253
  when :number
@@ -261,7 +273,7 @@ module Puppet
261
273
 
262
274
  newparam(:repeat) do
263
275
  desc "How often the application gets repeated in a given period.
264
- Defaults to 1."
276
+ Defaults to 1. Must be an integer."
265
277
 
266
278
  defaultto 1
267
279
 
@@ -300,20 +312,24 @@ module Puppet
300
312
  end
301
313
 
302
314
  def self.mkdefaultschedules
303
- Puppet.debug "Creating default schedules"
304
315
  # Create our default schedule
305
- self.create(
306
- :name => "puppet",
307
- :period => :hourly,
308
- :repeat => "2"
309
- )
316
+ unless self["puppet"]
317
+ Puppet.debug "Creating default schedules"
318
+ self.create(
319
+ :name => "puppet",
320
+ :period => :hourly,
321
+ :repeat => "2"
322
+ )
323
+ end
310
324
 
311
325
  # And then one for every period
312
326
  @parameters.find { |p| p.name == :period }.values.each { |value|
313
- self.create(
314
- :name => value.to_s,
315
- :period => value
316
- )
327
+ unless self[value.to_s]
328
+ self.create(
329
+ :name => value.to_s,
330
+ :period => value
331
+ )
332
+ end
317
333
  }
318
334
  end
319
335
 
@@ -342,4 +358,4 @@ module Puppet
342
358
  end
343
359
  end
344
360
 
345
- # $Id: schedule.rb 1300 2006-06-19 19:12:54Z luke $
361
+ # $Id: schedule.rb 2408 2007-04-24 02:41:16Z luke $
@@ -15,39 +15,47 @@ module Puppet
15
15
  'status' command, then Puppet will look in the process table for a
16
16
  command matching the service name), but the more information you
17
17
  can provide the better behaviour you will get. Or, you can just
18
- use a platform that has very good service support."
18
+ use a platform that has very good service support.
19
+
20
+ Note that if a ``service`` receives an event from another resource,
21
+ the service will get restarted. The actual command to restart the
22
+ service depends on the platform. You can provide a special command
23
+ for restarting with the ``restart`` attribute."
19
24
 
25
+ feature :enableable, "The provider can enable and disable the service",
26
+ :methods => [:disable, :enable, :enabled?]
27
+
20
28
  attr_reader :stat
21
29
 
22
- newstate(:enable) do
30
+ newproperty(:enable) do
23
31
  attr_reader :runlevel
24
32
  desc "Whether a service should be enabled to start at boot.
25
- This state behaves quite differently depending on the platform;
33
+ This property behaves quite differently depending on the platform;
26
34
  wherever possible, it relies on local tools to enable or disable
27
- a given service. *true*/*false*/*runlevels*"
35
+ a given service."
28
36
 
29
- newvalue(:true) do
30
- unless @parent.respond_to?(:enable)
37
+ newvalue(:true, :event => :service_enabled) do
38
+ unless provider.respond_to?(:enable)
31
39
  raise Puppet::Error, "Service %s does not support enabling" %
32
40
  @parent.name
33
41
  end
34
- @parent.enable
42
+ provider.enable
35
43
  end
36
44
 
37
- newvalue(:false) do
38
- unless @parent.respond_to?(:disable)
45
+ newvalue(:false, :event => :service_disabled) do
46
+ unless provider.respond_to?(:disable)
39
47
  raise Puppet::Error, "Service %s does not support enabling" %
40
48
  @parent.name
41
49
  end
42
- @parent.disable
50
+ provider.disable
43
51
  end
44
52
 
45
53
  def retrieve
46
- unless @parent.respond_to?(:enabled?)
54
+ unless provider.respond_to?(:enabled?)
47
55
  raise Puppet::Error, "Service %s does not support enabling" %
48
56
  @parent.name
49
57
  end
50
- @is = @parent.enabled?
58
+ @is = provider.enabled?
51
59
  end
52
60
 
53
61
  validate do |value|
@@ -80,55 +88,55 @@ module Puppet
80
88
  case self.should
81
89
  when :true
82
90
  if @runlevel
83
- @parent.enable(@runlevel)
91
+ provider.enable(@runlevel)
84
92
  else
85
- @parent.enable()
93
+ provider.enable()
86
94
  end
87
95
  return :service_enabled
88
96
  when :false
89
- @parent.disable
97
+ provider.disable
90
98
  return :service_disabled
91
99
  end
92
100
  end
93
101
  end
94
102
 
95
103
  # Handle whether the service should actually be running right now.
96
- newstate(:ensure) do
97
- desc "Whether a service should be running. **true**/*false*"
104
+ newproperty(:ensure) do
105
+ desc "Whether a service should be running."
98
106
 
99
- newvalue(:stopped) do
100
- @parent.stop
107
+ newvalue(:stopped, :event => :service_stopped) do
108
+ provider.stop
101
109
  end
102
110
 
103
- newvalue(:running) do
104
- @parent.start
111
+ newvalue(:running, :event => :service_started) do
112
+ provider.start
105
113
  end
106
114
 
107
115
  aliasvalue(:false, :stopped)
108
116
  aliasvalue(:true, :running)
109
117
 
110
118
  def retrieve
111
- self.is = @parent.status
119
+ self.is = provider.status
112
120
  end
113
121
 
114
122
  def sync
115
- event = nil
116
- case self.should
117
- when :running
118
- @parent.start
119
- event = :service_started
120
- when :stopped
121
- @parent.stop
122
- event = :service_stopped
123
- else
124
- self.debug "Not running '%s' and shouldn't be running" %
125
- self
126
- end
127
-
128
- if state = @parent.state(:enable)
129
- state.retrieve
130
- unless state.insync?
131
- state.sync
123
+ event = super()
124
+ # case self.should
125
+ # when :running
126
+ # provider.start
127
+ # event = :service_started
128
+ # when :stopped
129
+ # provider.stop
130
+ # event = :service_stopped
131
+ # else
132
+ # self.debug "Not running '%s' and shouldn't be running" %
133
+ # self
134
+ # end
135
+
136
+ if property = @parent.property(:enable)
137
+ property.retrieve
138
+ unless property.insync?
139
+ property.sync
132
140
  end
133
141
  end
134
142
 
@@ -149,41 +157,13 @@ module Puppet
149
157
  end
150
158
  end
151
159
 
152
- newparam(:type) do
153
- desc "The service type. For most platforms, it does not make
154
- sense to set this parameter, as the default is based on
155
- the builtin service facilities. The service types available are:
156
-
157
- * **base**: You must specify everything.
158
- * **init**: Assumes ``start`` and ``stop`` commands exist, but you
159
- must specify everything else.
160
- * **debian**: Debian's own specific version of ``init``.
161
- * **smf**: Solaris 10's new Service Management Facility.
162
- "
163
-
164
- defaultto { @parent.class.defaulttype }
165
-
166
- # Make sure we've got the actual module, not just a string
167
- # representing the module.
168
- munge do |type|
169
- if type.is_a?(String)
170
- type = type.intern
171
- end
172
- if type.is_a?(Symbol)
173
- typeklass = @parent.class.svctype(type)
174
- end
175
- @parent.extend(typeklass)
176
-
177
- # Return the name, not the object
178
- return type
179
- end
180
- end
181
160
  newparam(:binary) do
182
161
  desc "The path to the daemon. This is only used for
183
162
  systems that do not support init scripts. This binary will be
184
163
  used to start the service if no ``start`` parameter is
185
164
  provided."
186
165
  end
166
+
187
167
  newparam(:hasstatus) do
188
168
  desc "Declare the the service's init script has a
189
169
  functional status command. Based on testing, it was found
@@ -202,6 +182,16 @@ module Puppet
202
182
  is in."
203
183
  isnamevar
204
184
  end
185
+
186
+ newparam(:type) do
187
+ desc "Deprecated form of ``provider``."
188
+
189
+ munge do |value|
190
+ warning "'type' is deprecated; use 'provider' instead"
191
+ @parent[:provider] = value
192
+ end
193
+ end
194
+
205
195
  newparam(:path) do
206
196
  desc "The search path for finding init scripts."
207
197
 
@@ -269,55 +259,21 @@ module Puppet
269
259
  desc "Specify a *stop* command manually."
270
260
  end
271
261
 
272
- # Retrieve the default type for the current platform.
273
- def self.defaulttype
274
- unless defined? @defsvctype
275
- @defsvctype = nil
276
- os = Facter["operatingsystem"].value
277
- case os
278
- when "Debian":
279
- @defsvctype = self.svctype(:debian)
280
- when "Solaris":
281
- release = Facter["operatingsystemrelease"].value
282
- if release.sub(/5\./,'').to_i < 10
283
- @defsvctype = self.svctype(:init)
284
- else
285
- @defsvctype = self.svctype(:smf)
286
- end
287
- when "CentOS", "RedHat", "Fedora":
288
- @defsvctype = self.svctype(:redhat)
289
- else
290
- if Facter["kernel"] == "Linux"
291
- Puppet.notice "Using service type %s for %s" %
292
- ["init", Facter["operatingsystem"].value]
293
- @defsvctype = self.svctype(:init)
294
- end
295
- end
296
-
297
- unless @defsvctype
298
- Puppet.info "Defaulting to base service type"
299
- @defsvctype = self.svctype(:base)
300
- end
301
- end
302
-
303
- unless defined? @notifieddefault
304
- Puppet.debug "Default service type is %s" % @defsvctype.name
305
- @notifieddefault = true
306
- end
307
-
308
- return @defsvctype.name
262
+ newparam :hasrestart do
263
+ desc "Specify that an init script has a ``restart`` option. Otherwise,
264
+ the init script's ``stop`` and ``start`` methods are used."
265
+ newvalues(:true, :false)
309
266
  end
310
267
 
311
268
  # List all available services
312
269
  def self.list
313
- # First see if the default service type can list services for us
314
- deftype = svctype(defaulttype())
270
+ defprov = defaultprovider
315
271
 
316
272
  names = []
317
- if deftype.respond_to? :list
318
- deftype.list(deftype.name)
273
+ if defprov.respond_to? :list
274
+ defprov.list(defprov.name)
319
275
  else
320
- Puppet.debug "Type %s does not respond to list" % deftype.name
276
+ Puppet.debug "Type %s does not respond to list" % defprov.name
321
277
  end
322
278
 
323
279
  self.collect { |s| s }
@@ -342,139 +298,6 @@ module Puppet
342
298
  @paths[type].dup
343
299
  end
344
300
 
345
- # Create new subtypes of service management.
346
- def self.newsvctype(name, parent = nil, &block)
347
- if parent
348
- parent = self.svctype(parent)
349
- end
350
- svcname = name
351
- mod = Module.new
352
- const_set("SvcType" + name.to_s.capitalize,mod)
353
-
354
- # Add our parent, if it exists
355
- if parent
356
- mod.send(:include, parent)
357
- end
358
-
359
- # And now define the support methods
360
- code = %{
361
- def self.name
362
- "#{svcname}"
363
- end
364
-
365
- def self.inspect
366
- "SvcType(#{svcname})"
367
- end
368
-
369
- def self.to_s
370
- "SvcType(#{svcname})"
371
- end
372
-
373
- def svctype
374
- "#{svcname}"
375
- end
376
- }
377
-
378
- mod.module_eval(code)
379
-
380
- mod.module_eval(&block)
381
-
382
- # Extend the service type with the util stuff
383
- mod.send(:include, Puppet::Util)
384
-
385
- #unless mod.respond_to? :list
386
- # Puppet.debug "Service type %s has no list method" % name
387
- #end
388
-
389
- # "module_function" makes the :list method private, so if the parent
390
- # method also called module_function, then it's already private
391
- if mod.public_method_defined? :list or mod.private_method_defined? :list
392
- mod.send(:module_function, :list)
393
- end
394
-
395
- # mark it as a valid type
396
- unless defined? @typeparam
397
- @typeparam = @parameters.find { |p| p.name == :type }
398
-
399
- unless @typeparam
400
- raise Puppet::DevError, "Could not package type parameter"
401
- end
402
- end
403
- @typeparam.newvalues(name)
404
-
405
- # And add it to our list of types
406
- @modules ||= Hash.new do |hash, key|
407
- if key.is_a?(String)
408
- key = key.intern
409
- end
410
-
411
- if hash.include?(key)
412
- hash[key]
413
- else
414
- nil
415
- end
416
- end
417
- @modules[name] = mod
418
- end
419
-
420
- # Retrieve a service type.
421
- def self.svctype(name)
422
- name = name.intern if name.is_a? String
423
-
424
- # Try autoloading lacking service types.
425
- unless @modules.include? name
426
- begin
427
- require "puppet/type/service/#{name}"
428
- unless @modules.include? name
429
- Puppet.warning(
430
- "Loaded puppet/type/service/#{name} but " +
431
- "service type was not created"
432
- )
433
- end
434
- rescue LoadError
435
- # nothing
436
- end
437
- end
438
- @modules[name]
439
- end
440
-
441
- # Execute a command. Basically just makes sure it exits with a 0
442
- # code.
443
- def execute(type, cmd)
444
- self.debug "Executing %s" % cmd.inspect
445
- output = %x(#{cmd} 2>&1)
446
- unless $? == 0
447
- self.fail "Could not %s %s: %s" %
448
- [type, self.name, output.chomp]
449
- end
450
- end
451
-
452
- # Get the process ID for a running process. Requires the 'pattern'
453
- # parameter.
454
- def getpid
455
- unless self[:pattern]
456
- self.fail "Either a stop command or a pattern must be specified"
457
- end
458
- ps = Facter["ps"].value
459
- unless ps and ps != ""
460
- self.fail(
461
- "You must upgrade Facter to a version that includes 'ps'"
462
- )
463
- end
464
- regex = Regexp.new(self[:pattern])
465
- self.debug "Executing '#{ps}'"
466
- IO.popen(ps) { |table|
467
- table.each { |line|
468
- if regex.match(line)
469
- ary = line.sub(/^\s+/, '').split(/\s+/)
470
- return ary[1]
471
- end
472
- }
473
- }
474
-
475
- return nil
476
- end
477
-
478
301
  # Initialize the service. This is basically responsible for merging
479
302
  # in the right module.
480
303
  def initialize(hash)
@@ -486,94 +309,15 @@ module Puppet
486
309
  end
487
310
  end
488
311
 
489
- # Retrieve the service type.
490
- def type2module(type)
491
- self.class.svctype(type)
492
- end
493
-
494
312
  # Basically just a synonym for restarting. Used to respond
495
313
  # to events.
496
314
  def refresh
497
- self.restart
498
- end
499
-
500
- # How to restart the process.
501
- def restart
502
- if self[:restart] or self.respond_to?(:restartcmd)
503
- cmd = self[:restart] || self.restartcmd
504
- self.execute("restart", cmd)
505
- else
506
- self.stop
507
- self.start
508
- end
509
- end
510
-
511
- # Check if the process is running. Prefer the 'status' parameter,
512
- # then 'statuscmd' method, then look in the process table. We give
513
- # the object the option to not return a status command, which might
514
- # happen if, for instance, it has an init script (and thus responds to
515
- # 'statuscmd') but does not have 'hasstatus' enabled.
516
- def status
517
- if self[:status] or (
518
- self.respond_to?(:statuscmd) and self.statuscmd
519
- )
520
- cmd = self[:status] || self.statuscmd
521
- self.debug "Executing %s" % cmd.inspect
522
- output = %x(#{cmd} 2>&1)
523
- self.debug "%s status returned %s" %
524
- [self.name, output.inspect]
525
- if $? == 0
526
- return :running
527
- else
528
- return :stopped
529
- end
530
- elsif pid = self.getpid
531
- self.debug "PID is %s" % pid
532
- return :running
533
- else
534
- return :stopped
535
- end
536
- end
537
-
538
- # Run the 'start' parameter command, or the specified 'startcmd'.
539
- def start
540
- cmd = self[:start] || self.startcmd
541
- self.execute("start", cmd)
542
- end
543
-
544
- # Stop the service. If a 'stop' parameter is specified, it
545
- # takes precedence; otherwise checks if the object responds to
546
- # a 'stopcmd' method, and if so runs that; otherwise, looks
547
- # for the process in the process table.
548
- # This method will generally not be overridden by submodules.
549
- def stop
550
- if self[:stop]
551
- return self[:stop]
552
- elsif self.respond_to?(:stopcmd)
553
- self.execute("stop", self.stopcmd)
554
- else
555
- pid = getpid
556
- unless pid
557
- self.info "%s is not running" % self.name
558
- return false
559
- end
560
- output = %x(kill #{pid} 2>&1)
561
- if $? != 0
562
- self.fail "Could not kill %s, PID %s: %s" %
563
- [self.name, pid, output]
564
- end
565
- return true
315
+ # Only restart if we're supposed to be running
316
+ if ens = @parameters[:ensure] and ens.should == :running and ens.is == :running
317
+ provider.restart
566
318
  end
567
319
  end
568
320
  end
569
321
  end
570
322
 
571
- # Load all of the different service types. We could probably get away with
572
- # loading less here, but it's not a big deal to do so.
573
- require 'puppet/type/service/base'
574
- require 'puppet/type/service/init'
575
- require 'puppet/type/service/debian'
576
- require 'puppet/type/service/redhat'
577
- require 'puppet/type/service/smf'
578
-
579
- # $Id: service.rb 1295 2006-06-17 02:04:50Z luke $
323
+ # $Id: service.rb 2409 2007-04-24 06:20:21Z luke $