puppet 0.24.9 → 0.25.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 (910) hide show
  1. data/CHANGELOG +18680 -1241
  2. data/CHANGELOG.old +1705 -0
  3. data/LICENSE +2 -2
  4. data/README +1 -1
  5. data/README.queueing +126 -0
  6. data/README.rst +4 -4
  7. data/Rakefile +62 -216
  8. data/bin/filebucket +6 -117
  9. data/bin/pi +50 -0
  10. data/bin/puppet +7 -188
  11. data/bin/puppetdoc +7 -198
  12. data/bin/ralsh +4 -191
  13. data/conf/auth.conf +94 -0
  14. data/conf/gentoo/init.d/puppetmaster +30 -30
  15. data/conf/osx/PackageInfo.plist +30 -30
  16. data/conf/osx/createpackage.sh +23 -18
  17. data/conf/osx/preflight +8 -0
  18. data/conf/puppet-queue.conf +10 -0
  19. data/conf/redhat/client.init +52 -41
  20. data/conf/redhat/logrotate +1 -0
  21. data/conf/redhat/puppet.spec +74 -36
  22. data/conf/redhat/rundir-perms.patch +28 -0
  23. data/conf/redhat/server.init +48 -43
  24. data/conf/redhat/server.sysconfig +4 -4
  25. data/conf/solaris/smf/puppetd.xml +53 -53
  26. data/conf/solaris/smf/puppetmasterd.xml +53 -53
  27. data/conf/solaris/smf/svc-puppetd +4 -4
  28. data/conf/solaris/smf/svc-puppetmasterd +3 -3
  29. data/conf/suse/client.init +4 -4
  30. data/conf/suse/puppet.spec +14 -14
  31. data/conf/suse/server.init +17 -17
  32. data/examples/etc/init.d/sleeper +8 -8
  33. data/examples/mac_dscl.pp +2 -2
  34. data/examples/mac_dscl_revert.pp +1 -1
  35. data/examples/mcx_dock_default.pp +108 -108
  36. data/examples/mcx_dock_full.pp +108 -108
  37. data/examples/mcx_nogroup.pp +108 -108
  38. data/examples/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +5 -5
  39. data/examples/modules/sample-module/manifests/init.pp +2 -2
  40. data/examples/relationships +1 -1
  41. data/ext/autotest/config +6 -6
  42. data/ext/bin/sleeper +12 -12
  43. data/ext/dbfix.sql +21 -21
  44. data/ext/emacs/puppet-mode.el +42 -41
  45. data/ext/extlookup.rb +183 -0
  46. data/ext/ldap/puppet.schema +2 -1
  47. data/ext/logcheck/puppet +1 -1
  48. data/ext/module_puppet +7 -7
  49. data/ext/nagios/check_puppet.rb +83 -83
  50. data/ext/nagios/naggen +302 -0
  51. data/ext/puppet-test +61 -18
  52. data/ext/puppetlisten/puppetlisten.rb +76 -0
  53. data/ext/puppetlisten/puppetrun.rb +39 -0
  54. data/ext/puppetstoredconfigclean.rb +29 -29
  55. data/ext/rack/README +73 -0
  56. data/ext/rack/files/apache2.conf +38 -0
  57. data/ext/rack/files/config.ru +18 -0
  58. data/ext/rack/manifest.pp +59 -0
  59. data/ext/vim/syntax/puppet.vim +54 -35
  60. data/install.rb +37 -26
  61. data/lib/puppet.rb +15 -227
  62. data/lib/puppet/agent.rb +134 -0
  63. data/lib/puppet/agent/locker.rb +42 -0
  64. data/lib/puppet/agent/runner.rb +65 -0
  65. data/lib/puppet/application.rb +313 -0
  66. data/lib/puppet/application/filebucket.rb +87 -0
  67. data/lib/puppet/application/pi.rb +214 -0
  68. data/lib/puppet/application/puppet.rb +177 -0
  69. data/lib/puppet/application/puppetca.rb +71 -0
  70. data/lib/puppet/application/puppetd.rb +256 -0
  71. data/lib/puppet/application/puppetdoc.rb +222 -0
  72. data/lib/puppet/application/puppetmasterd.rb +168 -0
  73. data/lib/puppet/application/puppetqd.rb +96 -0
  74. data/lib/puppet/application/puppetrun.rb +219 -0
  75. data/lib/puppet/application/ralsh.rb +168 -0
  76. data/lib/puppet/configurer.rb +177 -0
  77. data/lib/puppet/configurer/downloader.rb +79 -0
  78. data/lib/puppet/configurer/fact_handler.rb +68 -0
  79. data/lib/puppet/configurer/plugin_handler.rb +26 -0
  80. data/lib/puppet/daemon.rb +78 -28
  81. data/lib/puppet/defaults.rb +239 -166
  82. data/lib/puppet/dsl.rb +7 -7
  83. data/lib/puppet/external/dot.rb +271 -271
  84. data/lib/puppet/external/event-loop/better-definers.rb +298 -298
  85. data/lib/puppet/external/event-loop/event-loop.rb +274 -274
  86. data/lib/puppet/external/event-loop/signal-system.rb +163 -163
  87. data/lib/puppet/external/lock.rb +1 -1
  88. data/lib/puppet/external/nagios.rb +20 -20
  89. data/lib/puppet/external/nagios/base.rb +3 -3
  90. data/lib/puppet/external/nagios/grammar.ry +185 -0
  91. data/lib/puppet/external/nagios/makefile +9 -0
  92. data/lib/puppet/external/nagios/parser.rb +1 -1
  93. data/lib/puppet/feature/json.rb +2 -0
  94. data/lib/puppet/feature/rack.rb +24 -0
  95. data/lib/puppet/feature/rails.rb +23 -33
  96. data/lib/puppet/feature/rubygems.rb +6 -0
  97. data/lib/puppet/feature/stomp.rb +6 -0
  98. data/lib/puppet/file_serving/{file_base.rb → base.rb} +10 -9
  99. data/lib/puppet/file_serving/configuration.rb +61 -61
  100. data/lib/puppet/file_serving/configuration/parser.rb +24 -29
  101. data/lib/puppet/file_serving/content.rb +26 -11
  102. data/lib/puppet/file_serving/fileset.rb +54 -19
  103. data/lib/puppet/file_serving/indirection_hooks.rb +12 -24
  104. data/lib/puppet/file_serving/metadata.rb +8 -8
  105. data/lib/puppet/file_serving/mount.rb +9 -151
  106. data/lib/puppet/file_serving/mount/file.rb +126 -0
  107. data/lib/puppet/file_serving/mount/modules.rb +25 -0
  108. data/lib/puppet/file_serving/mount/plugins.rb +27 -0
  109. data/lib/puppet/file_serving/terminus_helper.rb +9 -4
  110. data/lib/puppet/indirector.rb +6 -4
  111. data/lib/puppet/indirector/active_record.rb +28 -0
  112. data/lib/puppet/indirector/catalog/active_record.rb +36 -0
  113. data/lib/puppet/indirector/catalog/compiler.rb +50 -24
  114. data/lib/puppet/indirector/catalog/queue.rb +5 -0
  115. data/lib/puppet/indirector/catalog/rest.rb +6 -0
  116. data/lib/puppet/indirector/catalog/yaml.rb +2 -4
  117. data/lib/puppet/indirector/certificate/ca.rb +9 -0
  118. data/lib/puppet/indirector/certificate/file.rb +9 -0
  119. data/lib/puppet/indirector/certificate/rest.rb +9 -0
  120. data/lib/puppet/indirector/certificate_request/ca.rb +14 -0
  121. data/lib/puppet/indirector/certificate_request/file.rb +8 -0
  122. data/lib/puppet/indirector/certificate_request/rest.rb +9 -0
  123. data/lib/puppet/indirector/certificate_revocation_list/ca.rb +8 -0
  124. data/lib/puppet/indirector/certificate_revocation_list/file.rb +8 -0
  125. data/lib/puppet/indirector/certificate_revocation_list/rest.rb +9 -0
  126. data/lib/puppet/indirector/direct_file_server.rb +4 -8
  127. data/lib/puppet/indirector/exec.rb +2 -6
  128. data/lib/puppet/indirector/facts/active_record.rb +36 -0
  129. data/lib/puppet/indirector/facts/facter.rb +30 -22
  130. data/lib/puppet/indirector/facts/rest.rb +6 -0
  131. data/lib/puppet/indirector/file.rb +1 -0
  132. data/lib/puppet/indirector/file_content/rest.rb +0 -1
  133. data/lib/puppet/indirector/file_metadata/file.rb +2 -2
  134. data/lib/puppet/indirector/file_metadata/rest.rb +0 -1
  135. data/lib/puppet/indirector/file_server.rb +31 -18
  136. data/lib/puppet/indirector/indirection.rb +46 -33
  137. data/lib/puppet/indirector/key/ca.rb +12 -0
  138. data/lib/puppet/indirector/key/file.rb +42 -0
  139. data/lib/puppet/indirector/node/active_record.rb +13 -0
  140. data/lib/puppet/indirector/node/ldap.rb +1 -1
  141. data/lib/puppet/indirector/queue.rb +83 -0
  142. data/lib/puppet/indirector/report/processor.rb +1 -1
  143. data/lib/puppet/indirector/report/rest.rb +7 -0
  144. data/lib/puppet/indirector/request.rb +158 -15
  145. data/lib/puppet/indirector/rest.rb +74 -36
  146. data/lib/puppet/indirector/runner/rest.rb +7 -0
  147. data/lib/puppet/indirector/ssl_file.rb +174 -0
  148. data/lib/puppet/indirector/terminus.rb +4 -4
  149. data/lib/puppet/indirector/yaml.rb +1 -1
  150. data/lib/puppet/metatype/manager.rb +3 -3
  151. data/lib/puppet/module.rb +99 -124
  152. data/lib/puppet/network/authconfig.rb +57 -42
  153. data/lib/puppet/network/authstore.rb +58 -10
  154. data/lib/puppet/network/client.rb +0 -2
  155. data/lib/puppet/network/client/ca.rb +1 -1
  156. data/lib/puppet/network/client/dipper.rb +7 -2
  157. data/lib/puppet/network/format.rb +123 -0
  158. data/lib/puppet/network/format_handler.rb +156 -0
  159. data/lib/puppet/network/formats.rb +123 -0
  160. data/lib/puppet/network/handler/filebucket.rb +1 -1
  161. data/lib/puppet/network/handler/fileserver.rb +43 -35
  162. data/lib/puppet/network/handler/master.rb +4 -4
  163. data/lib/puppet/network/handler/report.rb +1 -1
  164. data/lib/puppet/network/handler/resource.rb +16 -20
  165. data/lib/puppet/network/handler/runner.rb +9 -42
  166. data/lib/puppet/network/http.rb +4 -4
  167. data/lib/puppet/network/http/api.rb +4 -0
  168. data/lib/puppet/network/http/api/v1.rb +65 -0
  169. data/lib/puppet/network/http/handler.rb +163 -56
  170. data/lib/puppet/network/http/mongrel.rb +19 -15
  171. data/lib/puppet/network/http/mongrel/rest.rb +35 -17
  172. data/lib/puppet/network/http/rack.rb +62 -0
  173. data/lib/puppet/network/http/rack/httphandler.rb +34 -0
  174. data/lib/puppet/network/http/rack/rest.rb +79 -0
  175. data/lib/puppet/network/http/rack/xmlrpc.rb +65 -0
  176. data/lib/puppet/network/http/webrick.rb +89 -16
  177. data/lib/puppet/network/http/webrick/rest.rb +24 -11
  178. data/lib/puppet/network/http_pool.rb +28 -29
  179. data/lib/puppet/network/http_server/mongrel.rb +8 -10
  180. data/lib/puppet/network/http_server/webrick.rb +1 -3
  181. data/lib/puppet/network/rest_authconfig.rb +89 -0
  182. data/lib/puppet/network/rest_authorization.rb +25 -0
  183. data/lib/puppet/network/rights.rb +230 -27
  184. data/lib/puppet/network/server.rb +133 -31
  185. data/lib/puppet/network/xmlrpc/client.rb +5 -5
  186. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +6 -6
  187. data/lib/puppet/node.rb +28 -21
  188. data/lib/puppet/node/environment.rb +48 -0
  189. data/lib/puppet/node/facts.rb +21 -0
  190. data/lib/puppet/parameter.rb +291 -219
  191. data/lib/puppet/parser/ast.rb +1 -0
  192. data/lib/puppet/parser/ast/astarray.rb +5 -1
  193. data/lib/puppet/parser/ast/boolean_operator.rb +3 -3
  194. data/lib/puppet/parser/ast/caseopt.rb +10 -0
  195. data/lib/puppet/parser/ast/casestatement.rb +12 -27
  196. data/lib/puppet/parser/ast/collection.rb +31 -0
  197. data/lib/puppet/parser/ast/collexpr.rb +18 -11
  198. data/lib/puppet/parser/ast/comparison_operator.rb +1 -1
  199. data/lib/puppet/parser/ast/definition.rb +6 -2
  200. data/lib/puppet/parser/ast/function.rb +7 -2
  201. data/lib/puppet/parser/ast/ifstatement.rb +11 -6
  202. data/lib/puppet/parser/ast/leaf.rb +106 -3
  203. data/lib/puppet/parser/ast/match_operator.rb +31 -0
  204. data/lib/puppet/parser/ast/node.rb +10 -6
  205. data/lib/puppet/parser/ast/resource_defaults.rb +2 -2
  206. data/lib/puppet/parser/ast/resource_override.rb +1 -1
  207. data/lib/puppet/parser/ast/resource_reference.rb +11 -3
  208. data/lib/puppet/parser/ast/selector.rb +14 -32
  209. data/lib/puppet/parser/ast/vardef.rb +1 -1
  210. data/lib/puppet/parser/collector.rb +67 -15
  211. data/lib/puppet/parser/compiler.rb +21 -53
  212. data/lib/puppet/parser/files.rb +92 -0
  213. data/lib/puppet/parser/functions.rb +3 -3
  214. data/lib/puppet/parser/functions/defined.rb +3 -3
  215. data/lib/puppet/parser/functions/fqdn_rand.rb +3 -3
  216. data/lib/puppet/parser/functions/inline_template.rb +4 -4
  217. data/lib/puppet/parser/functions/regsubst.rb +37 -35
  218. data/lib/puppet/parser/functions/require.rb +34 -0
  219. data/lib/puppet/parser/functions/shellquote.rb +41 -0
  220. data/lib/puppet/parser/functions/split.rb +29 -0
  221. data/lib/puppet/parser/functions/sprintf.rb +6 -6
  222. data/lib/puppet/parser/functions/template.rb +4 -4
  223. data/lib/puppet/parser/functions/versioncmp.rb +22 -1
  224. data/lib/puppet/parser/grammar.ra +812 -0
  225. data/lib/puppet/parser/interpreter.rb +4 -4
  226. data/lib/puppet/parser/lexer.rb +44 -15
  227. data/lib/puppet/parser/loaded_code.rb +115 -0
  228. data/lib/puppet/parser/makefile +8 -0
  229. data/lib/puppet/parser/parser.rb +1080 -928
  230. data/lib/puppet/parser/parser_support.rb +118 -96
  231. data/lib/puppet/parser/resource.rb +56 -126
  232. data/lib/puppet/parser/resource/param.rb +2 -76
  233. data/lib/puppet/parser/resource/reference.rb +15 -8
  234. data/lib/puppet/parser/scope.rb +68 -35
  235. data/lib/puppet/parser/templatewrapper.rb +8 -8
  236. data/lib/puppet/parser/yaml_trimmer.rb +11 -0
  237. data/lib/puppet/property.rb +69 -124
  238. data/lib/puppet/property/list.rb +3 -3
  239. data/lib/puppet/provider.rb +5 -5
  240. data/lib/puppet/provider/augeas/augeas.rb +119 -118
  241. data/lib/puppet/provider/computer/computer.rb +3 -3
  242. data/lib/puppet/provider/confine/variable.rb +1 -1
  243. data/lib/puppet/provider/cron/crontab.rb +8 -7
  244. data/lib/puppet/provider/group/directoryservice.rb +2 -2
  245. data/lib/puppet/provider/group/groupadd.rb +1 -1
  246. data/lib/puppet/provider/group/ldap.rb +3 -3
  247. data/lib/puppet/provider/group/pw.rb +1 -1
  248. data/lib/puppet/provider/host/parsed.rb +3 -3
  249. data/lib/puppet/provider/ldap.rb +1 -3
  250. data/lib/puppet/provider/macauthorization/macauthorization.rb +62 -55
  251. data/lib/puppet/provider/mailalias/aliases.rb +9 -1
  252. data/lib/puppet/provider/maillist/mailman.rb +8 -4
  253. data/lib/puppet/provider/mcx/mcxcontent.rb +11 -11
  254. data/lib/puppet/provider/mount/parsed.rb +2 -2
  255. data/lib/puppet/provider/nameservice.rb +6 -6
  256. data/lib/puppet/provider/nameservice/directoryservice.rb +83 -87
  257. data/lib/puppet/provider/package/appdmg.rb +10 -9
  258. data/lib/puppet/provider/package/apple.rb +1 -3
  259. data/lib/puppet/provider/package/apt.rb +5 -5
  260. data/lib/puppet/provider/package/aptitude.rb +1 -1
  261. data/lib/puppet/provider/package/aptrpm.rb +1 -1
  262. data/lib/puppet/provider/package/darwinport.rb +1 -1
  263. data/lib/puppet/provider/package/dpkg.rb +2 -2
  264. data/lib/puppet/provider/package/fink.rb +6 -6
  265. data/lib/puppet/provider/package/freebsd.rb +1 -1
  266. data/lib/puppet/provider/package/gem.rb +2 -2
  267. data/lib/puppet/provider/package/hpux.rb +5 -5
  268. data/lib/puppet/provider/package/pkgdmg.rb +30 -22
  269. data/lib/puppet/provider/package/portage.rb +1 -1
  270. data/lib/puppet/provider/package/ports.rb +1 -1
  271. data/lib/puppet/provider/package/rpm.rb +5 -5
  272. data/lib/puppet/provider/package/rug.rb +1 -1
  273. data/lib/puppet/provider/package/sun.rb +7 -7
  274. data/lib/puppet/provider/package/up2date.rb +1 -1
  275. data/lib/puppet/provider/package/yum.rb +2 -2
  276. data/lib/puppet/provider/package/yumhelper.py +2 -2
  277. data/lib/puppet/provider/port/parsed.rb +1 -1
  278. data/lib/puppet/provider/selmodule/semodule.rb +3 -3
  279. data/lib/puppet/provider/service/base.rb +21 -12
  280. data/lib/puppet/provider/service/daemontools.rb +86 -49
  281. data/lib/puppet/provider/service/debian.rb +20 -12
  282. data/lib/puppet/provider/service/freebsd.rb +5 -5
  283. data/lib/puppet/provider/service/gentoo.rb +2 -2
  284. data/lib/puppet/provider/service/init.rb +21 -33
  285. data/lib/puppet/provider/service/launchd.rb +120 -48
  286. data/lib/puppet/provider/service/redhat.rb +12 -21
  287. data/lib/puppet/provider/service/runit.rb +19 -9
  288. data/lib/puppet/provider/service/smf.rb +49 -34
  289. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +34 -0
  290. data/lib/puppet/provider/sshkey/parsed.rb +2 -2
  291. data/lib/puppet/provider/user/directoryservice.rb +12 -29
  292. data/lib/puppet/provider/user/hpux.rb +3 -3
  293. data/lib/puppet/provider/user/ldap.rb +2 -2
  294. data/lib/puppet/provider/zfs/solaris.rb +1 -1
  295. data/lib/puppet/provider/zone/solaris.rb +4 -4
  296. data/lib/puppet/provider/zpool/solaris.rb +3 -3
  297. data/lib/puppet/rails.rb +9 -9
  298. data/lib/puppet/rails/benchmark.rb +69 -0
  299. data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +5 -5
  300. data/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +2 -2
  301. data/lib/puppet/rails/database/003_add_environment_to_host.rb +1 -1
  302. data/lib/puppet/rails/database/schema.rb +8 -8
  303. data/lib/puppet/rails/fact_value.rb +1 -1
  304. data/lib/puppet/rails/host.rb +211 -93
  305. data/lib/puppet/rails/param_name.rb +5 -1
  306. data/lib/puppet/rails/param_value.rb +29 -2
  307. data/lib/puppet/rails/puppet_tag.rb +5 -0
  308. data/lib/puppet/rails/resource.rb +120 -20
  309. data/lib/puppet/rails/resource_tag.rb +1 -1
  310. data/lib/puppet/rails/source_file.rb +1 -1
  311. data/lib/puppet/reference/configuration.rb +14 -14
  312. data/lib/puppet/reference/function.rb +1 -1
  313. data/lib/puppet/reference/metaparameter.rb +48 -0
  314. data/lib/puppet/reference/providers.rb +6 -6
  315. data/lib/puppet/reference/type.rb +1 -37
  316. data/lib/puppet/relationship.rb +57 -30
  317. data/lib/puppet/reports/rrdgraph.rb +4 -4
  318. data/lib/puppet/reports/store.rb +3 -3
  319. data/lib/puppet/reports/tagmail.rb +15 -15
  320. data/lib/puppet/resource.rb +265 -0
  321. data/lib/puppet/{node → resource}/catalog.rb +188 -112
  322. data/lib/puppet/{resource_reference.rb → resource/reference.rb} +46 -24
  323. data/lib/puppet/simple_graph.rb +165 -27
  324. data/lib/puppet/ssl.rb +7 -0
  325. data/lib/puppet/ssl/base.rb +62 -0
  326. data/lib/puppet/ssl/certificate.rb +34 -0
  327. data/lib/puppet/ssl/certificate_authority.rb +298 -0
  328. data/lib/puppet/ssl/certificate_authority/interface.rb +118 -0
  329. data/lib/puppet/ssl/certificate_factory.rb +145 -0
  330. data/lib/puppet/ssl/certificate_request.rb +51 -0
  331. data/lib/puppet/ssl/certificate_revocation_list.rb +86 -0
  332. data/lib/puppet/ssl/host.rb +271 -0
  333. data/lib/puppet/ssl/inventory.rb +52 -0
  334. data/lib/puppet/ssl/key.rb +56 -0
  335. data/lib/puppet/sslcertificates.rb +6 -6
  336. data/lib/puppet/sslcertificates/ca.rb +15 -15
  337. data/lib/puppet/sslcertificates/certificate.rb +4 -4
  338. data/lib/puppet/sslcertificates/inventory.rb +3 -3
  339. data/lib/puppet/transaction.rb +113 -139
  340. data/lib/puppet/transaction/change.rb +6 -6
  341. data/lib/puppet/transaction/event.rb +1 -1
  342. data/lib/puppet/transaction/report.rb +7 -1
  343. data/lib/puppet/transportable.rb +28 -28
  344. data/lib/puppet/type.rb +263 -688
  345. data/lib/puppet/type/augeas.rb +3 -2
  346. data/lib/puppet/type/component.rb +28 -95
  347. data/lib/puppet/type/computer.rb +10 -10
  348. data/lib/puppet/type/cron.rb +19 -14
  349. data/lib/puppet/type/exec.rb +21 -20
  350. data/lib/puppet/type/file.rb +306 -633
  351. data/lib/puppet/type/file/checksum.rb +10 -11
  352. data/lib/puppet/type/file/content.rb +83 -22
  353. data/lib/puppet/type/file/ensure.rb +15 -9
  354. data/lib/puppet/type/file/group.rb +7 -1
  355. data/lib/puppet/type/file/mode.rb +1 -1
  356. data/lib/puppet/type/file/owner.rb +9 -3
  357. data/lib/puppet/type/file/selcontext.rb +4 -4
  358. data/lib/puppet/type/file/source.rb +78 -179
  359. data/lib/puppet/type/file/target.rb +3 -3
  360. data/lib/puppet/type/file/type.rb +2 -2
  361. data/lib/puppet/type/filebucket.rb +33 -54
  362. data/lib/puppet/type/group.rb +8 -8
  363. data/lib/puppet/type/host.rb +7 -7
  364. data/lib/puppet/type/k5login.rb +2 -2
  365. data/lib/puppet/type/macauthorization.rb +77 -52
  366. data/lib/puppet/type/mailalias.rb +2 -2
  367. data/lib/puppet/type/maillist.rb +2 -2
  368. data/lib/puppet/type/mcx.rb +3 -3
  369. data/lib/puppet/type/mount.rb +16 -11
  370. data/lib/puppet/type/notify.rb +4 -4
  371. data/lib/puppet/type/package.rb +6 -28
  372. data/lib/puppet/type/port.rb +1 -1
  373. data/lib/puppet/type/resources.rb +19 -19
  374. data/lib/puppet/type/schedule.rb +18 -20
  375. data/lib/puppet/type/selmodule.rb +1 -1
  376. data/lib/puppet/type/service.rb +11 -7
  377. data/lib/puppet/type/ssh_authorized_key.rb +26 -9
  378. data/lib/puppet/type/sshkey.rb +2 -2
  379. data/lib/puppet/type/tidy.rb +285 -289
  380. data/lib/puppet/type/user.rb +9 -7
  381. data/lib/puppet/type/yumrepo.rb +17 -16
  382. data/lib/puppet/type/zone.rb +8 -7
  383. data/lib/puppet/util.rb +11 -36
  384. data/lib/puppet/util/autoload.rb +31 -19
  385. data/lib/puppet/util/autoload/file_cache.rb +115 -0
  386. data/lib/puppet/util/backups.rb +86 -0
  387. data/lib/puppet/util/cacher.rb +135 -0
  388. data/lib/puppet/util/checksums.rb +11 -1
  389. data/lib/puppet/util/classgen.rb +1 -1
  390. data/lib/puppet/util/config_store.rb +2 -2
  391. data/lib/puppet/util/constant_inflector.rb +1 -1
  392. data/lib/puppet/util/diff.rb +2 -2
  393. data/lib/puppet/util/docs.rb +9 -3
  394. data/lib/puppet/util/execution.rb +1 -1
  395. data/lib/puppet/util/feature.rb +27 -20
  396. data/lib/puppet/util/fileparsing.rb +3 -3
  397. data/lib/puppet/util/filetype.rb +8 -6
  398. data/lib/puppet/util/graph.rb +5 -5
  399. data/lib/puppet/util/inifile.rb +5 -5
  400. data/lib/puppet/util/json.rb +13 -0
  401. data/lib/puppet/util/ldap/connection.rb +2 -2
  402. data/lib/puppet/util/log.rb +48 -31
  403. data/lib/puppet/util/metric.rb +4 -4
  404. data/lib/puppet/util/monkey_patches.rb +43 -0
  405. data/lib/puppet/util/nagios_maker.rb +1 -1
  406. data/lib/puppet/util/package.rb +4 -4
  407. data/lib/puppet/util/pidlock.rb +59 -59
  408. data/lib/puppet/util/posix.rb +13 -52
  409. data/lib/puppet/util/provider_features.rb +3 -3
  410. data/lib/puppet/util/queue.rb +96 -0
  411. data/lib/puppet/util/queue/stomp.rb +47 -0
  412. data/lib/puppet/util/rails/cache_accumulator.rb +65 -0
  413. data/lib/puppet/util/rails/collection_merger.rb +0 -39
  414. data/lib/puppet/util/rails/reference_serializer.rb +17 -3
  415. data/lib/puppet/util/rdoc.rb +1 -0
  416. data/lib/puppet/util/rdoc/code_objects.rb +5 -1
  417. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +5 -5
  418. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +13 -13
  419. data/lib/puppet/util/rdoc/parser.rb +28 -32
  420. data/lib/puppet/util/reference.rb +29 -8
  421. data/lib/puppet/util/resource_template.rb +1 -1
  422. data/lib/puppet/util/selinux.rb +12 -6
  423. data/lib/puppet/util/settings.rb +203 -578
  424. data/lib/puppet/util/settings/boolean_setting.rb +33 -0
  425. data/lib/puppet/util/settings/file_setting.rb +119 -0
  426. data/lib/puppet/util/settings/setting.rb +110 -0
  427. data/lib/puppet/util/subclass_loader.rb +1 -1
  428. data/lib/puppet/util/suidmanager.rb +2 -2
  429. data/lib/puppet/util/tagging.rb +1 -1
  430. data/lib/puppet/util/warnings.rb +17 -9
  431. data/man/man8/filebucket.8 +2 -2
  432. data/man/man8/pi.8 +2 -2
  433. data/man/man8/puppet.8 +3 -4
  434. data/man/man8/puppet.conf.8 +63 -63
  435. data/man/man8/puppetca.8 +2 -2
  436. data/man/man8/puppetd.8 +2 -2
  437. data/man/man8/puppetdoc.8 +2 -2
  438. data/man/man8/puppetmasterd.8 +2 -2
  439. data/man/man8/puppetrun.8 +2 -2
  440. data/man/man8/ralsh.8 +3 -3
  441. data/sbin/puppetca +102 -0
  442. data/sbin/puppetd +159 -0
  443. data/sbin/puppetmasterd +66 -0
  444. data/sbin/puppetqd +53 -0
  445. data/sbin/puppetrun +130 -0
  446. data/spec/Rakefile +2 -2
  447. data/spec/integration/application/puppet.rb +33 -0
  448. data/spec/integration/bin/puppetmasterd.rb +110 -0
  449. data/spec/integration/configurer.rb +18 -0
  450. data/spec/integration/defaults.rb +158 -7
  451. data/spec/integration/file_serving/content.rb +2 -0
  452. data/spec/integration/file_serving/fileset.rb +14 -0
  453. data/spec/integration/file_serving/metadata.rb +2 -0
  454. data/spec/integration/file_serving/terminus_helper.rb +22 -0
  455. data/spec/integration/indirector/catalog/compiler.rb +67 -0
  456. data/spec/integration/indirector/catalog/queue.rb +61 -0
  457. data/spec/integration/indirector/certificate/rest.rb +69 -0
  458. data/spec/integration/indirector/certificate_request/rest.rb +89 -0
  459. data/spec/integration/indirector/certificate_revocation_list/rest.rb +77 -0
  460. data/spec/integration/indirector/direct_file_server.rb +16 -23
  461. data/spec/integration/indirector/file_content/file_server.rb +75 -0
  462. data/spec/integration/indirector/report/rest.rb +95 -0
  463. data/spec/integration/indirector/rest.rb +207 -147
  464. data/spec/integration/network/client.rb +19 -0
  465. data/spec/integration/network/formats.rb +110 -0
  466. data/spec/integration/network/handler.rb +25 -0
  467. data/spec/integration/network/server/mongrel.rb +26 -8
  468. data/spec/integration/network/server/webrick.rb +49 -11
  469. data/spec/integration/node/environment.rb +58 -0
  470. data/spec/integration/node/facts.rb +4 -2
  471. data/spec/integration/parser/compiler.rb +29 -0
  472. data/spec/integration/parser/functions/require.rb +67 -0
  473. data/spec/integration/provider/mailalias/aliases.rb +25 -0
  474. data/spec/integration/{node → resource}/catalog.rb +17 -10
  475. data/spec/integration/ssl/certificate_authority.rb +135 -0
  476. data/spec/integration/ssl/certificate_request.rb +59 -0
  477. data/spec/integration/ssl/certificate_revocation_list.rb +42 -0
  478. data/spec/integration/ssl/host.rb +90 -0
  479. data/spec/integration/transaction.rb +66 -0
  480. data/spec/integration/transaction/report.rb +2 -5
  481. data/spec/integration/type.rb +22 -0
  482. data/spec/integration/type/file.rb +458 -0
  483. data/spec/integration/type/package.rb +1 -1
  484. data/spec/integration/type/tidy.rb +27 -0
  485. data/spec/integration/util/autoload.rb +114 -0
  486. data/spec/integration/util/feature.rb +54 -0
  487. data/spec/integration/util/file_locking.rb +2 -1
  488. data/spec/integration/util/settings.rb +27 -0
  489. data/spec/lib/puppet_spec/files.rb +9 -0
  490. data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +1 -0
  491. data/spec/monkey_patches/alias_should_to_must.rb +1 -0
  492. data/spec/shared_behaviours/file_server_terminus.rb +14 -11
  493. data/spec/shared_behaviours/file_serving.rb +13 -17
  494. data/spec/spec_helper.rb +22 -5
  495. data/spec/unit/agent.rb +259 -0
  496. data/spec/unit/agent/locker.rb +100 -0
  497. data/spec/unit/agent/runner.rb +118 -0
  498. data/spec/unit/application.rb +420 -0
  499. data/spec/unit/application/filebucket.rb +220 -0
  500. data/spec/unit/application/pi.rb +84 -0
  501. data/spec/unit/application/puppet.rb +404 -0
  502. data/spec/unit/application/puppetca.rb +142 -0
  503. data/spec/unit/application/puppetd.rb +502 -0
  504. data/spec/unit/application/puppetdoc.rb +345 -0
  505. data/spec/unit/application/puppetmasterd.rb +456 -0
  506. data/spec/unit/application/puppetqd.rb +186 -0
  507. data/spec/unit/application/puppetrun.rb +279 -0
  508. data/spec/unit/application/ralsh.rb +237 -0
  509. data/spec/unit/configurer.rb +232 -0
  510. data/spec/unit/configurer/downloader.rb +188 -0
  511. data/spec/unit/configurer/fact_handler.rb +150 -0
  512. data/spec/unit/configurer/plugin_handler.rb +112 -0
  513. data/spec/unit/daemon.rb +287 -0
  514. data/spec/unit/file_serving/{file_base.rb → base.rb} +39 -31
  515. data/spec/unit/file_serving/configuration.rb +104 -93
  516. data/spec/unit/file_serving/configuration/parser.rb +64 -18
  517. data/spec/unit/file_serving/content.rb +65 -26
  518. data/spec/unit/file_serving/fileset.rb +116 -14
  519. data/spec/unit/file_serving/indirection_hooks.rb +34 -95
  520. data/spec/unit/file_serving/metadata.rb +27 -40
  521. data/spec/unit/file_serving/mount.rb +7 -118
  522. data/spec/unit/file_serving/mount/file.rb +188 -0
  523. data/spec/unit/file_serving/mount/modules.rb +63 -0
  524. data/spec/unit/file_serving/mount/plugins.rb +61 -0
  525. data/spec/unit/file_serving/terminus_helper.rb +39 -27
  526. data/spec/unit/indirector.rb +6 -1
  527. data/spec/unit/indirector/active_record.rb +76 -0
  528. data/spec/unit/indirector/catalog/active_record.rb +122 -0
  529. data/spec/unit/indirector/catalog/compiler.rb +222 -118
  530. data/spec/unit/indirector/catalog/queue.rb +20 -0
  531. data/spec/unit/indirector/catalog/rest.rb +11 -0
  532. data/spec/unit/indirector/catalog/yaml.rb +6 -6
  533. data/spec/unit/indirector/certificate/ca.rb +28 -0
  534. data/spec/unit/indirector/certificate/file.rb +28 -0
  535. data/spec/unit/indirector/certificate/rest.rb +23 -0
  536. data/spec/unit/indirector/certificate_request/ca.rb +19 -0
  537. data/spec/unit/indirector/certificate_request/file.rb +19 -0
  538. data/spec/unit/indirector/certificate_request/rest.rb +23 -0
  539. data/spec/unit/indirector/certificate_revocation_list/ca.rb +21 -0
  540. data/spec/unit/indirector/certificate_revocation_list/file.rb +20 -0
  541. data/spec/unit/indirector/certificate_revocation_list/rest.rb +23 -0
  542. data/spec/unit/indirector/direct_file_server.rb +3 -8
  543. data/spec/unit/indirector/exec.rb +6 -1
  544. data/spec/unit/indirector/facts/active_record.rb +104 -0
  545. data/spec/unit/indirector/facts/facter.rb +53 -12
  546. data/spec/unit/indirector/facts/rest.rb +11 -0
  547. data/spec/unit/indirector/file.rb +8 -1
  548. data/spec/unit/indirector/file_metadata/file.rb +5 -5
  549. data/spec/unit/indirector/file_server.rb +181 -98
  550. data/spec/unit/indirector/indirection.rb +102 -38
  551. data/spec/unit/indirector/key/ca.rb +28 -0
  552. data/spec/unit/indirector/key/file.rb +104 -0
  553. data/spec/unit/indirector/node/active_record.rb +34 -0
  554. data/spec/unit/indirector/node/ldap.rb +1 -1
  555. data/spec/unit/indirector/node/rest.rb +2 -2
  556. data/spec/unit/indirector/queue.rb +123 -0
  557. data/spec/unit/indirector/report/rest.rb +28 -0
  558. data/spec/unit/indirector/request.rb +221 -0
  559. data/spec/unit/indirector/rest.rb +343 -334
  560. data/spec/unit/indirector/runner/rest.rb +11 -0
  561. data/spec/unit/indirector/ssl_file.rb +280 -0
  562. data/spec/unit/module.rb +180 -180
  563. data/spec/unit/network/authconfig.rb +292 -0
  564. data/spec/unit/network/authstore.rb +94 -0
  565. data/spec/unit/network/client.rb +2 -2
  566. data/spec/unit/network/client/dipper.rb +16 -0
  567. data/spec/unit/network/format.rb +191 -0
  568. data/spec/unit/network/format_handler.rb +306 -0
  569. data/spec/unit/network/formats.rb +249 -0
  570. data/spec/unit/network/handler/fileserver.rb +2 -5
  571. data/spec/unit/network/http.rb +3 -3
  572. data/spec/unit/network/http/api/v1.rb +122 -0
  573. data/spec/unit/network/http/handler.rb +448 -0
  574. data/spec/unit/network/http/mongrel.rb +46 -32
  575. data/spec/unit/network/http/mongrel/rest.rb +174 -319
  576. data/spec/unit/network/http/rack.rb +102 -0
  577. data/spec/unit/network/http/rack/rest.rb +199 -0
  578. data/spec/unit/network/http/rack/xmlrpc.rb +157 -0
  579. data/spec/unit/network/http/webrick.rb +249 -37
  580. data/spec/unit/network/http/webrick/rest.rb +113 -279
  581. data/spec/unit/network/http_pool.rb +86 -110
  582. data/spec/unit/network/rest_authconfig.rb +146 -0
  583. data/spec/unit/network/rest_authorization.rb +43 -0
  584. data/spec/unit/network/rights.rb +519 -0
  585. data/spec/unit/network/server.rb +475 -257
  586. data/spec/unit/node.rb +43 -10
  587. data/spec/unit/node/environment.rb +143 -9
  588. data/spec/unit/node/facts.rb +77 -24
  589. data/spec/unit/other/selinux.rb +85 -0
  590. data/spec/unit/other/transbucket.rb +29 -13
  591. data/spec/unit/other/transobject.rb +35 -15
  592. data/spec/unit/parameter.rb +378 -5
  593. data/spec/unit/parser/ast.rb +1 -1
  594. data/spec/unit/parser/ast/arithmetic_operator.rb +17 -17
  595. data/spec/unit/parser/ast/astarray.rb +16 -10
  596. data/spec/unit/parser/ast/boolean_operator.rb +2 -2
  597. data/spec/unit/parser/ast/casestatement.rb +143 -0
  598. data/spec/unit/parser/ast/collection.rb +63 -0
  599. data/spec/unit/parser/ast/collexpr.rb +31 -8
  600. data/spec/unit/parser/ast/comparison_operator.rb +9 -9
  601. data/spec/unit/parser/ast/definition.rb +18 -0
  602. data/spec/unit/parser/ast/function.rb +6 -0
  603. data/spec/unit/parser/ast/ifstatement.rb +75 -0
  604. data/spec/unit/parser/ast/leaf.rb +261 -0
  605. data/spec/unit/parser/ast/match_operator.rb +50 -0
  606. data/spec/unit/parser/ast/minus.rb +1 -1
  607. data/spec/unit/parser/ast/node.rb +20 -0
  608. data/spec/unit/parser/ast/not.rb +1 -1
  609. data/spec/unit/parser/ast/resource_override.rb +5 -5
  610. data/spec/unit/parser/ast/resource_reference.rb +11 -5
  611. data/spec/unit/parser/ast/selector.rb +156 -0
  612. data/spec/unit/parser/ast/vardef.rb +11 -11
  613. data/spec/unit/parser/collector.rb +167 -48
  614. data/spec/unit/parser/compiler.rb +128 -104
  615. data/spec/unit/parser/files.rb +190 -0
  616. data/spec/unit/parser/functions/inline_template.rb +0 -0
  617. data/spec/unit/parser/functions/regsubst.rb +42 -42
  618. data/spec/unit/parser/functions/require.rb +36 -0
  619. data/spec/unit/parser/functions/shellquote.rb +92 -0
  620. data/spec/unit/parser/functions/split.rb +51 -0
  621. data/spec/unit/parser/functions/sprintf.rb +11 -11
  622. data/spec/unit/parser/functions/template.rb +0 -0
  623. data/spec/unit/parser/functions/versioncmp.rb +2 -2
  624. data/spec/unit/parser/interpreter.rb +16 -7
  625. data/spec/unit/parser/lexer.rb +72 -12
  626. data/spec/unit/parser/loaded_code.rb +198 -0
  627. data/spec/unit/parser/parser.rb +215 -28
  628. data/spec/unit/parser/resource.rb +131 -22
  629. data/spec/unit/parser/scope.rb +207 -12
  630. data/spec/unit/parser/templatewrapper.rb +8 -3
  631. data/spec/unit/property.rb +270 -16
  632. data/spec/unit/property/list.rb +12 -6
  633. data/spec/unit/provider.rb +31 -0
  634. data/spec/unit/provider/augeas/augeas.rb +61 -33
  635. data/spec/unit/provider/macauthorization.rb +29 -29
  636. data/spec/unit/provider/mcx/mcxcontent.rb +4 -4
  637. data/spec/unit/provider/mount/parsed.rb +5 -8
  638. data/spec/unit/provider/naginator.rb +0 -0
  639. data/spec/unit/provider/package/apt.rb +6 -6
  640. data/spec/unit/provider/package/pkgdmg.rb +73 -0
  641. data/spec/unit/provider/selboolean.rb +1 -1
  642. data/spec/unit/provider/selmodule.rb +2 -2
  643. data/spec/unit/provider/service/daemontools.rb +40 -15
  644. data/spec/unit/provider/service/debian.rb +89 -0
  645. data/spec/unit/provider/service/init.rb +106 -0
  646. data/spec/unit/provider/service/launchd.rb +71 -13
  647. data/spec/unit/provider/service/redhat.rb +94 -0
  648. data/spec/unit/provider/service/runit.rb +14 -2
  649. data/spec/unit/provider/ssh_authorized_key/parsed.rb +66 -2
  650. data/spec/unit/provider/user/ldap.rb +1 -1
  651. data/spec/unit/provider/user/user_role_add.rb +1 -1
  652. data/spec/unit/provider/zfs/solaris.rb +18 -6
  653. data/spec/unit/provider/zone/solaris.rb +1 -1
  654. data/spec/unit/rails.rb +16 -22
  655. data/spec/unit/rails/host.rb +163 -0
  656. data/spec/unit/rails/param_value.rb +49 -0
  657. data/spec/unit/rails/resource.rb +87 -0
  658. data/spec/unit/relationship.rb +141 -29
  659. data/spec/unit/resource.rb +504 -0
  660. data/spec/unit/resource/catalog.rb +1061 -0
  661. data/spec/unit/resource/reference.rb +111 -0
  662. data/spec/unit/simple_graph.rb +448 -191
  663. data/spec/unit/ssl/certificate.rb +124 -0
  664. data/spec/unit/ssl/certificate_authority.rb +741 -0
  665. data/spec/unit/ssl/certificate_authority/interface.rb +269 -0
  666. data/spec/unit/ssl/certificate_factory.rb +107 -0
  667. data/spec/unit/ssl/certificate_request.rb +193 -0
  668. data/spec/unit/ssl/certificate_revocation_list.rb +180 -0
  669. data/spec/unit/ssl/host.rb +704 -0
  670. data/spec/unit/ssl/inventory.rb +180 -0
  671. data/spec/unit/ssl/key.rb +198 -0
  672. data/spec/unit/transaction.rb +65 -2
  673. data/spec/unit/transaction/change.rb +1 -1
  674. data/spec/unit/transaction/report.rb +1 -1
  675. data/spec/unit/type.rb +361 -8
  676. data/spec/unit/type/augeas.rb +30 -37
  677. data/spec/unit/type/component.rb +63 -0
  678. data/spec/unit/type/computer.rb +17 -21
  679. data/spec/unit/type/exec.rb +27 -2
  680. data/spec/unit/type/file.rb +704 -83
  681. data/spec/unit/type/file/content.rb +253 -15
  682. data/spec/unit/type/file/ensure.rb +65 -2
  683. data/spec/unit/type/file/group.rb +5 -0
  684. data/spec/unit/type/file/owner.rb +5 -0
  685. data/spec/unit/type/file/selinux.rb +12 -16
  686. data/spec/unit/type/file/source.rb +264 -0
  687. data/spec/unit/type/filebucket.rb +74 -0
  688. data/spec/unit/type/group.rb +1 -5
  689. data/spec/unit/type/macauthorization.rb +59 -26
  690. data/spec/unit/type/mcx.rb +8 -16
  691. data/spec/unit/type/mount.rb +8 -16
  692. data/spec/unit/type/noop_metaparam.rb +0 -2
  693. data/spec/unit/type/package.rb +13 -23
  694. data/spec/unit/type/resources.rb +4 -7
  695. data/spec/unit/type/schedule.rb +1 -7
  696. data/spec/unit/type/selboolean.rb +4 -6
  697. data/spec/unit/type/service.rb +23 -33
  698. data/spec/unit/type/ssh_authorized_key.rb +25 -14
  699. data/spec/unit/type/tidy.rb +329 -21
  700. data/spec/unit/type/user.rb +18 -10
  701. data/spec/unit/type/zfs.rb +6 -6
  702. data/spec/unit/util/autoload.rb +94 -3
  703. data/spec/unit/util/autoload/file_cache.rb +183 -0
  704. data/spec/unit/util/backups.rb +159 -0
  705. data/spec/unit/util/cache_accumulator.rb +69 -0
  706. data/spec/unit/util/cacher.rb +185 -0
  707. data/spec/unit/util/checksums.rb +9 -1
  708. data/spec/unit/util/feature.rb +72 -0
  709. data/spec/unit/util/filetype.rb +1 -11
  710. data/spec/unit/util/json.rb +21 -0
  711. data/spec/unit/util/log.rb +45 -0
  712. data/spec/unit/util/package.rb +2 -2
  713. data/spec/unit/util/queue.rb +88 -0
  714. data/spec/unit/util/queue/stomp.rb +140 -0
  715. data/spec/unit/util/reference_serializer.rb +52 -0
  716. data/spec/unit/util/selinux.rb +5 -3
  717. data/spec/unit/util/settings.rb +413 -264
  718. data/spec/unit/util/settings/file_setting.rb +223 -0
  719. data/spec/unit/util/storage.rb +11 -11
  720. data/spec/unit/util/warnings.rb +21 -17
  721. data/test/Rakefile +6 -5
  722. data/test/certmgr/ca.rb +5 -5
  723. data/test/certmgr/certmgr.rb +4 -4
  724. data/test/data/providers/cron/crontab.allthree +2 -2
  725. data/test/data/providers/cron/crontab.envNcomment +1 -1
  726. data/test/data/providers/cron/crontab.envNname +1 -1
  727. data/test/data/providers/cron/crontab.multirecords +1 -1
  728. data/test/data/providers/cron/crontab_collections.yaml +14 -14
  729. data/test/data/providers/cron/crontab_multiple_with_env.yaml +6 -6
  730. data/test/data/providers/cron/crontab_sample_records.yaml +102 -102
  731. data/test/data/providers/mailalias/aliases/test1 +28 -0
  732. data/test/data/providers/package/testpackages.yaml +6 -6
  733. data/test/data/reports/1.yaml +17 -17
  734. data/test/data/reports/tagmail_passers.conf +2 -2
  735. data/test/data/snippets/append.pp +5 -5
  736. data/test/data/snippets/casestatement.pp +9 -2
  737. data/test/data/snippets/classincludes.pp +1 -1
  738. data/test/data/snippets/collection_override.pp +8 -0
  739. data/test/data/snippets/fqparents.pp +2 -2
  740. data/test/data/snippets/ifexpression.pp +12 -0
  741. data/test/data/snippets/multilinecomments.pp +5 -1
  742. data/test/data/snippets/selectorvalues.pp +7 -0
  743. data/test/data/types/hosts/1 +1 -1
  744. data/test/data/types/hosts/2 +3 -3
  745. data/test/data/types/hosts/solaris +2 -2
  746. data/test/data/types/mount/freebsd.fstab +7 -7
  747. data/test/data/types/mount/solaris.fstab +10 -10
  748. data/test/data/types/port/1 +472 -472
  749. data/test/data/types/port/darwin +4347 -4347
  750. data/test/language/ast.rb +3 -2
  751. data/test/language/ast/casestatement.rb +12 -12
  752. data/test/language/ast/resource.rb +4 -4
  753. data/test/language/ast/resource_reference.rb +5 -5
  754. data/test/language/ast/selector.rb +11 -11
  755. data/test/language/ast/variable.rb +4 -4
  756. data/test/language/functions.rb +16 -16
  757. data/test/language/parser.rb +89 -111
  758. data/test/language/resource.rb +3 -88
  759. data/test/language/scope.rb +14 -55
  760. data/test/language/snippets.rb +31 -31
  761. data/test/lib/puppettest.rb +12 -12
  762. data/test/lib/puppettest/certificates.rb +2 -2
  763. data/test/lib/puppettest/exetest.rb +0 -1
  764. data/test/lib/puppettest/fakes.rb +1 -1
  765. data/test/lib/puppettest/parsertesting.rb +9 -4
  766. data/test/lib/puppettest/railstesting.rb +3 -3
  767. data/test/lib/puppettest/servertest.rb +1 -1
  768. data/test/lib/puppettest/support/assertions.rb +2 -2
  769. data/test/lib/puppettest/support/collection.rb +1 -1
  770. data/test/lib/puppettest/support/resources.rb +7 -7
  771. data/test/lib/puppettest/support/utils.rb +10 -16
  772. data/test/lib/puppettest/testcase.rb +2 -1
  773. data/test/network/authconfig.rb +1 -1
  774. data/test/network/authorization.rb +1 -1
  775. data/test/network/authstore.rb +57 -14
  776. data/test/network/client/ca.rb +1 -0
  777. data/test/network/client/resource.rb +12 -50
  778. data/test/network/client_request.rb +1 -1
  779. data/test/network/handler/bucket.rb +2 -2
  780. data/test/network/handler/fileserver.rb +17 -21
  781. data/test/network/handler/master.rb +5 -5
  782. data/test/network/handler/report.rb +3 -3
  783. data/test/network/handler/resource.rb +29 -75
  784. data/test/network/handler/runner.rb +8 -58
  785. data/test/network/rights.rb +1 -1
  786. data/test/network/server/mongrel_test.rb +15 -1
  787. data/test/network/server/webrick.rb +0 -36
  788. data/test/network/xmlrpc/webrick_servlet.rb +5 -5
  789. data/test/other/dsl.rb +3 -3
  790. data/test/other/events.rb +15 -15
  791. data/test/other/puppet.rb +2 -32
  792. data/test/other/relationships.rb +21 -148
  793. data/test/other/report.rb +20 -23
  794. data/test/other/transactions.rb +110 -298
  795. data/test/puppet/defaults.rb +1 -1
  796. data/test/puppet/tc_suidmanager.rb +1 -1
  797. data/test/rails/railsparameter.rb +4 -4
  798. data/test/ral/manager/attributes.rb +12 -68
  799. data/test/ral/manager/instances.rb +3 -19
  800. data/test/ral/manager/manager.rb +7 -7
  801. data/test/ral/manager/provider.rb +7 -7
  802. data/test/ral/manager/type.rb +54 -349
  803. data/test/ral/providers/cron/crontab.rb +14 -14
  804. data/test/ral/providers/group.rb +5 -6
  805. data/test/ral/providers/host/parsed.rb +3 -3
  806. data/test/ral/providers/mailalias/aliases.rb +4 -4
  807. data/test/ral/providers/package.rb +3 -3
  808. data/test/ral/providers/package/aptitude.rb +55 -55
  809. data/test/ral/providers/package/aptrpm.rb +7 -7
  810. data/test/ral/providers/parsedfile.rb +10 -14
  811. data/test/ral/providers/port/parsed.rb +6 -6
  812. data/test/ral/providers/provider.rb +10 -10
  813. data/test/ral/providers/service/base.rb +32 -32
  814. data/test/ral/providers/sshkey/parsed.rb +14 -14
  815. data/test/ral/providers/user.rb +16 -17
  816. data/test/ral/providers/user/useradd.rb +19 -22
  817. data/test/ral/type/cron.rb +21 -28
  818. data/test/ral/type/exec.rb +57 -60
  819. data/test/ral/type/file.rb +88 -862
  820. data/test/ral/type/file/target.rb +21 -70
  821. data/test/ral/type/fileignoresource.rb +37 -44
  822. data/test/ral/type/filesources.rb +43 -473
  823. data/test/ral/type/group.rb +6 -7
  824. data/test/ral/type/host.rb +14 -30
  825. data/test/ral/type/mailalias.rb +3 -3
  826. data/test/ral/type/port.rb +5 -5
  827. data/test/ral/type/resources.rb +37 -37
  828. data/test/ral/type/service.rb +3 -3
  829. data/test/ral/type/sshkey.rb +34 -39
  830. data/test/ral/type/user.rb +15 -14
  831. data/test/ral/type/yumrepo.rb +18 -17
  832. data/test/ral/type/zone.rb +4 -6
  833. data/test/test +9 -9
  834. data/test/util/fileparsing.rb +10 -10
  835. data/test/util/inifile.rb +6 -6
  836. data/test/util/instance_loader.rb +1 -1
  837. data/test/util/log.rb +2 -2
  838. data/test/util/metrics.rb +1 -6
  839. data/test/util/package.rb +1 -1
  840. data/test/util/pidlock.rb +116 -116
  841. data/test/util/settings.rb +40 -429
  842. data/test/util/storage.rb +5 -5
  843. data/test/util/subclass_loader.rb +0 -7
  844. data/test/util/utiltest.rb +10 -29
  845. metadata +1369 -941
  846. data/bin/puppetca +0 -363
  847. data/bin/puppetd +0 -439
  848. data/bin/puppetmasterd +0 -289
  849. data/bin/puppetrun +0 -369
  850. data/conf/redhat/lsb-config.patch +0 -51
  851. data/conf/redhat/no-chuser-0.15.1.patch +0 -38
  852. data/conf/redhat/no-lockdir.patch +0 -13
  853. data/examples/mac_netinfo.pp +0 -5
  854. data/ext/passenger/README +0 -63
  855. data/ext/passenger/apache2.conf +0 -29
  856. data/ext/passenger/config.ru +0 -40
  857. data/lib/puppet/config_stores/rest.rb +0 -60
  858. data/lib/puppet/executables/client/certhandler.rb +0 -82
  859. data/lib/puppet/indirector/file_content/modules.rb +0 -11
  860. data/lib/puppet/indirector/file_metadata/modules.rb +0 -17
  861. data/lib/puppet/indirector/module_files.rb +0 -82
  862. data/lib/puppet/indirector/ssl_rsa.rb +0 -5
  863. data/lib/puppet/indirector/ssl_rsa/file.rb +0 -33
  864. data/lib/puppet/network/client/master.rb +0 -524
  865. data/lib/puppet/network/http_server/rack.rb +0 -148
  866. data/lib/puppet/pgraph.rb +0 -121
  867. data/lib/puppet/provider/group/netinfo.rb +0 -15
  868. data/lib/puppet/provider/host/netinfo.rb +0 -19
  869. data/lib/puppet/provider/mount/netinfo.rb +0 -37
  870. data/lib/puppet/provider/nameservice/netinfo.rb +0 -224
  871. data/lib/puppet/provider/user/netinfo.rb +0 -111
  872. data/lib/puppet/util/fact_store.rb +0 -59
  873. data/lib/puppet/util/uri_helper.rb +0 -22
  874. data/spec/integration/file_serving/configuration.rb +0 -43
  875. data/spec/integration/indirector/module_files.rb +0 -57
  876. data/spec/unit/executables/client/certhandler.rb +0 -135
  877. data/spec/unit/indirector/file_content/modules.rb +0 -18
  878. data/spec/unit/indirector/file_metadata/modules.rb +0 -42
  879. data/spec/unit/indirector/module_files.rb +0 -259
  880. data/spec/unit/indirector/ssl_rsa/file.rb +0 -121
  881. data/spec/unit/network/client/master.rb +0 -442
  882. data/spec/unit/node/catalog.rb +0 -865
  883. data/spec/unit/other/pgraph.rb +0 -210
  884. data/spec/unit/resource_reference.rb +0 -73
  885. data/spec/unit/util/uri_helper.rb +0 -41
  886. data/test/data/snippets/ifexpression.rb +0 -6
  887. data/test/executables/filebucket.rb +0 -51
  888. data/test/executables/puppetbin.rb +0 -104
  889. data/test/executables/puppetca.rb +0 -115
  890. data/test/executables/puppetd.rb +0 -55
  891. data/test/executables/puppetmasterd.rb +0 -147
  892. data/test/network/client/client.rb +0 -195
  893. data/test/network/client/master.rb +0 -490
  894. data/test/network/daemon.rb +0 -70
  895. data/test/network/handler/handler.rb +0 -63
  896. data/test/other/overrides.rb +0 -107
  897. data/test/puppet/conffiles.rb +0 -107
  898. data/test/rails/ast.rb +0 -73
  899. data/test/rails/configuration.rb +0 -71
  900. data/test/rails/host.rb +0 -154
  901. data/test/rails/railsresource.rb +0 -251
  902. data/test/ral/providers/host/netinfo.rb +0 -56
  903. data/test/ral/providers/mount/netinfo.rb +0 -79
  904. data/test/ral/type/basic.rb +0 -85
  905. data/test/ral/type/filebucket.rb +0 -157
  906. data/test/ral/type/parameter.rb +0 -174
  907. data/test/ral/type/property.rb +0 -388
  908. data/test/ral/type/tidy.rb +0 -291
  909. data/test/util/autoload.rb +0 -145
  910. data/test/util/features.rb +0 -95
