puppet 3.3.2 → 3.4.0.rc1

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 (589) hide show
  1. data/CONTRIBUTING.md +22 -0
  2. data/Gemfile +11 -2
  3. data/README.md +13 -17
  4. data/README_DEVELOPER.md +1 -1
  5. data/Rakefile +1 -1
  6. data/examples/hiera/README.md +4 -4
  7. data/ext/debian/puppetmaster.init +1 -0
  8. data/ext/debian/rules +2 -5
  9. data/ext/nagios/check_puppet.rb +7 -7
  10. data/ext/osx/file_mapping.yaml +1 -1
  11. data/ext/osx/preflight.erb +34 -19
  12. data/ext/rack/{files/config.ru → config.ru} +0 -0
  13. data/ext/rack/{files/apache2.conf → example-passenger-vhost.conf} +6 -0
  14. data/ext/redhat/puppet.spec.erb +20 -2
  15. data/ext/systemd/{puppetagent.service → puppet.service} +0 -0
  16. data/lib/hiera_puppet.rb +2 -2
  17. data/lib/puppet/agent.rb +1 -6
  18. data/lib/puppet/application.rb +15 -2
  19. data/lib/puppet/application/agent.rb +2 -7
  20. data/lib/puppet/application/apply.rb +8 -13
  21. data/lib/puppet/application/cert.rb +47 -7
  22. data/lib/puppet/application/device.rb +1 -6
  23. data/lib/puppet/application/face_base.rb +1 -1
  24. data/lib/puppet/application/filebucket.rb +1 -1
  25. data/lib/puppet/application/inspect.rb +3 -12
  26. data/lib/puppet/application/master.rb +1 -6
  27. data/lib/puppet/application/queue.rb +1 -6
  28. data/lib/puppet/application/resource.rb +2 -6
  29. data/lib/puppet/coercion.rb +11 -0
  30. data/lib/puppet/configurer.rb +5 -3
  31. data/lib/puppet/configurer/downloader.rb +3 -1
  32. data/lib/puppet/configurer/plugin_handler.rb +10 -0
  33. data/lib/puppet/confine.rb +80 -0
  34. data/lib/puppet/{provider/confine → confine}/exists.rb +3 -3
  35. data/lib/puppet/{provider/confine → confine}/false.rb +2 -2
  36. data/lib/puppet/{provider/confine → confine}/feature.rb +2 -2
  37. data/lib/puppet/{provider/confine → confine}/true.rb +2 -2
  38. data/lib/puppet/{provider/confine → confine}/variable.rb +2 -2
  39. data/lib/puppet/{provider/confine_collection.rb → confine_collection.rb} +4 -4
  40. data/lib/puppet/{provider/confiner.rb → confiner.rb} +4 -4
  41. data/lib/puppet/daemon.rb +2 -6
  42. data/lib/puppet/data_binding.rb +2 -30
  43. data/lib/puppet/defaults.rb +283 -174
  44. data/lib/puppet/error.rb +1 -0
  45. data/lib/puppet/external/nagios.rb +0 -2
  46. data/lib/puppet/external/nagios/base.rb +4 -3
  47. data/lib/puppet/external/nagios/grammar.ry +173 -112
  48. data/lib/puppet/external/nagios/parser.rb +233 -184
  49. data/lib/puppet/face/file/store.rb +1 -1
  50. data/lib/puppet/face/module/generate.rb +5 -7
  51. data/lib/puppet/face/parser.rb +12 -2
  52. data/lib/puppet/face/plugin.rb +6 -0
  53. data/lib/puppet/feature/base.rb +16 -0
  54. data/lib/puppet/feature/external_facts.rb +5 -0
  55. data/lib/puppet/feature/libuser.rb +1 -1
  56. data/lib/puppet/feature/msgpack.rb +1 -0
  57. data/lib/puppet/feature/rails.rb +2 -2
  58. data/lib/puppet/file_bucket/dipper.rb +8 -6
  59. data/lib/puppet/file_bucket/file.rb +17 -1
  60. data/lib/puppet/file_serving/base.rb +21 -10
  61. data/lib/puppet/file_serving/configuration.rb +5 -7
  62. data/lib/puppet/file_serving/configuration/parser.rb +1 -1
  63. data/lib/puppet/file_serving/content.rb +1 -1
  64. data/lib/puppet/file_serving/fileset.rb +3 -3
  65. data/lib/puppet/file_serving/metadata.rb +22 -18
  66. data/lib/puppet/file_serving/mount/file.rb +1 -1
  67. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  68. data/lib/puppet/file_system.rb +3 -0
  69. data/lib/puppet/file_system/file.rb +261 -0
  70. data/lib/puppet/file_system/file18.rb +5 -0
  71. data/lib/puppet/file_system/file19.rb +5 -0
  72. data/lib/puppet/file_system/file19windows.rb +113 -0
  73. data/lib/puppet/file_system/memory_file.rb +31 -0
  74. data/lib/puppet/file_system/tempfile.rb +20 -0
  75. data/lib/puppet/indirector/active_record.rb +1 -0
  76. data/lib/puppet/indirector/catalog/compiler.rb +28 -0
  77. data/lib/puppet/indirector/certificate_request/memory.rb +6 -0
  78. data/lib/puppet/indirector/data_binding/hiera.rb +46 -2
  79. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  80. data/lib/puppet/indirector/facts/facter.rb +25 -0
  81. data/lib/puppet/indirector/file_bucket_file/file.rb +60 -74
  82. data/lib/puppet/indirector/indirection.rb +5 -1
  83. data/lib/puppet/indirector/json.rb +1 -1
  84. data/lib/puppet/indirector/key/ca.rb +4 -0
  85. data/lib/puppet/indirector/key/file.rb +7 -3
  86. data/lib/puppet/indirector/key/memory.rb +6 -0
  87. data/lib/puppet/indirector/node/write_only_yaml.rb +2 -2
  88. data/lib/puppet/indirector/request.rb +17 -11
  89. data/lib/puppet/indirector/resource/ral.rb +5 -0
  90. data/lib/puppet/indirector/resource/rest.rb +1 -0
  91. data/lib/puppet/indirector/resource/store_configs.rb +4 -0
  92. data/lib/puppet/indirector/rest.rb +2 -1
  93. data/lib/puppet/indirector/ssl_file.rb +7 -7
  94. data/lib/puppet/indirector/terminus.rb +4 -0
  95. data/lib/puppet/indirector/yaml.rb +3 -3
  96. data/lib/puppet/interface/documentation.rb +4 -11
  97. data/lib/puppet/module.rb +19 -6
  98. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  99. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  100. data/lib/puppet/module_tool/checksums.rb +1 -1
  101. data/lib/puppet/module_tool/dependency.rb +7 -3
  102. data/lib/puppet/module_tool/metadata.rb +6 -2
  103. data/lib/puppet/module_tool/tar.rb +2 -1
  104. data/lib/puppet/module_tool/tar/gnu.rb +6 -2
  105. data/lib/puppet/module_tool/tar/mini.rb +2 -0
  106. data/lib/puppet/module_tool/tar/solaris.rb +2 -5
  107. data/lib/puppet/network/authconfig.rb +0 -2
  108. data/lib/puppet/network/authentication.rb +1 -1
  109. data/lib/puppet/network/authstore.rb +6 -7
  110. data/lib/puppet/network/format.rb +2 -3
  111. data/lib/puppet/network/format_handler.rb +16 -11
  112. data/lib/puppet/network/format_support.rb +14 -0
  113. data/lib/puppet/network/formats.rb +26 -0
  114. data/lib/puppet/network/http/connection.rb +8 -41
  115. data/lib/puppet/network/http/handler.rb +28 -32
  116. data/lib/puppet/network/http/webrick.rb +15 -22
  117. data/lib/puppet/network/http_pool.rb +43 -9
  118. data/lib/puppet/network/rights.rb +0 -0
  119. data/lib/puppet/node.rb +24 -8
  120. data/lib/puppet/node/environment.rb +18 -20
  121. data/lib/puppet/node/facts.rb +23 -6
  122. data/lib/puppet/parameter.rb +15 -2
  123. data/lib/puppet/parameter/boolean.rb +5 -0
  124. data/lib/puppet/parameter/value_collection.rb +6 -4
  125. data/lib/puppet/parser/ast/resourceparam.rb +2 -1
  126. data/lib/puppet/parser/compiler.rb +25 -9
  127. data/lib/puppet/parser/files.rb +1 -1
  128. data/lib/puppet/parser/functions.rb +12 -21
  129. data/lib/puppet/parser/functions/collect.rb +6 -35
  130. data/lib/puppet/parser/functions/contain.rb +26 -0
  131. data/lib/puppet/parser/functions/create_resources.rb +5 -0
  132. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  133. data/lib/puppet/parser/functions/file.rb +1 -1
  134. data/lib/puppet/parser/functions/{reject.rb → filter.rb} +13 -12
  135. data/lib/puppet/parser/functions/fqdn_rand.rb +13 -5
  136. data/lib/puppet/parser/functions/include.rb +18 -1
  137. data/lib/puppet/parser/functions/map.rb +44 -0
  138. data/lib/puppet/parser/functions/select.rb +6 -38
  139. data/lib/puppet/parser/lexer.rb +1 -1
  140. data/lib/puppet/parser/parser_support.rb +1 -1
  141. data/lib/puppet/parser/resource.rb +6 -45
  142. data/lib/puppet/parser/scope.rb +33 -2
  143. data/lib/puppet/parser/type_loader.rb +4 -60
  144. data/lib/puppet/pops/binder/bindings_loader.rb +1 -1
  145. data/lib/puppet/pops/binder/config/binder_config.rb +3 -3
  146. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +1 -1
  148. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +2 -2
  149. data/lib/puppet/pops/issues.rb +4 -0
  150. data/lib/puppet/pops/model/ast_transformer.rb +4 -1
  151. data/lib/puppet/pops/model/model_label_provider.rb +1 -1
  152. data/lib/puppet/pops/parser/egrammar.ra +5 -24
  153. data/lib/puppet/pops/parser/eparser.rb +859 -902
  154. data/lib/puppet/pops/parser/lexer.rb +48 -30
  155. data/lib/puppet/pops/parser/parser_support.rb +1 -1
  156. data/lib/puppet/pops/patterns.rb +4 -4
  157. data/lib/puppet/pops/utils.rb +1 -1
  158. data/lib/puppet/pops/validation/checker3_1.rb +25 -20
  159. data/lib/puppet/provider.rb +23 -6
  160. data/lib/puppet/provider/aixobject.rb +0 -0
  161. data/lib/puppet/provider/augeas/augeas.rb +21 -5
  162. data/lib/puppet/provider/confine.rb +5 -79
  163. data/lib/puppet/provider/cron/crontab.rb +0 -0
  164. data/lib/puppet/provider/exec.rb +9 -7
  165. data/lib/puppet/provider/exec/posix.rb +10 -1
  166. data/lib/puppet/provider/exec/windows.rb +1 -1
  167. data/lib/puppet/provider/file/posix.rb +1 -0
  168. data/lib/puppet/provider/file/windows.rb +16 -5
  169. data/lib/puppet/provider/group/aix.rb +0 -0
  170. data/lib/puppet/provider/group/windows_adsi.rb +33 -1
  171. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  172. data/lib/puppet/provider/mailalias/aliases.rb +0 -0
  173. data/lib/puppet/provider/maillist/mailman.rb +0 -0
  174. data/lib/puppet/provider/mount/parsed.rb +0 -0
  175. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  176. data/lib/puppet/provider/package/appdmg.rb +1 -1
  177. data/lib/puppet/provider/package/apple.rb +1 -1
  178. data/lib/puppet/provider/package/apt.rb +1 -1
  179. data/lib/puppet/provider/package/aptitude.rb +0 -0
  180. data/lib/puppet/provider/package/blastwave.rb +1 -1
  181. data/lib/puppet/provider/package/dpkg.rb +1 -1
  182. data/lib/puppet/provider/package/fink.rb +1 -1
  183. data/lib/puppet/provider/package/freebsd.rb +0 -0
  184. data/lib/puppet/provider/package/gem.rb +0 -0
  185. data/lib/puppet/provider/package/macports.rb +0 -0
  186. data/lib/puppet/provider/package/msi.rb +4 -10
  187. data/lib/puppet/provider/package/nim.rb +8 -8
  188. data/lib/puppet/provider/package/openbsd.rb +1 -1
  189. data/lib/puppet/provider/package/opkg.rb +0 -0
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  192. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  193. data/lib/puppet/provider/package/ports.rb +0 -0
  194. data/lib/puppet/provider/package/rpm.rb +39 -3
  195. data/lib/puppet/provider/package/sun.rb +3 -3
  196. data/lib/puppet/provider/package/sunfreeware.rb +0 -0
  197. data/lib/puppet/provider/package/windows.rb +12 -19
  198. data/lib/puppet/provider/package/windows/package.rb +1 -1
  199. data/lib/puppet/provider/package/yum.rb +2 -2
  200. data/lib/puppet/provider/parsedfile.rb +0 -0
  201. data/lib/puppet/provider/port/parsed.rb +0 -0
  202. data/lib/puppet/provider/service/base.rb +0 -0
  203. data/lib/puppet/provider/service/bsd.rb +3 -3
  204. data/lib/puppet/provider/service/daemontools.rb +8 -8
  205. data/lib/puppet/provider/service/debian.rb +0 -0
  206. data/lib/puppet/provider/service/freebsd.rb +3 -3
  207. data/lib/puppet/provider/service/init.rb +5 -4
  208. data/lib/puppet/provider/service/launchd.rb +35 -24
  209. data/lib/puppet/provider/service/openbsd.rb +23 -0
  210. data/lib/puppet/provider/service/redhat.rb +0 -0
  211. data/lib/puppet/provider/service/runit.rb +3 -3
  212. data/lib/puppet/provider/service/smf.rb +0 -0
  213. data/lib/puppet/provider/service/src.rb +0 -0
  214. data/lib/puppet/provider/service/systemd.rb +0 -0
  215. data/lib/puppet/provider/service/upstart.rb +3 -3
  216. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  217. data/lib/puppet/provider/sshkey/parsed.rb +0 -0
  218. data/lib/puppet/provider/user/aix.rb +0 -0
  219. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  220. data/lib/puppet/provider/user/useradd.rb +1 -1
  221. data/lib/puppet/provider/zone/solaris.rb +1 -1
  222. data/lib/puppet/rails/benchmark.rb +1 -1
  223. data/lib/puppet/reference/configuration.rb +1 -2
  224. data/lib/puppet/reference/indirection.rb +12 -14
  225. data/lib/puppet/relationship.rb +7 -4
  226. data/lib/puppet/reports.rb +2 -2
  227. data/lib/puppet/reports/rrdgraph.rb +1 -1
  228. data/lib/puppet/reports/store.rb +3 -3
  229. data/lib/puppet/reports/tagmail.rb +2 -2
  230. data/lib/puppet/resource.rb +66 -8
  231. data/lib/puppet/resource/catalog.rb +18 -25
  232. data/lib/puppet/resource/status.rb +10 -4
  233. data/lib/puppet/run.rb +6 -2
  234. data/lib/puppet/settings.rb +39 -119
  235. data/lib/puppet/settings/base_setting.rb +8 -9
  236. data/lib/puppet/settings/directory_setting.rb +8 -0
  237. data/lib/puppet/settings/file_setting.rb +35 -1
  238. data/lib/puppet/settings/priority_setting.rb +42 -0
  239. data/lib/puppet/ssl.rb +4 -0
  240. data/lib/puppet/ssl/certificate.rb +18 -0
  241. data/lib/puppet/ssl/certificate_authority.rb +101 -72
  242. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +44 -0
  243. data/lib/puppet/ssl/certificate_authority/interface.rb +21 -17
  244. data/lib/puppet/ssl/certificate_factory.rb +38 -12
  245. data/lib/puppet/ssl/certificate_request.rb +201 -47
  246. data/lib/puppet/ssl/certificate_request_attributes.rb +34 -0
  247. data/lib/puppet/ssl/certificate_revocation_list.rb +2 -2
  248. data/lib/puppet/ssl/host.rb +21 -10
  249. data/lib/puppet/ssl/inventory.rb +6 -10
  250. data/lib/puppet/ssl/key.rb +1 -1
  251. data/lib/puppet/ssl/oids.rb +78 -0
  252. data/lib/puppet/ssl/validator.rb +41 -97
  253. data/lib/puppet/ssl/validator/default_validator.rb +153 -0
  254. data/lib/puppet/ssl/validator/no_validator.rb +17 -0
  255. data/lib/puppet/status.rb +4 -0
  256. data/lib/puppet/test/test_helper.rb +5 -0
  257. data/lib/puppet/transaction.rb +13 -0
  258. data/lib/puppet/transaction/event.rb +8 -3
  259. data/lib/puppet/transaction/report.rb +6 -2
  260. data/lib/puppet/transaction/resource_harness.rb +173 -115
  261. data/lib/puppet/type.rb +30 -13
  262. data/lib/puppet/type/augeas.rb +12 -46
  263. data/lib/puppet/type/component.rb +1 -7
  264. data/lib/puppet/type/cron.rb +0 -0
  265. data/lib/puppet/type/exec.rb +13 -1
  266. data/lib/puppet/type/file.rb +19 -10
  267. data/lib/puppet/type/file/checksum.rb +0 -0
  268. data/lib/puppet/type/file/content.rb +3 -0
  269. data/lib/puppet/type/file/ensure.rb +33 -15
  270. data/lib/puppet/type/file/group.rb +0 -0
  271. data/lib/puppet/type/file/mode.rb +6 -2
  272. data/lib/puppet/type/file/owner.rb +0 -0
  273. data/lib/puppet/type/file/source.rb +65 -14
  274. data/lib/puppet/type/file/target.rb +6 -6
  275. data/lib/puppet/type/file/type.rb +0 -0
  276. data/lib/puppet/type/filebucket.rb +0 -0
  277. data/lib/puppet/type/group.rb +18 -0
  278. data/lib/puppet/type/host.rb +0 -0
  279. data/lib/puppet/type/k5login.rb +4 -4
  280. data/lib/puppet/type/mailalias.rb +0 -0
  281. data/lib/puppet/type/maillist.rb +0 -0
  282. data/lib/puppet/type/mount.rb +15 -1
  283. data/lib/puppet/type/package.rb +7 -1
  284. data/lib/puppet/type/port.rb +0 -0
  285. data/lib/puppet/type/schedule.rb +9 -4
  286. data/lib/puppet/type/service.rb +1 -1
  287. data/lib/puppet/type/sshkey.rb +0 -0
  288. data/lib/puppet/type/tidy.rb +1 -1
  289. data/lib/puppet/type/user.rb +3 -0
  290. data/lib/puppet/type/yumrepo.rb +8 -6
  291. data/lib/puppet/type/zpool.rb +0 -0
  292. data/lib/puppet/util.rb +4 -31
  293. data/lib/puppet/util/adsi.rb +73 -17
  294. data/lib/puppet/util/autoload.rb +3 -3
  295. data/lib/puppet/util/backups.rb +4 -4
  296. data/lib/puppet/util/cacher.rb +7 -13
  297. data/lib/puppet/util/checksums.rb +2 -2
  298. data/lib/puppet/util/classgen.rb +3 -1
  299. data/lib/puppet/util/colors.rb +1 -0
  300. data/lib/puppet/util/command_line.rb +5 -0
  301. data/lib/puppet/util/docs.rb +33 -27
  302. data/lib/puppet/util/execution.rb +42 -18
  303. data/lib/puppet/util/filetype.rb +3 -3
  304. data/lib/puppet/util/instance_loader.rb +2 -2
  305. data/lib/puppet/util/instrumentation.rb +23 -42
  306. data/lib/puppet/util/instrumentation/data.rb +11 -4
  307. data/lib/puppet/util/instrumentation/indirection_probe.rb +11 -4
  308. data/lib/puppet/util/instrumentation/instrumentable.rb +7 -14
  309. data/lib/puppet/util/instrumentation/listener.rb +15 -8
  310. data/lib/puppet/util/instrumentation/listeners/log.rb +4 -10
  311. data/lib/puppet/util/instrumentation/listeners/performance.rb +8 -14
  312. data/lib/puppet/util/limits.rb +12 -0
  313. data/lib/puppet/util/lockfile.rb +2 -2
  314. data/lib/puppet/util/log.rb +14 -6
  315. data/lib/puppet/util/log/destinations.rb +23 -1
  316. data/lib/puppet/util/metric.rb +9 -3
  317. data/lib/puppet/util/monkey_patches.rb +7 -2
  318. data/lib/puppet/util/network_device/config.rb +1 -1
  319. data/lib/puppet/util/plugins.rb +1 -1
  320. data/lib/puppet/util/posix.rb +0 -0
  321. data/lib/puppet/util/profiler.rb +7 -2
  322. data/lib/puppet/util/provider_features.rb +2 -2
  323. data/lib/puppet/util/rdoc.rb +28 -30
  324. data/lib/puppet/util/rdoc/code_objects.rb +75 -25
  325. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  326. data/lib/puppet/util/rdoc/parser.rb +12 -487
  327. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +477 -0
  328. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc1.rb +19 -0
  329. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  330. data/lib/puppet/util/reference.rb +1 -1
  331. data/lib/puppet/util/resource_template.rb +1 -1
  332. data/lib/puppet/util/selinux.rb +1 -1
  333. data/lib/puppet/util/storage.rb +2 -2
  334. data/lib/puppet/util/suidmanager.rb +1 -1
  335. data/lib/puppet/util/tag_set.rb +29 -0
  336. data/lib/puppet/util/tagging.rb +8 -24
  337. data/lib/puppet/util/watched_file.rb +1 -1
  338. data/lib/puppet/util/watcher.rb +1 -1
  339. data/lib/puppet/util/windows.rb +3 -0
  340. data/lib/puppet/util/windows/access_control_entry.rb +84 -0
  341. data/lib/puppet/util/windows/access_control_list.rb +106 -0
  342. data/lib/puppet/util/windows/file.rb +213 -0
  343. data/lib/puppet/util/windows/process.rb +199 -0
  344. data/lib/puppet/util/windows/root_certs.rb +52 -37
  345. data/lib/puppet/util/windows/security.rb +270 -245
  346. data/lib/puppet/util/windows/security_descriptor.rb +62 -0
  347. data/lib/puppet/util/windows/sid.rb +26 -4
  348. data/lib/puppet/version.rb +2 -2
  349. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
  350. data/spec/fixtures/unit/indirector/{hiera → data_binding/hiera}/global.yaml +0 -0
  351. data/spec/fixtures/unit/indirector/data_binding/hiera/invalid.yaml +1 -0
  352. data/spec/fixtures/unit/module/trailing-comma.json +24 -0
  353. data/spec/fixtures/unit/util/monkey_patches/x509.pem +32 -0
  354. data/spec/integration/application/apply_spec.rb +1 -1
  355. data/spec/integration/application/doc_spec.rb +1 -1
  356. data/spec/integration/configurer_spec.rb +4 -2
  357. data/spec/integration/data_binding.rb +100 -0
  358. data/spec/integration/indirector/catalog/compiler_spec.rb +16 -13
  359. data/spec/integration/indirector/direct_file_server_spec.rb +3 -5
  360. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  361. data/spec/integration/node/facts_spec.rb +1 -1
  362. data/spec/integration/node_spec.rb +1 -1
  363. data/spec/integration/parser/compiler_spec.rb +90 -0
  364. data/spec/integration/parser/parser_spec.rb +2 -2
  365. data/spec/integration/provider/cron/crontab_spec.rb +3 -5
  366. data/spec/integration/resource/catalog_spec.rb +1 -1
  367. data/spec/integration/ssl/autosign_spec.rb +90 -0
  368. data/spec/integration/ssl/certificate_authority_spec.rb +62 -69
  369. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  370. data/spec/integration/ssl/host_spec.rb +1 -1
  371. data/spec/integration/transaction_spec.rb +13 -13
  372. data/spec/integration/type/exec_spec.rb +2 -2
  373. data/spec/integration/type/file_spec.rb +287 -45
  374. data/spec/integration/type/tidy_spec.rb +3 -3
  375. data/spec/integration/util/rdoc/parser_spec.rb +236 -35
  376. data/spec/integration/util/settings_spec.rb +1 -1
  377. data/spec/integration/util/windows/process_spec.rb +22 -0
  378. data/spec/integration/util/windows/security_spec.rb +316 -106
  379. data/spec/lib/matchers/containment_matchers.rb +52 -0
  380. data/spec/lib/puppet_spec/compiler.rb +6 -0
  381. data/spec/lib/puppet_spec/files.rb +20 -21
  382. data/spec/shared_behaviours/documentation_on_faces.rb +3 -3
  383. data/spec/shared_behaviours/file_server_terminus.rb +2 -2
  384. data/spec/shared_contexts/platform.rb +1 -0
  385. data/spec/spec_helper.rb +13 -1
  386. data/spec/unit/agent_spec.rb +0 -12
  387. data/spec/unit/application/agent_spec.rb +4 -4
  388. data/spec/unit/application/apply_spec.rb +18 -2
  389. data/spec/unit/application/cert_spec.rb +8 -6
  390. data/spec/unit/application/device_spec.rb +1 -1
  391. data/spec/unit/application/filebucket_spec.rb +1 -1
  392. data/spec/unit/application/inspect_spec.rb +1 -1
  393. data/spec/unit/application_spec.rb +24 -0
  394. data/spec/unit/configurer/downloader_spec.rb +8 -7
  395. data/spec/unit/configurer/fact_handler_spec.rb +23 -0
  396. data/spec/unit/configurer/plugin_handler_spec.rb +7 -2
  397. data/spec/unit/configurer_spec.rb +15 -5
  398. data/spec/unit/{provider/confine → confine}/exists_spec.rb +12 -12
  399. data/spec/unit/{provider/confine → confine}/false_spec.rb +9 -9
  400. data/spec/unit/{provider/confine → confine}/feature_spec.rb +10 -10
  401. data/spec/unit/{provider/confine → confine}/true_spec.rb +7 -7
  402. data/spec/unit/{provider/confine → confine}/variable_spec.rb +16 -16
  403. data/spec/unit/{provider/confine_collection_spec.rb → confine_collection_spec.rb} +30 -30
  404. data/spec/unit/{provider/confine_spec.rb → confine_spec.rb} +11 -11
  405. data/spec/unit/{provider/confiner_spec.rb → confiner_spec.rb} +4 -4
  406. data/spec/unit/face/parser_spec.rb +54 -0
  407. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  408. data/spec/unit/file_serving/base_spec.rb +32 -9
  409. data/spec/unit/file_serving/configuration_spec.rb +7 -7
  410. data/spec/unit/file_serving/content_spec.rb +12 -7
  411. data/spec/unit/file_serving/fileset_spec.rb +57 -27
  412. data/spec/unit/file_serving/metadata_spec.rb +74 -12
  413. data/spec/unit/file_serving/mount/file_spec.rb +10 -10
  414. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +73 -0
  415. data/spec/unit/file_system/file_spec.rb +486 -0
  416. data/spec/unit/file_system/tempfile_spec.rb +48 -0
  417. data/spec/unit/graph/relationship_graph_spec.rb +0 -6
  418. data/spec/unit/hiera_puppet_spec.rb +2 -2
  419. data/spec/unit/indirector/catalog/compiler_spec.rb +15 -19
  420. data/spec/unit/indirector/certificate_status/file_spec.rb +30 -40
  421. data/spec/unit/indirector/data_binding/hiera_spec.rb +95 -2
  422. data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
  423. data/spec/unit/indirector/facts/facter_spec.rb +33 -0
  424. data/spec/unit/indirector/file_bucket_file/file_spec.rb +61 -52
  425. data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
  426. data/spec/unit/indirector/file_server_spec.rb +4 -4
  427. data/spec/unit/indirector/json_spec.rb +4 -4
  428. data/spec/unit/indirector/key/file_spec.rb +13 -14
  429. data/spec/unit/indirector/resource/ral_spec.rb +7 -0
  430. data/spec/unit/indirector/resource/store_configs_spec.rb +11 -0
  431. data/spec/unit/indirector/rest_spec.rb +7 -3
  432. data/spec/unit/indirector/ssl_file_spec.rb +14 -17
  433. data/spec/unit/indirector/yaml_spec.rb +4 -4
  434. data/spec/unit/module_spec.rb +43 -15
  435. data/spec/unit/module_tool/tar/gnu_spec.rb +2 -2
  436. data/spec/unit/module_tool/tar/solaris_spec.rb +2 -2
  437. data/spec/unit/module_tool/tar_spec.rb +45 -0
  438. data/spec/unit/network/authconfig_spec.rb +2 -1
  439. data/spec/unit/network/authentication_spec.rb +2 -2
  440. data/spec/unit/network/format_handler_spec.rb +2 -2
  441. data/spec/unit/network/formats_spec.rb +24 -0
  442. data/spec/unit/network/http/connection_spec.rb +76 -199
  443. data/spec/unit/network/http/handler_spec.rb +33 -34
  444. data/spec/unit/network/http_pool_spec.rb +8 -5
  445. data/spec/unit/node/environment_spec.rb +76 -90
  446. data/spec/unit/node/facts_spec.rb +20 -3
  447. data/spec/unit/node_spec.rb +43 -0
  448. data/spec/unit/parameter/boolean_spec.rb +22 -12
  449. data/spec/unit/parser/ast/resourceparam_spec.rb +51 -0
  450. data/spec/unit/parser/compiler_spec.rb +103 -35
  451. data/spec/unit/parser/eparser_adapter_spec.rb +12 -12
  452. data/spec/unit/parser/files_spec.rb +11 -11
  453. data/spec/unit/parser/functions/contain_spec.rb +185 -0
  454. data/spec/unit/parser/functions/create_resources_spec.rb +13 -5
  455. data/spec/unit/parser/functions/generate_spec.rb +1 -1
  456. data/spec/unit/parser/functions_spec.rb +2 -2
  457. data/spec/unit/parser/lexer_spec.rb +1 -1
  458. data/spec/unit/parser/methods/each_spec.rb +1 -1
  459. data/spec/unit/parser/methods/{select_spec.rb → filter_spec.rb} +11 -11
  460. data/spec/unit/parser/methods/map_spec.rb +95 -0
  461. data/spec/unit/parser/methods/reduce_spec.rb +12 -11
  462. data/spec/unit/parser/methods/shared.rb +5 -5
  463. data/spec/unit/parser/methods/slice_spec.rb +13 -13
  464. data/spec/unit/parser/parser_spec.rb +1 -1
  465. data/spec/unit/parser/resource/param_spec.rb +44 -0
  466. data/spec/unit/parser/resource_spec.rb +16 -15
  467. data/spec/unit/pops/model/ast_transformer_spec.rb +18 -4
  468. data/spec/unit/pops/parser/lexer_spec.rb +22 -5
  469. data/spec/unit/pops/parser/parse_calls_spec.rb +5 -5
  470. data/spec/unit/pops/transformer/transform_calls_spec.rb +6 -6
  471. data/spec/unit/pops/transformer/transform_containers_spec.rb +2 -2
  472. data/spec/unit/pops/validator/validator_spec.rb +31 -0
  473. data/spec/unit/provider/augeas/augeas_spec.rb +57 -2
  474. data/spec/unit/provider/exec/posix_spec.rb +8 -3
  475. data/spec/unit/provider/file/posix_spec.rb +2 -2
  476. data/spec/unit/provider/group/windows_adsi_spec.rb +70 -3
  477. data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
  478. data/spec/unit/provider/package/apt_spec.rb +1 -1
  479. data/spec/unit/provider/package/msi_spec.rb +15 -42
  480. data/spec/unit/provider/package/openbsd_spec.rb +3 -3
  481. data/spec/unit/provider/package/rpm_spec.rb +56 -13
  482. data/spec/unit/provider/package/windows_spec.rb +15 -19
  483. data/spec/unit/provider/service/base_spec.rb +1 -1
  484. data/spec/unit/provider/service/daemontools_spec.rb +18 -8
  485. data/spec/unit/provider/service/freebsd_spec.rb +3 -3
  486. data/spec/unit/provider/service/gentoo_spec.rb +5 -2
  487. data/spec/unit/provider/service/init_spec.rb +17 -17
  488. data/spec/unit/provider/service/launchd_spec.rb +76 -23
  489. data/spec/unit/provider/service/openbsd_spec.rb +125 -0
  490. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  491. data/spec/unit/provider/service/runit_spec.rb +12 -5
  492. data/spec/unit/provider/service/upstart_spec.rb +4 -4
  493. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +5 -5
  494. data/spec/unit/provider/user/directoryservice_spec.rb +4 -4
  495. data/spec/unit/provider/zone/solaris_spec.rb +1 -1
  496. data/spec/unit/provider_spec.rb +2 -2
  497. data/spec/unit/reports/http_spec.rb +19 -34
  498. data/spec/unit/reports/store_spec.rb +2 -2
  499. data/spec/unit/resource/catalog_spec.rb +81 -11
  500. data/spec/unit/resource/status_spec.rb +11 -1
  501. data/spec/unit/resource/type_spec.rb +30 -1
  502. data/spec/unit/resource_spec.rb +40 -4
  503. data/spec/unit/settings/file_setting_spec.rb +2 -2
  504. data/spec/unit/settings/path_setting_spec.rb +2 -2
  505. data/spec/unit/settings/priority_setting_spec.rb +66 -0
  506. data/spec/unit/settings_spec.rb +16 -31
  507. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +30 -0
  508. data/spec/unit/ssl/certificate_authority_spec.rb +129 -134
  509. data/spec/unit/ssl/certificate_factory_spec.rb +18 -0
  510. data/spec/unit/ssl/certificate_request_attributes_spec.rb +61 -0
  511. data/spec/unit/ssl/certificate_request_spec.rb +103 -0
  512. data/spec/unit/ssl/certificate_spec.rb +31 -18
  513. data/spec/unit/ssl/host_spec.rb +34 -8
  514. data/spec/unit/ssl/inventory_spec.rb +27 -62
  515. data/spec/unit/ssl/key_spec.rb +4 -4
  516. data/spec/unit/ssl/oids_spec.rb +48 -0
  517. data/spec/unit/ssl/validator_spec.rb +49 -6
  518. data/spec/unit/status_spec.rb +9 -0
  519. data/spec/unit/transaction/event_spec.rb +1 -9
  520. data/spec/unit/transaction/report_spec.rb +20 -1
  521. data/spec/unit/transaction/resource_harness_spec.rb +60 -210
  522. data/spec/unit/transaction_spec.rb +54 -8
  523. data/spec/unit/type/component_spec.rb +2 -2
  524. data/spec/unit/type/exec_spec.rb +14 -7
  525. data/spec/unit/type/file/content_spec.rb +13 -2
  526. data/spec/unit/type/file/ctime_spec.rb +1 -1
  527. data/spec/unit/type/file/mode_spec.rb +48 -2
  528. data/spec/unit/type/file/mtime_spec.rb +1 -1
  529. data/spec/unit/type/file/source_spec.rb +177 -7
  530. data/spec/unit/type/file_spec.rb +63 -71
  531. data/spec/unit/type/group_spec.rb +20 -0
  532. data/spec/unit/type/k5login_spec.rb +3 -3
  533. data/spec/unit/type/mount_spec.rb +53 -0
  534. data/spec/unit/type/nagios_spec.rb +216 -0
  535. data/spec/unit/type/package_spec.rb +7 -1
  536. data/spec/unit/type/schedule_spec.rb +6 -0
  537. data/spec/unit/type/service_spec.rb +3 -3
  538. data/spec/unit/type/tidy_spec.rb +14 -14
  539. data/spec/unit/type/user_spec.rb +9 -0
  540. data/spec/unit/type_spec.rb +86 -4
  541. data/spec/unit/util/adsi_spec.rb +120 -12
  542. data/spec/unit/util/autoload_spec.rb +14 -14
  543. data/spec/unit/util/backups_spec.rb +29 -21
  544. data/spec/unit/util/checksums_spec.rb +2 -1
  545. data/spec/unit/util/command_line_spec.rb +41 -0
  546. data/spec/unit/util/docs_spec.rb +91 -0
  547. data/spec/unit/util/execution_spec.rb +26 -2
  548. data/spec/unit/util/filetype_spec.rb +7 -7
  549. data/spec/unit/util/lockfile_spec.rb +2 -2
  550. data/spec/unit/util/log/destinations_spec.rb +32 -0
  551. data/spec/unit/util/monkey_patches_spec.rb +41 -0
  552. data/spec/unit/util/pidlock_spec.rb +6 -6
  553. data/spec/unit/util/rdoc/parser_spec.rb +15 -13
  554. data/spec/unit/util/rdoc_spec.rb +18 -24
  555. data/spec/unit/util/resource_template_spec.rb +3 -3
  556. data/spec/unit/util/selinux_spec.rb +4 -2
  557. data/spec/unit/util/storage_spec.rb +4 -4
  558. data/spec/unit/util/suidmanager_spec.rb +7 -0
  559. data/spec/unit/util/tag_set_spec.rb +46 -0
  560. data/spec/unit/util/tagging_spec.rb +82 -45
  561. data/spec/unit/util/watcher_spec.rb +4 -1
  562. data/spec/unit/util/windows/access_control_entry_spec.rb +67 -0
  563. data/spec/unit/util/windows/access_control_list_spec.rb +133 -0
  564. data/spec/unit/util/windows/root_certs_spec.rb +10 -8
  565. data/spec/unit/util/windows/security_descriptor_spec.rb +117 -0
  566. data/spec/unit/util/windows/sid_spec.rb +69 -0
  567. data/spec/unit/util_spec.rb +7 -7
  568. data/tasks/ci.rake +17 -36
  569. metadata +2811 -2746
  570. checksums.yaml +0 -7
  571. data/examples/mac_automount.pp +0 -16
  572. data/examples/mcx_dock_absent.pp +0 -4
  573. data/examples/mcx_dock_default.pp +0 -118
  574. data/examples/mcx_dock_full.pp +0 -125
  575. data/examples/mcx_dock_invalid.pp +0 -9
  576. data/examples/mcx_nogroup.pp +0 -118
  577. data/examples/mcx_notexists_absent.pp +0 -4
  578. data/ext/rack/README +0 -58
  579. data/ext/rack/manifest.pp +0 -59
  580. data/lib/puppet/external/lock.rb +0 -63
  581. data/lib/puppet/indirector/hiera.rb +0 -39
  582. data/lib/puppet/parser/functions/foreach.rb +0 -95
  583. data/spec/integration/network/server/webrick_spec.rb +0 -76
  584. data/spec/integration/parser/functions_spec.rb +0 -16
  585. data/spec/unit/indirector/hiera_spec.rb +0 -154
  586. data/spec/unit/parser/methods/collect_spec.rb +0 -153
  587. data/spec/unit/parser/methods/foreach_spec.rb +0 -91
  588. data/spec/unit/parser/methods/reject_spec.rb +0 -73
  589. data/spec/unit/resource/resource_type.json +0 -34
