puppet 0.23.2 → 0.24.0

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 (629) hide show
  1. data/CHANGELOG +112 -1
  2. data/README +1 -1
  3. data/Rakefile +1 -2
  4. data/bin/filebucket +2 -3
  5. data/bin/puppet +55 -39
  6. data/bin/puppetca +20 -11
  7. data/bin/puppetd +30 -31
  8. data/bin/puppetdoc +27 -28
  9. data/bin/puppetmasterd +24 -42
  10. data/bin/puppetrun +3 -4
  11. data/bin/ralsh +5 -7
  12. data/conf/redhat/puppet.spec +4 -1
  13. data/conf/solaris/smf/svc-puppetd +1 -1
  14. data/conf/solaris/smf/svc-puppetmasterd +1 -1
  15. data/examples/code/allatonce +1 -1
  16. data/examples/code/assignments +1 -1
  17. data/examples/code/components +1 -1
  18. data/examples/code/file.bl +1 -1
  19. data/examples/code/filedefaults +1 -1
  20. data/examples/code/fileparsing +1 -1
  21. data/examples/code/filerecursion +1 -1
  22. data/examples/code/functions +1 -1
  23. data/examples/code/groups +1 -1
  24. data/examples/code/head +1 -1
  25. data/examples/code/importing +1 -1
  26. data/examples/code/modules/sample-module.pp +10 -0
  27. data/examples/code/modules/sample-module/README.txt +17 -0
  28. data/examples/code/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +36 -0
  29. data/examples/code/modules/sample-module/manifests/init.pp +12 -0
  30. data/examples/code/modules/sample-module/templates/sample.erb +5 -0
  31. data/examples/code/nodes +1 -1
  32. data/examples/code/one +1 -1
  33. data/examples/code/relationships +1 -1
  34. data/examples/code/selectors +1 -1
  35. data/examples/code/simpletests +1 -1
  36. data/examples/root/etc/init.d/sleeper +1 -1
  37. data/examples/root/etc/puppet/fileserver.conf +1 -1
  38. data/ext/ldap/puppet.schema +1 -1
  39. data/ext/module_puppet +30 -21
  40. data/ext/puppet-test +3 -3
  41. data/ext/vim/filetype.vim +1 -1
  42. data/install.rb +1 -2
  43. data/lib/puppet.rb +20 -19
  44. data/lib/puppet/checksum.rb +57 -0
  45. data/lib/puppet/config_stores/rest.rb +1 -1
  46. data/lib/puppet/daemon.rb +0 -1
  47. data/lib/puppet/{configuration.rb → defaults.rb} +56 -23
  48. data/lib/puppet/dsl.rb +22 -116
  49. data/lib/puppet/error.rb +0 -9
  50. data/lib/puppet/event.rb +0 -1
  51. data/lib/puppet/external/gratr/rdot.rb +0 -1
  52. data/lib/puppet/external/lock.rb +0 -1
  53. data/lib/puppet/feature/base.rb +3 -2
  54. data/lib/puppet/feature/rails.rb +0 -1
  55. data/lib/puppet/file_serving.rb +7 -0
  56. data/lib/puppet/file_serving/configuration.rb +129 -0
  57. data/lib/puppet/file_serving/configuration/parser.rb +124 -0
  58. data/lib/puppet/file_serving/content.rb +34 -0
  59. data/lib/puppet/file_serving/file_base.rb +63 -0
  60. data/lib/puppet/file_serving/fileset.rb +138 -0
  61. data/lib/puppet/file_serving/indirection_hooks.rb +44 -0
  62. data/lib/puppet/file_serving/metadata.rb +69 -0
  63. data/lib/puppet/file_serving/mount.rb +186 -0
  64. data/lib/puppet/file_serving/terminus_helper.rb +19 -0
  65. data/lib/puppet/indirector.rb +68 -0
  66. data/lib/puppet/indirector/catalog/compiler.rb +173 -0
  67. data/lib/puppet/indirector/catalog/yaml.rb +24 -0
  68. data/lib/puppet/indirector/checksum/file.rb +33 -0
  69. data/lib/puppet/indirector/code.rb +6 -0
  70. data/lib/puppet/indirector/direct_file_server.rb +27 -0
  71. data/lib/puppet/indirector/exec.rb +57 -0
  72. data/lib/puppet/indirector/facts/facter.rb +65 -0
  73. data/lib/puppet/indirector/facts/memory.rb +9 -0
  74. data/lib/puppet/indirector/facts/yaml.rb +7 -0
  75. data/lib/puppet/indirector/file.rb +54 -0
  76. data/lib/puppet/indirector/file_content.rb +5 -0
  77. data/lib/puppet/indirector/file_content/file.rb +11 -0
  78. data/lib/puppet/indirector/file_content/file_server.rb +11 -0
  79. data/lib/puppet/indirector/file_content/modules.rb +11 -0
  80. data/lib/puppet/indirector/file_content/rest.rb +12 -0
  81. data/lib/puppet/indirector/file_metadata.rb +5 -0
  82. data/lib/puppet/indirector/file_metadata/file.rb +26 -0
  83. data/lib/puppet/indirector/file_metadata/file_server.rb +11 -0
  84. data/lib/puppet/indirector/file_metadata/modules.rb +17 -0
  85. data/lib/puppet/indirector/file_metadata/rest.rb +12 -0
  86. data/lib/puppet/indirector/file_server.rb +56 -0
  87. data/lib/puppet/indirector/indirection.rb +237 -0
  88. data/lib/puppet/indirector/ldap.rb +90 -0
  89. data/lib/puppet/indirector/memory.rb +21 -0
  90. data/lib/puppet/indirector/module_files.rb +82 -0
  91. data/lib/puppet/indirector/node/exec.rb +52 -0
  92. data/lib/puppet/indirector/node/ldap.rb +120 -0
  93. data/lib/puppet/indirector/node/memory.rb +10 -0
  94. data/lib/puppet/indirector/node/plain.rb +19 -0
  95. data/lib/puppet/indirector/node/rest.rb +7 -0
  96. data/lib/puppet/indirector/node/yaml.rb +7 -0
  97. data/lib/puppet/indirector/plain.rb +9 -0
  98. data/lib/puppet/indirector/report/processor.rb +50 -0
  99. data/lib/puppet/indirector/rest.rb +8 -0
  100. data/lib/puppet/indirector/ssl_rsa.rb +5 -0
  101. data/lib/puppet/indirector/ssl_rsa/file.rb +33 -0
  102. data/lib/puppet/indirector/terminus.rb +178 -0
  103. data/lib/puppet/indirector/yaml.rb +57 -0
  104. data/lib/puppet/metatype/attributes.rb +3 -3
  105. data/lib/puppet/metatype/closure.rb +0 -66
  106. data/lib/puppet/metatype/container.rb +0 -9
  107. data/lib/puppet/metatype/evaluation.rb +10 -2
  108. data/lib/puppet/metatype/instances.rb +16 -30
  109. data/lib/puppet/metatype/manager.rb +1 -2
  110. data/lib/puppet/metatype/metaparams.rb +27 -21
  111. data/lib/puppet/metatype/providers.rb +3 -2
  112. data/lib/puppet/metatype/relationships.rb +1 -2
  113. data/lib/puppet/metatype/schedules.rb +0 -1
  114. data/lib/puppet/metatype/tags.rb +0 -1
  115. data/lib/puppet/module.rb +60 -32
  116. data/lib/puppet/network/authconfig.rb +0 -1
  117. data/lib/puppet/network/authorization.rb +0 -1
  118. data/lib/puppet/network/authstore.rb +0 -1
  119. data/lib/puppet/network/client.rb +13 -4
  120. data/lib/puppet/network/client/ca.rb +4 -5
  121. data/lib/puppet/network/client/dipper.rb +0 -1
  122. data/lib/puppet/network/client/file.rb +0 -1
  123. data/lib/puppet/network/client/master.rb +127 -235
  124. data/lib/puppet/network/client/proxy.rb +0 -1
  125. data/lib/puppet/network/client/report.rb +0 -1
  126. data/lib/puppet/network/client/resource.rb +0 -1
  127. data/lib/puppet/network/client/runner.rb +0 -1
  128. data/lib/puppet/network/client/status.rb +0 -1
  129. data/lib/puppet/network/client_request.rb +0 -1
  130. data/lib/puppet/network/handler.rb +5 -2
  131. data/lib/puppet/network/handler/ca.rb +1 -2
  132. data/lib/puppet/network/handler/configuration.rb +184 -0
  133. data/lib/puppet/network/handler/filebucket.rb +1 -2
  134. data/lib/puppet/network/handler/fileserver.rb +279 -107
  135. data/lib/puppet/network/handler/master.rb +57 -152
  136. data/lib/puppet/network/handler/report.rb +6 -65
  137. data/lib/puppet/network/handler/resource.rb +5 -13
  138. data/lib/puppet/network/handler/runner.rb +3 -4
  139. data/lib/puppet/network/handler/status.rb +0 -1
  140. data/lib/puppet/network/http.rb +13 -0
  141. data/lib/puppet/network/http/handler.rb +109 -0
  142. data/lib/puppet/network/http/mongrel.rb +54 -0
  143. data/lib/puppet/network/http/mongrel/rest.rb +37 -0
  144. data/lib/puppet/network/http/mongrel/xmlrpc.rb +4 -0
  145. data/lib/puppet/network/http/webrick.rb +51 -0
  146. data/lib/puppet/network/http/webrick/rest.rb +41 -0
  147. data/lib/puppet/network/http/webrick/xmlrpc.rb +4 -0
  148. data/lib/puppet/network/http_server.rb +3 -0
  149. data/lib/puppet/network/{server → http_server}/mongrel.rb +11 -5
  150. data/lib/puppet/network/{server → http_server}/webrick.rb +9 -5
  151. data/lib/puppet/network/rest_controller.rb +2 -0
  152. data/lib/puppet/network/rights.rb +0 -1
  153. data/lib/puppet/network/server.rb +63 -3
  154. data/lib/puppet/network/xmlrpc/client.rb +90 -23
  155. data/lib/puppet/network/xmlrpc/processor.rb +0 -1
  156. data/lib/puppet/network/xmlrpc/server.rb +0 -1
  157. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +0 -1
  158. data/lib/puppet/node.rb +165 -0
  159. data/lib/puppet/node/catalog.rb +480 -0
  160. data/lib/puppet/node/environment.rb +46 -0
  161. data/lib/puppet/node/facts.rb +36 -0
  162. data/lib/puppet/parameter.rb +34 -28
  163. data/lib/puppet/parser/ast.rb +0 -1
  164. data/lib/puppet/parser/ast/astarray.rb +30 -53
  165. data/lib/puppet/parser/ast/branch.rb +0 -10
  166. data/lib/puppet/parser/ast/caseopt.rb +0 -11
  167. data/lib/puppet/parser/ast/casestatement.rb +0 -12
  168. data/lib/puppet/parser/ast/collection.rb +1 -3
  169. data/lib/puppet/parser/ast/collexpr.rb +0 -2
  170. data/lib/puppet/parser/ast/{component.rb → definition.rb} +58 -72
  171. data/lib/puppet/parser/ast/else.rb +0 -10
  172. data/lib/puppet/parser/ast/function.rb +0 -2
  173. data/lib/puppet/parser/ast/hostclass.rb +21 -19
  174. data/lib/puppet/parser/ast/ifstatement.rb +0 -13
  175. data/lib/puppet/parser/ast/leaf.rb +0 -8
  176. data/lib/puppet/parser/ast/node.rb +13 -10
  177. data/lib/puppet/parser/ast/resource.rb +75 -0
  178. data/lib/puppet/parser/ast/{resourcedefaults.rb → resource_defaults.rb} +4 -20
  179. data/lib/puppet/parser/ast/{resourceoverride.rb → resource_override.rb} +3 -5
  180. data/lib/puppet/parser/ast/resource_reference.rb +66 -0
  181. data/lib/puppet/parser/ast/resourceparam.rb +0 -14
  182. data/lib/puppet/parser/ast/selector.rb +0 -10
  183. data/lib/puppet/parser/ast/tag.rb +0 -2
  184. data/lib/puppet/parser/ast/vardef.rb +0 -14
  185. data/lib/puppet/parser/collector.rb +83 -101
  186. data/lib/puppet/parser/compile.rb +509 -0
  187. data/lib/puppet/parser/functions.rb +10 -10
  188. data/lib/puppet/parser/interpreter.rb +44 -662
  189. data/lib/puppet/parser/lexer.rb +1 -3
  190. data/lib/puppet/parser/parser.rb +674 -701
  191. data/lib/puppet/parser/parser_support.rb +33 -24
  192. data/lib/puppet/parser/resource.rb +219 -162
  193. data/lib/puppet/parser/resource/param.rb +1 -2
  194. data/lib/puppet/parser/resource/reference.rb +24 -16
  195. data/lib/puppet/parser/scope.rb +48 -459
  196. data/lib/puppet/parser/templatewrapper.rb +4 -5
  197. data/lib/puppet/pgraph.rb +10 -13
  198. data/lib/puppet/property.rb +25 -41
  199. data/lib/puppet/propertychange.rb +0 -2
  200. data/lib/puppet/provider.rb +15 -11
  201. data/lib/puppet/provider/cron/crontab.rb +6 -7
  202. data/lib/puppet/provider/group/groupadd.rb +0 -1
  203. data/lib/puppet/provider/group/netinfo.rb +0 -1
  204. data/lib/puppet/provider/group/pw.rb +0 -1
  205. data/lib/puppet/provider/host/netinfo.rb +0 -1
  206. data/lib/puppet/provider/host/parsed.rb +0 -1
  207. data/lib/puppet/provider/interface/redhat.rb +90 -91
  208. data/lib/puppet/provider/interface/sunos.rb +98 -81
  209. data/lib/puppet/provider/mailalias/aliases.rb +0 -1
  210. data/lib/puppet/provider/maillist/mailman.rb +2 -3
  211. data/lib/puppet/provider/mount.rb +10 -9
  212. data/lib/puppet/provider/mount/netinfo.rb +0 -1
  213. data/lib/puppet/provider/mount/parsed.rb +0 -1
  214. data/lib/puppet/provider/nameservice.rb +0 -1
  215. data/lib/puppet/provider/nameservice/netinfo.rb +0 -1
  216. data/lib/puppet/provider/nameservice/objectadd.rb +0 -1
  217. data/lib/puppet/provider/nameservice/pw.rb +0 -1
  218. data/lib/puppet/provider/package.rb +0 -2
  219. data/lib/puppet/provider/package/appdmg.rb +0 -1
  220. data/lib/puppet/provider/package/apple.rb +0 -1
  221. data/lib/puppet/provider/package/apt.rb +0 -1
  222. data/lib/puppet/provider/package/aptitude.rb +0 -1
  223. data/lib/puppet/provider/package/aptrpm.rb +0 -1
  224. data/lib/puppet/provider/package/blastwave.rb +0 -1
  225. data/lib/puppet/provider/package/darwinport.rb +0 -1
  226. data/lib/puppet/provider/package/dpkg.rb +9 -1
  227. data/lib/puppet/provider/package/fink.rb +0 -1
  228. data/lib/puppet/provider/package/freebsd.rb +0 -1
  229. data/lib/puppet/provider/package/gem.rb +0 -1
  230. data/lib/puppet/provider/package/openbsd.rb +1 -2
  231. data/lib/puppet/provider/package/pkgdmg.rb +14 -15
  232. data/lib/puppet/provider/package/portage.rb +6 -7
  233. data/lib/puppet/provider/package/ports.rb +1 -4
  234. data/lib/puppet/provider/package/rpm.rb +31 -45
  235. data/lib/puppet/provider/package/sun.rb +0 -3
  236. data/lib/puppet/provider/package/sunfreeware.rb +0 -1
  237. data/lib/puppet/provider/package/up2date.rb +0 -1
  238. data/lib/puppet/provider/package/urpmi.rb +0 -1
  239. data/lib/puppet/provider/package/yum.rb +45 -14
  240. data/lib/puppet/provider/package/yumhelper.py +37 -0
  241. data/lib/puppet/provider/parsedfile.rb +2 -3
  242. data/lib/puppet/provider/port/parsed.rb +0 -1
  243. data/lib/puppet/provider/service/base.rb +4 -1
  244. data/lib/puppet/provider/service/debian.rb +5 -2
  245. data/lib/puppet/provider/service/freebsd.rb +51 -0
  246. data/lib/puppet/provider/service/init.rb +16 -40
  247. data/lib/puppet/provider/service/redhat.rb +1 -6
  248. data/lib/puppet/provider/service/smf.rb +0 -1
  249. data/lib/puppet/provider/sshkey/parsed.rb +0 -1
  250. data/lib/puppet/provider/user/netinfo.rb +0 -1
  251. data/lib/puppet/provider/user/pw.rb +0 -1
  252. data/lib/puppet/provider/user/useradd.rb +0 -1
  253. data/lib/puppet/provider/zone/solaris.rb +0 -1
  254. data/lib/puppet/rails.rb +35 -30
  255. data/lib/puppet/rails/database/schema.rb +0 -1
  256. data/lib/puppet/rails/host.rb +6 -15
  257. data/lib/puppet/rails/param_name.rb +1 -2
  258. data/lib/puppet/rails/param_value.rb +0 -1
  259. data/lib/puppet/rails/puppet_class.rb +0 -1
  260. data/lib/puppet/rails/resource.rb +3 -5
  261. data/lib/puppet/reference/configuration.rb +12 -6
  262. data/lib/puppet/reference/indirection.rb +34 -0
  263. data/lib/puppet/reference/node_source.rb +9 -0
  264. data/lib/puppet/relationship.rb +10 -8
  265. data/lib/puppet/reports.rb +51 -0
  266. data/lib/puppet/reports/log.rb +2 -3
  267. data/lib/puppet/reports/rrdgraph.rb +2 -5
  268. data/lib/puppet/reports/store.rb +6 -7
  269. data/lib/puppet/reports/tagmail.rb +2 -3
  270. data/lib/puppet/resource_reference.rb +79 -0
  271. data/lib/puppet/simple_graph.rb +251 -0
  272. data/lib/puppet/sslcertificates.rb +19 -15
  273. data/lib/puppet/sslcertificates/ca.rb +56 -15
  274. data/lib/puppet/sslcertificates/certificate.rb +0 -1
  275. data/lib/puppet/sslcertificates/inventory.rb +2 -6
  276. data/lib/puppet/sslcertificates/monkey_patch.rb +6 -0
  277. data/lib/puppet/sslcertificates/support.rb +4 -5
  278. data/lib/puppet/transaction.rb +93 -96
  279. data/lib/puppet/transaction/report.rb +5 -1
  280. data/lib/puppet/transportable.rb +79 -125
  281. data/lib/puppet/type.rb +44 -10
  282. data/lib/puppet/type/component.rb +25 -110
  283. data/lib/puppet/type/cron.rb +1 -2
  284. data/lib/puppet/type/exec.rb +19 -13
  285. data/lib/puppet/type/group.rb +0 -1
  286. data/lib/puppet/type/host.rb +0 -1
  287. data/lib/puppet/type/interface.rb +6 -3
  288. data/lib/puppet/type/k5login.rb +87 -0
  289. data/lib/puppet/type/mailalias.rb +0 -1
  290. data/lib/puppet/type/maillist.rb +0 -1
  291. data/lib/puppet/type/mount.rb +7 -13
  292. data/lib/puppet/type/notify.rb +0 -1
  293. data/lib/puppet/type/package.rb +7 -63
  294. data/lib/puppet/type/pfile.rb +25 -32
  295. data/lib/puppet/type/pfile/checksum.rb +0 -1
  296. data/lib/puppet/type/pfile/content.rb +18 -3
  297. data/lib/puppet/type/pfile/ensure.rb +5 -6
  298. data/lib/puppet/type/pfile/group.rb +4 -1
  299. data/lib/puppet/type/pfile/mode.rb +0 -1
  300. data/lib/puppet/type/pfile/owner.rb +6 -9
  301. data/lib/puppet/type/pfile/source.rb +28 -11
  302. data/lib/puppet/type/pfile/target.rb +2 -1
  303. data/lib/puppet/type/pfile/type.rb +0 -1
  304. data/lib/puppet/type/pfilebucket.rb +0 -1
  305. data/lib/puppet/type/port.rb +0 -1
  306. data/lib/puppet/type/resources.rb +0 -1
  307. data/lib/puppet/type/schedule.rb +17 -15
  308. data/lib/puppet/type/service.rb +23 -159
  309. data/lib/puppet/type/sshkey.rb +0 -1
  310. data/lib/puppet/type/tidy.rb +15 -7
  311. data/lib/puppet/type/user.rb +0 -1
  312. data/lib/puppet/type/zone.rb +0 -1
  313. data/lib/puppet/util.rb +1 -2
  314. data/lib/puppet/util/autoload.rb +21 -23
  315. data/lib/puppet/util/checksums.rb +37 -0
  316. data/lib/puppet/util/classgen.rb +0 -1
  317. data/lib/puppet/util/diff.rb +71 -0
  318. data/lib/puppet/util/docs.rb +8 -2
  319. data/lib/puppet/util/errors.rb +0 -1
  320. data/lib/puppet/util/execution.rb +0 -1
  321. data/lib/puppet/util/fact_store.rb +0 -1
  322. data/lib/puppet/util/feature.rb +31 -22
  323. data/lib/puppet/util/fileparsing.rb +3 -2
  324. data/lib/puppet/util/filetype.rb +30 -12
  325. data/lib/puppet/util/graph.rb +0 -1
  326. data/lib/puppet/util/inifile.rb +0 -1
  327. data/lib/puppet/util/instance_loader.rb +11 -4
  328. data/lib/puppet/util/loadedfile.rb +0 -1
  329. data/lib/puppet/util/log.rb +0 -1
  330. data/lib/puppet/util/log_paths.rb +0 -1
  331. data/lib/puppet/util/logging.rb +0 -1
  332. data/lib/puppet/util/metaid.rb +0 -1
  333. data/lib/puppet/util/methodhelper.rb +0 -2
  334. data/lib/puppet/util/metric.rb +1 -2
  335. data/lib/puppet/util/plist.rb +0 -1
  336. data/lib/puppet/util/plist/generator.rb +0 -1
  337. data/lib/puppet/util/plist/parser.rb +0 -1
  338. data/lib/puppet/util/posix.rb +7 -1
  339. data/lib/puppet/util/provider_features.rb +11 -12
  340. data/lib/puppet/util/rails/collection_merger.rb +0 -1
  341. data/lib/puppet/util/reference.rb +2 -3
  342. data/lib/puppet/util/{config.rb → settings.rb} +424 -300
  343. data/lib/puppet/util/storage.rb +1 -3
  344. data/lib/puppet/util/subclass_loader.rb +0 -1
  345. data/lib/puppet/util/suidmanager.rb +25 -42
  346. data/lib/puppet/util/uri_helper.rb +22 -0
  347. data/lib/puppet/util/variables.rb +0 -1
  348. data/lib/puppet/util/warnings.rb +0 -1
  349. data/test/Rakefile +1 -1
  350. data/test/certmgr/ca.rb +8 -2
  351. data/test/certmgr/certmgr.rb +14 -6
  352. data/test/certmgr/inventory.rb +18 -30
  353. data/test/certmgr/support.rb +3 -2
  354. data/test/executables/filebucket.rb +1 -2
  355. data/test/executables/puppetbin.rb +1 -2
  356. data/test/executables/puppetca.rb +7 -2
  357. data/test/executables/puppetd.rb +23 -29
  358. data/test/executables/puppetmasterd.rb +1 -2
  359. data/test/executables/puppetmodule.rb +1 -2
  360. data/test/language/ast.rb +24 -29
  361. data/test/language/ast/casestatement.rb +1 -2
  362. data/test/language/ast/definition.rb +166 -0
  363. data/test/language/ast/hostclass.rb +50 -29
  364. data/test/language/ast/resource.rb +59 -0
  365. data/test/language/ast/{resourceref.rb → resource_reference.rb} +30 -20
  366. data/test/language/ast/selector.rb +1 -2
  367. data/test/language/ast/variable.rb +1 -2
  368. data/test/language/compile.rb +569 -0
  369. data/test/language/functions.rb +57 -76
  370. data/test/language/lexer.rb +20 -3
  371. data/test/language/parser.rb +45 -33
  372. data/test/language/resource.rb +275 -308
  373. data/test/language/scope.rb +135 -410
  374. data/test/language/snippets.rb +19 -41
  375. data/test/language/transportable.rb +8 -29
  376. data/test/lib/mocha/auto_verify.rb +6 -6
  377. data/test/lib/mocha/deprecation.rb +22 -0
  378. data/test/lib/mocha/exception_raiser.rb +17 -0
  379. data/test/lib/mocha/expectation.rb +167 -84
  380. data/test/lib/mocha/infinite_range.rb +4 -6
  381. data/test/lib/mocha/inspect.rb +3 -1
  382. data/test/lib/mocha/is_a.rb +9 -0
  383. data/test/lib/mocha/missing_expectation.rb +27 -0
  384. data/test/lib/mocha/mock.rb +192 -5
  385. data/test/lib/mocha/multiple_yields.rb +20 -0
  386. data/test/lib/mocha/no_yields.rb +11 -0
  387. data/test/lib/mocha/object.rb +11 -1
  388. data/test/lib/mocha/parameter_matchers.rb +9 -0
  389. data/test/lib/mocha/parameter_matchers/all_of.rb +39 -0
  390. data/test/lib/mocha/parameter_matchers/any_of.rb +44 -0
  391. data/test/lib/mocha/parameter_matchers/anything.rb +30 -0
  392. data/test/lib/mocha/parameter_matchers/has_entry.rb +39 -0
  393. data/test/lib/mocha/parameter_matchers/has_key.rb +39 -0
  394. data/test/lib/mocha/parameter_matchers/has_value.rb +39 -0
  395. data/test/lib/mocha/parameter_matchers/includes.rb +37 -0
  396. data/test/lib/mocha/return_values.rb +31 -0
  397. data/test/lib/mocha/single_return_value.rb +24 -0
  398. data/test/lib/mocha/single_yield.rb +18 -0
  399. data/test/lib/mocha/standalone.rb +2 -0
  400. data/test/lib/mocha/stub.rb +18 -0
  401. data/test/lib/mocha/test_case_adapter.rb +3 -3
  402. data/test/lib/mocha/yield_parameters.rb +31 -0
  403. data/test/lib/puppettest.rb +38 -20
  404. data/test/lib/puppettest/certificates.rb +0 -1
  405. data/test/lib/puppettest/exetest.rb +0 -1
  406. data/test/lib/puppettest/fakes.rb +0 -1
  407. data/test/lib/puppettest/fileparsing.rb +8 -15
  408. data/test/lib/puppettest/filetesting.rb +0 -1
  409. data/test/lib/puppettest/parsertesting.rb +37 -23
  410. data/test/lib/puppettest/railstesting.rb +3 -6
  411. data/test/lib/puppettest/reporttesting.rb +0 -1
  412. data/test/lib/puppettest/resourcetesting.rb +6 -34
  413. data/test/lib/puppettest/runnable_test.rb +30 -0
  414. data/test/lib/puppettest/servertest.rb +2 -3
  415. data/test/lib/puppettest/support/assertions.rb +13 -41
  416. data/test/lib/puppettest/support/collection.rb +0 -1
  417. data/test/lib/puppettest/support/helpers.rb +0 -1
  418. data/test/lib/puppettest/support/resources.rb +17 -17
  419. data/test/lib/puppettest/support/utils.rb +45 -27
  420. data/test/lib/puppettest/testcase.rb +2 -21
  421. data/test/lib/rake/puppet_test_loader.rb +0 -1
  422. data/test/lib/rake/puppet_testtask.rb +0 -1
  423. data/test/network/authconfig.rb +1 -2
  424. data/test/network/authorization.rb +1 -2
  425. data/test/network/authstore.rb +1 -2
  426. data/test/network/client/ca.rb +12 -7
  427. data/test/network/client/client.rb +17 -22
  428. data/test/network/client/dipper.rb +1 -2
  429. data/test/network/client/master.rb +70 -184
  430. data/test/network/client/resource.rb +9 -2
  431. data/test/network/client_request.rb +1 -2
  432. data/test/network/daemon.rb +1 -2
  433. data/test/network/handler/bucket.rb +2 -31
  434. data/test/network/handler/ca.rb +9 -3
  435. data/test/network/handler/configuration.rb +160 -0
  436. data/test/network/handler/fileserver.rb +24 -5
  437. data/test/network/handler/handler.rb +1 -2
  438. data/test/network/handler/master.rb +38 -243
  439. data/test/network/handler/report.rb +2 -104
  440. data/test/network/handler/resource.rb +5 -3
  441. data/test/network/handler/runner.rb +22 -60
  442. data/test/network/rights.rb +1 -2
  443. data/test/network/server/mongrel_test.rb +2 -3
  444. data/test/network/server/webrick.rb +17 -11
  445. data/test/network/xmlrpc/client.rb +27 -12
  446. data/test/network/xmlrpc/processor.rb +3 -4
  447. data/test/network/xmlrpc/server.rb +1 -2
  448. data/test/network/xmlrpc/webrick_servlet.rb +8 -2
  449. data/test/other/dsl.rb +2 -4
  450. data/test/other/events.rb +14 -56
  451. data/test/other/overrides.rb +3 -6
  452. data/test/other/propertychange.rb +1 -2
  453. data/test/other/provider.rb +1 -2
  454. data/test/other/puppet.rb +1 -2
  455. data/test/other/relationships.rb +15 -17
  456. data/test/other/report.rb +14 -20
  457. data/test/other/transactions.rb +109 -192
  458. data/test/puppet/conffiles.rb +3 -5
  459. data/test/puppet/defaults.rb +1 -28
  460. data/test/puppet/errortest.rb +1 -2
  461. data/test/puppet/tc_suidmanager.rb +77 -63
  462. data/test/rails/ast.rb +4 -4
  463. data/test/rails/configuration.rb +71 -0
  464. data/test/rails/host.rb +19 -30
  465. data/test/rails/rails.rb +1 -2
  466. data/test/rails/railsparameter.rb +3 -4
  467. data/test/rails/railsresource.rb +6 -5
  468. data/test/ral/manager/attributes.rb +1 -2
  469. data/test/ral/manager/instances.rb +3 -3
  470. data/test/ral/manager/manager.rb +1 -2
  471. data/test/ral/manager/provider.rb +1 -2
  472. data/test/ral/manager/type.rb +89 -93
  473. data/test/ral/providers/cron/crontab.rb +9 -11
  474. data/test/ral/providers/group.rb +1 -2
  475. data/test/ral/providers/host/netinfo.rb +1 -2
  476. data/test/ral/providers/host/parsed.rb +1 -2
  477. data/test/ral/providers/mailalias/aliases.rb +1 -2
  478. data/test/ral/providers/mount/netinfo.rb +1 -2
  479. data/test/ral/providers/nameservice.rb +1 -2
  480. data/test/ral/providers/package.rb +5 -4
  481. data/test/ral/providers/package/apt.rb +0 -1
  482. data/test/ral/providers/package/aptrpm.rb +0 -1
  483. data/test/ral/providers/parsedfile.rb +1 -2
  484. data/test/ral/providers/port/parsed.rb +1 -2
  485. data/test/ral/providers/provider.rb +10 -5
  486. data/test/ral/providers/service/base.rb +1 -2
  487. data/test/ral/providers/service/debian.rb +58 -0
  488. data/test/ral/providers/sshkey/parsed.rb +1 -2
  489. data/test/ral/providers/user.rb +3 -2
  490. data/test/ral/providers/user/useradd.rb +0 -1
  491. data/test/ral/types/basic.rb +4 -9
  492. data/test/ral/types/cron.rb +6 -12
  493. data/test/ral/types/exec.rb +6 -7
  494. data/test/ral/types/file.rb +35 -14
  495. data/test/ral/types/file/target.rb +6 -5
  496. data/test/ral/types/filebucket.rb +3 -2
  497. data/test/ral/types/fileignoresource.rb +10 -42
  498. data/test/ral/types/filesources.rb +21 -60
  499. data/test/ral/types/group.rb +3 -3
  500. data/test/ral/types/host.rb +6 -3
  501. data/test/ral/types/mailalias.rb +1 -2
  502. data/test/ral/types/parameter.rb +5 -3
  503. data/test/ral/types/port.rb +1 -2
  504. data/test/ral/types/property.rb +3 -3
  505. data/test/ral/types/resources.rb +1 -2
  506. data/test/ral/types/service.rb +5 -3
  507. data/test/ral/types/sshkey.rb +5 -3
  508. data/test/ral/types/tidy.rb +63 -3
  509. data/test/ral/types/user.rb +10 -11
  510. data/test/ral/types/yumrepo.rb +1 -1
  511. data/test/ral/types/zone.rb +1 -2
  512. data/test/util/autoload.rb +23 -27
  513. data/test/util/classgen.rb +1 -2
  514. data/test/util/execution.rb +1 -2
  515. data/test/util/features.rb +1 -3
  516. data/test/util/fileparsing.rb +11 -3
  517. data/test/util/filetype.rb +1 -2
  518. data/test/util/inifile.rb +1 -1
  519. data/test/util/instance_loader.rb +5 -6
  520. data/test/util/loadedfile.rb +1 -2
  521. data/test/util/log.rb +1 -2
  522. data/test/util/metrics.rb +1 -2
  523. data/test/util/package.rb +1 -2
  524. data/test/util/posixtest.rb +1 -2
  525. data/test/util/{config.rb → settings.rb} +123 -265
  526. data/test/util/storage.rb +1 -2
  527. data/test/util/subclass_loader.rb +1 -2
  528. data/test/util/utiltest.rb +1 -111
  529. metadata +130 -112
  530. data/ext/tools/passwd2puppet +0 -45
  531. data/lib/puppet/fact_stores/yaml.rb +0 -42
  532. data/lib/puppet/network/handler/facts.rb +0 -70
  533. data/lib/puppet/parser/ast/resourcedef.rb +0 -222
  534. data/lib/puppet/parser/ast/resourceref.rb +0 -58
  535. data/test/language/ast/component.rb +0 -142
  536. data/test/language/collector.rb +0 -179
  537. data/test/language/interpreter.rb +0 -804
  538. data/test/language/node.rb +0 -126
  539. data/test/lib/mocha/mock_methods.rb +0 -122
  540. data/test/lib/puppettest/graph.rb +0 -41
  541. data/test/lib/spec.rb +0 -8
  542. data/test/lib/spec/callback.rb +0 -11
  543. data/test/lib/spec/callback/callback_container.rb +0 -60
  544. data/test/lib/spec/callback/extensions/module.rb +0 -24
  545. data/test/lib/spec/callback/extensions/object.rb +0 -37
  546. data/test/lib/spec/deprecated.rb +0 -3
  547. data/test/lib/spec/expectations.rb +0 -59
  548. data/test/lib/spec/expectations/differs/default.rb +0 -62
  549. data/test/lib/spec/expectations/errors.rb +0 -6
  550. data/test/lib/spec/expectations/extensions.rb +0 -3
  551. data/test/lib/spec/expectations/extensions/object.rb +0 -109
  552. data/test/lib/spec/expectations/extensions/proc.rb +0 -57
  553. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
  554. data/test/lib/spec/expectations/handler.rb +0 -47
  555. data/test/lib/spec/expectations/should.rb +0 -5
  556. data/test/lib/spec/expectations/should/base.rb +0 -64
  557. data/test/lib/spec/expectations/should/change.rb +0 -69
  558. data/test/lib/spec/expectations/should/have.rb +0 -128
  559. data/test/lib/spec/expectations/should/not.rb +0 -74
  560. data/test/lib/spec/expectations/should/should.rb +0 -81
  561. data/test/lib/spec/expectations/sugar.rb +0 -47
  562. data/test/lib/spec/matchers.rb +0 -160
  563. data/test/lib/spec/matchers/be.rb +0 -161
  564. data/test/lib/spec/matchers/be_close.rb +0 -37
  565. data/test/lib/spec/matchers/change.rb +0 -120
  566. data/test/lib/spec/matchers/eql.rb +0 -43
  567. data/test/lib/spec/matchers/equal.rb +0 -43
  568. data/test/lib/spec/matchers/has.rb +0 -44
  569. data/test/lib/spec/matchers/have.rb +0 -140
  570. data/test/lib/spec/matchers/include.rb +0 -50
  571. data/test/lib/spec/matchers/match.rb +0 -41
  572. data/test/lib/spec/matchers/raise_error.rb +0 -100
  573. data/test/lib/spec/matchers/respond_to.rb +0 -35
  574. data/test/lib/spec/matchers/satisfy.rb +0 -47
  575. data/test/lib/spec/matchers/throw_symbol.rb +0 -75
  576. data/test/lib/spec/mocks.rb +0 -232
  577. data/test/lib/spec/mocks/argument_expectation.rb +0 -132
  578. data/test/lib/spec/mocks/error_generator.rb +0 -85
  579. data/test/lib/spec/mocks/errors.rb +0 -10
  580. data/test/lib/spec/mocks/extensions/object.rb +0 -3
  581. data/test/lib/spec/mocks/message_expectation.rb +0 -231
  582. data/test/lib/spec/mocks/methods.rb +0 -40
  583. data/test/lib/spec/mocks/mock.rb +0 -26
  584. data/test/lib/spec/mocks/mock_handler.rb +0 -166
  585. data/test/lib/spec/mocks/order_group.rb +0 -29
  586. data/test/lib/spec/rake/spectask.rb +0 -173
  587. data/test/lib/spec/rake/verify_rcov.rb +0 -47
  588. data/test/lib/spec/runner.rb +0 -132
  589. data/test/lib/spec/runner/backtrace_tweaker.rb +0 -55
  590. data/test/lib/spec/runner/command_line.rb +0 -34
  591. data/test/lib/spec/runner/context.rb +0 -154
  592. data/test/lib/spec/runner/context_eval.rb +0 -142
  593. data/test/lib/spec/runner/context_runner.rb +0 -55
  594. data/test/lib/spec/runner/drb_command_line.rb +0 -21
  595. data/test/lib/spec/runner/execution_context.rb +0 -17
  596. data/test/lib/spec/runner/extensions/kernel.rb +0 -17
  597. data/test/lib/spec/runner/extensions/object.rb +0 -32
  598. data/test/lib/spec/runner/formatter.rb +0 -5
  599. data/test/lib/spec/runner/formatter/base_text_formatter.rb +0 -118
  600. data/test/lib/spec/runner/formatter/html_formatter.rb +0 -219
  601. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +0 -27
  602. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +0 -22
  603. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +0 -23
  604. data/test/lib/spec/runner/heckle_runner.rb +0 -71
  605. data/test/lib/spec/runner/heckle_runner_win.rb +0 -10
  606. data/test/lib/spec/runner/option_parser.rb +0 -224
  607. data/test/lib/spec/runner/reporter.rb +0 -105
  608. data/test/lib/spec/runner/spec_matcher.rb +0 -25
  609. data/test/lib/spec/runner/spec_parser.rb +0 -41
  610. data/test/lib/spec/runner/spec_should_raise_handler.rb +0 -74
  611. data/test/lib/spec/runner/specification.rb +0 -114
  612. data/test/lib/spec/translator.rb +0 -87
  613. data/test/lib/spec/version.rb +0 -30
  614. data/test/network/handler/facts.rb +0 -112
  615. data/test/other/pgraph.rb +0 -290
  616. data/test/other/relationship.rb +0 -74
  617. data/test/puppet/modules.rb +0 -59
  618. data/test/rails/collection.rb +0 -247
  619. data/test/rails/interpreter.rb +0 -91
  620. data/test/ral/providers/mount/parsed.rb +0 -251
  621. data/test/ral/providers/service.rb +0 -235
  622. data/test/ral/types/component.rb +0 -113
  623. data/test/ral/types/interface.rb +0 -40
  624. data/test/ral/types/mount.rb +0 -362
  625. data/test/ral/types/package.rb +0 -154
  626. data/test/ral/types/schedule.rb +0 -357
  627. data/test/tagging/tagging.rb +0 -170
  628. data/test/util/fact_store.rb +0 -67
  629. data/test/util/graph.rb +0 -108