@@ -1,4 +1,5 @@
1
1
  require 'puppet/file_collection/lookup'
2
+ require 'puppet/parser/yaml_trimmer'
2
3
 
3
4
  # The parameters we stick in Resources.
4
5
  class Puppet::Parser::Resource::Param
@@ -8,6 +9,7 @@ class Puppet::Parser::Resource::Param
8
9
  include Puppet::Util::MethodHelper
9
10
 
10
11
  include Puppet::FileCollection::Lookup
12
+ include Puppet::Parser::YamlTrimmer
11
13
 
12
14
  def initialize(hash)
13
15
  set_options(hash)
@@ -15,87 +17,11 @@ class Puppet::Parser::Resource::Param
15
17
  @name = symbolize(@name)
16
18
  end
17
19
 
18
- def inspect
19
- "#<#{self.class} @name => #{name}, @value => #{value}, @source => #{source.name}, @line => #{line}>"
20
- end
21
-
22
20
  def line_to_i
23
21
  return line ? Integer(line) : nil
24
22
  end
25
23
 
26
- # Make sure an array (or possibly not an array) of values is correctly
27
- # set up for Rails. The main thing is that Resource::Reference objects
28
- # should stay objects, so they just get serialized.
29
- def munge_for_rails(values)
30
- values = value.is_a?(Array) ? value : [value]
31
- values.map do |v|
32
- if v.is_a?(Puppet::Parser::Resource::Reference)
33
- v
34
- else
35
- v.to_s
36
- end
37
- end
38
- end
39
-
40
- # Store a new parameter in a Rails db.
41
- def to_rails(db_resource)
42
- values = munge_for_rails(value)
43
-
44
- param_name = Puppet::Rails::ParamName.find_or_create_by_name(self.name.to_s)
45
- line_number = line_to_i()
46
- return values.collect do |v|
47
- db_resource.param_values.create(:value => v,
48
- :line => line_number,
49
- :param_name => param_name)
50
- end
51
- end
52
-
53
- def modify_rails_values(db_values)
54
- #dev_warn if db_values.nil? || db_values.empty?
55
-
56
- values_to_remove(db_values).each { |remove_me|
57
- Puppet::Rails::ParamValue.delete(remove_me['id'])
58
- }
59
- line_number = line_to_i()
60
- db_param_name = db_values[0]['param_name_id']
61
- values_to_add(db_values).each { |add_me|
62
- Puppet::Rails::ParamValue.create(:value => add_me,
63
- :line => line_number,
64
- :param_name_id => db_param_name,
65
- :resource_id => db_values[0]['resource_id'] )
66
- }
67
- end
68
-
69
24
  def to_s