@@ -10,20 +10,18 @@ end
10
10
  # Puppet::Node::Environment acts as a container for all configuration
11
11
  # that is expected to vary between environments.
12
12
  #
13
- # ## Thread local variables
13
+ # ## Global variables
14
14
  #
15
- # The Puppet::Node::Environment uses a number of `Thread.current` variables.
16
- # Since all web servers that Puppet runs on are single threaded these
17
- # variables are effectively global.
15
+ # The Puppet::Node::Environment uses a number of global variables.
18
16
  #
19
- # ### `Thread.current[:environment]`
17
+ # ### `$environment`
20
18
  #
21
- # The 'environment' thread variable represents the current environment that's
19
+ # The 'environment' global variable represents the current environment that's
22
20
  # being used in the compiler.
23
21
  #
24
- # ### `Thread.current[:known_resource_types]`
22
+ # ### `$known_resource_types`
25
23
  #
26
- # The 'known_resource_types' thread variable represents a singleton instance
24
+ # The 'known_resource_types' global variable represents a singleton instance
27
25
  # of the Puppet::Resource::TypeCollection class. The variable is discarded
28
26
  # and regenerated if it is accessed by an environment that doesn't match the
29
27
  # environment of the 'known_resource_types'
@@ -129,7 +127,7 @@ class Puppet::Node::Environment
129
127
  # @return [Puppet::Node::Environment] the currently set environment if one
