puppet 0.18.4 → 0.22.4

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 (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,107 @@
1
+ # Autoload paths, either based on names or all at once.
2
+ class Puppet::Util::Autoload
3
+ include Puppet::Util
4
+
5
+ @autoloaders = {}
6
+
7
+ attr_accessor :object, :path, :objwarn, :wrap
8
+
9
+
10
+ class << self
11
+ attr_reader :autoloaders
12
+ private :autoloaders
13
+ end
14
+ Puppet::Util.classproxy self, :autoloaders, "[]", "[]=", :clear
15
+
16
+ attr_reader :loaded
17
+ private :loaded
18
+
19
+ Puppet::Util.proxy self, :loaded, :clear
20
+
21
+ def handle_libdir
22
+ dir = Puppet[:libdir]
23
+
24
+ $: << dir unless $:.include?(dir)
25
+ end
26
+
27
+ def initialize(obj, path, options = {})
28
+ @path = path.to_s
29
+ @object = obj
30
+
31
+ self.class[obj] = self
32
+
33
+ options.each do |opt, value|
34
+ opt = opt.intern if opt.is_a? String
35
+ begin
36
+ self.send(opt.to_s + "=", value)
37
+ rescue NoMethodError
38
+ raise ArgumentError, "%s is not a valid option" % opt
39
+ end
40
+ end
41
+
42
+ unless defined? @wrap
43
+ @wrap = true
44
+ end
45
+
46
+ @loaded = {}
47
+ end
48
+
49
+ def load(name)
50
+ name = symbolize(name)
51
+ handle_libdir()
52
+
53
+ path = File.join(@path, name.to_s + ".rb")
54
+
55
+ begin
56
+ Kernel.load path, @wrap
57
+ @loaded[name] = true
58
+ return true
59
+ rescue LoadError => detail
60
+ # I have no idea what's going on here, but different versions
61
+ # of ruby are raising different errors on missing files.
62
+ unless detail.to_s =~ /^no such file/i
63
+ warn "Could not autoload %s: %s" % [name, detail]
64
+ if Puppet[:trace]
65
+ puts detail.backtrace
66
+ end
67
+ end
68
+ return false
69
+ end
70
+ end
71
+
72
+ def loaded?(name)
73
+ name = symbolize(name)
74
+ @loaded[name]
75
+ end
76
+
77
+ def loadall
78
+ handle_libdir()
79
+ # Load every instance of everything we can find.
80
+ $:.each do |dir|
81
+ fdir = File.join(dir, @path)
82
+ if FileTest.exists?(fdir) and FileTest.directory?(fdir)
83
+ Dir.glob("#{fdir}/*.rb").each do |file|
84
+ # Load here, rather than require, so that facts
85
+ # can be reloaded. This has some short-comings, I
86
+ # believe, but it works as long as real classes
87
+ # aren't used.
88
+ name = File.basename(file).sub(".rb", '').intern
89
+ next if @loaded.include? name
90
+ next if $".include?(File.join(@path, name.to_s + ".rb"))
91
+ filepath = File.join(@path, name.to_s + ".rb")
92
+ begin
93
+ Kernel.require filepath
94
+ @loaded[name] = true
95
+ rescue => detail
96
+ if Puppet[:trace]
97
+ puts detail.backtrace
98
+ end
99
+ warn "Could not autoload %s: %s" % [file.inspect, detail]
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+
107
+ # $Id: autoload.rb 2178 2007-02-07 23:56:59Z luke $
@@ -0,0 +1,208 @@
1
+ module Puppet
2
+ class ConstantAlreadyDefined < Error; end
3
+ class SubclassAlreadyDefined < Error; end
4
+ end
5
+
6
+ module Puppet::Util::ClassGen
7
+ include Puppet::Util::MethodHelper
8
+ include Puppet::Util
9
+
10
+ # Create a new subclass. Valid options are:
11
+ # * <tt>:array</tt>: An array of existing classes. If specified, the new
12
+ # class is added to this array.
13
+ # * <tt>:attributes</tt>: A hash of attributes to set before the block is
14
+ # evaluated.
15
+ # * <tt>:block</tt>: The block to evaluate in the context of the class.
16
+ # You can also just pass the block normally, but it will still be evaluated
17
+ # with <tt>class_eval</tt>.
18
+ # * <tt>:constant</tt>: What to set the constant as. Defaults to the
19
+ # capitalized name.
20
+ # * <tt>:hash</tt>: A hash of existing classes. If specified, the new
21
+ # class is added to this hash, and it is also used for overwrite tests.
22
+ # * <tt>:overwrite</tt>: Whether to overwrite an existing class.
23
+ # * <tt>:parent</tt>: The parent class for the generated class. Defaults to
24
+ # self.
25
+ # * <tt>:prefix</tt>: The constant prefix. Default to nothing; if specified,
26
+ # the capitalized name is appended and the result is set as the constant.
27
+ def genclass(name, options = {}, &block)
28
+ genthing(name, Class, options, block)
29
+ end
30
+
31
+ # Create a new module. Valid options are:
32
+ # * <tt>:array</tt>: An array of existing classes. If specified, the new
33
+ # class is added to this array.
34
+ # * <tt>:attributes</tt>: A hash of attributes to set before the block is
35
+ # evaluated.
36
+ # * <tt>:block</tt>: The block to evaluate in the context of the class.
37
+ # You can also just pass the block normally, but it will still be evaluated
38
+ # with <tt>class_eval</tt>.
39
+ # * <tt>:constant</tt>: What to set the constant as. Defaults to the
40
+ # capitalized name.
41
+ # * <tt>:hash</tt>: A hash of existing classes. If specified, the new
42
+ # class is added to this hash, and it is also used for overwrite tests.
43
+ # * <tt>:overwrite</tt>: Whether to overwrite an existing class.
44
+ # * <tt>:prefix</tt>: The constant prefix. Default to nothing; if specified,
45
+ # the capitalized name is appended and the result is set as the constant.
46
+ def genmodule(name, options = {}, &block)
47
+ genthing(name, Module, options, block)
48
+ end
49
+
50
+ # Remove an existing class
51
+ def rmclass(name, options)
52
+ options = symbolize_options(options)
53
+ const = genconst_string(name, options)
54
+ retval = false
55
+ if const_defined? const
56
+ remove_const(const)
57
+ retval = true
58
+ end
59
+
60
+ if hash = options[:hash] and hash.include? name
61
+ hash.delete(name)
62
+ retval = true
63
+ end
64
+
65
+ # Let them know whether we did actually delete a subclass.
66
+ return retval
67
+ end
68
+
69
+ private
70
+
71
+ # Generate the constant to create or remove.
72
+ def genconst_string(name, options)
73
+ unless const = options[:constant]
74
+ prefix = options[:prefix] || ""
75
+ const = prefix + name2const(name)
76
+ end
77
+
78
+ return const
79
+ end
80
+
81
+ # This does the actual work of creating our class or module. It's just a
82
+ # slightly abstract version of genclass.
83
+ def genthing(name, type, options, block)
84
+ options = symbolize_options(options)
85
+
86
+ name = symbolize(name.to_s.downcase)
87
+
88
+ if type == Module
89
+ #evalmethod = :module_eval
90
+ evalmethod = :class_eval
91
+ # Create the class, with the correct name.
92
+ klass = Module.new do
93
+ class << self
94
+ attr_reader :name
95
+ end
96
+ @name = name
97
+ end
98
+ else
99
+ options[:parent] ||= self
100
+ evalmethod = :class_eval
101
+ # Create the class, with the correct name.
102
+ klass = Class.new(options[:parent]) do
103
+ @name = name
104
+ end
105
+ end
106
+
107
+ # Create the constant as appropriation.
108
+ handleclassconst(klass, name, options)
109
+
110
+ # Initialize any necessary variables.
111
+ initclass(klass, options)
112
+
113
+ block ||= options[:block]
114
+
115
+ # Evaluate the passed block if there is one. This should usually
116
+ # define all of the work.
117
+ if block
118
+ klass.send(evalmethod, &block)
119
+ end
120
+
121
+ if klass.respond_to? :postinit
122
+ klass.postinit
123
+ end
124
+
125
+ # Store the class in hashes or arrays or whatever.
126
+ storeclass(klass, name, options)
127
+
128
+ return klass
129
+ end
130
+
131
+ # Handle the setting and/or removing of the associated constant.
132
+ def handleclassconst(klass, name, options)
133
+ const = genconst_string(name, options)
134
+
135
+ if const_defined? const
136
+ if options[:overwrite]
137
+ Puppet.info "Redefining %s in %s" % [name, self]
138
+ remove_const(const)
139
+ else
140
+ raise Puppet::ConstantAlreadyDefined,
141
+ "Class %s is already defined in %s" % [const, self]
142
+ end
143
+ end
144
+ const_set(const, klass)
145
+
146
+ return const
147
+ end
148
+
149
+ # Perform the initializations on the class.
150
+ def initclass(klass, options)
151
+ if klass.respond_to? :initvars
152
+ klass.initvars
153
+ end
154
+
155
+ if attrs = options[:attributes]
156
+ attrs.each do |param, value|
157
+ method = param.to_s + "="
158
+ if klass.respond_to? method
159
+ klass.send(method, value)
160
+ end
161
+ end
162
+ end
163
+
164
+ [:include, :extend].each do |method|
165
+ if set = options[method]
166
+ set = [set] unless set.is_a?(Array)
167
+ set.each do |mod|
168
+ klass.send(method, mod)
169
+ end
170
+ end
171
+ end
172
+
173
+ if klass.respond_to? :preinit
174
+ klass.preinit
175
+ end
176
+ end
177
+
178
+ # Convert our name to a constant.
179
+ def name2const(name)
180
+ name.to_s.capitalize
181
+ end
182
+
183
+ # Store the class in the appropriate places.
184
+ def storeclass(klass, klassname, options)
185
+ if hash = options[:hash]
186
+ if hash.include? klassname and ! options[:overwrite]
187
+ raise Puppet::SubclassAlreadyDefined,
188
+ "Already a generated class named %s" % klassname
189
+ end
190
+
191
+ hash[klassname] = klass
192
+ end
193
+
194
+ # If we were told to stick it in a hash, then do so
195
+ if array = options[:array]
196
+ if (klass.respond_to? :name and
197
+ array.find { |c| c.name == klassname } and
198
+ ! options[:overwrite])
199
+ raise Puppet::SubclassAlreadyDefined,
200
+ "Already a generated class named %s" % klassname
201
+ end
202
+
203
+ array << klass
204
+ end
205
+ end
206
+ end
207
+
208
+ # $Id: classgen.rb 1856 2006-11-11 07:40:16Z luke $
@@ -2,10 +2,10 @@ require 'puppet'
2
2
  require 'sync'
3
3
  require 'puppet/transportable'
4
4
 
5
- module Puppet
6
5
  # The class for handling configuration files.
7
- class Config
6
+ class Puppet::Util::Config
8
7
  include Enumerable
8
+ include Puppet::Util
9
9
 
10
10
  @@sync = Sync.new
11
11
 
@@ -17,14 +17,20 @@ class Config
17
17
 
18
18
  # Yay, recursion.
19
19
  self.reparse() unless param == :filetimeout
20
- if @config.include?(param)
21
- if @config[param]
22
- val = @config[param].value
23
- return val
20
+
21
+ # Cache the returned values; this method was taking close to
22
+ # 10% of the compile time.
23
+ unless @returned[param]
24
+ if @config.include?(param)
25
+ if @config[param]
26
+ @returned[param] = @config[param].value
27
+ end
28
+ else
29
+ raise ArgumentError, "Undefined configuration parameter '%s'" % param
24
30
  end
25
- else
26
- raise ArgumentError, "Undefined configuration parameter '%s'" % param
27
31
  end
32
+
33
+ return @returned[param]
28
34
  end
29
35
 
30
36
  # Set a config value. This doesn't set the defaults, it sets the value itself.
@@ -33,12 +39,15 @@ class Config
33
39
  param = symbolize(param)
34
40
  unless @config.include?(param)
35
41
  raise Puppet::Error,
36
- "Unknown configuration parameter %s" % param.inspect
42
+ "Attempt to assign a value to unknown configuration parameter %s" % param.inspect
37
43
  end
38
44
  unless @order.include?(param)
39
45
  @order << param
40
46
  end
41
47
  @config[param].value = value
48
+ if @returned.include?(param)
49
+ @returned.delete(param)
50
+ end
42
51
  end
43
52
 
44
53
  return value
@@ -85,7 +94,9 @@ class Config
85
94
  trans.evaluate
86
95
  comp.remove
87
96
  rescue => detail
97
+ if Puppet[:trace]
88
98
  puts detail.backtrace
99
+ end
89
100
  Puppet.err "Could not configure myself: %s" % detail
90
101
  end
91
102
  end
@@ -107,6 +118,7 @@ class Config
107
118
  obj.clear
108
119
  end
109
120
  }
