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
@@ -0,0 +1,92 @@
1
+ require 'puppet/module'
2
+ require 'puppet/parser/parser'
3
+
4
+ # This is a silly central module for finding
5
+ # different kinds of files while parsing. This code
6
+ # doesn't really belong in the Puppet::Module class,
7
+ # but it doesn't really belong anywhere else, either.
8
+ module Puppet::Parser::Files
9
+ module_function
10
+
11
+ # Return a list of manifests (as absolute filenames) that match +pat+
12
+ # with the current directory set to +cwd+. If the first component of
13
+ # +pat+ does not contain any wildcards and is an existing module, return
14
+ # a list of manifests in that module matching the rest of +pat+
15
+ # Otherwise, try to find manifests matching +pat+ relative to +cwd+
16
+ def find_manifests(start, options = {})
17
+ cwd = options[:cwd] || Dir.getwd
18
+ module_name, pattern = split_file_path(start)
19
+ begin
20
+ if mod = Puppet::Module.find(module_name, options[:environment])
21
+ return mod.match_manifests(pattern)
22
+ end
23
+ rescue Puppet::Module::InvalidName
24
+ # Than that would be a "no."
25
+ end
26
+ abspat = File::expand_path(start, cwd)
27
+ files = Dir.glob(abspat).reject { |f| FileTest.directory?(f) }
28
+ if files.size == 0
29
+ files = Dir.glob(abspat + ".pp").reject { |f| FileTest.directory?(f) }
30
+ end
31
+ return files
32
+ end
33
+
34
+ # Find the concrete file denoted by +file+. If +file+ is absolute,
35
+ # return it directly. Otherwise try to find it as a template in a
36
+ # module. If that fails, return it relative to the +templatedir+ config
37
+ # param.
38
+ # In all cases, an absolute path is returned, which does not
39
+ # necessarily refer to an existing file
40
+ def find_template(template, environment = nil)
41
+ if template =~ /^#{File::SEPARATOR}/
42
+ return template
43
+ end
44
+
45
+ if template_paths = templatepath(environment)
46
+ # If we can find the template in :templatedir, we return that.
47
+ template_paths.collect { |path|
48
+ File::join(path, template)
49
+ }.each do |f|
50
+ return f if FileTest.exist?(f)
51
+ end
52
+ end
53
+
54
+ # check in the default template dir, if there is one
55
+ if td_file = find_template_in_module(template, environment)
56
+ return td_file
57
+ end
58
+
59
+ return nil
60
+ end
61
+
62
+ def find_template_in_module(template, environment = nil)
63
+ path, file = split_file_path(template)
64
+
65
+ # Because templates don't have an assumed template name, like manifests do,
66
+ # we treat templates with no name as being templates in the main template
67
+ # directory.
68
+ return nil unless file
69
+
70
+ if mod = Puppet::Module.find(path, environment) and t = mod.template(file)
71
+ return t
72
+ end
73
+ nil
74
+ end
75
+
76
+ # Return an array of paths by splitting the +templatedir+ config
77
+ # parameter.
78
+ def templatepath(environment = nil)
79
+ dirs = Puppet.settings.value(:templatedir, environment).split(":")
80
+ dirs.select do |p|
81
+ File::directory?(p)
82
+ end
83
+ end
84
+
85
+ # Split the path into the module and the rest of the path, or return
86
+ # nil if the path is empty or absolute (starts with a /).
87
+ # This method can return nil & anyone calling it needs to handle that.
88
+ def split_file_path(path)
89
+ path.split(File::SEPARATOR, 2) unless path =~ /^(#{File::SEPARATOR}|$)/
90
+ end
91
+
92
+ end
@@ -113,14 +113,14 @@ module Functions
113
113
 
114
114
  if @functions.include? name
115
115
  case @functions[name][:type]
116
- when :statement: return false
117
- when :rvalue: return true
116
+ when :statement; return false
117
+ when :rvalue; return true
118
118
  end
119
119
  else
120
120
  return false
121
121
  end
122
122
  end
123
-
123
+
124
124
  # Runs a newfunction to create a function for each of the log levels
125
125
 
126
126
  Puppet::Util::Log.levels.each do |level|
@@ -8,13 +8,13 @@ Puppet::Parser::Functions::newfunction(:defined, :type => :rvalue, :doc => "Dete
8
8
  result = false
9
9
  vals.each do |val|
10
10
  case val
11
- when String:
11
+ when String
12
12
  # For some reason, it doesn't want me to return from here.
13
- if Puppet::Type.type(val) or finddefine(val) or findclass(val)
13
+ if Puppet::Type.type(val) or find_definition(val) or find_hostclass(val)
14
14
  result = true
15
15
  break
16
16
  end
17
- when Puppet::Parser::Resource::Reference:
17
+ when Puppet::Parser::Resource::Reference
18
18
  if findresource(val.to_s)
19
19
  result = true
20
20
  break
@@ -1,6 +1,6 @@
1
- Puppet::Parser::Functions::newfunction(:fqdn_rand, :type => :rvalue, :doc =>
2
- "Generates random numbers based on the node's fqdn. The first argument
3
- sets the range. The second argument specifies a number to add to the
1
+ Puppet::Parser::Functions::newfunction(:fqdn_rand, :type => :rvalue, :doc =>
2
+ "Generates random numbers based on the node's fqdn. The first argument
3
+ sets the range. The second argument specifies a number to add to the
4
4
  seed and is optional.") do |args|
5
5
  require 'md5'
6
6
  max = args[0]
@@ -1,7 +1,7 @@
1
- Puppet::Parser::Functions::newfunction(:inline_template, :type => :rvalue, :doc =>
2
- "Evaluate a template string and return its value. See `the templating docs
3
- </trac/puppet/wiki/PuppetTemplating>`_ for more information. Note that
4
- if multiple template strings are specified, their output is all concatenated
1
+ Puppet::Parser::Functions::newfunction(:inline_template, :type => :rvalue, :doc =>
2
+ "Evaluate a template string and return its value. See `the templating docs
3
+ </trac/puppet/wiki/PuppetTemplating>`_ for more information. Note that
4
+ if multiple template strings are specified, their output is all concatenated
5
5
  and returned as the output of the function.") do |vals|
6
6
  require 'erb'
7
7
 
@@ -1,7 +1,9 @@
1
1
  module Puppet::Parser::Functions
2
2
  newfunction(:regsubst, :type => :rvalue,
3
- :doc => "
4
- Perform regexp replacement on a string. Parameters (in order):
3
+ :doc => "
4
+ Perform regexp replacement on a string.
5
+
6
+ - **Parameters** (in order):
5
7
 
6
8
  :str: The string to operate on.
7
9
 
@@ -17,13 +19,13 @@ module Puppet::Parser::Functions
17
19
  - **G** Global replacement; all occurrences of the regexp in the string will be replaced. Without this, only the first occurrence will be replaced.
18
20
 
19
21
  :lang: Optional. How to handle multibyte characters. A single-character string with the following values:
20
-
22
+
21
23
  - **N** None
22
24
  - **E** EUC
23
25
  - **S** SJIS
24
26
  - **U** UTF-8
25
27
 
26
- **Examples**
28
+ - **Examples**
27
29
 
28
30
  Get the third octet from the node's IP address::
29
31
 
@@ -34,36 +36,36 @@ Put angle brackets around each octet in the node's IP address::
34
36
  $x = regsubst($ipaddress, '([0-9]+)', '<\\1>', 'G')
35
37
  ") \
36
38
  do |args|
37
- flag_mapping = {
38
- "E" => Regexp::EXTENDED,
39
- "I" => Regexp::IGNORECASE,
40
- "M" => Regexp::MULTILINE,
41
- }
42
- if args.length < 3 or args.length > 5
43
- raise Puppet::ParseError, ("regsub(): wrong number of arguments" +
44
- " (#{args.length}; min 3, max 5)")
45
- end
46
- str, regexp, replacement, flags, lang = args
47
- reflags = 0
48
- global = false
49
- (flags or "").each_byte do |f|
50
- f = f.chr
51
- if f == "G"
52
- global = true
53
- else
54
- fvalue = flag_mapping[f]
55
- if !fvalue
56
- raise Puppet::ParseError, "regsub(): bad flag `#{f}'"
57
- end
58
- reflags |= fvalue
59
- end
60
- end
61
- re = Regexp.compile(regexp, reflags, lang)
62
- if global
63
- result = str.gsub(re, replacement)
64
- else
65
- result = str.sub(re, replacement)
66
- end
67
- return result
39
+ flag_mapping = {
40
+ "E" => Regexp::EXTENDED,
41
+ "I" => Regexp::IGNORECASE,
42
+ "M" => Regexp::MULTILINE,
43
+ }
44
+ if args.length < 3 or args.length > 5
45
+ raise Puppet::ParseError, ("regsub(): wrong number of arguments" +
46
+ " (#{args.length}; min 3, max 5)")
47
+ end
48
+ str, regexp, replacement, flags, lang = args
49
+ reflags = 0
50
+ global = false
51
+ (flags or "").each_byte do |f|
52
+ f = f.chr
53
+ if f == "G"
54
+ global = true
55
+ else
56
+ fvalue = flag_mapping[f]
57
+ if !fvalue
58
+ raise Puppet::ParseError, "regsub(): bad flag `#{f}'"
59
+ end
60
+ reflags |= fvalue
61
+ end
62
+ end
63
+ re = Regexp.compile(regexp, reflags, lang)
64
+ if global
65
+ result = str.gsub(re, replacement)
66
+ else
67
+ result = str.sub(re, replacement)
68
+ end
69
+ return result
68
70
  end
69
71
  end
@@ -0,0 +1,34 @@
1
+ # Requires the specified classes
2
+ Puppet::Parser::Functions::newfunction(:require,
3
+ :doc =>"Evaluate one or more classes, adding the required class as a dependency.
4
+
5
+ The relationship metaparameters work well for specifying relationships
6
+ between individual resources, but they can be clumsy for specifying
7
+ relationships between classes. This function is a superset of the
8
+ 'include' function, adding a class relationship so that the requiring
9
+ class depends on the required class.
10
+
11
+ .. Warning::
12
+ using require in place of include can lead to unwanted dependency cycles.
13
+ For instance the following manifest, with 'require' instead of 'include'
14
+ would produce a nasty dependence cycle, because notify imposes a before
15
+ between File[/foo] and Service[foo]::
16
+
17
+ class myservice {
18
+ service { foo: ensure => running }
19
+ }
20
+
21
+ class otherstuff {
22
+ include myservice
23
+ file { '/foo': notify => Service[foo] }
24
+ }
25
+
26
+ ") do |vals|
27
+ send(:function_include, vals)
28
+ vals = [vals] unless vals.is_a?(Array)
29
+
30
+ # add a relation from ourselves to each required klass
31
+ vals.each do |klass|
32
+ compiler.catalog.add_edge(resource, findresource(:class, klass))
33
+ end
34
+ end
@@ -0,0 +1,41 @@
1
+ module Puppet::Parser::Functions
2
+
3
+ Safe = 'a-zA-Z0-9@%_+=:,./-' # Safe unquoted
4
+ Dangerous = '!"`$\\' # Unsafe inside double quotes
5
+
6
+ newfunction(:shellquote, :type => :rvalue, :doc => "\
7
+ Quote and concatenate arguments for use in Bourne shell.
8
+
9
+ Each argument is quoted separately, and then all are concatenated
10
+ with spaces. If an argument is an array, the elements of that
11
+ array is interpolated within the rest of the arguments; this makes
12
+ it possible to have an array of arguments and pass that array to
13
+ shellquote() instead of having to specify specify each argument
14
+ individually in the call.
15
+ ") \
16
+ do |args|
17
+
18
+ result = []
19
+ args.flatten.each do |word|
20
+ if word.length != 0 and word.count(Safe) == word.length
21
+ result << word
22
+ elsif word.count(Dangerous) == 0
23
+ result << ('"' + word + '"')
24
+ elsif word.count("'") == 0
25
+ result << ("'" + word + "'")
26
+ else
27
+ r = '"'
28
+ word.each_byte() do |c|
29
+ if Dangerous.include?(c)
30
+ r += "\\"
31
+ end
32
+ r += c.chr()
33
+ end
34
+ r += '"'
35
+ result << r
36
+ end
37
+ end
38
+
39
+ return result.join(" ")
40
+ end
41
+ end
@@ -0,0 +1,29 @@
1
+ module Puppet::Parser::Functions
2
+ newfunction(:split, :type => :rvalue,
3
+ :doc => "\
4
+ Split a string variable into an array using the specified split regexp.
5
+
6
+ Usage::
7
+
8
+ $string = 'v1.v2:v3.v4'
9
+ $array_var1 = split($string, ':')
10
+ $array_var2 = split($string, '[.]')
11
+ $array_var3 = split($string, '[.:]')
12
+
13
+ $array_var1 now holds the result ['v1.v2', 'v3.v4'],
14
+ while $array_var2 holds ['v1', 'v2:v3', 'v4'], and
15
+ $array_var3 holds ['v1', 'v2', 'v3', 'v4'].
16
+
17
+ Note that in the second example, we split on a string that contains
18
+ a regexp meta-character (.), and that needs protection. A simple
19
+ way to do that for a single character is to enclose it in square
20
+ brackets.") do |args|
21
+
22
+ if args.length != 2
23
+ raise Puppet::ParseError, ("split(): wrong number of arguments" +
24
+ " (#{args.length}; must be 2)")
25
+ end
26
+
27
+ return args[0].split(Regexp.compile(args[1]))
28
+ end
29
+ end
@@ -1,12 +1,12 @@
1
1
  module Puppet::Parser::Functions
2
2
  newfunction(:sprintf, :type => :rvalue,
3
- :doc => "Perform printf-style formatting of text.
3
+ :doc => "Perform printf-style formatting of text.
4
4
 
5
5
  The first parameter is format string describing how the rest of the parameters should be formatted. See the documentation for the ``Kernel::sprintf()`` function in Ruby for all the details.") do |args|
6
- if args.length < 1
7
- raise Puppet::ParseError, 'sprintf() needs at least one argument'
8
- end
9
- fmt = args.shift()
10
- return sprintf(fmt, *args)
6
+ if args.length < 1
7
+ raise Puppet::ParseError, 'sprintf() needs at least one argument'
8
+ end
9
+ fmt = args.shift()
10
+ return sprintf(fmt, *args)
11
11
  end
12
12
  end
@@ -1,7 +1,7 @@
1
- Puppet::Parser::Functions::newfunction(:template, :type => :rvalue, :doc =>
2
- "Evaluate a template and return its value. See `the templating docs
3
- </trac/puppet/wiki/PuppetTemplating>`_ for more information. Note that
4
- if multiple templates are specified, their output is all concatenated
1
+ Puppet::Parser::Functions::newfunction(:template, :type => :rvalue, :doc =>
2
+ "Evaluate a template and return its value. See `the templating docs
3
+ </trac/puppet/wiki/PuppetTemplating>`_ for more information. Note that
4
+ if multiple templates are specified, their output is all concatenated
5
5
  and returned as the output of the function.") do |vals|
6
6
  require 'erb'
7
7
 
@@ -1,6 +1,27 @@
1
1
  require 'puppet/util/package'
2
2
 
3
- Puppet::Parser::Functions::newfunction(:versioncmp, :doc => "Compares two versions.") do |args|
3
+ Puppet::Parser::Functions::newfunction(:versioncmp, :type => :rvalue,
4
+ :doc => "Compares two versions
5
+
6
+ Prototype::
7
+
8
+ \$result = versioncmp(a, b)
9
+
10
+ where a and b are arbitrary version strings
11
+
12
+ This functions returns a number::
13
+
14
+ * > 0 if version a is greater than version b
15
+ * == 0 if both version are equals
16
+ * < 0 if version a is less than version b
17
+
18
+ Example::
19
+
20
+ if versioncmp('2.6-1', '2.4.5') > 0 {
21
+ notify('2.6-1 is > than 2.4.5')
22
+ }
23
+
24
+ ") do |args|
4
25
 
5
26
  unless args.length == 2
6
27
  raise Puppet::ParseError, "versioncmp should have 2 arguments"
@@ -0,0 +1,812 @@
1
+ # vim: syntax=ruby
2
+
3
+ # the parser
4
+
5
+ class Puppet::Parser::Parser
6
+
7
+ token LBRACK DQTEXT SQTEXT RBRACK LBRACE RBRACE SYMBOL FARROW COMMA TRUE
8
+ token FALSE EQUALS APPENDS LESSEQUAL NOTEQUAL DOT COLON LLCOLLECT RRCOLLECT
9
+ token QMARK LPAREN RPAREN ISEQUAL GREATEREQUAL GREATERTHAN LESSTHAN
10
+ token IF ELSE IMPORT DEFINE ELSIF VARIABLE CLASS INHERITS NODE BOOLEAN
11
+ token NAME SEMIC CASE DEFAULT AT LCOLLECT RCOLLECT CLASSNAME CLASSREF
12
+ token NOT OR AND UNDEF PARROW PLUS MINUS TIMES DIV LSHIFT RSHIFT UMINUS
13
+ token MATCH NOMATCH REGEX
14
+
15
+ prechigh
16
+ right NOT
17
+ nonassoc UMINUS
18
+ left MATCH NOMATCH
19
+ left TIMES DIV
20
+ left MINUS PLUS
21
+ left LSHIFT RSHIFT
22
+ left NOTEQUAL ISEQUAL
23
+ left GREATEREQUAL GREATERTHAN LESSTHAN LESSEQUAL
24
+ left AND
25
+ left OR
26
+ preclow
27
+
28
+ rule
29
+ program: statements {
30
+ if val[0]
31
+ # Make sure we always return an array.
32
+ if val[0].is_a?(AST::ASTArray)
33
+ if val[0].children.empty?
34
+ result = nil
35
+ else
36
+ result = val[0]
37
+ end
38
+ else
39
+ result = aryfy(val[0])
40
+ end
41
+ else
42
+ result = nil
43
+ end
44
+ }
45
+ | nil
46
+
47
+ statements: statement
48
+ | statements statement {
49
+ if val[0] and val[1]
50
+ if val[0].instance_of?(AST::ASTArray)
51
+ val[0].push(val[1])
52
+ result = val[0]
53
+ else
54
+ result = ast AST::ASTArray, :children => [val[0],val[1]]
55
+ end
56
+ elsif obj = (val[0] || val[1])
57
+ result = obj
58
+ else result = nil
59
+ end
60
+ }
61
+
62
+ # The main list of valid statements
63
+ statement: resource
64
+ | virtualresource
65
+ | collection
66
+ | assignment
67
+ | casestatement
68
+ | ifstatement
69
+ | import
70
+ | fstatement
71
+ | definition
72
+ | hostclass
73
+ | nodedef
74
+ | resourceoverride
75
+ | append
76
+
77
+ fstatement: NAME LPAREN funcvalues RPAREN {
78
+ args = aryfy(val[2])
79
+ result = ast AST::Function,
80
+ :name => val[0][:value],
81
+ :line => val[0][:line],
82
+ :arguments => args,
83
+ :ftype => :statement
84
+ }
85
+ | NAME LPAREN funcvalues COMMA RPAREN {
86
+ args = aryfy(val[2])
87
+ result = ast AST::Function,
88
+ :name => val[0][:value],
89
+ :line => val[0][:line],
90
+ :arguments => args,
91
+ :ftype => :statement
92
+ } | NAME LPAREN RPAREN {
93
+ result = ast AST::Function,
94
+ :name => val[0][:value],
95
+ :line => val[0][:line],
96
+ :arguments => AST::ASTArray.new({}),
97
+ :ftype => :statement
98
+ }
99
+ | NAME funcvalues {
100
+ args = aryfy(val[1])
101
+ result = ast AST::Function,
102
+ :name => val[0][:value],
103
+ :line => val[0][:line],
104
+ :arguments => args,
105
+ :ftype => :statement
106
+ }
107
+
108
+ funcvalues: namestring
109
+ | resourceref
110
+ | funcvalues COMMA namestring {
111
+ result = aryfy(val[0], val[2])
112
+ result.line = @lexer.line
113
+ result.file = @lexer.file
114
+ }
115
+ | funcvalues COMMA resourceref {
116
+ unless val[0].is_a?(AST::ASTArray)
117
+ val[0] = aryfy(val[0])
118
+ end
119
+
120
+ val[0].push(val[2])
121
+
122
+ result = val[0]
123
+ }
124
+
125
+ # This is *almost* an rvalue, but I couldn't get a full
126
+ # rvalue to work without scads of shift/reduce conflicts.
127
+ namestring: name
128
+ | variable
129
+ | type
130
+ | boolean
131
+ | funcrvalue
132
+ | selector
133
+ | quotedtext
134
+ | CLASSNAME {
135
+ result = ast AST::Name, :value => val[0][:value]
136
+ }
137
+
138
+ resource: classname LBRACE resourceinstances endsemi RBRACE {
139
+ @lexer.commentpop
140
+ array = val[2]
141
+ if array.instance_of?(AST::ResourceInstance)
142
+ array = [array]
143
+ end
144
+ result = ast AST::ASTArray
145
+
146
+ # this iterates across each specified resourceinstance
147
+ array.each { |instance|
148
+ unless instance.instance_of?(AST::ResourceInstance)
149
+ raise Puppet::Dev, "Got something that isn't an instance"
150
+ end
151
+ # now, i need to somehow differentiate between those things with
152
+ # arrays in their names, and normal things
153
+ result.push ast(AST::Resource,
154
+ :type => val[0],
155
+ :title => instance[0],
156
+ :params => instance[1])
157
+ }
158
+ } | classname LBRACE params endcomma RBRACE {
159
+ # This is a deprecated syntax.
160
+ error "All resource specifications require names"
161
+ } | classref LBRACE params endcomma RBRACE {
162
+ # a defaults setting for a type
163
+ result = ast(AST::ResourceDefaults, :type => val[0], :params => val[2])
164
+ }
165
+
166
+ # Override a value set elsewhere in the configuration.
167
+ resourceoverride: resourceref LBRACE anyparams endcomma RBRACE {
168
+ @lexer.commentpop
169
+ result = ast AST::ResourceOverride, :object => val[0], :params => val[2]
170
+ }
171
+
172
+ # Exported and virtual resources; these don't get sent to the client
173
+ # unless they get collected elsewhere in the db.
174
+ virtualresource: at resource {
175
+ type = val[0]
176
+
177
+ if (type == :exported and ! Puppet[:storeconfigs]) and ! Puppet[:parseonly]
178
+ Puppet.warning addcontext("You cannot collect without storeconfigs being set")
179
+ end
180
+
181
+ if val[1].is_a? AST::ResourceDefaults
182
+ error "Defaults are not virtualizable"
183
+ end
184
+
185
+ method = type.to_s + "="
186
+
187
+ # Just mark our resources as exported and pass them through.
188
+ if val[1].instance_of?(AST::ASTArray)
189
+ val[1].each do |obj|
190
+ obj.send(method, true)
191
+ end
192
+ else
193
+ val[1].send(method, true)
194
+ end
195
+
196
+ result = val[1]
197
+ }
198
+
199
+ at: AT { result = :virtual }
200
+ | AT AT { result = :exported }
201
+
202
+ # A collection statement. Currently supports no arguments at all, but eventually
203
+ # will, I assume.
204
+ collection: classref collectrhand LBRACE anyparams endcomma RBRACE {
205
+ if val[0] =~ /^[a-z]/
206
+ Puppet.warning addcontext("Collection names must now be capitalized")
207
+ end
208
+ type = val[0].downcase
209
+ args = {:type => type}
210
+
211
+ if val[1].is_a?(AST::CollExpr)
212
+ args[:query] = val[1]
213
+ args[:query].type = type
214
+ args[:form] = args[:query].form
215
+ else
216
+ args[:form] = val[1]
217
+ end
218
+ if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly]
219
+ Puppet.warning addcontext("You cannot collect exported resources without storeconfigs being set; the collection will be ignored")
220
+ end
221
+ args[:override] = val[3]
222
+ result = ast AST::Collection, args
223
+ }
224
+ | classref collectrhand {
225
+ if val[0] =~ /^[a-z]/
226
+ Puppet.warning addcontext("Collection names must now be capitalized")
227
+ end
228
+ type = val[0].downcase
229
+ args = {:type => type }
230
+
231
+ if val[1].is_a?(AST::CollExpr)
232
+ args[:query] = val[1]
233
+ args[:query].type = type
234
+ args[:form] = args[:query].form
235
+ else
236
+ args[:form] = val[1]
237
+ end
238
+ if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly]
239
+ Puppet.warning addcontext("You cannot collect exported resources without storeconfigs being set; the collection will be ignored")
240
+ end
241
+ result = ast AST::Collection, args
242
+ }
243
+
244
+
245
+ collectrhand: LCOLLECT collstatements RCOLLECT {
246
+ if val[1]
247
+ result = val[1]
248
+ result.form = :virtual
249
+ else
250
+ result = :virtual
251
+ end
252
+ }
253
+ | LLCOLLECT collstatements RRCOLLECT {
254
+ if val[1]
255
+ result = val[1]
256
+ result.form = :exported
257
+ else
258
+ result = :exported
259
+ end
260
+ }
261
+
262
+ # A mini-language for handling collection comparisons. This is organized
263
+ # to avoid the need for precedence indications.
264
+ collstatements: nil
265
+ | collstatement
266
+ | collstatements colljoin collstatement {
267
+ result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2]
268
+ }
269
+
270
+ collstatement: collexpr
271
+ | LPAREN collstatements RPAREN {
272
+ result = val[1]
273
+ result.parens = true
274
+ }
275
+
276
+ colljoin: AND { result=val[0][:value] }
277
+ | OR { result=val[0][:value] }
278
+
279
+ collexpr: colllval ISEQUAL simplervalue {
280
+ result = ast AST::CollExpr, :test1 => val[0], :oper => val[1][:value], :test2 => val[2]
281
+ #result = ast AST::CollExpr
282
+ #result.push *val
283
+ }
284
+ | colllval NOTEQUAL simplervalue {
285
+ result = ast AST::CollExpr, :test1 => val[0], :oper => val[1][:value], :test2 => val[2]
286
+ #result = ast AST::CollExpr
287
+ #result.push *val
288
+ }
289
+
290
+ colllval: variable
291
+ | name
292
+
293
+ resourceinst: resourcename COLON params endcomma {
294
+ result = ast AST::ResourceInstance, :children => [val[0],val[2]]
295
+ }
296
+
297
+ resourceinstances: resourceinst
298
+ | resourceinstances SEMIC resourceinst {
299
+ if val[0].instance_of?(AST::ResourceInstance)
300
+ result = ast AST::ASTArray, :children => [val[0],val[2]]
301
+ else
302
+ val[0].push val[2]
303
+ result = val[0]
304
+ end
305
+ }
306
+
307
+ endsemi: # nothing
308
+ | SEMIC
309
+
310
+ undef: UNDEF {
311
+ result = ast AST::Undef, :value => :undef
312
+ }
313
+
314
+ name: NAME {
315
+ result = ast AST::Name, :value => val[0][:value], :line => val[0][:line]
316
+ }
317
+
318
+ type: CLASSREF {
319
+ result = ast AST::Type, :value => val[0][:value], :line => val[0][:line]
320
+ }
321
+
322
+ resourcename: quotedtext
323
+ | name
324
+ | type
325
+ | selector
326
+ | variable
327
+ | array
328
+
329
+ assignment: VARIABLE EQUALS expression {
330
+ if val[0][:value] =~ /::/
331
+ raise Puppet::ParseError, "Cannot assign to variables in other namespaces"
332
+ end
333
+ # this is distinct from referencing a variable
334
+ variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line]
335
+ result = ast AST::VarDef, :name => variable, :value => val[2], :line => val[0][:line]
336
+ }
337
+
338
+ append: VARIABLE APPENDS expression {
339
+ variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line]
340
+ result = ast AST::VarDef, :name => variable, :value => val[2], :append => true, :line => val[0][:line]
341
+ }
342
+
343
+ params: # nothing
344
+ {
345
+ result = ast AST::ASTArray
346
+ }
347
+ | param { result = val[0] }
348
+ | params COMMA param {
349
+ if val[0].instance_of?(AST::ASTArray)
350
+ val[0].push(val[2])
351
+ result = val[0]
352
+ else
353
+ result = ast AST::ASTArray, :children => [val[0],val[2]]
354
+ end
355
+ }
356
+
357
+ param: NAME FARROW rvalue {
358
+ result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2]
359
+ }
360
+
361
+ addparam: NAME PARROW rvalue {
362
+ result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2],
363
+ :add => true
364
+ }
365
+
366
+ anyparam: param
367
+ | addparam
368
+
369
+ anyparams: # nothing
370
+ {
371
+ result = ast AST::ASTArray
372
+ }
373
+ | anyparam { result = val[0] }
374
+ | anyparams COMMA anyparam {
375
+ if val[0].instance_of?(AST::ASTArray)
376
+ val[0].push(val[2])
377
+ result = val[0]
378
+ else
379
+ result = ast AST::ASTArray, :children => [val[0],val[2]]
380
+ end
381
+ }
382
+
383
+ rvalues: rvalue
384
+ | rvalues comma rvalue {
385
+ if val[0].instance_of?(AST::ASTArray)
386
+ result = val[0].push(val[2])
387
+ else
388
+ result = ast AST::ASTArray, :children => [val[0],val[2]]
389
+ end
390
+ }
391
+
392
+ simplervalue: quotedtext
393
+ | name
394
+ | type
395
+ | boolean
396
+ | selector
397
+ | variable
398
+
399
+ rvalue: quotedtext
400
+ | name
401
+ | type
402
+ | boolean
403
+ | selector
404
+ | variable
405
+ | array
406
+ | resourceref
407
+ | funcrvalue
408
+ | undef
409
+
410
+ # We currently require arguments in these functions.
411
+ funcrvalue: NAME LPAREN funcvalues RPAREN {
412
+ args = aryfy(val[2])
413
+ result = ast AST::Function,
414
+ :name => val[0][:value], :line => val[0][:line],
415
+ :arguments => args,
416
+ :ftype => :rvalue
417
+ } | NAME LPAREN RPAREN {
418
+ result = ast AST::Function,
419
+ :name => val[0][:value], :line => val[0][:line],
420
+ :arguments => AST::ASTArray.new({}),
421
+ :ftype => :rvalue
422
+ }
423
+
424
+ quotedtext: DQTEXT {
425
+ result = ast AST::String, :value => val[0][:value], :line => val[0][:line]
426
+ } | SQTEXT {
427
+ result = ast AST::FlatString, :value => val[0][:value], :line => val[0][:line]
428
+ }
429
+
430
+ boolean: BOOLEAN {
431
+ result = ast AST::Boolean, :value => val[0][:value], :line => val[0][:line]
432
+ }
433
+
434
+ resourceref: NAME LBRACK rvalues RBRACK {
435
+ Puppet.warning addcontext("Deprecation notice: Resource references should now be capitalized")
436
+ result = ast AST::ResourceReference, :type => val[0][:value], :line => val[0][:line], :title => val[2]
437
+ } | classref LBRACK rvalues RBRACK {
438
+ result = ast AST::ResourceReference, :type => val[0], :title => val[2]
439
+ }
440
+
441
+ ifstatement: IF expression LBRACE statements RBRACE else {
442
+ @lexer.commentpop
443
+ args = {
444
+ :test => val[1],
445
+ :statements => val[3]
446
+ }
447
+
448
+ if val[5]
449
+ args[:else] = val[5]
450
+ end
451
+
452
+ result = ast AST::IfStatement, args
453
+ }
454
+ | IF expression LBRACE RBRACE else {
455
+ @lexer.commentpop
456
+ args = {
457
+ :test => val[1],
458
+ :statements => ast(AST::Nop)
459
+ }
460
+
461
+ if val[4]
462
+ args[:else] = val[4]
463
+ end
464
+
465
+ result = ast AST::IfStatement, args
466
+ }
467
+
468
+ else: # nothing
469
+ | ELSE LBRACE statements RBRACE {
470
+ @lexer.commentpop
471
+ result = ast AST::Else, :statements => val[2]
472
+ }
473
+ | ELSE LBRACE RBRACE {
474
+ @lexer.commentpop
475
+ result = ast AST::Else, :statements => ast(AST::Nop)
476
+ }
477
+
478
+ # Unlike yacc/bison, it seems racc
479
+ # gives tons of shift/reduce warnings
480
+ # with the following syntax:
481
+ #
482
+ # expression: ...
483
+ # | expression arithop expressio { ... }
484
+ #
485
+ # arithop: PLUS | MINUS | DIVIDE | TIMES ...
486
+ #
487
+ # So I had to develop the expression by adding one rule
488
+ # per operator :-(
489
+
490
+ expression: rvalue
491
+ | expression MATCH regex {
492
+ result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
493
+ }
494
+ | expression NOMATCH regex {
495
+ result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
496
+ }
497
+ | expression PLUS expression {
498
+ result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
499
+ }
500
+ | expression MINUS expression {
501
+ result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
502
+ }
503
+ | expression DIV expression {
504
+ result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
505
+ }
506
+ | expression TIMES expression {
507
+ result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
508
+ }
509
+ | expression LSHIFT expression {
510
+ result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
511
+ }
512
+ | expression RSHIFT expression {
513
+ result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
514
+ }
515
+ | MINUS expression =UMINUS {
516
+ result = ast AST::Minus, :value => val[1]
517
+ }
518
+ | expression NOTEQUAL expression {
519
+ result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
520
+ }
521
+ | expression ISEQUAL expression {
522
+ result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
523
+ }
524
+ | expression GREATERTHAN expression {
525
+ result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
526
+ }
527
+ | expression GREATEREQUAL expression {
528
+ result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
529
+ }
530
+ | expression LESSTHAN expression {
531
+ result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
532
+ }
533
+ | expression LESSEQUAL expression {
534
+ result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
535
+ }
536
+ | NOT expression {
537
+ result = ast AST::Not, :value => val[1]
538
+ }
539
+ | expression AND expression {
540
+ result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
541
+ }
542
+ | expression OR expression {
543
+ result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
544
+ }
545
+ | LPAREN expression RPAREN {
546
+ result = val[1]
547
+ }
548
+
549
+ casestatement: CASE rvalue LBRACE caseopts RBRACE {
550
+ @lexer.commentpop
551
+ options = val[3]
552
+ unless options.instance_of?(AST::ASTArray)
553
+ options = ast AST::ASTArray, :children => [val[3]]
554
+ end
555
+ result = ast AST::CaseStatement, :test => val[1], :options => options
556
+ }
557
+
558
+ caseopts: caseopt
559
+ | caseopts caseopt {
560
+ if val[0].instance_of?(AST::ASTArray)
561
+ val[0].push val[1]
562
+ result = val[0]
563
+ else
564
+ result = ast AST::ASTArray, :children => [val[0], val[1]]
565
+ end
566
+ }
567
+
568
+ caseopt: casevalues COLON LBRACE statements RBRACE {
569
+ @lexer.commentpop
570
+ result = ast AST::CaseOpt, :value => val[0], :statements => val[3]
571
+ } | casevalues COLON LBRACE RBRACE {
572
+ @lexer.commentpop
573
+ result = ast(AST::CaseOpt,
574
+ :value => val[0],
575
+ :statements => ast(AST::ASTArray)
576
+ )
577
+ }
578
+
579
+ casevalues: selectlhand
580
+ | casevalues COMMA selectlhand {
581
+ if val[0].instance_of?(AST::ASTArray)
582
+ val[0].push(val[2])
583
+ result = val[0]
584
+ else
585
+ result = ast AST::ASTArray, :children => [val[0],val[2]]
586
+ end
587
+ }
588
+
589
+ selector: selectlhand QMARK svalues {
590
+ result = ast AST::Selector, :param => val[0], :values => val[2]
591
+ }
592
+
593
+ svalues: selectval
594
+ | LBRACE sintvalues endcomma RBRACE {
595
+ @lexer.commentpop
596
+ result = val[1]
597
+ }
598
+
599
+ sintvalues: selectval
600
+ | sintvalues comma selectval {
601
+ if val[0].instance_of?(AST::ASTArray)
602
+ val[0].push(val[2])
603
+ result = val[0]
604
+ else
605
+ result = ast AST::ASTArray, :children => [val[0],val[2]]
606
+ end
607
+ }
608
+
609
+ selectval: selectlhand FARROW rvalue {
610
+ result = ast AST::ResourceParam, :param => val[0], :value => val[2]
611
+ }
612
+
613
+ selectlhand: name
614
+ | type
615
+ | quotedtext
616
+ | variable
617
+ | funcrvalue
618
+ | boolean
619
+ | undef
620
+ | DEFAULT {
621
+ result = ast AST::Default, :value => val[0][:value], :line => val[0][:line]
622
+ }
623
+ | regex
624
+
625
+ # These are only used for importing, and we don't interpolate there.
626
+ qtexts: quotedtext { result = [val[0].value] }
627
+ | qtexts COMMA quotedtext {
628
+ results = val[0] << val[2].value
629
+ }
630
+
631
+ import: IMPORT qtexts {
632
+ val[1].each do |file|
633
+ import(file)
634
+ end
635
+
636
+ result = AST::ASTArray.new(:children => [])
637
+ }
638
+
639
+ # Disable definition inheritance for now. 8/27/06, luke
640
+ #definition: DEFINE NAME argumentlist parent LBRACE statements RBRACE {
641
+ definition: DEFINE classname argumentlist LBRACE statements RBRACE {
642
+ @lexer.commentpop
643
+ newdefine classname(val[1]), :arguments => val[2], :code => val[4], :line => val[0][:line]
644
+ @lexer.indefine = false
645
+ result = nil
646
+
647
+ #} | DEFINE NAME argumentlist parent LBRACE RBRACE {
648
+ } | DEFINE classname argumentlist LBRACE RBRACE {
649
+ @lexer.commentpop
650
+ newdefine classname(val[1]), :arguments => val[2], :line => val[0][:line]
651
+ @lexer.indefine = false
652
+ result = nil
653
+ }
654
+
655
+ #hostclass: CLASS NAME argumentlist parent LBRACE statements RBRACE {
656
+ hostclass: CLASS classname classparent LBRACE statements RBRACE {
657
+ @lexer.commentpop
658
+ # Our class gets defined in the parent namespace, not our own.
659
+ @lexer.namepop
660
+ newclass classname(val[1]), :code => val[4], :parent => val[2], :line => val[0][:line]
661
+ result = nil
662
+ } | CLASS classname classparent LBRACE RBRACE {
663
+ @lexer.commentpop
664
+ # Our class gets defined in the parent namespace, not our own.
665
+ @lexer.namepop
666
+ newclass classname(val[1]), :parent => val[2], :line => val[0][:line]
667
+ result = nil
668
+ }
669
+
670
+ nodedef: NODE hostnames nodeparent LBRACE statements RBRACE {
671
+ @lexer.commentpop
672
+ newnode val[1], :parent => val[2], :code => val[4], :line => val[0][:line]
673
+ result = nil
674
+ } | NODE hostnames nodeparent LBRACE RBRACE {
675
+ @lexer.commentpop
676
+ newnode val[1], :parent => val[2], :line => val[0][:line]
677
+ result = nil
678
+ }
679
+
680
+ classref: CLASSREF { result = val[0][:value] }
681
+
682
+ classname: NAME { result = val[0][:value] }
683
+ | CLASSNAME { result = val[0][:value] }
684
+
685
+ # Multiple hostnames, as used for node names. These are all literal
686
+ # strings, not AST objects.
687
+ hostnames: nodename
688
+ | hostnames COMMA nodename {
689
+ result = val[0]
690
+ result = [result] unless result.is_a?(Array)
691
+ result << val[2]
692
+ }
693
+
694
+ nodename: hostname {
695
+ result = ast AST::HostName, :value => val[0]
696
+ }
697
+
698
+ hostname: NAME { result = val[0][:value] }
699
+ | SQTEXT { result = val[0][:value] }
700
+ | DQTEXT { result = val[0][:value] }
701
+ | DEFAULT { result = val[0][:value] }
702
+ | regex
703
+
704
+ nil: {
705
+ result = nil
706
+ }
707
+
708
+ nothing: {
709
+ result = ast AST::ASTArray, :children => []
710
+ }
711
+
712
+ argumentlist: nil
713
+ | LPAREN nothing RPAREN {
714
+ result = nil
715
+ }
716
+ | LPAREN arguments RPAREN {
717
+ result = val[1]
718
+ result = [result] unless result[0].is_a?(Array)
719
+ }
720
+
721
+ arguments: argument
722
+ | arguments COMMA argument {
723
+ result = val[0]
724
+ result = [result] unless result[0].is_a?(Array)
725
+ result << val[2]
726
+ }
727
+
728
+ argument: NAME EQUALS rvalue {
729
+ Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype")
730
+ result = [val[0][:value], val[2]]
731
+ }
732
+ | NAME {
733
+ Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype")
734
+ result = [val[0][:value]]
735
+ } | VARIABLE EQUALS rvalue {
736
+ result = [val[0][:value], val[2]]
737
+ } | VARIABLE {
738
+ result = [val[0][:value]]
739
+ }
740
+
741
+ nodeparent: nil
742
+ | INHERITS hostname {
743
+ result = val[1]
744
+ }
745
+
746
+ classparent: nil
747
+ | INHERITS classnameordefault {
748
+ result = val[1]
749
+ }
750
+
751
+ classnameordefault: classname | DEFAULT
752
+
753
+ variable: VARIABLE {
754
+ result = ast AST::Variable, :value => val[0][:value], :line => val[0][:line]
755
+ }
756
+
757
+ array: LBRACK rvalues RBRACK {
758
+ if val[1].instance_of?(AST::ASTArray)
759
+ result = val[1]
760
+ else
761
+ result = ast AST::ASTArray, :children => [val[1]]
762
+ end
763
+ }
764
+ | LBRACK rvalues COMMA RBRACK {
765
+ if val[1].instance_of?(AST::ASTArray)
766
+ result = val[1]
767
+ else
768
+ result = ast AST::ASTArray, :children => [val[1]]
769
+ end
770
+ } | LBRACK RBRACK {
771
+ result = ast AST::ASTArray
772
+ }
773
+
774
+ comma: FARROW
775
+ | COMMA
776
+
777
+ endcomma: # nothing
778
+ | COMMA { result = nil }
779
+
780
+ regex: REGEX {
781
+ result = ast AST::Regex, :value => val[0][:value]
782
+ }
783
+
784
+ end
785
+ ---- header ----
786
+ require 'puppet'
787
+ require 'puppet/util/loadedfile'
788
+ require 'puppet/parser/lexer'
789
+ require 'puppet/parser/ast'
790
+ #require 'puppet/parser/interpreter'
791
+
792
+ module Puppet
793
+ class ParseError < Puppet::Error; end
794
+ class ImportError < Racc::ParseError; end
795
+ class AlreadyImportedError < ImportError; end
796
+ end
797
+
798
+ Puppet[:typecheck] = true
799
+ Puppet[:paramcheck] = true
800
+
801
+ ---- inner ----
802
+
803
+ # It got too annoying having code in a file that needs to be compiled.
804
+ require 'puppet/parser/parser_support'
805
+
806
+ # Make emacs happy
807
+ # Local Variables:
808
+ # mode: ruby
809
+ # End:
810
+
811
+ # $Id$
812
+