@@ -1,3 +1,5 @@
1
+ # I pulled this into a separate file, because I got
2
+ # tired of rebuilding the parser.rb file all the time.
1
3
  class Puppet::Parser::Parser
2
4
  require 'puppet/parser/functions'
3
5
 
@@ -13,7 +15,7 @@ class Puppet::Parser::Parser
13
15
 
14
16
  AST = Puppet::Parser::AST
15
17
 
16
- attr_reader :file, :interp
18
+ attr_reader :version, :environment
17
19
  attr_accessor :files
18
20
 
19
21
 
@@ -83,6 +85,10 @@ class Puppet::Parser::Parser
83
85
  raise except
84
86
  end
85
87
 
88
+ def file
89
+ @lexer.file
90
+ end
91
+
86
92
  def file=(file)
87
93
  unless FileTest.exists?(file)
88
94
  unless file =~ /\.pp$/
@@ -119,7 +125,7 @@ class Puppet::Parser::Parser
119
125
  # The recursive method used to actually look these objects up.
120
126
  def fqfind(namespace, name, table)
121
127
  namespace = namespace.downcase
122
- name = name.downcase
128
+ name = name.to_s.downcase
123
129
  if name =~ /^::/ or namespace == ""
124
130
  classname = name.sub(/^::/, '')
