puppet 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. data/CONTRIBUTING.md +1 -1
  2. data/Gemfile +5 -7
  3. data/README.md +1 -1
  4. data/Rakefile +20 -0
  5. data/ext/debian/puppet.init +0 -1
  6. data/ext/debian/puppet.logrotate +14 -5
  7. data/ext/osx/puppet.plist +2 -4
  8. data/ext/project_data.yaml +1 -1
  9. data/ext/redhat/client.init +65 -12
  10. data/ext/redhat/logrotate +15 -3
  11. data/ext/redhat/puppet.spec.erb +5 -1
  12. data/ext/redhat/server.init +1 -1
  13. data/ext/solaris/smf/puppet +44 -0
  14. data/ext/solaris/smf/puppet.xml +44 -0
  15. data/ext/suse/client.init +27 -27
  16. data/ext/suse/server.init +2 -2
  17. data/ext/systemd/puppet.service +1 -0
  18. data/install.rb +21 -39
  19. data/lib/hiera/puppet_function.rb +5 -5
  20. data/lib/puppet/agent/locker.rb +11 -2
  21. data/lib/puppet/agent.rb +4 -4
  22. data/lib/puppet/application/agent.rb +28 -14
  23. data/lib/puppet/application/apply.rb +17 -4
  24. data/lib/puppet/application/cert.rb +16 -0
  25. data/lib/puppet/application/filebucket.rb +78 -4
  26. data/lib/puppet/application/lookup.rb +356 -0
  27. data/lib/puppet/application/master.rb +5 -1
  28. data/lib/puppet/configurer.rb +9 -5
  29. data/lib/puppet/context/trusted_information.rb +21 -1
  30. data/lib/puppet/context.rb +16 -1
  31. data/lib/puppet/daemon.rb +17 -13
  32. data/lib/puppet/data_binding.rb +4 -2
  33. data/lib/puppet/data_providers/data_adapter.rb +7 -68
  34. data/lib/puppet/data_providers/data_function_support.rb +5 -26
  35. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -10
  36. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -22
  37. data/lib/puppet/data_providers/hiera_config.rb +106 -0
  38. data/lib/puppet/data_providers/hiera_env_data_provider.rb +18 -0
  39. data/lib/puppet/data_providers/hiera_interpolate.rb +97 -0
  40. data/lib/puppet/data_providers/hiera_module_data_provider.rb +23 -0
  41. data/lib/puppet/data_providers/hiera_support.rb +37 -0
  42. data/lib/puppet/data_providers/json_data_provider_factory.rb +31 -0
  43. data/lib/puppet/data_providers/lookup_adapter.rb +200 -0
  44. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +32 -0
  45. data/lib/puppet/data_providers.rb +12 -13
  46. data/lib/puppet/defaults.rb +14 -3
  47. data/lib/puppet/environments.rb +94 -6
  48. data/lib/puppet/error.rb +4 -0
  49. data/lib/puppet/face/module/changes.rb +2 -1
  50. data/lib/puppet/feature/cfacter.rb +1 -0
  51. data/lib/puppet/file_bucket/dipper.rb +58 -2
  52. data/lib/puppet/file_system/windows.rb +3 -1
  53. data/lib/puppet/functions/assert_type.rb +48 -12
  54. data/lib/puppet/functions/defined.rb +79 -48
  55. data/lib/puppet/functions/each.rb +85 -27
  56. data/lib/puppet/functions/epp.rb +29 -37
  57. data/lib/puppet/functions/filter.rb +60 -25
  58. data/lib/puppet/functions/hiera.rb +76 -3
  59. data/lib/puppet/functions/hiera_array.rb +65 -3
  60. data/lib/puppet/functions/hiera_hash.rb +74 -2
  61. data/lib/puppet/functions/hiera_include.rb +77 -4
  62. data/lib/puppet/functions/inline_epp.rb +44 -71
  63. data/lib/puppet/functions/lookup.rb +19 -17
  64. data/lib/puppet/functions/map.rb +56 -21
  65. data/lib/puppet/functions/match.rb +29 -12
  66. data/lib/puppet/functions/reduce.rb +95 -58
  67. data/lib/puppet/functions/versioncmp.rb +36 -0
  68. data/lib/puppet/functions/with.rb +15 -7
  69. data/lib/puppet/functions.rb +2 -4
  70. data/lib/puppet/indirector/catalog/compiler.rb +3 -3
  71. data/lib/puppet/indirector/catalog/static_compiler.rb +46 -30
  72. data/lib/puppet/indirector/data_binding/none.rb +4 -1
  73. data/lib/puppet/indirector/file_bucket_file/file.rb +58 -1
  74. data/lib/puppet/indirector/hiera.rb +4 -0
  75. data/lib/puppet/indirector/indirection.rb +6 -1
  76. data/lib/puppet/indirector/json.rb +1 -1
  77. data/lib/puppet/indirector/msgpack.rb +1 -1
  78. data/lib/puppet/indirector/request.rb +7 -8
  79. data/lib/puppet/indirector/resource_type/parser.rb +5 -3
  80. data/lib/puppet/info_service/class_information_service.rb +111 -0
  81. data/lib/puppet/info_service.rb +7 -0
  82. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  83. data/lib/puppet/module_tool/metadata.rb +32 -9
  84. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +42 -38
  85. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +25 -18
  86. data/lib/puppet/network/authconfig.rb +21 -1
  87. data/lib/puppet/network/authorization.rb +8 -1
  88. data/lib/puppet/network/http/api/master/v3/environment.rb +59 -0
  89. data/lib/puppet/network/http/api/master/v3.rb +7 -1
  90. data/lib/puppet/node/environment.rb +9 -2
  91. data/lib/puppet/node.rb +11 -5
  92. data/lib/puppet/parser/ast/pops_bridge.rb +39 -1
  93. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
  94. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +38 -0
  95. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
  96. data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  97. data/lib/puppet/parser/compiler.rb +300 -12
  98. data/lib/puppet/parser/environment_compiler.rb +165 -0
  99. data/lib/puppet/parser/functions/assert_type.rb +46 -16
  100. data/lib/puppet/parser/functions/defined.rb +105 -68
  101. data/lib/puppet/parser/functions/each.rb +85 -27
  102. data/lib/puppet/parser/functions/epp.rb +29 -37
  103. data/lib/puppet/parser/functions/filter.rb +59 -23
  104. data/lib/puppet/parser/functions/hiera.rb +83 -27
  105. data/lib/puppet/parser/functions/hiera_array.rb +71 -28
  106. data/lib/puppet/parser/functions/hiera_hash.rb +81 -30
  107. data/lib/puppet/parser/functions/hiera_include.rb +81 -40
  108. data/lib/puppet/parser/functions/inline_epp.rb +35 -60
  109. data/lib/puppet/parser/functions/inline_template.rb +2 -2
  110. data/lib/puppet/parser/functions/map.rb +55 -20
  111. data/lib/puppet/parser/functions/match.rb +27 -12
  112. data/lib/puppet/parser/functions/reduce.rb +97 -60
  113. data/lib/puppet/parser/functions/with.rb +16 -8
  114. data/lib/puppet/parser/resource.rb +103 -21
  115. data/lib/puppet/parser.rb +3 -0
  116. data/lib/puppet/plugins/configuration.rb +3 -2
  117. data/lib/puppet/plugins/data_providers/data_provider.rb +283 -0
  118. data/lib/puppet/plugins/data_providers/registry.rb +84 -0
  119. data/lib/puppet/plugins/data_providers.rb +12 -60
  120. data/lib/puppet/pops/adapters.rb +12 -0
  121. data/lib/puppet/pops/binder/binder.rb +2 -2
  122. data/lib/puppet/pops/binder/bindings_checker.rb +1 -1
  123. data/lib/puppet/pops/binder/bindings_label_provider.rb +3 -1
  124. data/lib/puppet/pops/binder/bindings_loader.rb +6 -2
  125. data/lib/puppet/pops/binder/bindings_model_meta.rb +2 -2
  126. data/lib/puppet/pops/binder/config/binder_config.rb +1 -1
  127. data/lib/puppet/pops/binder/injector.rb +4 -4
  128. data/lib/puppet/pops/binder/key_factory.rb +3 -9
  129. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +68 -9
  130. data/lib/puppet/pops/evaluator/access_operator.rb +27 -60
  131. data/lib/puppet/pops/evaluator/closure.rb +8 -8
  132. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
  133. data/lib/puppet/pops/evaluator/evaluator_impl.rb +10 -6
  134. data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
  135. data/lib/puppet/pops/evaluator/relationship_operator.rb +7 -1
  136. data/lib/puppet/pops/functions/dispatcher.rb +3 -3
  137. data/lib/puppet/pops/issues.rb +11 -3
  138. data/lib/puppet/pops/label_provider.rb +1 -1
  139. data/lib/puppet/pops/lookup/explainer.rb +402 -0
  140. data/lib/puppet/pops/lookup/invocation.rb +117 -0
  141. data/lib/puppet/pops/lookup.rb +25 -47
  142. data/lib/puppet/pops/merge_strategy.rb +73 -5
  143. data/lib/puppet/pops/model/factory.rb +38 -3
  144. data/lib/puppet/pops/model/model_label_provider.rb +10 -1
  145. data/lib/puppet/pops/model/model_meta.rb +19 -1
  146. data/lib/puppet/pops/model/model_tree_dumper.rb +18 -0
  147. data/lib/puppet/pops/parser/code_merger.rb +13 -1
  148. data/lib/puppet/pops/parser/egrammar.ra +65 -2
  149. data/lib/puppet/pops/parser/eparser.rb +1569 -1241
  150. data/lib/puppet/pops/parser/lexer2.rb +32 -1
  151. data/lib/puppet/pops/parser/locator.rb +1 -1
  152. data/lib/puppet/pops/parser/parser_support.rb +25 -13
  153. data/lib/puppet/pops/patterns.rb +3 -0
  154. data/lib/puppet/pops/types/enumeration.rb +1 -2
  155. data/lib/puppet/pops/types/type_asserter.rb +16 -15
  156. data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
  157. data/lib/puppet/pops/types/type_calculator.rb +171 -1020
  158. data/lib/puppet/pops/types/type_factory.rb +87 -148
  159. data/lib/puppet/pops/types/type_mismatch_describer.rb +743 -0
  160. data/lib/puppet/pops/types/type_parser.rb +118 -129
  161. data/lib/puppet/pops/types/types.rb +1394 -255
  162. data/lib/puppet/pops/types/types_meta.rb +0 -234
  163. data/lib/puppet/pops/validation/checker4_0.rb +49 -1
  164. data/lib/puppet/pops/validation/validator_factory_4_0.rb +3 -1
  165. data/lib/puppet/pops/validation.rb +7 -2
  166. data/lib/puppet/pops.rb +19 -17
  167. data/lib/puppet/provider/augeas/augeas.rb +50 -0
  168. data/lib/puppet/provider/exec.rb +6 -1
  169. data/lib/puppet/provider/group/directoryservice.rb +10 -0
  170. data/lib/puppet/provider/package/dnf.rb +41 -0
  171. data/lib/puppet/provider/package/gem.rb +7 -2
  172. data/lib/puppet/provider/package/nim.rb +1 -1
  173. data/lib/puppet/provider/package/rpm.rb +1 -0
  174. data/lib/puppet/provider/package/windows/exe_package.rb +10 -8
  175. data/lib/puppet/provider/package/windows/msi_package.rb +4 -3
  176. data/lib/puppet/provider/package/windows/package.rb +9 -1
  177. data/lib/puppet/provider/package/yum.rb +20 -9
  178. data/lib/puppet/provider/service/bsd.rb +1 -1
  179. data/lib/puppet/provider/service/debian.rb +21 -0
  180. data/lib/puppet/provider/service/init.rb +6 -0
  181. data/lib/puppet/provider/service/launchd.rb +36 -7
  182. data/lib/puppet/provider/service/rcng.rb +51 -0
  183. data/lib/puppet/provider/service/redhat.rb +2 -1
  184. data/lib/puppet/provider/service/smf.rb +43 -2
  185. data/lib/puppet/provider/service/src.rb +27 -0
  186. data/lib/puppet/provider/service/systemd.rb +25 -5
  187. data/lib/puppet/provider/sshkey/parsed.rb +19 -9
  188. data/lib/puppet/provider/zone/solaris.rb +2 -2
  189. data/lib/puppet/reference/configuration.rb +10 -4
  190. data/lib/puppet/reference/report.rb +9 -12
  191. data/lib/puppet/reports.rb +5 -1
  192. data/lib/puppet/resource/capability_finder.rb +95 -0
  193. data/lib/puppet/resource/catalog.rb +47 -7
  194. data/lib/puppet/resource/status.rb +0 -2
  195. data/lib/puppet/resource/type.rb +238 -44
  196. data/lib/puppet/resource/type_collection.rb +60 -2
  197. data/lib/puppet/resource.rb +50 -73
  198. data/lib/puppet/settings/file_setting.rb +10 -9
  199. data/lib/puppet/settings.rb +2 -2
  200. data/lib/puppet/ssl/certificate_authority/interface.rb +2 -2
  201. data/lib/puppet/ssl/oids.rb +9 -1
  202. data/lib/puppet/transaction/additional_resource_generator.rb +71 -8
  203. data/lib/puppet/transaction/resource_harness.rb +9 -4
  204. data/lib/puppet/transaction.rb +8 -1
  205. data/lib/puppet/type/augeas.rb +8 -0
  206. data/lib/puppet/type/file/source.rb +14 -12
  207. data/lib/puppet/type/package.rb +9 -6
  208. data/lib/puppet/type/user.rb +4 -2
  209. data/lib/puppet/type.rb +78 -7
  210. data/lib/puppet/util/command_line.rb +4 -0
  211. data/lib/puppet/util/execution.rb +18 -2
  212. data/lib/puppet/util/tagging.rb +7 -1
  213. data/lib/puppet/util/windows/adsi.rb +5 -2
  214. data/lib/puppet/util/windows/security.rb +4 -1
  215. data/lib/puppet/util/windows/taskscheduler.rb +1 -1
  216. data/lib/puppet/util.rb +9 -1
  217. data/lib/puppet/version.rb +1 -1
  218. data/lib/puppet.rb +12 -0
  219. data/spec/fixtures/unit/application/environments/production/data/common.yaml +3 -0
  220. data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
  221. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
  222. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/environment.conf +2 -0
  223. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
  224. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
  225. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
  226. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
  227. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
  228. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
  229. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
  230. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
  231. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
  232. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
  233. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
  234. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
  235. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
  236. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
  237. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
  238. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
  239. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
  240. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
  241. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +18 -0
  242. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
  243. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +46 -0
  244. data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
  245. data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
  246. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
  247. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
  248. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
  249. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
  250. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
  251. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
  252. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +1 -0
  253. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
  254. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
  255. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
  256. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +18 -0
  257. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
  258. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
  259. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
  260. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +1 -0
  261. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +3 -0
  262. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/hiera.yaml +8 -0
  263. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
  264. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/metadata.json +9 -0
  265. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
  266. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/manifests/init.pp +3 -0
  267. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/metadata.json +9 -0
  268. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +10 -0
  269. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +23 -0
  270. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/manifests/init.pp +3 -0
  271. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/metadata.json +9 -0
  272. data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
  273. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
  274. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
  275. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
  276. data/spec/integration/data_binding_spec.rb +229 -0
  277. data/spec/integration/file_bucket/file_spec.rb +2 -2
  278. data/spec/integration/parser/compiler_spec.rb +30 -24
  279. data/spec/integration/parser/resource_expressions_spec.rb +4 -4
  280. data/spec/integration/parser/undef_param_spec.rb +1 -1
  281. data/spec/integration/provider/package_spec.rb +3 -1
  282. data/spec/integration/resource/catalog_spec.rb +1 -1
  283. data/spec/integration/ssl/certificate_authority_spec.rb +0 -1
  284. data/spec/integration/ssl/certificate_request_spec.rb +0 -1
  285. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -1
  286. data/spec/integration/ssl/host_spec.rb +0 -1
  287. data/spec/integration/type/package_spec.rb +2 -0
  288. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  289. data/spec/integration/util/windows/security_spec.rb +18 -0
  290. data/spec/lib/matchers/include_in_order.rb +2 -2
  291. data/spec/shared_behaviours/iterative_functions.rb +8 -8
  292. data/spec/spec_helper.rb +7 -0
  293. data/spec/unit/agent/locker_spec.rb +4 -4
  294. data/spec/unit/agent_spec.rb +0 -8
  295. data/spec/unit/application/agent_spec.rb +5 -0
  296. data/spec/unit/application/apply_spec.rb +9 -1
  297. data/spec/unit/application/filebucket_spec.rb +88 -2
  298. data/spec/unit/application/lookup_spec.rb +195 -0
  299. data/spec/unit/application/master_spec.rb +2 -2
  300. data/spec/unit/application_spec.rb +3 -3
  301. data/spec/unit/appmgmt_spec.rb +657 -0
  302. data/spec/unit/capability_spec.rb +414 -0
  303. data/spec/unit/configurer_spec.rb +7 -1
  304. data/spec/unit/context/trusted_information_spec.rb +24 -1
  305. data/spec/unit/daemon_spec.rb +18 -8
  306. data/spec/unit/data_providers/hiera_data_provider_spec.rb +201 -0
  307. data/spec/unit/environments_spec.rb +2 -0
  308. data/spec/unit/face/node_spec.rb +1 -1
  309. data/spec/unit/file_bucket/dipper_spec.rb +210 -1
  310. data/spec/unit/file_serving/configuration_spec.rb +1 -1
  311. data/spec/unit/file_system_spec.rb +20 -0
  312. data/spec/unit/functions/assert_type_spec.rb +5 -7
  313. data/spec/unit/functions/defined_spec.rb +2 -2
  314. data/spec/unit/functions/epp_spec.rb +2 -2
  315. data/spec/unit/functions/filter_spec.rb +18 -0
  316. data/spec/unit/functions/hiera_spec.rb +2 -2
  317. data/spec/unit/functions/lookup_spec.rb +200 -9
  318. data/spec/unit/functions/regsubst_spec.rb +17 -8
  319. data/spec/unit/functions/scanf_spec.rb +1 -1
  320. data/spec/unit/functions/split_spec.rb +2 -2
  321. data/spec/unit/functions/versioncmp_spec.rb +36 -0
  322. data/spec/unit/functions4_spec.rb +58 -72
  323. data/spec/unit/graph/sequential_prioritizer_spec.rb +1 -1
  324. data/spec/unit/indirector/catalog/compiler_spec.rb +28 -8
  325. data/spec/unit/indirector/catalog/static_compiler_spec.rb +38 -20
  326. data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
  327. data/spec/unit/indirector/file_bucket_file/file_spec.rb +52 -1
  328. data/spec/unit/indirector/indirection_spec.rb +13 -2
  329. data/spec/unit/indirector/request_spec.rb +8 -8
  330. data/spec/unit/indirector/ssl_file_spec.rb +1 -1
  331. data/spec/unit/indirector/yaml_spec.rb +1 -1
  332. data/spec/unit/info_service_spec.rb +236 -0
  333. data/spec/unit/module_tool/application_spec.rb +1 -1
  334. data/spec/unit/module_tool/applications/builder_spec.rb +1 -1
  335. data/spec/unit/module_tool/metadata_spec.rb +31 -2
  336. data/spec/unit/network/authconfig_spec.rb +62 -32
  337. data/spec/unit/network/authorization_spec.rb +30 -2
  338. data/spec/unit/network/authstore_spec.rb +1 -1
  339. data/spec/unit/network/http/compression_spec.rb +1 -1
  340. data/spec/unit/network/http/connection_spec.rb +14 -19
  341. data/spec/unit/network/http/handler_spec.rb +0 -5
  342. data/spec/unit/network/rights_spec.rb +3 -3
  343. data/spec/unit/node_spec.rb +27 -0
  344. data/spec/unit/parser/ast/leaf_spec.rb +1 -1
  345. data/spec/unit/parser/compiler_spec.rb +86 -2
  346. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  347. data/spec/unit/parser/resource_spec.rb +2 -20
  348. data/spec/unit/pops/binder/config/binder_config_spec.rb +1 -1
  349. data/spec/unit/pops/binder/injector_spec.rb +3 -3
  350. data/spec/unit/pops/evaluator/access_ops_spec.rb +13 -11
  351. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -2
  352. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +20 -11
  353. data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
  354. data/spec/unit/pops/label_provider_spec.rb +5 -1
  355. data/spec/unit/pops/parser/lexer2_spec.rb +39 -0
  356. data/spec/unit/pops/parser/parse_application_spec.rb +40 -0
  357. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -0
  358. data/spec/unit/pops/parser/parse_capabilities_spec.rb +47 -0
  359. data/spec/unit/pops/parser/parse_site_spec.rb +38 -0
  360. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  361. data/spec/unit/pops/parser/parser_spec.rb +18 -0
  362. data/spec/unit/pops/types/type_calculator_spec.rb +427 -444
  363. data/spec/unit/pops/types/type_factory_spec.rb +12 -12
  364. data/spec/unit/pops/types/type_parser_spec.rb +15 -12
  365. data/spec/unit/pops/validator/validator_spec.rb +68 -0
  366. data/spec/unit/property_spec.rb +1 -1
  367. data/spec/unit/provider/augeas/augeas_spec.rb +50 -0
  368. data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
  369. data/spec/unit/provider/group/windows_adsi_spec.rb +3 -0
  370. data/spec/unit/provider/package/dnf_spec.rb +92 -0
  371. data/spec/unit/provider/package/gem_spec.rb +7 -0
  372. data/spec/unit/provider/package/nim_spec.rb +6 -6
  373. data/spec/unit/provider/package/rpm_spec.rb +25 -2
  374. data/spec/unit/provider/package/windows/package_spec.rb +41 -0
  375. data/spec/unit/provider/package/yum_spec.rb +35 -12
  376. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +10 -0
  377. data/spec/unit/provider/service/debian_spec.rb +28 -0
  378. data/spec/unit/provider/service/gentoo_spec.rb +1 -0
  379. data/spec/unit/provider/service/init_spec.rb +6 -0
  380. data/spec/unit/provider/service/launchd_spec.rb +85 -10
  381. data/spec/unit/provider/service/openrc_spec.rb +1 -0
  382. data/spec/unit/provider/service/rcng_spec.rb +41 -0
  383. data/spec/unit/provider/service/redhat_spec.rb +8 -1
  384. data/spec/unit/provider/service/smf_spec.rb +30 -5
  385. data/spec/unit/provider/service/src_spec.rb +20 -4
  386. data/spec/unit/provider/service/systemd_spec.rb +79 -29
  387. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +1 -1
  388. data/spec/unit/provider/sshkey/parsed_spec.rb +23 -0
  389. data/spec/unit/provider/user/windows_adsi_spec.rb +2 -1
  390. data/spec/unit/provider/zone/solaris_spec.rb +19 -0
  391. data/spec/unit/reports_spec.rb +10 -0
  392. data/spec/unit/resource/capability_finder_spec.rb +56 -0
  393. data/spec/unit/resource/catalog_spec.rb +31 -8
  394. data/spec/unit/resource/type_collection_spec.rb +23 -2
  395. data/spec/unit/resource/type_spec.rb +1 -1
  396. data/spec/unit/resource_spec.rb +23 -5
  397. data/spec/unit/settings/file_setting_spec.rb +31 -0
  398. data/spec/unit/settings_spec.rb +91 -2
  399. data/spec/unit/ssl/certificate_authority/interface_spec.rb +4 -3
  400. data/spec/unit/ssl/certificate_authority_spec.rb +5 -3
  401. data/spec/unit/ssl/host_spec.rb +2 -2
  402. data/spec/unit/ssl/oids_spec.rb +8 -0
  403. data/spec/unit/transaction/additional_resource_generator_spec.rb +78 -5
  404. data/spec/unit/transaction/report_spec.rb +24 -1
  405. data/spec/unit/transaction_spec.rb +7 -0
  406. data/spec/unit/type/exec_spec.rb +16 -8
  407. data/spec/unit/type/host_spec.rb +4 -4
  408. data/spec/unit/type/package_spec.rb +1 -0
  409. data/spec/unit/type/tidy_spec.rb +4 -4
  410. data/spec/unit/type/user_spec.rb +14 -7
  411. data/spec/unit/type/vlan_spec.rb +1 -1
  412. data/spec/unit/type_spec.rb +1 -1
  413. data/spec/unit/util/ldap/generator_spec.rb +1 -1
  414. data/spec/unit/util/network_device/cisco/device_spec.rb +1 -1
  415. data/spec/unit/util/network_device/transport/ssh_spec.rb +1 -1
  416. data/spec/unit/util/network_device_spec.rb +1 -1
  417. data/spec/unit/util/storage_spec.rb +5 -1
  418. data/spec/unit/util/windows/adsi_spec.rb +13 -0
  419. data/spec/unit/util_spec.rb +21 -2
  420. metadata +173 -7
  421. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
  422. data/spec/integration/data_binding.rb +0 -104