70
25
  "%s => %s" % [self.name, self.value]
71
26
  end
72
-
73
- def compare(v,db_value)
74
- if (v.is_a?(Puppet::Parser::Resource::Reference))
75
- return v.to_s == db_value.to_s
76
- else
77
- return v == db_value
78
- end
79
- end
80
-
81
- def values_to_remove(db_values)
82
- values = munge_for_rails(value)
83
- line_number = line_to_i()
84
- db_values.collect do |db|
85
- db unless (db['line'] == line_number &&
86
- values.find { |v|
87
- compare(v,db['value'])
88
- } )
89
- end.compact
90
- end
91
-
92
- def values_to_add(db_values)
93
- values = munge_for_rails(value)
94
- line_number = line_to_i()
95
- values.collect do |v|
96
- v unless db_values.find { |db| (compare(v,db['value']) &&
97
- line_number == db['line']) }
98
- end.compact
99
- end
100
27
  end
101
-
@@ -1,8 +1,11 @@
1
- require 'puppet/resource_reference'
1
+ # A reference to a resource. Mostly just the type and title.
2
+ require 'puppet/resource/reference'
2
3
  require 'puppet/file_collection/lookup'
4
+ require 'puppet/parser/yaml_trimmer'
3
5
 
4
6
  # A reference to a resource. Mostly just the type and title.