125
131
  unless table[classname]
@@ -174,14 +180,14 @@ class Puppet::Parser::Parser
174
180
  "in file #{@lexer.file} at line #{@lexer.line}"
175
181
  )
176
182
  end
177
- files = Puppet::Module::find_manifests(pat, dir)
183
+ files = Puppet::Module::find_manifests(pat, :cwd => dir)
178
184
  if files.size == 0
179
185
  raise Puppet::ImportError.new("No file(s) found for import " +
180
186
  "of '#{pat}'")
181
187
  end
182
188
 
183
189
  files.collect { |file|
184
- parser = Puppet::Parser::Parser.new(@astset)
190
+ parser = Puppet::Parser::Parser.new(:astset => @astset, :environment => @environment)
185
191
  parser.files = self.files
186
192
  Puppet.debug("importing '%s'" % file)
187
193
 
@@ -200,11 +206,10 @@ class Puppet::Parser::Parser
200
206
  }
201
207
  end
202
208
 
203
- def initialize(astset = nil)
209
+ def initialize(options = {})
210
+ @astset = options[:astset] || ASTSet.new({}, {}, {})
211
+ @environment = options[:environment]
204
212
  initvars()
205
- if astset
206
- @astset = astset
207
- end
208
213
  end
209
214
 
210
215
  # Initialize or reset all of our variables.