121
+ @returned.clear
110
122
 
111
123
  # Don't clear the 'used' in this case, since it's a config file reparse,
112
124
  # and we want to retain this info.
@@ -117,6 +129,7 @@ class Config
117
129
 
118
130
  # This is mostly just used for testing.
119
131
  def clearused
132
+ @returned.clear
120
133
  @used = []
121
134
  end
122
135
 
@@ -188,6 +201,7 @@ class Config
188
201
  @config = {}
189
202
 
190
203
  @created = []
204
+ @returned = {}
191
205
  end
192
206
 
193
207
  # Make a directory with the appropriate user, group, and mode
@@ -201,7 +215,7 @@ class Config
201
215
  raise ArgumentError, "Default %s is not a file" % default
202
216
  end
203
217
 
204
- Puppet::Util.asuser(obj.owner, obj.group) do
218
+ Puppet::Util::SUIDManager.asuser(obj.owner, obj.group) do
205
219
  mode = obj.mode || 0750
206
220
  Dir.mkdir(obj.value, mode)
207
221
  end
@@ -215,7 +229,7 @@ class Config
215
229
  when /^true$/i: true
216
230
  when /^\d+$/i: Integer(value)
217
231
  else
218
- value.gsub(/^["']|["']$/,'')
232
+ value.gsub(/^["']|["']$/,'').sub(/\s+$/, '')
219
233
  end
220
234
  end
221
235
 
@@ -233,10 +247,10 @@ class Config
233
247
  def parse(file)
234
248
  text = nil
235
249
 
236
- if file.is_a? Puppet::ParsedFile
250
+ if file.is_a? Puppet::Util::LoadedFile
237
251
  @file = file
238
252
  else
239
- @file = Puppet::ParsedFile.new(file)
253
+ @file = Puppet::Util::LoadedFile.new(file)
240
254
  end
241
255
 
242
256
  # Create a timer so that this.
@@ -267,7 +281,18 @@ class Config
267
281
  when /^\s*$/: next # Skip blanks
268
282
  when /^\s*(\w+)\s*=\s*(.+)$/: # settings
269
283
  var = $1.intern
270
- value = mungearg($2)
284
+ if var == :mode
285
+ value = $2
286
+ else
287
+ value = mungearg($2)
288
+ end
289
+
290
+ # Only warn if we don't know what this config var is. This
291
+ # prevents exceptions later on.
292
+ unless @config.include?(var) or metas.include?(var.to_s)
293
+ Puppet.warning "Discarded unknown configuration parameter %s" % var.inspect
294
+ next # Skip this line.
295
+ end
271
296
 
272
297
  # Mmm, "special" attributes
273
298
  if metas.include?(var.to_s)
@@ -276,12 +301,9 @@ class Config
276
301
  end
277
302
  values[section][var.to_s] = value
278
303
 
279
- # Do some annoying skullduggery here. This is so that
280
- # the group can be set in the config file. The problem
281
- # is that we're using the word 'group' twice, which is
282
- # confusing.
283
- if var == :group and section == Puppet.name and @config.include?(:group)
284
- @config[:group].value = value
304
+ # If the parameter is valid, then set it.
305
+ if section == Puppet[:name] and @config.include?(var)
306
+ @config[var].value = value
285
307
  end
286
308
  next
287
309
  end
@@ -384,37 +406,52 @@ class Config
384
406
  def section_to_transportable(section, done = nil, includefiles = true)
385
407
  done ||= Hash.new { |hash, key| hash[key] = {} }
386
408
  objects = []
387
- persection(section) { |obj|
409
+ persection(section) do |obj|
388
410
  if @config[:mkusers] and @config[:mkusers].value
389
- [:owner, :group].each { |attr|
411
+ [:owner, :group].each do |attr|
390
412
  type = nil
391
413
  if attr == :owner
392
414
  type = :user
393
415
  else
394
416
  type = attr
395
417
  end
418
+ # If a user and/or group is set, then make sure we're
419
+ # managing that object
396
420
  if obj.respond_to? attr and name = obj.send(attr)
397
- # Skip owners and groups we've already done, but tag them with
398
- # our section if necessary
421
+ # Skip root or wheel
422
+ next if %w{root wheel}.include?(name.to_s)
423
+
424
+ # Skip owners and groups we've already done, but tag
425
+ # them with our section if necessary
399
426
  if done[type].include?(name)
400
427
  tags = done[type][name].tags
401
428
  unless tags.include?(section)
402
429
  done[type][name].tags = tags << section
403
430
  end
404
431
  elsif newobj = Puppet::Type.type(type)[name]
405
- unless newobj.state(:ensure)
432
+ unless newobj.property(:ensure)
406
433
  newobj[:ensure] = "present"
407
434
  end
408
435
  newobj.tag(section)
436
+ if type == :user
437
+ newobj[:comment] ||= "%s user" % name
438
+ end
409
439
  else
410
- newobj = TransObject.new(name, type.to_s)
440
+ newobj = Puppet::TransObject.new(name, type.to_s)
411
441
  newobj.tags = ["puppet", "configuration", section]
412
442
  newobj[:ensure] = "present"
443
+ if type == :user
444
+ newobj[:comment] ||= "%s user" % name
445
+ end
446
+ # Set the group appropriately for the user
447
+ if type == :user
448
+ newobj[:gid] = Puppet[:group]
449
+ end
413
450
  done[type][name] = newobj
414
451
  objects << newobj
415
452
  end
416
453
  end
417
- }
454
+ end
418
455
  end
419
456
 
420
457
  if obj.respond_to? :to_transportable
@@ -431,7 +468,7 @@ class Config
431
468
  end
432
469
  end
433
470
  end
434
- }
471
+ end
435
472
 
436
473
  bucket = Puppet::TransBucket.new
437
474
  bucket.type = section
@@ -475,15 +512,6 @@ class Config
475
512
  end
476
513
  end
477
514
 
478
- def symbolize(param)
479
- case param
480
- when String: return param.intern
481
- when Symbol: return param
482
- else
483
- raise ArgumentError, "Invalid param type %s" % param.class
484
- end
485
- end
486
-
487
515
  # Convert our list of objects into a component that can be applied.
488
516
  def to_component
489
517
  transport = self.to_transportable
@@ -492,7 +520,7 @@ class Config
492
520
 
493
521
  # Convert our list of objects into a configuration file.
494
522
  def to_config
495
- str = %{The configuration file for #{Puppet.name}. Note that this file
523
+ str = %{The configuration file for #{Puppet[:name]}. Note that this file
496
524
  is likely to have unused configuration parameters in it; any parameter that's
497
525
  valid anywhere in Puppet can be in any config file, even if it's not used.
498
526
 
@@ -588,6 +616,8 @@ Generated on #{Time.now}.
588
616
  Puppet[:tags] = ""
589
617
  end
590
618
  trans = objects.evaluate
619
+ trans.ignoretags = true
620
+ trans.configurator = true
591
621
  trans.evaluate
592
622
  if tags
593
623
  Puppet[:tags] = tags
@@ -620,12 +650,12 @@ Generated on #{Time.now}.
620
650
  end
621
651
 
622
652
  chown = nil
623
- if Process.uid == 0
653
+ if Puppet::Util::SUIDManager.uid == 0
624
654
  chown = [obj.owner, obj.group]
625
655
  else
626
656
  chown = [nil, nil]
627
657
  end
628
- Puppet::Util.asuser(*chown) do
658
+ Puppet::Util::SUIDManager.asuser(*chown) do
629
659
  mode = obj.mode || 0640
630
660
 
631
661
  if args.empty?
@@ -653,13 +683,13 @@ Generated on #{Time.now}.
653
683
  end
654
684
 
655
685
  chown = nil
656
- if Process.uid == 0
686
+ if Puppet::Util::SUIDManager.uid == 0
657
687
  chown = [obj.owner, obj.group]
658
688
  else
659
689
  chown = [nil, nil]
660
690
  end
661
691
 
662
- Puppet::Util.asuser(*chown) do
692
+ Puppet::Util::SUIDManager.asuser(*chown) do
663
693
  mode = obj.mode || 0640
664
694
  if args.empty?
665
695
  args << "w"
@@ -686,27 +716,30 @@ Generated on #{Time.now}.
686
716
  @value = nil
687
717
  end
688
718
 
719
+ # Do variable interpolation on the value.
689
720
  def convert(value)
690
721
  return value unless value
691
722
  return value unless value.is_a? String
692
- if value =~ /\$(\w+)/
693
- parent = $1
694
- if pval = @parent[parent]
695
- newval = value.to_s.sub(/\$#{parent.to_s}/, pval.to_s)
696
- #return File.join(newval.split("/"))
697
- return newval
723
+ newval = value.gsub(/\$(\w+)|\$\{(\w+)\}/) do |value|
724
+ varname = $2 || $1
725
+ if pval = @parent[varname]
726
+ pval
698
727
  else
699
728
  raise Puppet::DevError, "Could not find value for %s" % parent
700
729
  end
701
- else
702
- return value
703
730
  end
731
+
732
+ return newval
704
733
  end
705
734
 
706
735
  def desc=(value)
707
736
  @desc = value.gsub(/^\s*/, '')
708
737
  end
709
738
 
739
+ def hook=(block)
740
+ meta_def :handle, &block
741
+ end
742
+
710
743
  # Create the new element. Pretty much just sets the name.
711
744
  def initialize(args = {})
712
745
  if args.include?(:parent)
@@ -721,6 +754,10 @@ Generated on #{Time.now}.
721
754
 
722
755
  self.send(method, value)
723
756
  end
757
+
758
+ unless self.desc
759
+ raise ArgumentError, "You must provide a description for the %s config option" % self.name
760
+ end
724
761
  end
725
762
 
726
763
  def iscreated
@@ -791,11 +828,16 @@ Generated on #{Time.now}.
791
828
  if respond_to?(:validate)
792
829
  validate(value)
793
830
  end
831
+
794
832
  if respond_to?(:munge)
795
833
  @value = munge(value)
796
834
  else
797
835
  @value = value
798
836
  end
837
+
838
+ if respond_to?(:handle)
839
+ handle(@value)
840
+ end
799
841
  end
800
842
  end
801
843
 
@@ -864,12 +906,14 @@ Generated on #{Time.now}.
864
906
  end
865
907
  [:mode].each { |var|
866
908
  if value = self.send(var)
867
- obj[var] = "%o" % value
909
+ # Don't both converting the mode, since the file type
910
+ # can handle it any old way.
911
+ obj[var] = value
868
912
  end
869
913
  }
870
914
 
871
915
  # Only chown or chgrp when root
872
- if Process.uid == 0
916
+ if Puppet::Util::SUIDManager.uid == 0
873
917
  [:group, :owner].each { |var|
874
918
  if value = self.send(var)
875
919
  obj[var] = value
@@ -879,6 +923,11 @@ Generated on #{Time.now}.
879
923
 
880
924
  # And set the loglevel to debug for everything
881
925
  obj[:loglevel] = "debug"
926
+
927
+ # We're not actually modifying any files here, and if we allow a
928
+ # filebucket to get used here we get into an infinite recursion
929
+ # trying to set the filebucket up.
930
+ obj[:backup] = false
882
931
 
883
932
  if self.section
884
933
  obj.tags += ["puppet", "configuration", self.section, self.name]
@@ -914,6 +963,5 @@ Generated on #{Time.now}.
914
963
  end
915
964
  end
916
965
  end
917
- end
918
966
 
919
- # $Id: config.rb 1421 2006-07-21 23:12:51Z luke $
967
+ # $Id: config.rb 2272 2007-03-08 17:07:35Z luke $