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
@@ -1,3 +1,5 @@
1
+ require 'puppet/parser/ast/branch'
2
+
1
3
  class Puppet::Parser::AST
2
4
  # The code associated with a class. This is different from components
3
5
  # in that each class is a singleton -- only one will exist for a given
@@ -23,4 +25,4 @@ class Puppet::Parser::AST
23
25
  end
24
26
  end
25
27
 
26
- # $Id: tag.rb 1113 2006-04-17 16:15:33Z luke $
28
+ # $Id: tag.rb 1835 2006-11-08 05:22:24Z luke $
@@ -1,8 +1,12 @@
1
+ require 'puppet/parser/ast/branch'
2
+
1
3
  class Puppet::Parser::AST
2
4
  # Define a variable. Stores the value in the current scope.
3
5
  class VarDef < AST::Branch
4
6
  attr_accessor :name, :value
5
7
 
8
+ @settor = true
9
+
6
10
  # Look up our name and value, and store them appropriately. The
7
11
  # lexer strips off the syntax stuff like '$'.
8
12
  def evaluate(hash)
@@ -10,18 +14,8 @@ class Puppet::Parser::AST
10
14
  name = @name.safeevaluate(:scope => scope)
11
15
  value = @value.safeevaluate(:scope => scope)
12
16
 
13
- begin
14
- scope.setvar(name,value)
15
- rescue Puppet::ParseError => except
16
- except.line = self.line
17
- except.file = self.file
18
- raise except
19
- rescue => detail
20
- error = Puppet::ParseError.new(detail)
21
- error.line = self.line
22
- error.file = self.file
23
- error.backtrace = detail.backtrace
24
- raise error
17
+ parsewrap do
18
+ scope.setvar(name,value, @file, @line)
25
19
  end
26
20
  end
27
21
 
@@ -43,3 +37,5 @@ class Puppet::Parser::AST
43
37
  end
44
38
 
45
39
  end