130
128
  # has been explicitly set, else it will return the '*root*' environment
131
129
  def self.current
132
- Thread.current[:environment] || root
130
+ $environment || root
133
131
  end
134
132
 
135
133
  # Set the environment for the current thread
@@ -145,7 +143,7 @@ class Puppet::Node::Environment
145
143
  #
146
144
  # @param env [Puppet::Node::Environment]
147
145
  def self.current=(env)
148
- Thread.current[:environment] = new(env)
146
+ $environment = new(env)
149
147
  end
150
148
 
151
149
 
@@ -164,7 +162,7 @@ class Puppet::Node::Environment
164
162
  # @api private
165
163
  def self.clear
166
164
  @seen.clear
167
- Thread.current[:environment] = nil
165
+ $environment = nil
168
166
  end
169
167
 
170
168
  # @!attribute [r] name
@@ -192,17 +190,16 @@ class Puppet::Node::Environment
192
190
  # @param name [Symbol] The environment name
193
191
  def initialize(name)
194
192
  @name = name
195
- extend MonitorMixin
196
193
  end
197
194
 
198
195
  # The current global TypeCollection
199
196
  #
200
197
  # @note The environment is loosely coupled with the {Puppet::Resource::TypeCollection}
201
198
  # class. While there is a 1:1 relationship between an environment and a