5
- class Puppet::Parser::Resource::Reference < Puppet::ResourceReference
7
+ class Puppet::Parser::Resource::Reference < Puppet::Resource::Reference
8
+ include Puppet::Parser::YamlTrimmer
6
9
  include Puppet::FileCollection::Lookup
7
10
  include Puppet::Util::MethodHelper
8
11
  include Puppet::Util::Errors
@@ -35,22 +38,22 @@ class Puppet::Parser::Resource::Reference < Puppet::ResourceReference
35
38
  def definedtype
36
39
  unless defined? @definedtype
37
40
  case self.type
38
- when "Class": # look for host classes
41
+ when "Class" # look for host classes
39
42
  if self.title == :main
40
- tmp = @scope.findclass("")
43
+ tmp = @scope.find_hostclass("")
41
44
  else
42
- unless tmp = @scope.parser.classes[self.title]
45
+ unless tmp = @scope.parser.hostclass(self.title)
43
46
  fail Puppet::ParseError, "Could not find class '%s'" % self.title
44
47
  end
45
48
  end
46
- when "Node": # look for node definitions
47
- unless tmp = @scope.parser.nodes[self.title]
49
+ when "Node" # look for node definitions
50
+ unless tmp = @scope.parser.node(self.title)
48
51
  fail Puppet::ParseError, "Could not find node '%s'" % self.title