40
+
41
+ # $Id: vardef.rb 2237 2007-02-28 00:07:41Z luke $
@@ -0,0 +1,181 @@
1
+ # An object that collects stored objects from the central cache and returns
2
+ # them to the current host, yo.
3
+ class Puppet::Parser::Collector
4
+ attr_accessor :type, :scope, :vquery, :rquery, :form, :resources
5
+
6
+ # Collect exported objects.
7
+ def collect_exported
8
+ # First get everything from the export table. Just reuse our
9
+ # collect_virtual method but tell it to use 'exported? for the test.
10
+ resources = collect_virtual(true).reject { |r| ! r.virtual? }
11
+
12
+ count = 0
13
+
14
+ unless @scope.host
15
+ raise Puppet::DevError, "Cannot collect resources for a nil host"
16
+ end
17
+
18
+ # We're going to collect objects from rails, but we don't want any
19
+ # objects from this host.
20
+ unless ActiveRecord::Base.connected?
21
+ Puppet::Rails.init
22
+ end
23
+ host = Puppet::Rails::Host.find_by_name(@scope.host)
24
+
25
+ args = {}
26
+ if host
27
+ args[:conditions] = "host_id != #{host.id}"
28
+ else
29
+ #Puppet.info "Host %s is uninitialized" % @scope.host
30
+ end
31
+
32
+ # Now look them up in the rails db. When we support attribute comparison
33
+ # and such, we'll need to vary the conditions, but this works with no
34
+ # attributes, anyway.
35
+ time = Puppet::Util.thinmark do
36
+ Puppet::Rails::Resource.find_all_by_restype_and_exported(@type, true,
37
+ args
38
+ ).each do |obj|
39
+ if resource = export_resource(obj)
40
+ count += 1
41
+ resources << resource
42
+ end
43
+ end
44
+ end
45
+
46
+ scope.debug("Collected %s %s resource%s in %.2f seconds" %
47
+ [count, @type, count == 1 ? "" : "s", time])
48
+
49
+ return resources
50
+ end
51
+
52
+ def collect_resources
53
+ unless @resources.is_a?(Array)
54
+ @resources = [@resources]
55
+ end
56
+ method = "collect_#{form.to_s}_resources"
57
+ send(method)
58
+ end
59
+
60
+ def collect_exported_resources
61
+ raise Puppet::ParseError,
62
+ "realize() is not yet implemented for exported resources"
63
+ end
64
+
65
+ # Collect resources directly; this is the result of using 'realize',
66
+ # which specifies resources, rather than using a normal collection.
67
+ def collect_virtual_resources
68
+ result = @resources.dup.collect do |ref|
69
+ if res = @scope.findresource(ref.to_s)
70
+ @resources.delete(ref)
71
+ res
72
+ end
73
+ end.reject { |r| r.nil? }.each do |res|
74
+ res.virtual = false
75
+ end
76
+
77
+ # If there are no more resources to find, delete this from the list
78
+ # of collections.
79
+ if @resources.empty?
80
+ @scope.collections.delete(self)
81
+ end
82
+
83
+ return result
84
+ end
85
+
86
+ # Collect just virtual objects, from our local configuration.
87
+ def collect_virtual(exported = false)
88
+ if exported
89
+ method = :exported?
90
+ else
91
+ method = :virtual?
92
+ end
93
+ scope.resources.find_all do |resource|
94
+ resource.type == @type and resource.send(method) and match?(resource)
95
+ end
96
+ end
97
+
98
+ # Call the collection method, mark all of the returned objects as non-virtual,
99
+ # and then delete this object from the list of collections to evaluate.
100
+ def evaluate
101
+ if self.resources
102
+ if objects = collect_resources and ! objects.empty?
103
+ return objects
104
+ else
105
+ return false
106
+ end
107
+ else
108
+ method = "collect_#{@form.to_s}"
109
+ objects = send(method).each { |obj| obj.virtual = false }
110
+ if objects.empty?
111
+ return false
112
+ else
113
+ return objects
114
+ end
115
+ end
116
+
117
+ # if objects and ! objects.empty?
118
+ # objects.each { |r| r.virtual = false }
119
+ # return objects
120
+ # else
121
+ # return false
122
+ # end
123
+ end
124
+
125
+ def initialize(scope, type, equery, vquery, form)
126
+ @scope = scope
127
+ @type = type
128
+ @equery = equery
129
+ @vquery = vquery
130
+ @form = form
131
+ @tests = []
132
+ end
133
+
134
+ # Does the resource match our tests? We don't yet support tests,
135
+ # so it's always true at the moment.
136
+ def match?(resource)
137
+ if self.vquery
138
+ return self.vquery.call(resource)
139
+ else
140
+ return true
141
+ end
142
+ end
143
+
144
+ def export_resource(obj)
145
+ if existing = @scope.findresource(obj.restype, obj.title)
146
+ # See if we exported it; if so, just move on
147
+ if @scope.host == obj.host.name
148
+ return nil
149
+ else
150
+ # Next see if we've already collected this resource
151
+ if existing.rails_id == obj.id
152
+ # This is the one we've already collected
153
+ return nil
154
+ else
155
+ raise Puppet::ParseError,
156
+ "Exported resource %s cannot override local resource" %
157
+ [obj.ref]
158
+ end
159
+ end
160
+ end
161
+
162
+ begin
163
+ resource = obj.to_resource(self.scope)
164
+
165
+ # XXX Because the scopes don't expect objects to return values,
166
+ # we have to manually add our objects to the scope. This is
167
+ # �ber-lame.
168
+ scope.setresource(resource)
169
+ rescue => detail
170
+ if Puppet[:trace]
171
+ puts detail.backtrace
172
+ end
173
+ raise
174
+ end
175
+ resource.exported = false
176
+
177
+ return resource
178
+ end
179
+ end
180
+
181
+ # $Id: collector.rb 2215 2007-02-18 20:09:35Z luke $
@@ -1,4 +1,5 @@
1
1
  # Grr