@@ -212,15 +217,6 @@ class Puppet::Parser::Parser
212
217
  @lexer = Puppet::Parser::Lexer.new()
213
218
  @files = []
214
219
  @loaded = []
215
-
216
- # This is where we store our classes and definitions and nodes.
217
- # Clear each hash, just to help the GC a bit.
218
- if defined?(@astset)
219
- [:classes, :definitions, :nodes].each do |name|
220
- @astset.send(name).clear
221
- end
222
- end
223
- @astset = ASTSet.new({}, {}, {})
224
220
  end
225
221
 
226
222
  # Try to load a class, since we could not find it.
@@ -340,7 +336,7 @@ class Puppet::Parser::Parser
340
336
  args[param] = options[param] if options[param]
341
337
  end
342
338
 
343
- @astset.definitions[name] = ast AST::Component, args
339
+ @astset.definitions[name] = ast AST::Definition, args
344
340
  end
345
341
 
346
342
  # Create a new node. Nodes are special, because they're stored in a global
@@ -370,10 +366,12 @@ class Puppet::Parser::Parser
370
366
  end
371
367
 
372
368
  def on_error(token,value,stack)
373
- #on '%s' at '%s' in\n'%s'" % [token,value,stack]
374
- #error = "line %s: parse error after '%s'" %
375
- # [@lexer.line,@lexer.last]
376
- error = "Syntax error at '%s'" % [value]
369
+ if token == 0 # denotes end of file
370
+ value = 'end of file'
371
+ else
372
+ value = "'%s'" % value
373
+ end
374
+ error = "Syntax error at %s" % [value]
377
375
 