202
- # TypeCollection instance, there is only one TypeCollection instance available
203
- # at any given time. It is stored in the Thread.current collection as
204
- # 'known_resource_types'. 'known_resource_types' is accessed as an instance
205
- # method, but is global to all environment variables.
199
+ # TypeCollection instance, there is only one TypeCollection instance
200
+ # available at any given time. It is stored in `$known_resource_types`.
201
+ # `$known_resource_types` is accessed as an instance method, but is global
202
+ # to all environment variables.
206
203
  #
207
204
  # @api public
208
205
  # @return [Puppet::Resource::TypeCollection] The current global TypeCollection
@@ -212,14 +209,15 @@ class Puppet::Node::Environment
212
209
  # always just return our thread's known-resource types. Only at the start
213
210
  # of a compilation (after our thread var has been set to nil) or when the
214
211
  # environment has changed do we delve deeper.
215
- Thread.current[:known_resource_types] = nil if (krt = Thread.current[:known_resource_types]) && krt.environment != self
216
- Thread.current[:known_resource_types] ||= synchronize {
212
+ $known_resource_types = nil if $known_resource_types && $known_resource_types.environment != self
213
+ $known_resource_types ||=
217
214
  if @known_resource_types.nil? or @known_resource_types.require_reparse?
218
215
  @known_resource_types = Puppet::Resource::TypeCollection.new(self)
219
216
  @known_resource_types.import_ast(perform_initial_import, '')
217
+ @known_resource_types
218
+ else
219
+ @known_resource_types
220
220
  end
221
- @known_resource_types
222
- }
223
221
  end