49
52
  end
50
53
  else # normal definitions
51
54
  # The resource type is capitalized, so we have to downcase. Really,
52
55
  # we should have a better interface for finding these, but eh.
53
- tmp = @scope.parser.definitions[self.type.downcase]
56
+ tmp = @scope.parser.definition(self.type.downcase)
54
57
  end
55
58
 
56
59
  if tmp
@@ -68,6 +71,10 @@ class Puppet::Parser::Resource::Reference < Puppet::ResourceReference
68
71
  requiredopts(:type, :title)
69
72
  end
70
73
 
74
+ def skip_for_yaml
75
+ %w{@typeclass @definedtype}
76
+ end
77
+
71
78
  def to_ref
72
79
  # We have to return different cases to provide backward compatibility
73
80
  # from 0.24.x to 0.23.x.
@@ -15,9 +15,10 @@ class Puppet::Parser::Scope
15
15
 
16
16
  include Enumerable
17
17
  include Puppet::Util::Errors
18
- attr_accessor :parent, :level, :parser, :source, :resource
18
+ attr_accessor :level, :parser, :source, :resource
19
19
  attr_accessor :base, :keyword, :nodescope
20
20
  attr_accessor :top, :translated, :compiler
21
+ attr_writer :parent
21
22
 
22
23
  # A demeterific shortcut to the catalog.