378
376
  if brace = @lexer.expected
379
377
  error += "; expected '%s'" % brace
@@ -425,6 +423,7 @@ class Puppet::Parser::Parser
425
423
  # Store the results as the top-level class.
426
424
  newclass("", :code => main)
427
425
  end
426
+ @version = Time.now.to_i
428
427
  return @astset
429
428
  ensure
430
429
  @lexer.clear
@@ -442,6 +441,16 @@ class Puppet::Parser::Parser
442
441
  def string=(string)
443
442
  @lexer.string = string
444
443
  end
445
- end
446
444
 
447
- # $Id: parser_support.rb 2744 2007-08-04 20:00:19Z luke $
445
+ # Add a new file to be checked when we're checking to see if we should be
446
+ # reparsed. This is basically only used by the TemplateWrapper to let the
447
+ # parser know about templates that should be parsed.
448
+ def watch_file(*files)
449
+ files.each do |file|
450
+ unless file.is_a? Puppet::Util::LoadedFile
451
+ file = Puppet::Util::LoadedFile.new(file)
452
+ end
453
+ @files << file
454
+ end
455
+ end
456
+ end
@@ -3,19 +3,26 @@
3
3
  class Puppet::Parser::Resource
4
4
  require 'puppet/parser/resource/param'
5
5
  require 'puppet/parser/resource/reference'