@@ -1,34 +1,77 @@
1
1
  require 'hiera_puppet'
2
2
 
3
3
  module Puppet::Parser::Functions
4
- newfunction(:hiera_array, :type => :rvalue, :arity => -2,:doc => "Returns all
5
- matches throughout the hierarchy --- not just the first match --- as a flattened array of unique values.
6
- If any of the matched values are arrays, they're flattened and included in the results.
7
-
8
- The function can be called in one of three ways:
9
- 1. Using 1 to 3 arguments where the arguments are:
10
- 'key' [String] Required
11
- The key to lookup.
12
- 'default` [Any] Optional
13
- A value to return when there's no match for `key`. Optional
14
- `override` [Any] Optional
15
- An argument in the third position, providing a data source
16
- to consult for matching values, even if it would not ordinarily be
17
- part of the matched hierarchy. If Hiera doesn't find a matching key
18
- in the named override data source, it will continue to search through the
19
- rest of the hierarchy.
20
-
21
- 2. Using a 'key' and an optional 'override' parameter like in #1 but with a block to
22
- provide the default value. The block is called with one parameter (the key) and
23
- should return the value.
24
-
25
- 3. Like #1 but with all arguments passed in an array.
26
-
27
- If any matched value is a hash, puppet will raise a type mismatch error.
28
-
29
- More thorough examples of `hiera` are available at:
30
- <http://docs.puppetlabs.com/hiera/1/puppet.html#hiera-lookup-functions>
31
- ") do |*args|
4
+ newfunction(
5
+ :hiera_array,
6
+ :type => :rvalue,
7
+ :arity => -2,
8
+ :doc => <<-DOC
9
+ Finds all matches of a key throughout the hierarchy and returns them as a single flattened
10
+ array of unique values. If any of the matched values are arrays, they're flattened and
11
+ included in the results. This is called an
12
+ [array merge lookup](https://docs.puppetlabs.com/hiera/latest/lookup_types.html#array-merge).
13
+
14
+ The `hiera_array` function takes up to three arguments, in this order:
15
+
16
+ 1. A string key that Hiera searches for in the hierarchy. **Required**.
17
+ 2. An optional default value to return if Hiera doesn't find anything matching the key.
18
+ * If this argument isn't provided and this function results in a lookup failure, Puppet
19
+ fails with a compilation error.
20
+ 3. The optional name of an arbitrary
21
+ [hierarchy level](https://docs.puppetlabs.com/hiera/latest/hierarchy.html) to insert at the
22
+ top of the hierarchy. This lets you temporarily modify the hierarchy for a single lookup.
23
+ * If Hiera doesn't find a matching key in the overriding hierarchy level, it continues
24
+ searching the rest of the hierarchy.
25
+
26
+ **Example**: Using `hiera_array`
27
+
28
+ ~~~ yaml
29
+ # Assuming hiera.yaml
30
+ # :hierarchy:
31
+ # - web01.example.com
32
+ # - common
33
+
34
+ # Assuming common.yaml:
35
+ # users:
36
+ # - 'cdouglas = regular'
37
+ # - 'efranklin = regular'
38
+
39
+ # Assuming web01.example.com.yaml:
40
+ # users: 'abarry = admin'
41
+ ~~~
42
+
43
+ ~~~ puppet
44
+ $allusers = hiera_array('users', undef)
45
+
46
+ # $allusers contains ["cdouglas = regular", "efranklin = regular", "abarry = admin"].
47
+ ~~~
48
+
49
+ You can optionally generate the default value with a
50
+ [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) that
51
+ takes one parameter.
52
+
53
+ **Example**: Using `hiera_array` with a lambda
54
+
55
+ ~~~ puppet
56
+ # Assuming the same Hiera data as the previous example:
57
+
58
+ $allusers = hiera_array('users') | $key | { "Key \'${key}\' not found" }
59
+
60
+ # $allusers contains ["cdouglas = regular", "efranklin = regular", "abarry = admin"].
61
+ # If hiera_array couldn't match its key, it would return the lambda result,
62
+ # "Key 'users' not found".
63
+ ~~~
64
+
65
+ `hiera_array` expects that all values returned will be strings or arrays. If any matched
66
+ value is a hash, Puppet raises a type mismatch error.
67
+
68
+ See
69
+ [the documentation](https://docs.puppetlabs.com/hiera/latest/puppet.html#hiera-lookup-functions)
70
+ for more information about Hiera lookup functions.
71
+
72
+ - Since 4.0.0
73
+ DOC
74
+ ) do |*args|
32
75
  function_fail(["hiera_array() has been converted to 4x API"])
33
76
  end
34
77
  end
@@ -1,36 +1,87 @@
1
1
  require 'hiera_puppet'
2
2
 
3
3
  module Puppet::Parser::Functions
4
- newfunction(:hiera_hash, :type => :rvalue, :arity => -2, :doc =>
5
- "Returns a merged hash of matches from throughout the hierarchy. In cases where two or
6
- more hashes share keys, the hierarchy order determines which key/value pair will be
7
- used in the returned hash, with the pair in the highest priority data source winning.
8
-
9
- The function can be called in one of three ways:
10
- 1. Using 1 to 3 arguments where the arguments are:
11
- 'key' [String] Required
12
- The key to lookup.
13
- 'default` [Any] Optional
14
- A value to return when there's no match for `key`. Optional
15
- `override` [Any] Optional
16
- An argument in the third position, providing a data source
17
- to consult for matching values, even if it would not ordinarily be
18
- part of the matched hierarchy. If Hiera doesn't find a matching key
19
- in the named override data source, it will continue to search through the
20
- rest of the hierarchy.
21
-
22
- 2. Using a 'key' and an optional 'override' parameter like in #1 but with a block to
23
- provide the default value. The block is called with one parameter (the key) and
24
- should return the value.
25
-
26
- 3. Like #1 but with all arguments passed in an array.
27
-
28
- `hiera_hash` expects that all values returned will be hashes. If any of the values
29
- found in the data sources are strings or arrays, puppet will raise a type mismatch error.
30
-
31
- More thorough examples of `hiera_hash` are available at:
32
- <http://docs.puppetlabs.com/hiera/1/puppet.html#hiera-lookup-functions>
33
- ") do |*args|
4
+ newfunction(
5
+ :hiera_hash,
6
+ :type => :rvalue,
7
+ :arity => -2,
8
+ :doc => <<-DOC
9
+ Finds all matches of a key throughout the hierarchy and returns them in a merged hash.
10
+ If any of the matched hashes share keys, the final hash uses the value from the
11
+ highest priority match. This is called a
12
+ [hash merge lookup](https://docs.puppetlabs.com/hiera/latest/lookup_types.html#hash-merge).
13
+
14
+ The merge strategy is determined by Hiera's
15
+ [`:merge_behavior`](https://docs.puppetlabs.com/hiera/latest/configuring.html#mergebehavior)
16
+ setting.
17
+
18
+ The `hiera_hash` function takes up to three arguments, in this order:
19
+
20
+ 1. A string key that Hiera searches for in the hierarchy. **Required**.
21
+ 2. An optional default value to return if Hiera doesn't find anything matching the key.
22
+ * If this argument isn't provided and this function results in a lookup failure, Puppet
23
+ fails with a compilation error.
24
+ 3. The optional name of an arbitrary
25
+ [hierarchy level](https://docs.puppetlabs.com/hiera/latest/hierarchy.html) to insert at the
26
+ top of the hierarchy. This lets you temporarily modify the hierarchy for a single lookup.
27
+ * If Hiera doesn't find a matching key in the overriding hierarchy level, it continues
28
+ searching the rest of the hierarchy.
29
+
30
+ **Example**: Using `hiera_hash`
31
+
32
+ ~~~ yaml
33
+ # Assuming hiera.yaml
34
+ # :hierarchy:
35
+ # - web01.example.com
36
+ # - common
37
+
38
+ # Assuming common.yaml:
39
+ # users:
40
+ # regular:
41
+ # 'cdouglas': 'Carrie Douglas'
42
+
43
+ # Assuming web01.example.com.yaml:
44
+ # users:
45
+ # administrators:
46
+ # 'aberry': 'Amy Berry'
47
+ ~~~
48
+
49
+ ~~~ puppet
50
+ # Assuming we are not web01.example.com:
51
+
52
+ $allusers = hiera_hash('users', undef)
53
+
54
+ # $allusers contains {regular => {"cdouglas" => "Carrie Douglas"},
55
+ # administrators => {"aberry" => "Amy Berry"}}
56
+ ~~~
57
+
58
+ You can optionally generate the default value with a
59
+ [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) that
60
+ takes one parameter.
61
+
62
+ **Example**: Using `hiera_hash` with a lambda
63
+
64
+ ~~~ puppet
65
+ # Assuming the same Hiera data as the previous example:
66
+
67
+ $allusers = hiera_hash('users') | $key | { "Key \'${key}\' not found" }
68
+
69
+ # $allusers contains {regular => {"cdouglas" => "Carrie Douglas"},
70
+ # administrators => {"aberry" => "Amy Berry"}}
71
+ # If hiera_hash couldn't match its key, it would return the lambda result,
72
+ # "Key 'users' not found".
73
+ ~~~
74
+
75
+ `hiera_hash` expects that all values returned will be hashes. If any of the values
76
+ found in the data sources are strings or arrays, Puppet raises a type mismatch error.
77
+
78
+ See
79
+ [the documentation](https://docs.puppetlabs.com/hiera/latest/puppet.html#hiera-lookup-functions)
80
+ for more information about Hiera lookup functions.
81
+
82
+ - Since 4.0.0
83
+ DOC
84
+ ) do |*args|
34
85
  function_fail(["hiera_hash() has been converted to 4x API"])
35
86
  end
36
87
  end
@@ -1,46 +1,87 @@
1
1
  require 'hiera_puppet'
2
2
 
3
3
  module Puppet::Parser::Functions
4
- newfunction(:hiera_include, :arity => -2, :doc => "Assigns classes to a node
5
- using an array merge lookup that retrieves the value for a user-specified key
6
- from a Hiera data source.
7
-
8
- To use `hiera_include`, the following configuration is required:
9
-
10
- - A key name to use for classes, e.g. `classes`.
11
- - A line in the puppet `sites.pp` file (e.g. `/etc/puppetlabs/puppet/manifests/sites.pp`)
12
- reading `hiera_include('classes')`. Note that this line must be outside any node
13
- definition and below any top-scope variables in use for Hiera lookups.
14
- - Class keys in the appropriate data sources. In a data source keyed to a node's role,
15
- one might have:
16
-
17
- ---
18
- classes:
19
- - apache
20
- - apache::passenger
21
-
22
- The function can be called in one of three ways:
23
- 1. Using 1 to 3 arguments where the arguments are:
24
- 'key' [String] Required
25
- The key to lookup.
26
- 'default` [Any] Optional
27
- A value to return when there's no match for `key`. Optional
28
- `override` [Any] Optional
29
- An argument in the third position, providing a data source
30
- to consult for matching values, even if it would not ordinarily be
31
- part of the matched hierarchy. If Hiera doesn't find a matching key
32
- in the named override data source, it will continue to search through the
33
- rest of the hierarchy.
34
-
35
- 2. Using a 'key' and an optional 'override' parameter like in #1 but with a block to
36
- provide the default value. The block is called with one parameter (the key) and
37
- should return the array to be used in the subsequent call to include.
38
-
39
- 3. Like #1 but with all arguments passed in an array.
40
-
41
- More thorough examples of `hiera_include` are available at:
42
- <http://docs.puppetlabs.com/hiera/1/puppet.html#hiera-lookup-functions>
43
- ") do |*args|
4
+ newfunction(
5
+ :hiera_include,
6
+ :arity => -2,
7
+ :doc => <<-DOC
8
+ Assigns classes to a node using an
9
+ [array merge lookup](https://docs.puppetlabs.com/hiera/latest/lookup_types.htmlarray-merge)
10
+ that retrieves the value for a user-specified key from Hiera's data.
11
+
12
+ The `hiera_include` function requires:
13
+
14
+ - A string key name to use for classes.
15
+ - A call to this function (i.e. `hiera_include('classes')`) in your environment's
16
+ `sites.pp` manifest, outside of any node definitions and below any top-scope variables
17
+ that Hiera uses in lookups.
18
+ - `classes` keys in the appropriate Hiera data sources, with an array for each
19
+ `classes` key and each value of the array containing the name of a class.
20
+
21
+ The function takes up to three arguments, in this order:
22
+
23
+ 1. A string key that Hiera searches for in the hierarchy. **Required**.
24
+ 2. An optional default value to return if Hiera doesn't find anything matching the key.
25
+ * If this argument isn't provided and this function results in a lookup failure, Puppet
26
+ fails with a compilation error.
27
+ 3. The optional name of an arbitrary
28
+ [hierarchy level](https://docs.puppetlabs.com/hiera/latest/hierarchy.html) to insert at the
29
+ top of the hierarchy. This lets you temporarily modify the hierarchy for a single lookup.
30
+ * If Hiera doesn't find a matching key in the overriding hierarchy level, it continues
31
+ searching the rest of the hierarchy.
32
+
33
+ The function uses an
34
+ [array merge lookup](https://docs.puppetlabs.com/hiera/latest/lookup_types.htmlarray-merge)
35
+ to retrieve the `classes` array, so every node gets every class from the hierarchy.
36
+
37
+ **Example**: Using `hiera_include`
38
+
39
+ ~~~ yaml
40
+ # Assuming hiera.yaml
41
+ # :hierarchy:
42
+ # - web01.example.com
43
+ # - common
44
+
45
+ # Assuming web01.example.com.yaml:
46
+ # classes:
47
+ # - apache::mod::php
48
+
49
+ # Assuming common.yaml:
50
+ # classes:
51
+ # - apache
52
+ ~~~
53
+
54
+ ~~~ puppet
55
+ # In site.pp, outside of any node definitions and below any top-scope variables:
56
+ hiera_include('classes', undef)
57
+
58
+ # Puppet assigns the apache and apache::mod::php classes to the web01.example.com node.
59
+ ~~~
60
+
61
+ You can optionally generate the default value with a
62
+ [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) that
63
+ takes one parameter.
64
+
65
+ **Example**: Using `hiera_include` with a lambda
66
+
67
+ ~~~ puppet
68
+ # Assuming the same Hiera data as the previous example:
69
+
70
+ # In site.pp, outside of any node definitions and below any top-scope variables:
71
+ hiera_include('classes') | $key | {"Key \'${key}\' not found" }
72
+
73
+ # Puppet assigns the apache and apache::mod::php classes to the web01.example.com node.
74
+ # If hiera_include couldn't match its key, it would return the lambda result,
75
+ # "Key 'classes' not found".
76
+ ~~~
77
+
78
+ See [the documentation](http://links.puppetlabs.com/hierainclude) for more information
79
+ and a more detailed example of how `hiera_include` uses array merge lookups to classify
80
+ nodes.
81
+
82
+ - Since 4.0.0
83
+ DOC
84
+ ) do |*args|
44
85
  function_fail(["hiera_include() has been converted to 4x API"])
45
86
  end
46
87
  end
@@ -1,76 +1,51 @@
1
1
  Puppet::Parser::Functions::newfunction(:inline_epp, :type => :rvalue, :arity => -2, :doc =>
2
- "Evaluates an Embedded Puppet Template (EPP) string and returns the rendered text result as a String.
2
+ "Evaluates an Embedded Puppet (EPP) template string and returns the rendered
3
+ text result as a String.
3
4
 
4
- EPP support the following tags:
5
+ `inline_epp('<EPP TEMPLATE STRING>', <PARAMETER HASH>)`
5
6
 
6
- * `<%= puppet expression %>` - This tag renders the value of the expression it contains.
7
- * `<% puppet expression(s) %>` - This tag will execute the expression(s) it contains, but renders nothing.
8
- * `<%# comment %>` - The tag and its content renders nothing.
9
- * `<%%` or `%%>` - Renders a literal `<%` or `%>` respectively.
10
- * `<%-` - Same as `<%` but suppresses any leading whitespace.
11
- * `-%>` - Same as `%>` but suppresses any trailing whitespace on the same line (including line break).
12
- * `<%- |parameters| -%>` - When placed as the first tag declares the template's parameters.
7
+ The first argument to this function should be a string containing an EPP
8
+ template. In most cases, the last argument is optional; if used, it should be a
9
+ [hash](/puppet/latest/reference/lang_data_hash.html) that contains parameters to
10
+ pass to the template.
13
11
 
14
- Inline EPP supports the following visibilities of variables in scope which depends on how EPP parameters
15
- are used - see further below:
12
+ - See the [template](/puppet/latest/reference/lang_template.html) documentation
13
+ for general template usage information.
14
+ - See the [EPP syntax](/puppet/latest/reference/lang_template_epp.html)
15
+ documentation for examples of EPP.
16
16
 
17
- * Global scope (i.e. top + node scopes) - global scope is always visible
18
- * Global + Enclosing scope - if the EPP template does not declare parameters, and no arguments are given
19
- * Global + all given arguments - if the EPP template does not declare parameters, and arguments are given
20
- * Global + declared parameters - if the EPP declares parameters, given argument names must match
17
+ For example, to evaluate an inline EPP template and pass it the `docroot` and
18
+ `virtual_docroot` parameters, call the `inline_epp` function like this:
21
19
 
22
- EPP supports parameters by placing an optional parameter list as the very first element in the EPP. As an example,
23
- `<%- |$x, $y, $z='unicorn'| -%>` when placed first in the EPP text declares that the parameters `x` and `y` must be
24
- given as template arguments when calling `inline_epp`, and that `z` if not given as a template argument
25
- defaults to `'unicorn'`. Template parameters are available as variables, e.g.arguments `$x`, `$y` and `$z` in the example.
26
- Note that `<%-` must be used or any leading whitespace will be interpreted as text
20
+ `inline_epp('docroot: <%= $docroot %> Virtual docroot: <%= $virtual_docroot %>',
21
+ { 'docroot' => '/var/www/html', 'virtual_docroot' => '/var/www/example' })`
27
22
 
28
- Arguments are passed to the template by calling `inline_epp` with a Hash as the last argument, where parameters
29
- are bound to values, e.g. `inline_epp('...', {'x'=>10, 'y'=>20})`. Excess arguments may be given
30
- (i.e. undeclared parameters) only if the EPP templates does not declare any parameters at all.
31
- Template parameters shadow variables in outer scopes.
23
+ Puppet produces a syntax error if you pass more parameters than are declared in
24
+ the template's parameter tag. When passing parameters to a template that
25
+ contains a parameter tag, use the same names as the tag's declared parameters.
32
26
 
33
- Note: An inline template is best stated using a single-quoted string, or a heredoc since a double-quoted string
34
- is subject to expression interpolation before the string is parsed as an EPP template. Here are examples
35
- (using heredoc to define the EPP text):
27
+ Parameters are required only if they are declared in the called template's
28
+ parameter tag without default values. Puppet produces an error if the
29
+ `inline_epp` function fails to pass any required parameter.
36
30
 
37
- # produces 'Hello local variable world!'
38
- $x ='local variable'
39
- inline_epptemplate(@(END:epp))
40
- <%- |$x| -%>
41
- Hello <%= $x %> world!
42
- END
31
+ An inline EPP template should be written as a single-quoted string or
32
+ [heredoc](puppet/latest/reference/lang_data_string.html#heredocs).
33
+ A double-quoted string is subject to expression interpolation before the string
34
+ is parsed as an EPP template.
43
35
 
44
- # produces 'Hello given argument world!'
45
- $x ='local variable world'
46
- inline_epptemplate(@(END:epp), { x =>'given argument'})
47
- <%- |$x| -%>
48
- Hello <%= $x %> world!
49
- END
36
+ For example, to evaluate an inline EPP template using a heredoc, call the
37
+ `inline_epp` function like this:
50
38
 
51
- # produces 'Hello given argument world!'
52
- $x ='local variable world'
53
- inline_epptemplate(@(END:epp), { x =>'given argument'})
54
- <%- |$x| -%>
55
- Hello <%= $x %>!
56
- END
57
-
58
- # results in error, missing value for y
59
- $x ='local variable world'
60
- inline_epptemplate(@(END:epp), { x =>'given argument'})
61
- <%- |$x, $y| -%>
62
- Hello <%= $x %>!
63
- END
64
-
65
- # Produces 'Hello given argument planet'
66
- $x ='local variable world'
67
- inline_epptemplate(@(END:epp), { x =>'given argument'})
68
- <%- |$x, $y=planet| -%>
69
- Hello <%= $x %> <%= $y %>!
70
- END
39
+ ~~~ puppet
40
+ # Outputs 'Hello given argument planet!'
41
+ inline_epp(@(END), { x => 'given argument' })
42
+ <%- | $x, $y = planet | -%>
43
+ Hello <%= $x %> <%= $y %>!
44
+ END
45
+ ~~~
71
46
 
72
47
  - Since 3.5
73
- - Requires Future Parser") do |arguments|
48
+ - Requires [future parser](/puppet/3.8/reference/experiments_future.html) in Puppet 3.5 to 3.8") do |arguments|
74
49
 
75
50
  function_fail(["inline_epp() is only available when parser/evaluator future is in effect"])
76
51
  end
@@ -1,7 +1,7 @@
1
1
  Puppet::Parser::Functions::newfunction(:inline_template, :type => :rvalue, :arity => -2, :doc =>
2
2
  "Evaluate a template string and return its value. See
3
- [the templating docs](http://docs.puppetlabs.com/guides/templating.html) for
4
- more information. Note that if multiple template strings are specified, their
3
+ [the templating docs](http://docs.puppetlabs.com/puppet/latest/reference/lang_template.html) for
4
+ more information. Note that if multiple template strings are specified, their
5
5
  output is all concatenated and returned as the output of the function.") do |vals|
6
6
 
7
7
  require 'erb'
@@ -3,36 +3,71 @@ Puppet::Parser::Functions::newfunction(
3
3
  :type => :rvalue,
4
4
  :arity => -3,
5
5
  :doc => <<-DOC
6
- Applies a parameterized block to each element in a sequence of entries from the first
7
- argument and returns an array with the result of each invocation of the parameterized block.
6
+ Applies a [lambda](http://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
7
+ to every value in a data structure and returns an array containing the results.
8
8
 
9
- This function takes two mandatory arguments: the first should be an Array, Hash, or of Enumerable type
10
- (integer, Integer range, or String), and the second a parameterized block as produced by the puppet syntax:
9
+ This function takes two mandatory arguments, in this order:
11
10
 
12
- $a.map |$x| { ... }
13
- map($a) |$x| { ... }
11
+ 1. An array or hash the function will iterate over.
12
+ 2. A lambda, which the function calls for each element in the first argument. It can
13
+ request one or two parameters.
14
14
 
15
- When the first argument `$a` is an Array or of enumerable type, the block is called with each entry in turn.
16
- When the first argument is a hash the entry is an array with `[key, value]`.
15
+ **Example**: Using the `map` function
17
16
 
18
- Example Using map with two arguments
17
+ `$transformed_data = $data.map |$parameter| { <PUPPET CODE BLOCK> }`
19
18
 
20
- # Turns hash into array of values
21
- $a.map |$x|{ $x[1] }
19
+ or
22
20
 
23
- # Turns hash into array of keys
24
- $a.map |$x| { $x[0] }
21
+ `$transformed_data = map($data) |$parameter| { <PUPPET CODE BLOCK> }`
25
22
 
26
- When using a block with 2 parameters, the element's index (starting from 0) for an array, and the key for a hash
27
- is given to the block's first parameter, and the value is given to the block's second parameter.args.
23
+ When the first argument (`$data` in the above example) is an array, Puppet passes each
24
+ value in turn to the lambda.
28
25
 
29
- Example Using map with two arguments
26
+ **Example**: Using the `map` function with an array and a one-parameter lambda
30
27
 
31
- # Turns hash into array of values
32
- $a.map |$key,$val|{ $val }
28
+ ~~~ puppet
29
+ # For the array $data, return an array containing each value multiplied by 10
30
+ $data = [1,2,3]
31
+ $transformed_data = $data.map |$items| { $items * 10 }
32
+ # $transformed_data contains [10,20,30]
33
+ ~~~
33
34
 
34
- # Turns hash into array of keys
35
- $a.map |$key,$val|{ $key }
35
+ When the first argument is a hash, Puppet passes each key and value pair to the lambda
36
+ as an array in the form `[key, value]`.
37
+
38
+ **Example**: Using the `map` function with a hash and a one-parameter lambda
39
+
40
+ ~~~ puppet
41
+ # For the hash $data, return an array containing the keys
42
+ $data = {'a'=>1,'b'=>2,'c'=>3}
43
+ $transformed_data = $data.map |$items| { $items[0] }
44
+ # $transformed_data contains ['a','b','c']
45
+ ~~~
46
+
47
+ When the first argument is an array and the lambda has two parameters, Puppet passes the
48
+ array's indexes (enumerated from 0) in the first parameter and its values in the second
49
+ parameter.
50
+
51
+ **Example**: Using the `map` function with an array and a two-parameter lambda
52
+
53
+ ~~~ puppet
54
+ # For the array $data, return an array containing the indexes
55
+ $data = [1,2,3]
56
+ $transformed_data = $data.map |$index,$value| { $index }
57
+ # $transformed_data contains [0,1,2]
58
+ ~~~
59
+
60
+ When the first argument is a hash, Puppet passes its keys to the first parameter and its
61
+ values to the second parameter.
62
+
63
+ **Example**: Using the `map` function with a hash and a two-parameter lambda
64
+
65
+ ~~~ puppet
66
+ # For the hash $data, return an array containing each value
67
+ $data = {'a'=>1,'b'=>2,'c'=>3}
68
+ $transformed_data = $data.map |$key,$value| { $value }
69
+ # $transformed_data contains [1,2,3]
70
+ ~~~
36
71
 
37
72
  - Since 4.0.0
38
73
  DOC
@@ -2,23 +2,38 @@ Puppet::Parser::Functions::newfunction(
2
2
  :match,
3
3
  :arity => 2,
4
4
  :doc => <<-DOC
5
- Returns the match result of matching a String or Array[String] with one of:
5
+ Matches a regular expression against a string and returns an array containing the match
6
+ and any matched capturing groups.
6
7
 
7
- * Regexp
8
- * String - transformed to a Regexp
9
- * Pattern type
10
- * Regexp type
8
+ The first argument is a string or array of strings. The second argument is either a
9
+ regular expression, regular expression represented as a string, or Regex or Pattern
10
+ data type that the function matches against the first argument.
11
11
 
12
- Returns An Array with the entire match at index 0, and each subsequent submatch at index 1-n.
13
- If there was no match `undef` is returned. If the value to match is an Array, a array
14
- with mapped match results is returned.
12
+ The returned array contains the entire match at index 0, and each captured group at
13
+ subsequent index values. If the value or expression being matched is an array, the
14
+ function returns an array with mapped match results.
15
15
 
16
- Example matching:
16
+ If the function doesn't find a match, it returns 'undef'.
17
17
 
18
- "abc123".match(/([a-z]+)[1-9]+/) # => ["abc"]
19
- "abc123".match(/([a-z]+)([1-9]+)/) # => ["abc", "123"]
18
+ **Example**: Matching a regular expression in a string
20
19
 
21
- See the documentation for "The Puppet Type System" for more information about types.
20
+ ~~~ ruby
21
+ $matches = "abc123".match(/[a-z]+[1-9]+/)
22
+ # $matches contains [abc123]
23
+ ~~~
24
+
25
+ **Example**: Matching a regular expressions with grouping captures in a string
26
+
27
+ ~~~ ruby
28
+ $matches = "abc123".match(/([a-z]+)([1-9]+)/)
29
+ # $matches contains [abc123, abc, 123]
30
+ ~~~
31
+
32
+ **Example**: Matching a regular expression with grouping captures in an array of strings
33
+
34
+ ~~~ ruby
35
+ $matches = ["abc123","def456"].match(/([a-z]+)([1-9]+)/)
36
+ # $matches contains [[abc123, abc, 123], [def456, def, 456]]
22
37
 
23
38
  - Since 4.0.0
24
39
  DOC