23
24
  def catalog
@@ -48,7 +49,7 @@ class Puppet::Parser::Scope
48
49
  unless value.is_a?(Fixnum) or value.is_a?(Bignum) or value.is_a?(Float) or value.is_a?(String)
49
50
  return nil
50
51
  end
51
-
52
+
52
53
  if value.is_a?(String)
53
54
  if value =~ /^-?\d+(:?\.\d+|(:?\.\d+)?e\d+)$/
54
55
  return value.to_f
@@ -81,18 +82,18 @@ class Puppet::Parser::Scope
81
82
  @level == 1
82
83
  end
83
84
 
84
- def findclass(name)
85
+ def find_hostclass(name)
85
86
  @namespaces.each do |namespace|
86
- if r = parser.findclass(namespace, name)
87
+ if r = parser.find_hostclass(namespace, name)
87
88
  return r
88
89
  end
89
90
  end
90
91
  return nil
91
92
  end
92
93
 
93
- def finddefine(name)
94
+ def find_definition(name)
94
95
  @namespaces.each do |namespace|
95
- if r = parser.finddefine(namespace, name)
96
+ if r = parser.find_definition(namespace, name)
96
97
  return r
97
98
  end
98
99
  end
@@ -127,6 +128,11 @@ class Puppet::Parser::Scope
127
128
  # The symbol table for this scope. This is where we store variables.