6
- ResParam = Struct.new :name, :value, :source, :line, :file
7
6
  include Puppet::Util
8
7
  include Puppet::Util::MethodHelper
9
8
  include Puppet::Util::Errors
10
9
  include Puppet::Util::Logging
11
10
 
12
11
  attr_accessor :source, :line, :file, :scope, :rails_id
13
- attr_accessor :virtual, :override, :params, :translated
12
+ attr_accessor :virtual, :override, :translated
14
13
 
15
- attr_reader :exported
14
+ attr_reader :exported, :evaluated, :params
16
15
 
17
16
  attr_writer :tags
18
17
 
18
+ # Determine whether the provided parameter name is a relationship parameter.
19
+ def self.relationship_parameter?(name)
20
+ unless defined?(@relationship_names)
21
+ @relationship_names = Puppet::Type.relationship_params.collect { |p| p.name }
22
+ end
23
+ @relationship_names.include?(name)
24
+ end
25
+
19
26
  # Proxy a few methods to our @ref object.
20
27
  [:builtin?, :type, :title].each do |method|
21
28
  define_method(method) do
@@ -24,7 +31,7 @@ class Puppet::Parser::Resource
24
31
  end
25
32
 
26
33
  # Set up some boolean test methods
27
- [:exported, :translated, :override].each do |method|
34
+ [:exported, :translated, :override, :virtual, :evaluated].each do |method|
28
35
  newmeth = (method.to_s + "?").intern
29
36
  define_method(newmeth) do
30
37
  self.send(method)
@@ -43,44 +50,6 @@ class Puppet::Parser::Resource
43
50
  end