2
+ require 'puppet/util/autoload'
2
3
  require 'puppet/parser/scope'
3
4
 
4
5
  module Puppet::Parser
@@ -6,10 +7,25 @@ module Functions
6
7
  # A module for managing parser functions. Each specified function
7
8
  # becomes an instance method on the Scope class.
8
9
 
10
+ class << self
11
+ include Puppet::Util
12
+ end
13
+
14
+ def self.autoloader
15
+ unless defined? @autoloader
16
+ @autoloader = Puppet::Util::Autoload.new(self,
17
+ "puppet/parser/functions",
18
+ :wrap => false
19
+ )
20
+ end
21
+
22
+ @autoloader
23
+ end
24
+
9
25
  # Create a new function type.
10
- def self.newfunction(name, ftype = :statement, &block)
26
+ def self.newfunction(name, options = {}, &block)
11
27
  @functions ||= {}
12
- name = name.intern if name.is_a? String
28
+ name = symbolize(name)
13
29
 
14
30
  if @functions.include? name
15
31
  raise Puppet::DevError, "Function %s already defined" % name
@@ -21,6 +37,8 @@ module Functions
21
37
  eval("module FCollection; end")
22
38
  end
23
39
 
40
+ ftype = options[:type] || :statement
41
+
24
42
  unless ftype == :statement or ftype == :rvalue
25
43
  raise Puppet::DevError, "Invalid statement type %s" % ftype.inspect
26
44
  end
@@ -31,11 +49,18 @@ module Functions
31
49
  # Someday we'll support specifying an arity, but for now, nope
32
50
  #@functions[name] = {:arity => arity, :type => ftype}
33
51
  @functions[name] = {:type => ftype, :name => fname}
52
+ if options[:doc]
53
+ @functions[name][:doc] = options[:doc]
54
+ end
34
55
  end
35
56
 
36
57
  # Determine if a given name is a function
37
58
  def self.function(name)
38
- name = name.intern if name.is_a? String
59
+ name = symbolize(name)
60
+
61
+ unless @functions.include? name
62
+ autoloader.load(name)
63
+ end
39
64
 
40
65
  if @functions.include? name
41
66
  return @functions[name][:name]
@@ -44,9 +69,33 @@ module Functions
44
69
  end
45
70
  end
46
71
 
72
+ def self.functiondocs
73
+ autoloader.loadall
74
+
75
+ ret = ""
76
+
77
+ @functions.sort { |a,b| a[0].to_s <=> b[0].to_s }.each do |name, hash|
78
+ #ret += "%s\n%s\n" % [name, hash[:type]]
79
+ ret += "%s\n%s\n" % [name, "-" * name.to_s.length]
80
+ if hash[:doc]
81
+ ret += hash[:doc].gsub(/\n\s*/, ' ')
82
+ else
83
+ ret += "Undocumented.\n"
84
+ end
85
+
86
+ ret += "\n\n- **Type**: %s\n\n" % hash[:type]
87
+ end
88
+
89
+ return ret
90
+ end
91
+
92
+ def self.functions
93
+ @functions.keys
94
+ end
95
+
47
96
  # Determine if a given function returns a value or not.
48
97
  def self.rvalue?(name)
49
- name = name.intern if name.is_a? String
98
+ name = symbolize(name)
50
99
 
51
100
  if @functions.include? name
52
101
  case @functions[name][:type]
@@ -59,36 +108,42 @@ module Functions
59
108
  end
60
109
 
61
110
  # Include the specified classes
62
- newfunction(:include) do |vals|
63
- vals.each do |val|
64
- if objecttype = lookuptype(val)
65
- # It's a defined type, so set it into the scope so it can
66
- # be evaluated.
67
- setobject(
68
- :type => val,
69
- :arguments => {}
70
- )
71
- else
72
- raise Puppet::ParseError, "Unknown class %s" % val
111
+ newfunction(:include, :doc => "Evaluate one or more classes.") do |vals|
112
+ klasses = evalclasses(*vals)
113
+
114
+ missing = vals.find_all do |klass|
115
+ ! klasses.include?(klass)
116
+ end
117
+
118
+ unless missing.empty?
119
+ # Throw an error if we didn't evaluate all of the classes.
120
+ str = "Could not find class"
121
+ if missing.length > 1
122
+ str += "es"
123
+ end
124
+
125
+ str += " " + missing.join(", ")
126
+
127
+ if n = namespaces and ! n.empty? and n != [""]
128
+ str += " in namespaces %s" % @namespaces.join(", ")
73
129
  end