224
222
 
225
223
  # Yields each modules' plugin directory if the plugin directory (modulename/lib)
@@ -84,16 +84,33 @@ class Puppet::Node::Facts
84
84
  new_facts
85
85
  end
86
86
 
87
- def to_pson(*args)
87
+ def to_data_hash
88
88
  result = {
89
89
  'name' => name,
90
90
  'values' => strip_internal,
91
91
  }
92
92
 
93
- result['timestamp'] = timestamp if timestamp
94
- result['expiration'] = expiration if expiration
93
+ if timestamp
94
+ if timestamp.is_a? Time
95
+ result['timestamp'] = timestamp.iso8601(9)
96
+ else
97
+ result['timestamp'] = timestamp
98
+ end
99
+ end
100
+
101
+ if expiration
102
+ if expiration.is_a? Time
103
+ result['expiration'] = expiration.iso8601(9)
104
+ else
105
+ result['expiration'] = expiration
106
+ end
107
+ end
95
108
 
96
- result.to_pson(*args)
109
+ result
110
+ end
111
+
112
+ def to_pson(*args)
113
+ to_data_hash.to_pson(*args)
97
114
  end
98
115
 
99
116
  # Add internal data to the facts for storage.
@@ -109,8 +126,6 @@ class Puppet::Node::Facts
109
126
  self.values['_timestamp']