128
129
  @symtable = {}
129
130
 
131
+ # the ephemeral symbol tables
132
+ # those should not persist long, and are used for the moment only
133
+ # for $0..$xy capture variables of regexes
134
+ @ephemeral = {}
135
+
130
136
  # All of the defaults set for types. It's a hash of hashes,
131
137
  # with the first key being the type, then the second key being
132
138
  # the parameter.
@@ -164,19 +170,21 @@ class Puppet::Parser::Scope
164
170
 
165
171
  # Look up a defined type.
166
172
  def lookuptype(name)
167
- finddefine(name) || findclass(name)
173
+ find_definition(name) || find_hostclass(name)
168
174
  end
169
175
 
170
176
  def lookup_qualified_var(name, usestring)
171
177
  parts = name.split(/::/)
172
178
  shortname = parts.pop
173
179
  klassname = parts.join("::")
174
- klass = findclass(klassname)
180
+ klass = find_hostclass(klassname)
175
181
  unless klass
176
- raise Puppet::ParseError, "Could not find class %s" % klassname
182
+ warning "Could not look up qualified variable '%s'; class %s could not be found" % [name, klassname]
183
+ return usestring ? "" : :undefined
177
184
  end
178
185
  unless kscope = compiler.class_scope(klass)
179
- raise Puppet::ParseError, "Class %s has not been evaluated so its variables cannot be referenced" % klass.classname
186
+ warning "Could not look up qualified variable '%s'; class %s has not been evaluated" % [name, klassname]
187
+ return usestring ? "" : :undefined
180
188
  end
181
189
  return kscope.lookupvar(shortname, usestring)
182
190
  end
@@ -186,18 +194,19 @@ class Puppet::Parser::Scope
186
194
  # Look up a variable. The simplest value search we do. Default to returning
187
195
  # an empty string for missing values, but support returning a constant.
188
196
  def lookupvar(name, usestring = true)
197
+ table = ephemeral?(name) ? @ephemeral : @symtable
189
198
  # If the variable is qualified, then find the specified scope and look the variable up there instead.
190
199
  if name =~ /::/
191
200
  return lookup_qualified_var(name, usestring)
192
201
  end
193
- # We can't use "if @symtable[name]" here because the value might be false
194
- if @symtable.include?(name)
195
- if usestring and @symtable[name] == :undef
202
+ # We can't use "if table[name]" here because the value might be false
203
+ if table.include?(name)
204
+ if usestring and table[name] == :undef
196
205
  return ""
197
206
  else
198
- return @symtable[name]
207
+ return table[name]
199
208
  end
200
- elsif self.parent
209
+ elsif self.parent
201
210
  return parent.lookupvar(name, usestring)
202
211
  elsif usestring
203
212
  return ""
@@ -214,12 +223,12 @@ class Puppet::Parser::Scope
214
223
  target = parent.to_hash(recursive)
215
224
  end
216
225
  target ||= Hash.new