44
51
  end
45
52
 
46
- # Add default values from our definition.
47
- def adddefaults
48
- defaults = scope.lookupdefaults(self.type)
49
-
50
- defaults.each do |name, param|
51
- unless @params.include?(param.name)
52
- self.debug "Adding default for %s" % param.name
53
-
54
- @params[param.name] = param
55
- end
56
- end
57
- end
58
-
59
- # Add any metaparams defined in our scope. This actually adds any metaparams
60
- # from any parent scope, and there's currently no way to turn that off.
61
- def addmetaparams
62
- Puppet::Type.eachmetaparam do |name|
63
- next if self[name]
64
- if val = scope.lookupvar(name.to_s, false)
65
- unless val == :undefined
66
- set Param.new(:name => name, :value => val,
67
- :source => scope.source)
68
- end
69
- end
70
- end
71
- end
72
-
73
- # Add any overrides for this object.
74
- def addoverrides
75
- overrides = scope.lookupoverrides(self)
76
-
77
- overrides.each do |over|
78
- self.merge(over)
79
- end
80
-
81
- overrides.clear
82
- end
83
-
84
53
  def builtin=(bool)
85
54
  @ref.builtin = bool
86
55
  end
@@ -89,15 +58,8 @@ class Puppet::Parser::Resource
89
58
  def evaluate
90
59
  if klass = @ref.definedtype
91
60
  finish()
92
- scope.deleteresource(self)
93
- return klass.evaluate(:scope => scope,
94
- :type => self.type,
95
- :title => self.title,
96
- :arguments => self.to_hash,
97
- :scope => self.scope,
98
- :virtual => self.virtual,
99
- :exported => self.exported
100
- )
61
+ scope.compile.delete_resource(self)
62
+ return klass.evaluate(:scope => scope, :resource => self)
101
63
  elsif builtin?
102
64
  devfail "Cannot evaluate a builtin type"
103
65
  else
@@ -107,6 +69,8 @@ class Puppet::Parser::Resource
107
69
  @evaluated = true
108
70
  end
109
71
 
72
+ # Mark this resource as both exported and virtual,
73
+ # or remove the exported mark.
110
74
  def exported=(value)
111
75
  if value
112
76
  @virtual = true
@@ -116,63 +80,80 @@ class Puppet::Parser::Resource
116
80
  end
117
81
  end
118
82
 
119
- def evaluated?
120
- if defined? @evaluated and @evaluated
121
- true
122
- else
123
- false
124
- end
125
- end
126
-
127
83
  # Do any finishing work on this object, called before evaluation or
128
84
  # before storage/translation.
129
85
  def finish
130
- addoverrides()
131
- adddefaults()
132
- addmetaparams()
86
+ add_overrides()
87
+ add_defaults()
88
+ add_metaparams()
89
+ validate()
133
90
  end
134
91
 
135
92
  def initialize(options)
93
+ # Set all of the options we can.
94
+ options.each do |option, value|
95
+ if respond_to?(option.to_s + "=")
96
+ send(option.to_s + "=", value)
97
+ options.delete(option)
98
+ end
99
+ end
100
+
101
+ unless self.scope
102
+ raise ArgumentError, "Resources require a scope"
103
+ end
104
+ @source ||= scope.source
105
+
136
106
  options = symbolize_options(options)
137
107
 
138
- # Collect the options necessary to make the reference.
139
- refopts = [:type, :title].inject({}) do |hash, param|
140
- hash[param] = options[param]
141
- options.delete(param)
142
- hash
108
+ # Set up our reference.
109
+ if type = options[:type] and title = options[:title]
110
+ options.delete(:type)
111
+ options.delete(:title)
112
+ else
113
+ raise ArgumentError, "Resources require a type and title"
143
114
  end
144
115
 
116
+ @ref = Reference.new(:type => type, :title => title, :scope => self.scope)
117
+
145
118
  @params = {}
146
- tmpparams = nil
147
- if tmpparams = options[:params]
119
+
120
+ # Define all of the parameters
121
+ if params = options[:params]
148
122
  options.delete(:params)
123
+ params.each do |param|
124
+ set_parameter(param)
125
+ end
149
126
  end
150
127
 
151
- # Now set the rest of the options.
152
- set_options(options)
153
-
154
- @ref = Reference.new(refopts)
155
-
156
- requiredopts(:scope, :source)
128
+ # Throw an exception if we've got any arguments left to set.
129
+ unless options.empty?
130
+ raise ArgumentError, "Resources do not accept %s" % options.keys.collect { |k| k.to_s }.join(", ")
131
+ end
157
132
 
158
- @ref.scope = self.scope
133
+ @tags = []
134
+ tag(@ref.type)
135
+ tag(@ref.title) if @ref.title.to_s =~ /^[-\w]+$/
159
136
 
160
- if tmpparams
161
- tmpparams.each do |param|
162
- # We use the method here, because it does type-checking.
163
- set(param)
164
- end
137
+ if scope.resource
138
+ @tags += scope.resource.tags
165
139
  end
166
140
  end
167
141
 
168
- # Merge an override resource in.
142
+ # Merge an override resource in. This will throw exceptions if
143
+ # any overrides aren't allowed.
169
144
  def merge(resource)
145
+ # Test the resource scope, to make sure the resource is even allowed
146
+ # to override.
147
+ unless self.source.object_id == resource.source.object_id || resource.source.child_of?(self.source)
148
+ raise Puppet::ParseError.new("Only subclasses can override parameters", resource.line, resource.file)
149
+ end
170
150
  # Some of these might fail, but they'll fail in the way we want.
171
151
  resource.params.each do |name, param|
172
- set(param)
152
+ override_parameter(param)
173
153
  end
174
154
  end
175
155
 
156
+ # Modify this resource in the Rails database. Poor design, yo.
176
157
  def modify_rails(db_resource)
177
158
  args = rails_args
178
159
  args.each do |param, value|
@@ -215,6 +196,15 @@ class Puppet::Parser::Resource
215
196
  })
216
197
  end
217
198
 
199
+ # Return the resource name, or the title if no name
200
+ # was specified.
201
+ def name
202
+ unless defined? @name
203
+ @name = self[:name] || self.title
204
+ end
205
+ @name
206
+ end
207
+
218
208
  # This *significantly* reduces the number of calls to Puppet.[].
219
209
  def paramcheck?
220
210
  unless defined? @@paramcheck
@@ -223,23 +213,6 @@ class Puppet::Parser::Resource
223
213
  @@paramcheck
224
214
  end
225
215
 
226
- # Verify that all passed parameters are valid. This throws an error if
227
- # there's a problem, so we don't have to worry about the return value.
228
- def paramcheck(param)
229
- param = param.to_s
230
- # Now make sure it's a valid argument to our class. These checks
231
- # are organized in order of commonhood -- most types, it's a valid
232
- # argument and paramcheck is enabled.
233
- if @ref.typeclass.validattr?(param)
234
- true
235
- elsif %w{name title}.include?(param) # always allow these
236
- true
237
- elsif paramcheck?
238
- self.fail Puppet::ParseError, "Invalid parameter '%s' for type '%s'" %
239
- [param.inspect, @ref.type]
240
- end
241
- end
242
-
243
216
  # A temporary occasion, until I get paths in the scopes figured out.
244
217
  def path
245
218
  to_s
@@ -250,65 +223,21 @@ class Puppet::Parser::Resource
250
223
  @ref.to_s
251
224
  end
252
225
 