110
127
  end
111
128
 
112
- private
113
-
114
129
  # Strip out that internal data.
115
130
  def strip_internal
116
131
  newvals = values.dup
@@ -118,6 +133,8 @@ class Puppet::Node::Facts
118
133
  newvals
119
134
  end
120
135
 
136
+ private
137
+
121
138
  def sanitize_fact(fact)
122
139
  if fact.is_a? Hash then
123
140
  ret = {}
@@ -116,10 +116,13 @@ class Puppet::Parameter
116
116
  @doc ||= ""
117
117
 
118
118
  unless defined?(@addeddocvals)
119
- @doc += value_collection.doc
119
+ @doc = Puppet::Util::Docs.scrub(@doc)
120
+ if vals = value_collection.doc
121
+ @doc << "\n\n#{vals}"
122
+ end
120
123
 
121
124
  if f = self.required_features
122
- @doc += " Requires features #{f.flatten.collect { |f| f.to_s }.join(" ")}."
125
+ @doc << "\n\nRequires features #{f.flatten.collect { |f| f.to_s }.join(" ")}."
123
126
  end
124
127
  @addeddocvals = true
125
128
  end
@@ -567,6 +570,16 @@ class Puppet::Parameter
567
570
  "'#{value}'"
568
571
  end
569
572
  end