217
- @symtable.keys.each { |name|
226
+ @symtable.keys.each { |name|
218
227
  value = @symtable[name]
219
228
  if value == :undef then
220
229
  target.delete(name)
221
230
  else
222
- target[name] = value
231
+ target[name] = value
223
232
  end
224
233
  }
225
234
  return target
@@ -283,34 +292,35 @@ class Puppet::Parser::Scope
283
292
  # Set a variable in the current scope. This will override settings
284
293
  # in scopes above, but will not allow variables in the current scope
285
294
  # to be reassigned.
286
- def setvar(name,value, file = nil, line = nil, append = false)
295
+ def setvar(name,value, options = {})
296
+ table = options[:ephemeral] ? @ephemeral : @symtable
287
297
  #Puppet.debug "Setting %s to '%s' at level %s mode append %s" %
288
298
  # [name.inspect,value,self.level, append]
289
- if @symtable.include?(name)
290
- unless append
299
+ if table.include?(name)
300
+ unless options[:append]
291
301
  error = Puppet::ParseError.new("Cannot reassign variable %s" % name)
292
302
  else
293
303
  error = Puppet::ParseError.new("Cannot append, variable %s is defined in this scope" % name)
294
304
  end
295
- if file
296
- error.file = file
305
+ if options[:file]
306
+ error.file = options[:file]
297
307
  end
298
- if line
299
- error.line = line
308
+ if options[:line]
309
+ error.line = options[:line]
300
310
  end
301
311
  raise error
302
312
  end
303
-
304
- unless append
305
- @symtable[name] = value
313
+
314
+ unless options[:append]
315
+ table[name] = value
306
316
  else # append case
307
317
  # lookup the value in the scope if it exists and insert the var
308
- @symtable[name] = lookupvar(name)
318
+ table[name] = lookupvar(name)
309
319
  # concatenate if string, append if array, nothing for other types
310
320
  if value.is_a?(Array)
311
- @symtable[name] += value
321
+ table[name] += value
312
322
  else
313
- @symtable[name] << value
323
+ table[name] << value
314
324
  end
315
325
  end
316
326
  end
@@ -321,12 +331,17 @@ class Puppet::Parser::Scope
321
331
  ss = StringScanner.new(string)
322
332
  out = ""
323
333
  while not ss.eos?
324
- if ss.scan(/^\$\{((\w*::)*\w+)\}|^\$((\w*::)*\w+)/)
334
+ if ss.scan(/^\$\{((\w*::)*\w+|[0-9]+)\}|^\$([0-9])|^\$((\w*::)*\w+)/)
325
335
  # If it matches the backslash, then just retun the dollar sign.
326
336
  if ss.matched == '\\$'
327
337
  out << '$'
328
338
  else # look the variable up
329
- out << lookupvar(ss[1] || ss[3]).to_s || ""
339
+ # make sure $0-$9 are lookupable only if ephemeral
340
+ var = ss[1] || ss[3] || ss[4]
341
+ if var and var =~ /^[0-9]+$/ and not ephemeral?(var)
342
+ next
343
+ end
344
+ out << lookupvar(var).to_s || ""
330
345
  end
331
346
  elsif ss.scan(/^\\(.)/)
332
347
  # Puppet.debug("Got escape: pos:%d; m:%s" % [ss.pos, ss.matched])
@@ -356,7 +371,7 @@ class Puppet::Parser::Scope
356
371
  out << '$'
357
372
  elsif ss.scan(/^\\\n/) # an escaped carriage return
358
373
  next
359
- else
374
+ else
360
375
  tmp = ss.scan(/[^\\$]+/)
361
376
  # Puppet.debug("Got other: pos:%d; m:%s" % [ss.pos, tmp])
362
377
  unless tmp
@@ -388,8 +403,26 @@ class Puppet::Parser::Scope
388
403
 
389
404
  # Undefine a variable; only used for testing.
390
405
  def unsetvar(var)
391
- if @symtable.include?(var)
392
- @symtable.delete(var)
406
+ table = ephemeral?(var) ? @ephemeral : @symtable
407
+ if table.include?(var)
408
+ table.delete(var)
409
+ end
410
+ end
411
+
412
+ def unset_ephemeral_var
413
+ @ephemeral = {}
414
+ end
415
+
416
+ def ephemeral?(name)
417
+ @ephemeral.include?(name)
418
+ end
419
+
420
+ def ephemeral_from(match, file = nil, line = nil)
421
+ raise(ArgumentError,"Invalid regex match data") unless match.is_a?(MatchData)
422
+
423
+ setvar("0", match[0], :file => file, :line => line, :ephemeral => true)
424
+ match.captures.each_with_index do |m,i|
425
+ setvar("#{i+1}", m, :file => file, :line => line, :ephemeral => true)
393
426
  end
394
427
  end
395
428
  end
@@ -1,7 +1,11 @@
1
1
  # A simple wrapper for templates, so they don't have full access to
2
2
  # the scope objects.
3
+ require 'puppet/parser/files'
4
+
3
5
  class Puppet::Parser::TemplateWrapper
4
- attr_accessor :scope, :file, :string
6
+ attr_writer :scope
7
+ attr_reader :file
8
+ attr_accessor :string
5
9
  include Puppet::Util
6
10
  Puppet::Util.logmethods(self)
7
11
 
@@ -63,11 +67,8 @@ class Puppet::Parser::TemplateWrapper
63
67
  end
64
68
 
65
69
  def file=(filename)
66
- @file = Puppet::Module::find_template(filename, scope.compiler.environment)
67
-
68
- unless FileTest.exists?(file)
69
- raise Puppet::ParseError,
70
- "Could not find template %s" % file
70
+ unless @file = Puppet::Parser::Files.find_template(filename, scope.compiler.environment)
71
+ raise Puppet::ParseError, "Could not find template '%s'" % filename
71
72
  end
72
73
 
73
74
  # We'll only ever not have a parser in testing, but, eh.
@@ -90,7 +91,7 @@ class Puppet::Parser::TemplateWrapper
90
91
  # current object, making it possible to access them without conflict
91
92
  # to the regular methods.
92
93
  benchmark(:debug, "Bound template variables for #{template_source}") do
93
- scope.to_hash.each { |name, value|
94
+ scope.to_hash.each { |name, value|
94
95
  if name.kind_of?(String)
95
96
  realname = name.gsub(/[^\w]/, "_")
96
97
  else
@@ -113,4 +114,3 @@ class Puppet::Parser::TemplateWrapper
113
114
  "template[%s]" % (file ? file : "inline")
114
115
  end
115
116
  end
116
-
@@ -0,0 +1,11 @@
1
+ module Puppet::Parser::YamlTrimmer
2
+ REMOVE = %w{@scope @source}
3
+
4
+ def to_yaml_properties
5
+ r = instance_variables - REMOVE
6
+ if respond_to?(:skip_for_yaml)
7
+ r -= skip_for_yaml()
8
+ end
9
+ r
10
+ end
11
+ end
@@ -4,8 +4,7 @@
4
4
  require 'puppet'
5
5
  require 'puppet/parameter'
6
6
 
7
- module Puppet
8
- class Property < Puppet::Parameter
7
+ class Puppet::Property < Puppet::Parameter
9
8
 
10
9
  # Because 'should' uses an array, we have a special method for handling
11
10
  # it. We also want to keep copies of the original values, so that
@@ -54,92 +53,39 @@ class Property < Puppet::Parameter
54
53
  end
55
54
 
56
55
  # Look up a value's name, so we can find options and such.
57
- def self.value_name(value)
58
- if value != '' and name = symbolize(value) and @parametervalues.include?(name)
59
- return name
60
- elsif ary = self.match?(value)
61
- return ary[0]
62
- else
63
- return nil
56
+ def self.value_name(name)
57
+ if value = value_collection.match?(name)
58
+ value.name
64
59
  end
65
60
  end
66
61
 
67
62
  # Retrieve an option set when a value was defined.
68
63
  def self.value_option(name, option)
69
- option = option.to_sym
70
- if hash = @parameteroptions[name]
71
- hash[option]
72
- else
73
- nil
64
+ if value = value_collection.value(name)
65
+ value.send(option)
74
66
  end
75
67
  end
76
68
 
77
- # Create the value management variables.
78
- def self.initvars
79
- @parametervalues = {}
80
- @aliasvalues = {}
81
- @parameterregexes = {}
82
- @parameteroptions = {}
83
- end
84
-
85
69
  # Define a new valid value for a property. You must provide the value itself,
86
70
  # usually as a symbol, or a regex to match the value.
87
71
  #
88
72
  # The first argument to the method is either the value itself or a regex.
89
73
  # The second argument is an option hash; valid options are:
74
+ # * <tt>:method</tt>: The name of the method to define. Defaults to 'set_<value>'.
75
+ # * <tt>:required_features</tt>: A list of features this value requires.
90
76
  # * <tt>:event</tt>: The event that should be returned when this value is set.
91
77
  # * <tt>:call</tt>: When to call any associated block. The default value
92
78
  # is ``instead``, which means to call the value instead of calling the
93
- # provider. You can also specify ``before`` or ``after``, which will
79
+ # provider. You can also specify ``before`` or ``after``, which will
94
80
  # call both the block and the provider, according to the order you specify
95
81
  # (the ``first`` refers to when the block is called, not the provider).
96
82
  def self.newvalue(name, options = {}, &block)
97
- name = name.intern if name.is_a? String
98
-
99
- @parameteroptions[name] = {}
100
- paramopts = @parameteroptions[name]
83
+ value = value_collection.newvalue(name, options, &block)
101
84
 
102
- # Symbolize everything
103
- options.each do |opt, val|
104
- paramopts[symbolize(opt)] = symbolize(val)
105
- end
106
-
107
- # By default, call the block instead of the provider.
108
- if block_given?
109
- paramopts[:call] ||= :instead
110
- else
111
- paramopts[:call] ||= :none
112
- end
113
- # If there was no block given, we still want to store the information
114
- # for validation, but we won't be defining a method
115
- block ||= true
116
-
117
- case name
118
- when Symbol
119
- if @parametervalues.include?(name)
120
- Puppet.warning "%s reassigning value %s" % [self.name, name]
121
- end
122
- @parametervalues[name] = block
123
-
124
- if block_given?
125
- method = "set_" + name.to_s
126
- settor = paramopts[:settor] || (self.name.to_s + "=")
127
- define_method(method, &block)
128
- paramopts[:method] = method
129
- end
130
- when Regexp
131
- # The regexes are handled in parameter.rb. This value is used
132
- # for validation.
133
- @parameterregexes[name] = block
134
-
135
- # This is used for looking up the block for execution.
136
- if block_given?
137
- paramopts[:block] = block
138
- end
139
- else
140
- raise ArgumentError, "Invalid value %s of type %s" %
141
- [name, name.class]
85
+ if value.method and value.block
86
+ define_method(value.method, &value.block)
142
87
  end
88
+ value
143
89
  end
144
90
 
145
91
  # Call the provider method.
@@ -175,9 +121,9 @@ class Property < Puppet::Parameter
175
121
  elsif block = self.class.value_option(name, :block)
176
122
  # FIXME It'd be better here to define a method, so that
177
123
  # the blocks could return values.
178
- # If the regex was defined with no associated block, then just pass
179
- # through and the correct event will be passed back.
180
124
  event = self.instance_eval(&block)
125
+ else
126
+ devfail "Could not find method for value '%s'" % name
181
127
  end
182
128
  return event, name
183
129
  end
@@ -206,7 +152,7 @@ class Property < Puppet::Parameter
206
152
  # Figure out which event to return.
207
153
  def event(name, event = nil)
208
154
  if value_event = self.class.value_option(name, :event)
209
- return value_event
155
+ return value_event
210
156
  end
211
157
 
212
158
  if event and event.is_a?(Symbol)
@@ -219,8 +165,8 @@ class Property < Puppet::Parameter
219
165
 
220
166
  if self.class.name == :ensure
221
167
  event = case self.should
222
- when :present: (@resource.class.name.to_s + "_created").intern
223
- when :absent: (@resource.class.name.to_s + "_removed").intern
168
+ when :present; (@resource.class.name.to_s + "_created").intern
169
+ when :absent; (@resource.class.name.to_s + "_removed").intern
224
170
  else
225
171
  (@resource.class.name.to_s + "_changed").intern
226
172
  end
@@ -230,19 +176,15 @@ class Property < Puppet::Parameter
230
176
 
231
177
  return event
232
178
  end
233
-
179
+
180
+ attr_reader :shadow
181
+
234
182
  # initialize our property
235
183
  def initialize(hash = {})
236
184
  super
237
- end
238
-
239
- def inspect
240
- str = "Property('%s', " % self.name
241
185
 
242
- if defined? @should and @should
243
- str += "@should = '%s')" % @should.join(", ")
244
- else
245
- str += "@should = nil)"
186
+ if ! self.metaparam? and klass = Puppet::Type.metaparamclass(self.class.name)
187
+ setup_shadow(klass)
246
188
  end
247
189
  end
248
190
 
@@ -308,6 +250,13 @@ class Property < Puppet::Parameter
308
250
  self.class.array_matching == :all
309
251
  end
310
252
 
253
+ # Execute our shadow's munge code, too, if we have one.
254
+ def munge(value)
255
+ self.shadow.munge(value) if self.shadow
256
+
257
+ super
258
+ end
259
+
311
260
  # each property class must define the name() method, and property instances
312
261
  # do not change that name
313
262
  # this implicitly means that a given object can only have one property
@@ -342,29 +291,39 @@ class Property < Puppet::Parameter
342
291
  # Set a name for looking up associated options like the event.
343
292
  name = self.class.value_name(value)
344
293
 
345
- call = self.class.value_option(name, :call)
294
+ call = self.class.value_option(name, :call) || :none
346
295
 
347
- # If we're supposed to call the block first or instead, call it now
348
- if call == :before or call == :instead
349
- event, tmp = call_valuemethod(name, value)
350
- end
351
- unless call == :instead
296
+ if call == :instead
297
+ event, tmp = call_valuemethod(name, value)
298
+ elsif call == :none
352
299
  if @resource.provider
353
300
  call_provider(value)
354
301
  else
355
302
  # They haven't provided a block, and our parent does not have
356
303
  # a provider, so we have no idea how to handle this.
357
- self.fail "%s cannot handle values of type %s" %
358
- [self.class.name, value.inspect]
304
+ self.fail "%s cannot handle values of type %s" % [self.class.name, value.inspect]
359
305
  end
360
- end
361
- if call == :after
362
- event, tmp = call_valuemethod(name, value)
306
+ else
307
+ # LAK:NOTE 20081031 This is a change in behaviour -- you could
308
+ # previously specify :call => [;before|:after], which would call
309
+ # the setter *in addition to* the block. I'm convinced this
310
+ # was never used, and it makes things unecessarily complicated.
311
+ # If you want to specify a block and still call the setter, then
312
+ # do so in the block.
313
+ devfail "Cannot use obsolete :call value '%s' for property '%s'" % [call, self.class.name]
363
314
  end
364
315
 
365
316
  return event(name, event)
366
317
  end
367
318
 
319
+ # If there's a shadowing metaparam, instantiate it now.
320
+ # This allows us to create a property or parameter with the
321
+ # same name as a metaparameter, and the metaparam will only be
322
+ # stored as a shadow.
323
+ def setup_shadow(klass)
324
+ @shadow = klass.new(:resource => self.resource)
325
+ end
326
+
368
327
  # Only return the first value
369
328
  def should
370
329
  if defined? @should
@@ -373,9 +332,9 @@ class Property < Puppet::Parameter
373
332
  [self.class.name, @resource.name]
374
333
  end
375
334
  if match_all?
376
- return @should
335
+ return @should.collect { |val| self.unmunge(val) }
377
336
  else
378
- return @should[0]
337
+ return self.unmunge(@should[0])
379
338
  end
380
339
  else
381
340
  return nil
@@ -390,18 +349,8 @@ class Property < Puppet::Parameter
390
349
 
391
350
  @shouldorig = values
392
351
 
393
- if self.respond_to?(:validate)
394
- values.each { |val|
395
- validate(val)
396
- }
397
- end
398
- if self.respond_to?(:munge)
399
- @should = values.collect { |val|
400
- self.munge(val)
401
- }
402
- else
403
- @should = values
404
- end
352
+ values.each { |val| validate(val) }
353
+ @should = values.collect { |val| self.munge(val) }
405
354
  end
406
355
 
407
356
  def should_to_s(newvalue)
@@ -413,10 +362,7 @@ class Property < Puppet::Parameter
413
362
  end
414
363
  end
415
364
 
416
- # The default 'sync' method only selects among a list of registered # values.
417
365
  def sync
418
- self.devfail("No values defined for %s" % self.class.name) unless self.class.values
419
-
420
366
  if value = self.should
421
367
  set(value)
422
368
  else
@@ -424,23 +370,24 @@ class Property < Puppet::Parameter
424
370
  end
425
371
  end
426
372
 
427
- # The properties need to return tags so that logs correctly collect them.
428
- def tags
429
- unless defined? @tags
430
- @tags = []
431
- # This might not be true in testing
432
- if @resource.respond_to? :tags
433
- @tags = @resource.tags
434
- end
435
- @tags << self.name
436
- end
437
- @tags
438
- end
439
-
440
373
  def to_s
441
374
  return "%s(%s)" % [@resource.name,self.name]
442
375
  end
443
376
 
377
+ # Verify that the passed value is valid.
378
+ # If the developer uses a 'validate' hook, this method will get overridden.
379
+ def unsafe_validate(value)
380
+ super
381
+ validate_features_per_value(value)
382
+ end
383
+
384
+ # Make sure that we've got all of the required features for a given value.
385
+ def validate_features_per_value(value)
386
+ if features = self.class.value_option(self.class.value_name(value), :required_features)
387
+ raise ArgumentError, "Provider must have features '%s' to set '%s' to '%s'" % [features.collect { |f| f.to_s }.join(", "), self.class.name, value] unless provider.satisfies?(features)
388
+ end
389
+ end
390
+
444
391
  # Just return any should value we might have.
445
392
  def value
446
393
  self.should
@@ -545,5 +492,3 @@ class Property < Puppet::Parameter
545
492
  end
546
493
  end
547
494
  end
548
- end
549
-