253
- # You have to pass a Resource::Param to this.
254
- def set(param, value = nil, source = nil)
255
- if value and source
256
- param = Puppet::Parser::Resource::Param.new(
257
- :name => param, :value => value, :source => source
258
- )
259
- elsif ! param.is_a?(Puppet::Parser::Resource::Param)
260
- raise ArgumentError, "Must pass a parameter or all necessary values"
261
- end
262
- # Because definitions are now parse-time, I can paramcheck immediately.
263
- paramcheck(param.name)
264
-
265
- if current = @params[param.name]
266
- # This is where we'd ignore any equivalent values if we wanted to,
267
- # but that would introduce a lot of really bad ordering issues.
268
- if param.source.child_of?(current.source)
269
- if param.add
270
- # Merge with previous value.
271
- param.value = [ current.value, param.value ].flatten
272
- end
273
-
274
- # Replace it, keeping all of its info.
275
- @params[param.name] = param
276
- else
277
- if Puppet[:trace]
278
- puts caller
279
- end
280
- msg = "Parameter '%s' is already set on %s" %
281
- [param.name, self.to_s]
282
- if current.source.to_s != ""
283
- msg += " by %s" % current.source
284
- end
285
- if current.file or current.line
286
- fields = []
287
- fields << current.file if current.file
288
- fields << current.line.to_s if current.line
289
- msg += " at %s" % fields.join(":")
290
- end
291
- msg += "; cannot redefine"
292
- error = Puppet::ParseError.new(msg)
293
- error.file = param.file if param.file
294
- error.line = param.line if param.line
295
- raise error
226
+ # Add a tag to our current list. These tags will be added to all
227
+ # of the objects contained in this scope.
228
+ def tag(*ary)
229
+ ary.collect { |tag| tag.to_s.downcase }.collect { |tag| tag.split("::") }.flatten.each do |tag|
230
+ unless tag =~ /^\w[-\w]*$/
231
+ fail Puppet::ParseError, "Invalid tag %s" % tag.inspect
296
232
  end
297
- else
298
- if self.source == param.source or param.source.child_of?(self.source)
299
- @params[param.name] = param
300
- else
301
- fail Puppet::ParseError, "Only subclasses can set parameters"
233
+ unless @tags.include?(tag)
234
+ @tags << tag
302
235
  end
303
236
  end
304
237
  end
305
238
 
306
239
  def tags
307
- unless defined? @tags
308
- @tags = scope.tags
309
- @tags << self.type
310
- end
311
- @tags
240
+ @tags.dup
312
241
  end
313
242
 
314
243
  def to_hash
@@ -346,12 +275,26 @@ class Puppet::Parser::Resource
346
275
 
347
276
  # Translate our object to a transportable object.
348
277
  def to_trans
349
- unless builtin?
350
- devfail "Tried to translate a non-builtin resource"
278
+ return nil if virtual?
279
+
280
+ if builtin?
281
+ to_transobject
282
+ else
283
+ to_transbucket
351
284
  end
285
+ end
352
286
 
353
- return nil if virtual?
287
+ def to_transbucket
288
+ bucket = Puppet::TransBucket.new([])
289
+
290
+ bucket.type = self.type
291
+ bucket.name = self.title
354
292
 
293
+ # TransBuckets don't support parameters, which is why they're being deprecated.
294
+ return bucket
295
+ end
296
+
297
+ def to_transobject
355
298
  # Now convert to a transobject
356
299
  obj = Puppet::TransObject.new(@ref.title, @ref.type)
357
300
  to_hash.each do |p, v|
@@ -384,12 +327,106 @@ class Puppet::Parser::Resource
384
327
 
385
328
  return obj
386
329
  end
387
-
388
- def virtual?
389
- self.virtual
390
- end
391
330
 
392
331
  private
332
+
333
+ # Add default values from our definition.
334
+ def add_defaults
335
+ scope.lookupdefaults(self.type).each do |name, param|
336
+ unless @params.include?(name)
337
+ self.debug "Adding default for %s" % name
338
+
339
+ @params[name] = param
340
+ end
341
+ end
342
+ end
343
+
344
+ # Add any metaparams defined in our scope. This actually adds any metaparams
345
+ # from any parent scope, and there's currently no way to turn that off.
346
+ def add_metaparams
347
+ Puppet::Type.eachmetaparam do |name|
348
+ # Skip metaparams that we already have defined, unless they're relationship metaparams.
349
+ # LAK:NOTE Relationship metaparams get treated specially -- we stack them, instead of
350
+ # overriding.
351
+ next if @params[name] and not self.class.relationship_parameter?(name)
352
+
353
+ # Skip metaparams for which we get no value.
354
+ next unless val = scope.lookupvar(name.to_s, false) and val != :undefined
355
+
356
+ # The default case: just set the value
357
+ return set_parameter(name, val) unless @params[name]
358
+
359
+ # For relationship params, though, join the values (a la #446).
360
+ @params[name].value = [@params[name].value, val].flatten
361
+ end
362
+ end
363
+
364
+ # Add any overrides for this object.
365
+ def add_overrides
366
+ if overrides = scope.compile.resource_overrides(self)
367
+ overrides.each do |over|
368
+ self.merge(over)
369
+ end
370
+
371
+ # Remove the overrides, so that the configuration knows there
372
+ # are none left.
373
+ overrides.clear
374
+ end
375
+ end
376
+
377
+ # Accept a parameter from an override.
378
+ def override_parameter(param)
379
+ # This can happen if the override is defining a new parameter, rather
380
+ # than replacing an existing one.
381
+ (@params[param.name] = param and return) unless current = @params[param.name]
382
+
383
+ # The parameter is already set. Fail if they're not allowed to override it.
384
+ unless param.source.child_of?(current.source)
385
+ if Puppet[:trace]
386
+ puts caller
387
+ end
388
+ msg = "Parameter '%s' is already set on %s" %
389
+ [param.name, self.to_s]
390
+ if current.source.to_s != ""
391
+ msg += " by %s" % current.source
392
+ end
393
+ if current.file or current.line
394
+ fields = []
395
+ fields << current.file if current.file
396
+ fields << current.line.to_s if current.line
397
+ msg += " at %s" % fields.join(":")
398
+ end
399
+ msg += "; cannot redefine"
400
+ raise Puppet::ParseError.new(msg, param.line, param.file)
401
+ end
402
+
403
+ # If we've gotten this far, we're allowed to override.
404
+
405
+ # Merge with previous value, if the parameter was generated with the +> syntax.
406
+ # It's important that we use the new param instance here, not the old one,
407
+ # so that the source is registered correctly for later overrides.
408
+ param.value = [current.value, param.value].flatten if param.add
409
+
410
+ @params[param.name] = param
411
+ end
412
+
413
+ # Verify that all passed parameters are valid. This throws an error if
414
+ # there's a problem, so we don't have to worry about the return value.
415
+ def paramcheck(param)
416
+ param = param.to_s
417
+ # Now make sure it's a valid argument to our class. These checks
418
+ # are organized in order of commonhood -- most types, it's a valid
419
+ # argument and paramcheck is enabled.
420
+ if @ref.typeclass.validattr?(param)
421
+ true
422
+ elsif %w{name title}.include?(param) # always allow these
423
+ true
424
+ elsif paramcheck?
425
+ self.fail Puppet::ParseError, "Invalid parameter '%s' for type '%s'" %
426
+ [param, @ref.type]
427
+ end
428
+ end
429
+
393
430
  def rails_args
394
431
  return [:type, :title, :line, :exported].inject({}) do |hash, param|
395
432
  # 'type' isn't a valid column name, so we have to use another name.
@@ -400,6 +437,26 @@ class Puppet::Parser::Resource
400
437
  hash
401
438
  end
402
439
  end
403
- end
404
440
 
405
- # $Id: resource.rb 2693 2007-07-14 17:46:37Z luke $
441
+ # Define a parameter in our resource.
442
+ def set_parameter(param, value = nil)
443
+ if value
444
+ param = Puppet::Parser::Resource::Param.new(
445
+ :name => param, :value => value, :source => self.source
446
+ )
447
+ elsif ! param.is_a?(Puppet::Parser::Resource::Param)
448
+ raise ArgumentError, "Must pass a parameter or all necessary values"
449
+ end
450
+
451
+ # And store it in our parameter hash.
452
+ @params[param.name] = param
453
+ end
454
+
455
+ # Make sure the resource's parameters are all valid for the type.
456
+ def validate
457
+ @params.each do |name, param|
458
+ # Make sure it's a valid parameter.
459
+ paramcheck(name)
460
+ end
461
+ end
462
+ end