573
+
574
+ # @comment Document post_compile_hook here as it does not exist anywhere (called from type if implemented)
575
+ # @!method post_compile()
576
+ # @since 3.4.0
577
+ # @api public
578
+ # @abstract A subclass may implement this - it is not implemented in the Parameter class
579
+ # This method may be implemented by a parameter in order to perform actions during compilation
580
+ # after all resources have been added to the catalog.
581
+ # @see Puppet::Type#finish
582
+ # @see Puppet::Parser::Compiler#finish
570
583
  end
571
584
 
572
585
  require 'puppet/parameter/path'
@@ -7,4 +7,9 @@ class Puppet::Parameter::Boolean < Puppet::Parameter
7
7
  def unsafe_munge(value)
8
8
  Puppet::Coercion.boolean(value)
9
9
  end
10
+
11
+ def self.initvars
12
+ super
13
+ @value_collection.newvalues(*Puppet::Coercion.boolean_values)
14
+ end
10
15
  end
@@ -33,17 +33,19 @@ class Puppet::Parameter::ValueCollection
33
33
  unless defined?(@doc)
34
34
  @doc = ""
35
35
  unless values.empty?
36
- @doc += " Valid values are "
37
- @doc += @strings.collect do |value|
36
+ @doc << "Valid values are "
37
+ @doc << @strings.collect do |value|
38
38
  if aliases = value.aliases and ! aliases.empty?
39
39
  "`#{value.name}` (also called `#{aliases.join(", ")}`)"
40
40
  else
41
41
  "`#{value.name}`"
42
42
  end
43
- end.join(", ") + "."
43
+ end.join(", ") << ". "
44
44
  end
45
45
 
46
- @doc += " Values can match `" + regexes.join("`, `") + "`." unless regexes.empty?
46
+ unless regexes.empty?
47
+ @doc << "Values can match `#{regexes.join("`, `")}`."
48
+ end
47
49
  end
48
50
 
49
51
  @doc
@@ -11,9 +11,10 @@ class Puppet::Parser::AST
11
11
 
12
12
  # Return the parameter and the value.
13
13
  def evaluate(scope)
14
+ value = @value.safeevaluate(scope)
14
15
  return Puppet::Parser::Resource::Param.new(
15
16
  :name => @param,
16
- :value => @value.safeevaluate(scope),
17
+ :value => value.nil? ? :undef : value,
17
18
  :source => scope.source, :line => self.line, :file => self.file,
18
19
  :add => self.add
19
20
  )
@@ -17,13 +17,8 @@ class Puppet::Parser::Compiler
17
17
  include Puppet::Resource::TypeCollectionHelper
18
18
 
19
19
  def self.compile(node)
20
- # We get these from the environment and only cache them in a thread
21
- # variable for the duration of the compilation. If nothing else is using
22
- # the thread, though, we can leave 'em hanging round with no ill effects,
23
- # and this is safer than cleaning them at the end and assuming that will
24
- # stick until the next entry to this function.
25
- Thread.current[:known_resource_types] = nil
26
- Thread.current[:env_module_directories] = nil
20
+ $known_resource_types = nil
21
+ $env_module_directories = nil
27
22
 
28
23
  # ...and we actually do the compile now we have caching ready.
29
24
  new(node).compile.to_resource
@@ -143,8 +138,27 @@ class Puppet::Parser::Compiler
143
138
  end
144
139
 
145
140
  # Evaluate all of the classes specified by the node.
141
+ # Classes with parameters are evaluated as if they were declared.
142
+ # Classes without parameters or with an empty set of parameters are evaluated
143
+ # as if they were included. This means classes with an empty set of
144
+ # parameters won't conflict even if the class has already been included.
146
145
  def evaluate_node_classes
147
- evaluate_classes(@node.classes, @node_scope || topscope)
146
+ if @node.classes.is_a? Hash
147
+ classes_with_params, classes_without_params = @node.classes.partition {|name,params| params and !params.empty?}
148
+
149
+ # The results from Hash#partition are arrays of pairs rather than hashes,
150
+ # so we have to convert to the forms evaluate_classes expects (Hash, and
151
+ # Array of class names)
152
+ classes_with_params = Hash[classes_with_params]
153
+ classes_without_params.map!(&:first)
154
+ else
155
+ classes_with_params = {}
156
+ classes_without_params = @node.classes
157
+ end
158
+
159
+ evaluate_classes(classes_without_params, @node_scope || topscope)
160
+
161
+ evaluate_classes(classes_with_params, @node_scope || topscope)
148
162
  end
149
163
 
150
164
  # Evaluate each specified class in turn. If there are any classes we can't