130
+ self.fail Puppet::ParseError, str
74
131
  end
75
132
  end
76
133
 
77
134
  # Tag the current scope with each passed name
78
- newfunction(:tag) do |vals|
79
- vals.each do |val|
80
- # Some hackery, because the tags are stored by object id
81
- # for singletonness.
82
- self.setclass(val.object_id, val)
83
- end
84
-
85
- # Also add them as tags
135
+ newfunction(:tag, :doc => "Add the specified tags to the containing class
136
+ or definition. All contained objects will then acquire that tag, also.
137
+ ") do |vals|
86
138
  self.tag(*vals)
87
139
  end
88
140
 
89
141
  # Test whether a given tag is set. This functions as a big OR -- if any of the
90
142
  # specified tags are unset, we return false.
91
- newfunction(:tagged, :rvalue) do |vals|
143
+ newfunction(:tagged, :type => :rvalue, :doc => "A boolean function that
144
+ tells you whether the current container is tagged with the specified tags.
145
+ The tags are ANDed, so thta all of the specified tags must be included for
146
+ the function to return true.") do |vals|
92
147
  classlist = self.classlist
93
148
 
94
149
  retval = true
@@ -103,32 +158,54 @@ module Functions
103
158
  end
104
159
 
105
160
  # Test whether a given class or definition is defined
106
- newfunction(:defined, :rvalue) do |vals|
107
- retval = true
108
-
161
+ newfunction(:defined, :type => :rvalue, :doc => "Determine whether a given
162
+ type is defined, either as a native type or a defined type, or whether a class is defined.
163
+ This is useful for checking whether a class is defined and only including it if it is.") do |vals|
164
+ result = false
109
165
  vals.each do |val|
110
- unless builtintype?(val) or lookuptype(val)
111
- retval = false
112
- break
166
+ case val
167
+ when String:
168
+ # For some reason, it doesn't want me to return from here.
169
+ if Puppet::Type.type(val) or finddefine(val) or findclass(val)
170
+ result = true
171
+ break
172
+ end
173
+ when Puppet::Parser::Resource::Reference:
174
+ if findresource(val.to_s)
175
+ result = true
176
+ break
177
+ end
178
+ else
179
+ raise ArgumentError, "Invalid argument of type %s to 'defined'" % val.class
113
180
  end
114
181
  end
115
-
116
- return retval
182
+ result
117
183
  end
118
184
 
119
- newfunction(:fail, :statement) do |vals|
185
+ newfunction(:fail, :doc => "Fail with a parse error.") do |vals|
120
186
  vals = vals.collect { |s| s.to_s }.join(" ") if vals.is_a? Array
121
187
  raise Puppet::ParseError, vals.to_s
122
188
  end
123
189
 
124
- newfunction(:template, :rvalue) do |vals|
190
+ # Runs a newfunction to create a function for each of the log levels
191
+ Puppet::Util::Log.levels.each do |level|
192
+ newfunction(level, :doc => "Log a message on the server at level
193
+ #{level.to_s}.") do |vals|
194
+ send(level, vals.join(" "))
195
+ end
196
+ end
197
+
198
+ newfunction(:template, :type => :rvalue, :doc => "Evaluate a template and
199
+ return its value. See [the templating docs](/trac/puppet/wiki/PuppetTemplating)
200
+ for more information. Note that if multiple templates are specified, their
201
+ output is all concatenated and returned as the output of the function.") do |vals|
125
202
  require 'erb'
126
203
 
127
204
  vals.collect do |file|
128
205
  # Use a wrapper, so the template can't get access to the full
129
206
  # Scope object.
130
207
  debug "Retrieving template %s" % file
131
- wrapper = Puppet::Parser::Scope::TemplateWrapper.new(self, file)
208
+ wrapper = Puppet::Parser::TemplateWrapper.new(self, file)
132
209
 
133
210
  begin
134
211
  wrapper.result()
@@ -139,7 +216,85 @@ module Functions
139
216
  end
140
217
  end.join("")
141
218
  end
219
+
220
+ # This is just syntactic sugar for a collection, although it will generally
221
+ # be a good bit faster.
222
+ newfunction(:realize, :doc => "Make a virtual object real. This is useful
223
+ when you want to know the name of the virtual object and don't want to
224
+ bother with a full collection. It is slightly faster than a collection,
225
+ and, of course, is a bit shorter. You must pass the object using a
226
+ reference; e.g.: ``realize User[luke]``." ) do |vals|
227
+ coll = Puppet::Parser::Collector.new(self, :nomatter, nil, nil, :virtual)
228
+ vals = [vals] unless vals.is_a?(Array)
229
+ coll.resources = vals
230
+
231
+ newcollection(coll)
232
+ end
233
+
234
+ newfunction(:search, :doc => "Add another namespace for this class to search.
235
+ This allows you to create classes with sets of definitions and add
236
+ those classes to another class's search path.") do |vals|
237
+ vals.each do |val|
238
+ add_namespace(val)
239
+ end
240
+ end
241
+
242
+ newfunction(:file, :type => :rvalue,
243
+ :doc => "Return the contents of a file. Multiple files
244
+ can be passed, and the first file that exists will be read in.") do |vals|
245
+ ret = nil
246
+ vals.each do |file|
247
+ unless file =~ /^#{File::SEPARATOR}/
248
+ raise Puppet::ParseError, "Files must be fully qualified"
249
+ end
250
+ if FileTest.exists?(file)
251
+ ret = File.read(file)
252
+ break
253
+ end
254
+ end
255
+ if ret
256
+ ret
257
+ else
258
+ raise Puppet::ParseError, "Could not find any files from %s" %
259
+ vals.join(", ")
260
+ end
261
+ end
262
+
263
+ newfunction(:generate, :type => :rvalue,
264
+ :doc => "Calls an external command and returns the results of the
265
+ command. Any arguments are passed to the external command as
266
+ arguments. If the generator does not exit with return code of 0,
267
+ the generator is considered to have failed and a parse error is
268
+ thrown. Generators can only have file separators, alphanumerics, dashes,
269
+ and periods in them. This function will attempt to protect you from
270
+ malicious generator calls (e.g., those with '..' in them), but it can
271
+ never be entirely safe. No subshell is used to execute
272
+ generators, so all shell metacharacters are passed directly to
273
+ the generator.") do |args|
274
+
275
+ unless args[0] =~ /^#{File::SEPARATOR}/
276
+ raise Puppet::ParseError, "Generators must be fully qualified"
277
+ end
278
+
279
+ unless args[0] =~ /^[-#{File::SEPARATOR}\w.]+$/
280
+ raise Puppet::ParseError,
281
+ "Generators can only contain alphanumerics, file separators, and dashes"
282
+ end
283
+
284
+ if args[0] =~ /\.\./
285
+ raise Puppet::ParseError,
286
+ "Can not use generators with '..' in them."
287
+ end
288
+
289
+ begin
290
+ output = Puppet::Util.execute(args)
291
+ rescue Puppet::ExecutionFailure => detail
292
+ raise Puppet::ParseError, "Failed to execute generator %s: %s" %
293
+ [args[0], detail]
294
+ end
295
+ output
296
+ end
142
297
  end
143
298
  end
144
299
 
145
- # $Id: functions.rb 1383 2006-07-11 16:52:20Z luke $
300
+ # $Id: functions.rb 2406 2007-04-23 06:16:10Z luke $