@@ -487,10 +501,12 @@ class Puppet::Parser::Compiler
487
501
  node.parameters.each do |param, value|
488
502
  @topscope[param.to_s] = value
489
503
  end
490
-
491
504
  # These might be nil.
492
505
  catalog.client_version = node.parameters["clientversion"]
493
506
  catalog.server_version = node.parameters["serverversion"]
507
+ if Puppet[:trusted_node_data]
508
+ @topscope.set_trusted(node.trusted_data)
509
+ end
494
510
  end
495
511
 
496
512
  def create_settings_scope
@@ -41,7 +41,7 @@ module Puppet; module Parser; module Files
41
41
  template_paths.collect { |path|
42
42
  File::join(path, template)
43
43
  }.each do |f|
44
- return f if FileTest.exist?(f)
44
+ return f if Puppet::FileSystem::File.exist?(f)
45
45
  end
46
46
  end
47
47
 
@@ -1,6 +1,5 @@
1
1
  require 'puppet/util/autoload'
2
2
  require 'puppet/parser/scope'
3
- require 'monitor'
4
3
 
5
4
  # A module for managing parser functions. Each specified function
6
5
  # is added to a central module that then gets included into the Scope
@@ -18,8 +17,8 @@ module Puppet::Parser::Functions
18
17
  #
19
18
  # @api private
20
19
  def self.reset
21
- @functions = Hash.new { |h,k| h[k] = {} }.extend(MonitorMixin)
22
- @modules = Hash.new.extend(MonitorMixin)
20
+ @functions = Hash.new { |h,k| h[k] = {} }
21
+ @modules = Hash.new
23
22
 
24
23
  # Runs a newfunction to create a function for each of the log levels
25
24
  Puppet::Util::Log.levels.each do |level|
@@ -46,9 +45,7 @@ module Puppet::Parser::Functions
46
45
  if env and ! env.is_a?(Puppet::Node::Environment)
47
46
  env = Puppet::Node::Environment.new(env)
48
47
  end
49
- @modules.synchronize {
50
- @modules[ (env || Environment.current || Environment.root).name ] ||= Module.new
51
- }
48
+ @modules[ (env || Environment.current || Environment.root).name ] ||= Module.new
52
49
  end
53
50
 
54
51
  # Create a new Puppet DSL function.
@@ -170,11 +167,9 @@ module Puppet::Parser::Functions
170
167
  name = name.intern
171
168
 
172
169
  func = nil
173
- @functions.synchronize do
174
- unless func = get_function(name)
175
- autoloader.load(name, Environment.current)
176
- func = get_function(name)
177
- end
170
+ unless func = get_function(name)
171
+ autoloader.load(name, Environment.current)
172
+ func = get_function(name)
178
173
  end
179
174
 
180
175
  if func
@@ -190,14 +185,14 @@ module Puppet::Parser::Functions
190
185
  ret = ""
191
186
 
192
187
  merged_functions.sort { |a,b| a[0].to_s <=> b[0].to_s }.each do |name, hash|
193
- ret += "#{name}\n#{"-" * name.to_s.length}\n"
188
+ ret << "#{name}\n#{"-" * name.to_s.length}\n"
194
189
  if hash[:doc]
195
- ret += Puppet::Util::Docs.scrub(hash[:doc])
190
+ ret << Puppet::Util::Docs.scrub(hash[:doc])
196
191
  else
197
- ret += "Undocumented.\n"
192
+ ret << "Undocumented.\n"
198
193
  end
199
194
 
200
- ret += "\n\n- *Type*: #{hash[:type]}\n\n"
195
+ ret << "\n\n- *Type*: #{hash[:type]}\n\n"
201
196
  end
202
197
 
203
198
  ret
@@ -229,9 +224,7 @@ module Puppet::Parser::Functions
229
224
  private
230
225
 
231
226
  def merged_functions
232
- @functions.synchronize {
233
- @functions[Environment.root].merge(@functions[Environment.current])
234
- }
227
+ @functions[Environment.root].merge(@functions[Environment.current])
235
228
  end
236
229
 
237
230
  def get_function(name)
@@ -241,9 +234,7 @@ module Puppet::Parser::Functions
241
234
 
242
235
  def add_function(name, func)
243
236
  name = name.intern
244
- @functions.synchronize {
245
- @functions[Environment.current][name] = func
246
- }
237
+ @functions[Environment.current][name] = func
247
238
  end
248
239
  end
249
240
 
@@ -1,44 +1,15 @@
1
- require 'puppet/parser/ast/lambda'
2
-
3
1
  Puppet::Parser::Functions::newfunction(
4
2
  :collect,
5
3
  :type => :rvalue,
6
4
  :arity => 2,
7
5
  :doc => <<-'ENDHEREDOC') do |args|
8
- Applies a parameterized block to each element in a sequence of entries from the first
9
- argument and returns an array with the result of each invocation of the parameterized block.
10
-
11
- This function takes two mandatory arguments: the first should be an Array or a Hash, and the second
12
- a parameterized block as produced by the puppet syntax:
13
-
14
- $a.collect |$x| { ... }
15
-
16
- When the first argument `$a` is an Array, the block is called with each entry in turn. When the first argument
17
- is a hash the entry is an array with `[key, value]`.
18
-
19
- *Examples*
6
+ The 'collect' function has been renamed to 'map'. Please update your manifests.
20
7
 
21
- # Turns hash into array of values
22
- $a.collect |$x|{ $x[1] }
23
-
24
- # Turns hash into array of keys
25
- $a.collect |$x| { $x[0] }
26
-
27
- - Since 3.2
8
+ The collect function is reserved for future use.
9
+ - Removed as of 3.4
28
10
  - requires `parser = future`.
29
11
  ENDHEREDOC
30
12
 
31
- receiver = args[0]
32
- pblock = args[1]
33
-
34
- raise ArgumentError, ("collect(): wrong argument type (#{pblock.class}; must be a parameterized block.") unless pblock.is_a? Puppet::Parser::AST::Lambda
35
-
36
- case receiver
37
- when Array
38
- when Hash
39
- else
40
- raise ArgumentError, ("collect(): wrong argument type (#{receiver.class}; must be an Array or a Hash.")
41
- end
42
-
43
- receiver.to_a.collect {|x| pblock.call(self, x) }
44
- end
13
+ raise NotImplementedError,
14
+ "The 'collect' function has been renamed to 'map'. Please update your manifests."
15
+ end
@@ -0,0 +1,26 @@
1
+ # Called within a class definition, establishes a containment
2
+ # relationship with another class
3
+
4
+ Puppet::Parser::Functions::newfunction(
5
+ :contain,
6
+ :arity => -2,
7
+ :doc => "Contain one or more classes inside the current class. If any of
8
+ these classes are undeclared, they will be declared as if called with the
9
+ `include` function. Accepts a class name, an array of class names, or a
10
+ comma-separated list of class names.
11
+
12
+ A contained class will not be applied before the containing class is
13
+ begun, and will be finished before the containing class is finished.
14
+ "
15
+ ) do |classes|
16
+ scope = self
17
+
18
+ scope.function_include(classes)
19
+
20
+ classes.each do |class_name|
21
+ class_resource = scope.catalog.resource("Class", class_name)
22
+ if ! scope.catalog.edge?(scope.resource, class_resource)
23
+ scope.catalog.add_edge(scope.resource, class_resource)
24
+ end
25
+ end
26
+ end