puppet 5.4.0-x64-mingw32 → 5.5.0-x64-mingw32

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 (441) hide show
  1. data/Gemfile +3 -3
  2. data/MAINTAINERS +0 -19
  3. data/README.md +5 -5
  4. data/Rakefile +26 -0
  5. data/conf/auth.conf +5 -0
  6. data/ext/project_data.yaml +1 -0
  7. data/ext/regexp_nodes/regexp_nodes.rb +3 -4
  8. data/lib/puppet/application/apply.rb +1 -1
  9. data/lib/puppet/application/cert.rb +3 -1
  10. data/lib/puppet/application/device.rb +100 -13
  11. data/lib/puppet/application/facts.rb +5 -0
  12. data/lib/puppet/application/lookup.rb +12 -2
  13. data/lib/puppet/configurer.rb +37 -17
  14. data/lib/puppet/confine.rb +4 -1
  15. data/lib/puppet/datatypes.rb +1 -1
  16. data/lib/puppet/environments.rb +1 -1
  17. data/lib/puppet/error.rb +6 -3
  18. data/lib/puppet/external/dot.rb +0 -7
  19. data/lib/puppet/external/nagios/parser.rb +1 -1
  20. data/lib/puppet/face/config.rb +92 -10
  21. data/lib/puppet/face/epp.rb +31 -6
  22. data/lib/puppet/face/facts.rb +49 -0
  23. data/lib/puppet/face/help.rb +33 -35
  24. data/lib/puppet/face/help/action.erb +1 -1
  25. data/lib/puppet/face/help/face.erb +1 -1
  26. data/lib/puppet/face/man.rb +55 -12
  27. data/lib/puppet/face/parser.rb +30 -3
  28. data/lib/puppet/file_bucket/file.rb +0 -2
  29. data/lib/puppet/file_serving/base.rb +10 -10
  30. data/lib/puppet/forge.rb +3 -3
  31. data/lib/puppet/forge/errors.rb +3 -3
  32. data/lib/puppet/functions.rb +1 -3
  33. data/lib/puppet/functions/alert.rb +1 -1
  34. data/lib/puppet/functions/all.rb +6 -6
  35. data/lib/puppet/functions/annotate.rb +10 -10
  36. data/lib/puppet/functions/any.rb +6 -6
  37. data/lib/puppet/functions/assert_type.rb +4 -4
  38. data/lib/puppet/functions/binary_file.rb +14 -2
  39. data/lib/puppet/functions/break.rb +31 -2
  40. data/lib/puppet/functions/call.rb +4 -4
  41. data/lib/puppet/functions/contain.rb +19 -3
  42. data/lib/puppet/functions/convert_to.rb +6 -5
  43. data/lib/puppet/functions/crit.rb +1 -1
  44. data/lib/puppet/functions/debug.rb +1 -1
  45. data/lib/puppet/functions/defined.rb +11 -9
  46. data/lib/puppet/functions/dig.rb +26 -2
  47. data/lib/puppet/functions/each.rb +8 -8
  48. data/lib/puppet/functions/emerg.rb +1 -1
  49. data/lib/puppet/functions/empty.rb +79 -0
  50. data/lib/puppet/functions/err.rb +1 -1
  51. data/lib/puppet/functions/eyaml_lookup_key.rb +3 -1
  52. data/lib/puppet/functions/filter.rb +7 -7
  53. data/lib/puppet/functions/find_file.rb +15 -1
  54. data/lib/puppet/functions/flatten.rb +64 -0
  55. data/lib/puppet/functions/hiera.rb +6 -6
  56. data/lib/puppet/functions/hiera_array.rb +6 -6
  57. data/lib/puppet/functions/hiera_hash.rb +6 -6
  58. data/lib/puppet/functions/hiera_include.rb +8 -8
  59. data/lib/puppet/functions/include.rb +28 -2
  60. data/lib/puppet/functions/info.rb +1 -1
  61. data/lib/puppet/functions/inline_epp.rb +2 -2
  62. data/lib/puppet/functions/join.rb +56 -0
  63. data/lib/puppet/functions/json_data.rb +2 -2
  64. data/lib/puppet/functions/keys.rb +25 -0
  65. data/lib/puppet/functions/length.rb +44 -0
  66. data/lib/puppet/functions/lest.rb +39 -1
  67. data/lib/puppet/functions/lookup.rb +2 -1
  68. data/lib/puppet/functions/map.rb +10 -9
  69. data/lib/puppet/functions/match.rb +6 -6
  70. data/lib/puppet/functions/new.rb +995 -2
  71. data/lib/puppet/functions/next.rb +1 -1
  72. data/lib/puppet/functions/notice.rb +1 -1
  73. data/lib/puppet/functions/reduce.rb +6 -6
  74. data/lib/puppet/functions/regsubst.rb +9 -3
  75. data/lib/puppet/functions/require.rb +36 -2
  76. data/lib/puppet/functions/return.rb +1 -1
  77. data/lib/puppet/functions/reverse_each.rb +71 -2
  78. data/lib/puppet/functions/slice.rb +23 -9
  79. data/lib/puppet/functions/split.rb +12 -10
  80. data/lib/puppet/functions/step.rb +73 -1
  81. data/lib/puppet/functions/strftime.rb +176 -2
  82. data/lib/puppet/functions/then.rb +65 -2
  83. data/lib/puppet/functions/tree_each.rb +19 -19
  84. data/lib/puppet/functions/type.rb +42 -1
  85. data/lib/puppet/functions/unique.rb +13 -13
  86. data/lib/puppet/functions/unwrap.rb +8 -4
  87. data/lib/puppet/functions/values.rb +25 -0
  88. data/lib/puppet/functions/versioncmp.rb +1 -1
  89. data/lib/puppet/functions/warning.rb +1 -1
  90. data/lib/puppet/functions/with.rb +6 -4
  91. data/lib/puppet/functions/yaml_data.rb +3 -1
  92. data/lib/puppet/indirector/certificate_status/file.rb +1 -1
  93. data/lib/puppet/indirector/facts/facter.rb +1 -3
  94. data/lib/puppet/indirector/facts/rest.rb +21 -0
  95. data/lib/puppet/indirector/facts/yaml.rb +0 -4
  96. data/lib/puppet/indirector/rest.rb +2 -2
  97. data/lib/puppet/module.rb +3 -3
  98. data/lib/puppet/module/task.rb +2 -3
  99. data/lib/puppet/module_tool/applications/application.rb +4 -4
  100. data/lib/puppet/module_tool/applications/builder.rb +2 -2
  101. data/lib/puppet/module_tool/applications/checksummer.rb +3 -3
  102. data/lib/puppet/module_tool/applications/unpacker.rb +2 -2
  103. data/lib/puppet/module_tool/metadata.rb +3 -3
  104. data/lib/puppet/network/authconfig.rb +1 -1
  105. data/lib/puppet/network/format_support.rb +1 -1
  106. data/lib/puppet/network/formats.rb +5 -7
  107. data/lib/puppet/network/http/api/indirected_routes.rb +1 -0
  108. data/lib/puppet/network/http/api/master/v3/environment.rb +2 -2
  109. data/lib/puppet/network/http/api/master/v3/environments.rb +2 -2
  110. data/lib/puppet/network/http/error.rb +3 -3
  111. data/lib/puppet/network/resolver.rb +1 -2
  112. data/lib/puppet/parser/compiler.rb +12 -5
  113. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +1 -1
  114. data/lib/puppet/parser/functions/fqdn_rand.rb +15 -4
  115. data/lib/puppet/parser/functions/new.rb +31 -46
  116. data/lib/puppet/parser/parser_factory.rb +1 -1
  117. data/lib/puppet/parser/resource.rb +1 -1
  118. data/lib/puppet/parser/type_loader.rb +11 -11
  119. data/lib/puppet/pops/evaluator/closure.rb +1 -1
  120. data/lib/puppet/pops/evaluator/collector_transformer.rb +1 -1
  121. data/lib/puppet/pops/evaluator/epp_evaluator.rb +2 -2
  122. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +2 -2
  123. data/lib/puppet/pops/evaluator/runtime3_support.rb +5 -2
  124. data/lib/puppet/pops/functions/dispatch.rb +1 -1
  125. data/lib/puppet/pops/issue_reporter.rb +18 -1
  126. data/lib/puppet/pops/issues.rb +6 -3
  127. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +1 -2
  128. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -2
  129. data/lib/puppet/pops/loader/task_instantiator.rb +5 -5
  130. data/lib/puppet/pops/loader/type_definition_instantiator.rb +4 -1
  131. data/lib/puppet/pops/loaders.rb +18 -7
  132. data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
  133. data/lib/puppet/pops/lookup/lookup_adapter.rb +55 -6
  134. data/lib/puppet/pops/model/factory.rb +6 -3
  135. data/lib/puppet/pops/model/model_tree_dumper.rb +4 -0
  136. data/lib/puppet/pops/model/pn_transformer.rb +400 -0
  137. data/lib/puppet/pops/parser/egrammar.ra +1 -1
  138. data/lib/puppet/pops/parser/eparser.rb +1 -1
  139. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  140. data/lib/puppet/pops/parser/lexer_support.rb +3 -2
  141. data/lib/puppet/pops/parser/locator.rb +0 -2
  142. data/lib/puppet/pops/parser/pn_parser.rb +316 -0
  143. data/lib/puppet/pops/pcore.rb +17 -17
  144. data/lib/puppet/pops/pn.rb +236 -0
  145. data/lib/puppet/pops/serialization/json.rb +7 -7
  146. data/lib/puppet/pops/types/class_loader.rb +6 -3
  147. data/lib/puppet/pops/types/implementation_registry.rb +28 -35
  148. data/lib/puppet/pops/types/p_object_type.rb +3 -3
  149. data/lib/puppet/pops/types/p_timespan_type.rb +2 -2
  150. data/lib/puppet/pops/types/p_type_set_type.rb +24 -1
  151. data/lib/puppet/pops/types/ruby_generator.rb +3 -4
  152. data/lib/puppet/pops/types/type_calculator.rb +1 -1
  153. data/lib/puppet/pops/types/type_factory.rb +0 -4
  154. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  155. data/lib/puppet/pops/types/type_parser.rb +14 -7
  156. data/lib/puppet/pops/types/types.rb +1 -1
  157. data/lib/puppet/pops/utils.rb +2 -2
  158. data/lib/puppet/pops/validation/checker4_0.rb +6 -2
  159. data/lib/puppet/provider/group/groupadd.rb +3 -1
  160. data/lib/puppet/provider/group/windows_adsi.rb +4 -7
  161. data/lib/puppet/provider/nameservice.rb +3 -3
  162. data/lib/puppet/provider/package/pacman.rb +4 -4
  163. data/lib/puppet/provider/package/pip.rb +3 -3
  164. data/lib/puppet/provider/package/pkgdmg.rb +3 -3
  165. data/lib/puppet/provider/package/pkgutil.rb +2 -2
  166. data/lib/puppet/provider/package/portage.rb +9 -9
  167. data/lib/puppet/provider/package/zypper.rb +2 -2
  168. data/lib/puppet/provider/service/base.rb +1 -1
  169. data/lib/puppet/provider/service/smf.rb +3 -2
  170. data/lib/puppet/provider/service/systemd.rb +1 -1
  171. data/lib/puppet/provider/user/useradd.rb +6 -2
  172. data/lib/puppet/provider/user/windows_adsi.rb +1 -1
  173. data/lib/puppet/provider/yumrepo/inifile.rb +20 -9
  174. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  175. data/lib/puppet/reference/configuration.rb +2 -0
  176. data/lib/puppet/reference/type.rb +11 -11
  177. data/lib/puppet/resource.rb +1 -1
  178. data/lib/puppet/resource/capability_finder.rb +5 -5
  179. data/lib/puppet/resource/catalog.rb +6 -3
  180. data/lib/puppet/resource/status.rb +9 -2
  181. data/lib/puppet/resource/type.rb +1 -1
  182. data/lib/puppet/settings.rb +31 -19
  183. data/lib/puppet/settings/base_setting.rb +5 -0
  184. data/lib/puppet/settings/config_file.rb +1 -1
  185. data/lib/puppet/settings/ttl_setting.rb +5 -0
  186. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  187. data/lib/puppet/ssl/certificate_request.rb +0 -2
  188. data/lib/puppet/syntax_checkers/json.rb +1 -1
  189. data/lib/puppet/transaction/additional_resource_generator.rb +2 -2
  190. data/lib/puppet/transaction/event.rb +1 -1
  191. data/lib/puppet/transaction/report.rb +18 -12
  192. data/lib/puppet/type.rb +9 -13
  193. data/lib/puppet/type/augeas.rb +2 -2
  194. data/lib/puppet/type/cron.rb +11 -6
  195. data/lib/puppet/type/exec.rb +1 -1
  196. data/lib/puppet/type/file.rb +4 -5
  197. data/lib/puppet/type/host.rb +1 -1
  198. data/lib/puppet/type/k5login.rb +30 -54
  199. data/lib/puppet/type/package.rb +3 -3
  200. data/lib/puppet/type/schedule.rb +12 -12
  201. data/lib/puppet/type/scheduled_task.rb +2 -2
  202. data/lib/puppet/type/ssh_authorized_key.rb +5 -5
  203. data/lib/puppet/type/sshkey.rb +2 -2
  204. data/lib/puppet/type/tidy.rb +1 -1
  205. data/lib/puppet/type/user.rb +1 -1
  206. data/lib/puppet/type/yumrepo.rb +26 -5
  207. data/lib/puppet/util.rb +0 -4
  208. data/lib/puppet/util/backups.rb +1 -1
  209. data/lib/puppet/util/inifile.rb +3 -4
  210. data/lib/puppet/util/json.rb +68 -0
  211. data/lib/puppet/util/json_lockfile.rb +3 -3
  212. data/lib/puppet/util/log.rb +2 -5
  213. data/lib/puppet/util/log/destinations.rb +2 -2
  214. data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
  215. data/lib/puppet/util/plist.rb +1 -1
  216. data/lib/puppet/util/reference.rb +1 -8
  217. data/lib/puppet/util/tagging.rb +1 -1
  218. data/lib/puppet/util/warnings.rb +0 -2
  219. data/lib/puppet/util/windows/adsi.rb +15 -18
  220. data/lib/puppet/util/windows/com.rb +2 -1
  221. data/lib/puppet/util/windows/file.rb +2 -2
  222. data/lib/puppet/util/windows/principal.rb +7 -6
  223. data/lib/puppet/util/windows/sid.rb +60 -7
  224. data/lib/puppet/util/windows/taskscheduler.rb +0 -9
  225. data/lib/puppet/version.rb +1 -1
  226. data/lib/puppet_pal.rb +53 -48
  227. data/locales/ja/puppet.po +1357 -912
  228. data/locales/puppet.pot +549 -466
  229. data/man/man5/puppet.conf.5 +103 -20
  230. data/man/man8/puppet-agent.8 +6 -2
  231. data/man/man8/puppet-apply.8 +2 -2
  232. data/man/man8/puppet-ca.8 +1 -1
  233. data/man/man8/puppet-catalog.8 +1 -1
  234. data/man/man8/puppet-cert.8 +1 -1
  235. data/man/man8/puppet-certificate.8 +1 -1
  236. data/man/man8/puppet-certificate_request.8 +1 -1
  237. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  238. data/man/man8/puppet-config.8 +35 -1
  239. data/man/man8/puppet-describe.8 +1 -1
  240. data/man/man8/puppet-device.8 +33 -11
  241. data/man/man8/puppet-doc.8 +1 -1
  242. data/man/man8/puppet-epp.8 +34 -12
  243. data/man/man8/puppet-facts.8 +50 -1
  244. data/man/man8/puppet-filebucket.8 +38 -11
  245. data/man/man8/puppet-generate.8 +1 -1
  246. data/man/man8/puppet-help.8 +1 -1
  247. data/man/man8/puppet-key.8 +1 -1
  248. data/man/man8/puppet-lookup.8 +1 -1
  249. data/man/man8/puppet-man.8 +10 -4
  250. data/man/man8/puppet-master.8 +1 -1
  251. data/man/man8/puppet-module.8 +15 -6
  252. data/man/man8/puppet-node.8 +1 -1
  253. data/man/man8/puppet-parser.8 +31 -8
  254. data/man/man8/puppet-plugin.8 +1 -1
  255. data/man/man8/puppet-report.8 +1 -1
  256. data/man/man8/puppet-resource.8 +1 -1
  257. data/man/man8/puppet-script.8 +67 -0
  258. data/man/man8/puppet-status.8 +1 -1
  259. data/man/man8/puppet.8 +3 -3
  260. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet_x/awesome2/echo_scheme_handler.rb +1 -1
  261. data/spec/integration/application/apply_spec.rb +15 -15
  262. data/spec/integration/application/lookup_spec.rb +21 -0
  263. data/spec/integration/faces/config_spec.rb +16 -4
  264. data/spec/integration/network/http/api/indirected_routes_spec.rb +5 -5
  265. data/spec/integration/parser/catalog_spec.rb +1 -1
  266. data/spec/integration/parser/collection_spec.rb +2 -2
  267. data/spec/integration/parser/compiler_spec.rb +17 -18
  268. data/spec/integration/parser/pcore_resource_spec.rb +2 -2
  269. data/spec/integration/parser/scope_spec.rb +2 -2
  270. data/spec/integration/ssl/certificate_authority_spec.rb +7 -7
  271. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  272. data/spec/integration/ssl/key_spec.rb +1 -1
  273. data/spec/integration/transaction/report_spec.rb +3 -3
  274. data/spec/integration/transaction_spec.rb +0 -1
  275. data/spec/integration/type/file_spec.rb +10 -11
  276. data/spec/integration/type_spec.rb +1 -2
  277. data/spec/integration/util/windows/adsi_spec.rb +86 -1
  278. data/spec/integration/util/windows/principal_spec.rb +11 -2
  279. data/spec/integration/util/windows/security_spec.rb +2 -2
  280. data/spec/lib/matchers/json.rb +4 -4
  281. data/spec/lib/puppet_spec/language.rb +34 -35
  282. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
  283. data/spec/shared_behaviours/file_server_terminus.rb +0 -2
  284. data/spec/shared_behaviours/things_that_declare_options.rb +2 -2
  285. data/spec/spec_helper.rb +1 -1
  286. data/spec/unit/application/cert_spec.rb +21 -9
  287. data/spec/unit/application/device_spec.rb +96 -2
  288. data/spec/unit/application/face_base_spec.rb +2 -2
  289. data/spec/unit/application/lookup_spec.rb +0 -1
  290. data/spec/unit/configurer_spec.rb +14 -0
  291. data/spec/unit/confine_spec.rb +16 -0
  292. data/spec/unit/data_providers/hiera_data_provider_spec.rb +4 -4
  293. data/spec/unit/datatypes_spec.rb +49 -0
  294. data/spec/unit/environments_spec.rb +7 -0
  295. data/spec/unit/face/config_spec.rb +116 -12
  296. data/spec/unit/face/epp_face_spec.rb +53 -2
  297. data/spec/unit/face/facts_spec.rb +53 -0
  298. data/spec/unit/face/help_spec.rb +62 -69
  299. data/spec/unit/face/man_spec.rb +26 -0
  300. data/spec/unit/face/module/list_spec.rb +0 -1
  301. data/spec/unit/face/parser_spec.rb +78 -0
  302. data/spec/unit/file_bucket/dipper_spec.rb +0 -4
  303. data/spec/unit/file_serving/content_spec.rb +0 -1
  304. data/spec/unit/file_serving/fileset_spec.rb +0 -1
  305. data/spec/unit/file_serving/metadata_spec.rb +0 -1
  306. data/spec/unit/file_serving/terminus_selector_spec.rb +0 -2
  307. data/spec/unit/forge_spec.rb +1 -2
  308. data/spec/unit/functions/assert_type_spec.rb +1 -1
  309. data/spec/unit/functions/empty_spec.rb +77 -0
  310. data/spec/unit/functions/epp_spec.rb +1 -1
  311. data/spec/unit/functions/flatten_spec.rb +31 -0
  312. data/spec/unit/functions/include_spec.rb +2 -2
  313. data/spec/unit/functions/inline_epp_spec.rb +1 -1
  314. data/spec/unit/functions/join_spec.rb +33 -0
  315. data/spec/unit/functions/keys_spec.rb +31 -0
  316. data/spec/unit/functions/length_spec.rb +50 -0
  317. data/spec/unit/functions/lookup_fixture_spec.rb +1 -1
  318. data/spec/unit/functions/lookup_spec.rb +52 -0
  319. data/spec/unit/functions/shared.rb +1 -1
  320. data/spec/unit/functions/values_spec.rb +30 -0
  321. data/spec/unit/functions/versioncmp_spec.rb +1 -1
  322. data/spec/unit/functions4_spec.rb +30 -32
  323. data/spec/unit/graph/title_hash_prioritizer_spec.rb +2 -1
  324. data/spec/unit/indirector/catalog/compiler_spec.rb +0 -15
  325. data/spec/unit/indirector/facts/rest_spec.rb +45 -0
  326. data/spec/unit/indirector/facts/yaml_spec.rb +6 -0
  327. data/spec/unit/indirector/file_bucket_file/file_spec.rb +2 -2
  328. data/spec/unit/indirector/indirection_spec.rb +1 -1
  329. data/spec/unit/indirector/node/ldap_spec.rb +2 -2
  330. data/spec/unit/indirector/request_spec.rb +0 -2
  331. data/spec/unit/indirector/rest_spec.rb +2 -2
  332. data/spec/unit/indirector_spec.rb +0 -1
  333. data/spec/unit/info_service_spec.rb +1 -1
  334. data/spec/unit/interface/action_manager_spec.rb +1 -1
  335. data/spec/unit/interface/action_spec.rb +1 -1
  336. data/spec/unit/module_spec.rb +0 -5
  337. data/spec/unit/module_tool/applications/builder_spec.rb +1 -1
  338. data/spec/unit/module_tool/applications/unpacker_spec.rb +4 -4
  339. data/spec/unit/network/formats_spec.rb +5 -13
  340. data/spec/unit/network/http/api/indirected_routes_spec.rb +6 -2
  341. data/spec/unit/network/http/connection_spec.rb +1 -1
  342. data/spec/unit/network/http/handler_spec.rb +3 -2
  343. data/spec/unit/node/environment_spec.rb +1 -1
  344. data/spec/unit/node_spec.rb +3 -3
  345. data/spec/unit/parser/compiler_spec.rb +9 -2
  346. data/spec/unit/parser/environment_compiler_spec.rb +8 -8
  347. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  348. data/spec/unit/parser/functions/fail_spec.rb +1 -1
  349. data/spec/unit/parser/functions/fqdn_rand_spec.rb +24 -0
  350. data/spec/unit/parser/functions/realize_spec.rb +1 -1
  351. data/spec/unit/parser/resource_spec.rb +0 -1
  352. data/spec/unit/parser/scope_spec.rb +3 -3
  353. data/spec/unit/parser/type_loader_spec.rb +1 -1
  354. data/spec/unit/pops/adaptable_spec.rb +0 -1
  355. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +0 -3
  356. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +0 -4
  357. data/spec/unit/pops/factory_rspec_helper.rb +1 -1
  358. data/spec/unit/pops/factory_spec.rb +5 -5
  359. data/spec/unit/pops/issues_spec.rb +23 -8
  360. data/spec/unit/pops/loaders/loaders_spec.rb +24 -2
  361. data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
  362. data/spec/unit/pops/lookup/interpolation_spec.rb +5 -0
  363. data/spec/unit/pops/lookup/lookup_spec.rb +56 -0
  364. data/spec/unit/pops/model/pn_transformer_spec.rb +53 -0
  365. data/spec/unit/pops/parser/lexer2_spec.rb +14 -5
  366. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +9 -9
  367. data/spec/unit/pops/parser/parse_calls_spec.rb +1 -1
  368. data/spec/unit/pops/parser/parse_functions_spec.rb +1 -1
  369. data/spec/unit/pops/parser/parse_heredoc_spec.rb +3 -3
  370. data/spec/unit/pops/parser/parse_lambda_spec.rb +1 -1
  371. data/spec/unit/pops/parser/parse_resource_spec.rb +35 -35
  372. data/spec/unit/pops/parser/pn_parser_spec.rb +101 -0
  373. data/spec/unit/pops/pn_spec.rb +148 -0
  374. data/spec/unit/pops/types/iterable_spec.rb +1 -1
  375. data/spec/unit/pops/types/p_object_type_spec.rb +5 -5
  376. data/spec/unit/pops/types/p_timespan_type_spec.rb +11 -4
  377. data/spec/unit/pops/types/p_timestamp_type_spec.rb +9 -2
  378. data/spec/unit/pops/types/p_type_set_type_spec.rb +106 -2
  379. data/spec/unit/pops/types/ruby_generator_spec.rb +3 -8
  380. data/spec/unit/pops/types/string_converter_spec.rb +3 -3
  381. data/spec/unit/pops/types/type_calculator_spec.rb +1 -1
  382. data/spec/unit/pops/validator/validator_spec.rb +3 -1
  383. data/spec/unit/property_spec.rb +2 -2
  384. data/spec/unit/provider/aixobject_spec.rb +1 -1
  385. data/spec/unit/provider/cron/crontab_spec.rb +3 -3
  386. data/spec/unit/provider/exec/posix_spec.rb +6 -6
  387. data/spec/unit/provider/group/groupadd_spec.rb +4 -4
  388. data/spec/unit/provider/group/windows_adsi_spec.rb +79 -22
  389. data/spec/unit/provider/ldap_spec.rb +0 -1
  390. data/spec/unit/provider/nameservice_spec.rb +5 -5
  391. data/spec/unit/provider/package/rpm_spec.rb +3 -4
  392. data/spec/unit/provider/package/yum_spec.rb +6 -2
  393. data/spec/unit/provider/parsedfile_spec.rb +1 -1
  394. data/spec/unit/provider/service/base_spec.rb +2 -4
  395. data/spec/unit/provider/service/init_spec.rb +2 -2
  396. data/spec/unit/provider/service/openrc_spec.rb +2 -2
  397. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  398. data/spec/unit/provider/service/smf_spec.rb +2 -0
  399. data/spec/unit/provider/service/systemd_spec.rb +3 -3
  400. data/spec/unit/provider/service/upstart_spec.rb +7 -7
  401. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +0 -4
  402. data/spec/unit/provider/sshkey/parsed_spec.rb +0 -2
  403. data/spec/unit/provider/user/useradd_spec.rb +15 -9
  404. data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
  405. data/spec/unit/provider/yumrepo/inifile_spec.rb +76 -0
  406. data/spec/unit/puppet_pal_2pec.rb +4 -5
  407. data/spec/unit/resource/catalog_spec.rb +8 -3
  408. data/spec/unit/resource/status_spec.rb +15 -4
  409. data/spec/unit/resource/type_spec.rb +2 -3
  410. data/spec/unit/settings_spec.rb +9 -4
  411. data/spec/unit/ssl/certificate_authority_spec.rb +1 -9
  412. data/spec/unit/ssl/certificate_request_spec.rb +1 -2
  413. data/spec/unit/transaction/report_spec.rb +41 -0
  414. data/spec/unit/transaction_spec.rb +1 -1
  415. data/spec/unit/type/exec_spec.rb +7 -9
  416. data/spec/unit/type/file/selinux_spec.rb +0 -1
  417. data/spec/unit/type/file_spec.rb +4 -3
  418. data/spec/unit/type/k5login_spec.rb +79 -10
  419. data/spec/unit/type/mount_spec.rb +1 -1
  420. data/spec/unit/type/nagios_spec.rb +6 -6
  421. data/spec/unit/type/user_spec.rb +1 -1
  422. data/spec/unit/type/yumrepo_spec.rb +18 -0
  423. data/spec/unit/type/zfs_spec.rb +1 -1
  424. data/spec/unit/type_spec.rb +14 -15
  425. data/spec/unit/util/docs_spec.rb +1 -1
  426. data/spec/unit/util/execution_spec.rb +0 -1
  427. data/spec/unit/util/inifile_spec.rb +35 -4
  428. data/spec/unit/util/log/destinations_spec.rb +2 -2
  429. data/spec/unit/util/log_spec.rb +6 -5
  430. data/spec/unit/util/network_device/cisco/device_spec.rb +2 -2
  431. data/spec/unit/util/plist_spec.rb +3 -3
  432. data/spec/unit/util/selinux_spec.rb +2 -2
  433. data/spec/unit/util/tagging_spec.rb +1 -7
  434. data/spec/unit/util/windows/adsi_spec.rb +31 -27
  435. data/spec/unit/util/windows/sid_spec.rb +86 -15
  436. data/spec/unit/util_spec.rb +2 -2
  437. data/spec/watchr.rb +0 -1
  438. data/tasks/benchmark.rake +37 -0
  439. data/tasks/manpages.rake +1 -1
  440. metadata +83 -11
  441. checksums.yaml +0 -7
@@ -50,7 +50,9 @@ Puppet::Functions.create_function(:eyaml_lookup_key) do
50
50
  if data.is_a?(Hash)
51
51
  Puppet::Pops::Lookup::HieraConfig.symkeys_to_string(data)
52
52
  else
53
- Puppet.warning(_("%{path}: file does not contain a valid yaml hash") % { path: path })
53
+ msg = _("%{path}: file does not contain a valid yaml hash") % { path: path }
54
+ raise Puppet::DataBinding::LookupError, msg if Puppet[:strict] == :error && data != false
55
+ Puppet.warning(msg)
54
56
  {}
55
57
  end
56
58
  rescue YAML::SyntaxError => ex
@@ -21,19 +21,19 @@
21
21
  #
22
22
  # @example Using the `filter` function with an array and a one-parameter lambda
23
23
  #
24
- # ~~~ puppet
24
+ # ```puppet
25
25
  # # For the array $data, return an array containing the values that end with "berry"
26
26
  # $data = ["orange", "blueberry", "raspberry"]
27
27
  # $filtered_data = $data.filter |$items| { $items =~ /berry$/ }
28
28
  # # $filtered_data = [blueberry, raspberry]
29
- # ~~~
29
+ # ```
30
30
  #
31
31
  # When the first argument is a hash, Puppet passes each key and value pair to the lambda
32
32
  # as an array in the form `[key, value]` and returns a hash containing the results.
33
33
  #
34
34
  # @example Using the `filter` function with a hash and a one-parameter lambda
35
35
  #
36
- # ~~~ puppet
36
+ # ```puppet
37
37
  # # For the hash $data, return a hash containing all values of keys that end with "berry"
38
38
  # $data = { "orange" => 0, "blueberry" => 1, "raspberry" => 2 }
39
39
  # $filtered_data = $data.filter |$items| { $items[0] =~ /berry$/ }
@@ -45,26 +45,26 @@
45
45
  #
46
46
  # @example Using the `filter` function with an array and a two-parameter lambda
47
47
  #
48
- # ~~~ puppet
48
+ # ```puppet
49
49
  # # For the array $data, return an array of all keys that both end with "berry" and have
50
50
  # # an even-numbered index
51
51
  # $data = ["orange", "blueberry", "raspberry"]
52
52
  # $filtered_data = $data.filter |$indexes, $values| { $indexes % 2 == 0 and $values =~ /berry$/ }
53
53
  # # $filtered_data = [raspberry]
54
- # ~~~
54
+ # ```
55
55
  #
56
56
  # When the first argument is a hash, Puppet passes its keys to the first parameter and its
57
57
  # values to the second parameter.
58
58
  #
59
59
  # @example Using the `filter` function with a hash and a two-parameter lambda
60
60
  #
61
- # ~~~ puppet
61
+ # ```puppet
62
62
  # # For the hash $data, return a hash of all keys that both end with "berry" and have
63
63
  # # values less than or equal to 1
64
64
  # $data = { "orange" => 0, "blueberry" => 1, "raspberry" => 2 }
65
65
  # $filtered_data = $data.filter |$keys, $values| { $keys =~ /berry$/ and $values <= 1 }
66
66
  # # $filtered_data = {blueberry => 1}
67
- # ~~~
67
+ # ```
68
68
  #
69
69
  # @since 4.0.0
70
70
  #
@@ -1,5 +1,19 @@
1
1
  # Finds an existing file from a module and returns its path.
2
- # (Documented in 3.x stub)
2
+ #
3
+ # The argument to this function should be a String as a `<MODULE NAME>/<FILE>`
4
+ # reference, which will search for `<FILE>` relative to a module's `files`
5
+ # directory. (For example, the reference `mysql/mysqltuner.pl` will search for the
6
+ # file `<MODULES DIRECTORY>/mysql/files/mysqltuner.pl`.)
7
+ #
8
+ # This function can also accept:
9
+ #
10
+ # * An absolute String path, which will check for the existence of a file from anywhere on disk.
11
+ # * Multiple String arguments, which will return the path of the **first** file
12
+ # found, skipping non existing files.
13
+ # * An array of string paths, which will return the path of the **first** file
14
+ # found from the given paths in the array, skipping non existing files.
15
+ #
16
+ # The function returns `undef` if none of the given paths were found
3
17
  #
4
18
  # @since 4.8.0
5
19
  #
@@ -0,0 +1,64 @@
1
+ # Returns a flat Array produced from its possibly deeply nested given arguments.
2
+ #
3
+ # One or more arguments of any data type can be given to this function.
4
+ # The result is always a flat array representation where any nested arrays are recursively flattened.
5
+ #
6
+ # @example Typical use of `flatten()`
7
+ #
8
+ # ```puppet
9
+ # flatten(['a', ['b', ['c']]])
10
+ # # Would return: ['a','b','c']
11
+ # ```
12
+ #
13
+ # To flatten other kinds of iterables (for example hashes, or intermediate results like from a `reverse_each`)
14
+ # first convert the result to an array using `Array($x)`, or `$x.convert_to(Array)`. See the `new` function
15
+ # for details and options when performing a conversion.
16
+ #
17
+ # @example Flattening a Hash
18
+ #
19
+ # ```puppet
20
+ # $hsh = { a => 1, b => 2}
21
+ #
22
+ # # -- without conversion
23
+ # $hsh.flatten()
24
+ # # Would return [{a => 1, b => 2}]
25
+ #
26
+ # # -- with conversion
27
+ # $hsh.convert_to(Array).flatten()
28
+ # # Would return [a,1,b,2]
29
+ #
30
+ # flatten(Array($hsh))
31
+ # # Would also return [a,1,b,2]
32
+ # ```
33
+ #
34
+ # @example Flattening and concatenating at the same time
35
+ #
36
+ # ```puppet
37
+ # $a1 = [1, [2, 3]]
38
+ # $a2 = [[4,[5,6]]
39
+ # $x = 7
40
+ # flatten($a1, $a2, $x)
41
+ # # would return [1,2,3,4,5,6,7]
42
+ # ```
43
+ #
44
+ # @example Transforming to Array if not already an Array
45
+ #
46
+ # ```puppet
47
+ # flatten(42)
48
+ # # Would return [42]
49
+ #
50
+ # flatten([42])
51
+ # # Would also return [42]
52
+ # ```
53
+ #
54
+ # @since 5.5.0 support for flattening and concatenating at the same time
55
+ #
56
+ Puppet::Functions.create_function(:flatten) do
57
+ dispatch :flatten_args do
58
+ repeated_param 'Any', :args
59
+ end
60
+
61
+ def flatten_args(*args)
62
+ args.flatten()
63
+ end
64
+ end
@@ -25,7 +25,7 @@ require 'hiera/puppet_function'
25
25
  #
26
26
  # @example Using `hiera`
27
27
  #
28
- # ~~~ yaml
28
+ # ```yaml
29
29
  # # Assuming hiera.yaml
30
30
  # # :hierarchy:
31
31
  # # - web01.example.com
@@ -44,16 +44,16 @@ require 'hiera/puppet_function'
44
44
  # regular:
45
45
  # - "Iris Jackson"
46
46
  # - "Kelly Lambert"
47
- # ~~~
47
+ # ```
48
48
  #
49
- # ~~~ puppet
49
+ # ```puppet
50
50
  # # Assuming we are not web01.example.com:
51
51
  #
52
52
  # $users = hiera('users', undef)
53
53
  #
54
54
  # # $users contains {admins => ["Edith Franklin", "Ginny Hamilton"],
55
55
  # # regular => ["Iris Jackson", "Kelly Lambert"]}
56
- # ~~~
56
+ # ```
57
57
  #
58
58
  # You can optionally generate the default value with a
59
59
  # [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) that
@@ -61,7 +61,7 @@ require 'hiera/puppet_function'
61
61
  #
62
62
  # @example Using `hiera` with a lambda
63
63
  #
64
- # ~~~ puppet
64
+ # ```puppet
65
65
  # # Assuming the same Hiera data as the previous example:
66
66
  #
67
67
  # $users = hiera('users') | $key | { "Key \'${key}\' not found" }
@@ -70,7 +70,7 @@ require 'hiera/puppet_function'
70
70
  # # regular => ["Iris Jackson", "Kelly Lambert"]}
71
71
  # # If hiera couldn't match its key, it would return the lambda result,
72
72
  # # "Key 'users' not found".
73
- # ~~~
73
+ # ```
74
74
  #
75
75
  # The returned value's data type depends on the types of the results. In the example
76
76
  # above, Hiera matches the 'users' key and returns it as a hash.
@@ -24,7 +24,7 @@ require 'hiera/puppet_function'
24
24
  #
25
25
  # @example Using `hiera_array`
26
26
  #
27
- # ~~~ yaml
27
+ # ```yaml
28
28
  # # Assuming hiera.yaml
29
29
  # # :hierarchy:
30
30
  # # - web01.example.com
@@ -37,13 +37,13 @@ require 'hiera/puppet_function'
37
37
  #
38
38
  # # Assuming web01.example.com.yaml:
39
39
  # # users: 'abarry = admin'
40
- # ~~~
40
+ # ```
41
41
  #
42
- # ~~~ puppet
42
+ # ```puppet
43
43
  # $allusers = hiera_array('users', undef)
44
44
  #
45
45
  # # $allusers contains ["cdouglas = regular", "efranklin = regular", "abarry = admin"].
46
- # ~~~
46
+ # ```
47
47
  #
48
48
  # You can optionally generate the default value with a
49
49
  # [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) that
@@ -51,7 +51,7 @@ require 'hiera/puppet_function'
51
51
  #
52
52
  # @example Using `hiera_array` with a lambda
53
53
  #
54
- # ~~~ puppet
54
+ # ```puppet
55
55
  # # Assuming the same Hiera data as the previous example:
56
56
  #
57
57
  # $allusers = hiera_array('users') | $key | { "Key \'${key}\' not found" }
@@ -59,7 +59,7 @@ require 'hiera/puppet_function'
59
59
  # # $allusers contains ["cdouglas = regular", "efranklin = regular", "abarry = admin"].
60
60
  # # If hiera_array couldn't match its key, it would return the lambda result,
61
61
  # # "Key 'users' not found".
62
- # ~~~
62
+ # ```
63
63
  #
64
64
  # `hiera_array` expects that all values returned will be strings or arrays. If any matched
65
65
  # value is a hash, Puppet raises a type mismatch error.
@@ -29,7 +29,7 @@ require 'hiera/puppet_function'
29
29
  #
30
30
  # @example Using `hiera_hash`
31
31
  #
32
- # ~~~ yaml
32
+ # ```yaml
33
33
  # # Assuming hiera.yaml
34
34
  # # :hierarchy:
35
35
  # # - web01.example.com
@@ -44,16 +44,16 @@ require 'hiera/puppet_function'
44
44
  # # users:
45
45
  # # administrators:
46
46
  # # 'aberry': 'Amy Berry'
47
- # ~~~
47
+ # ```
48
48
  #
49
- # ~~~ puppet
49
+ # ```puppet
50
50
  # # Assuming we are not web01.example.com:
51
51
  #
52
52
  # $allusers = hiera_hash('users', undef)
53
53
  #
54
54
  # # $allusers contains {regular => {"cdouglas" => "Carrie Douglas"},
55
55
  # # administrators => {"aberry" => "Amy Berry"}}
56
- # ~~~
56
+ # ```
57
57
  #
58
58
  # You can optionally generate the default value with a
59
59
  # [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) that
@@ -61,7 +61,7 @@ require 'hiera/puppet_function'
61
61
  #
62
62
  # @example Using `hiera_hash` with a lambda
63
63
  #
64
- # ~~~ puppet
64
+ # ```puppet
65
65
  # # Assuming the same Hiera data as the previous example:
66
66
  #
67
67
  # $allusers = hiera_hash('users') | $key | { "Key \'${key}\' not found" }
@@ -70,7 +70,7 @@ require 'hiera/puppet_function'
70
70
  # # administrators => {"aberry" => "Amy Berry"}}
71
71
  # # If hiera_hash couldn't match its key, it would return the lambda result,
72
72
  # # "Key 'users' not found".
73
- # ~~~
73
+ # ```
74
74
  #
75
75
  # `hiera_hash` expects that all values returned will be hashes. If any of the values
76
76
  # found in the data sources are strings or arrays, Puppet raises a type mismatch error.
@@ -11,10 +11,10 @@ require 'hiera/puppet_function'
11
11
  #
12
12
  # @example Using `lookup` and `include` instead of of the deprecated `hiera_include`
13
13
  #
14
- # ~~~puppet
14
+ # ```puppet
15
15
  # # In site.pp, outside of any node definitions and below any top-scope variables:
16
16
  # lookup('classes', Array[String], 'unique').include
17
- # ~~~
17
+ # ```
18
18
  #
19
19
  # The `hiera_include` function requires:
20
20
  #
@@ -43,7 +43,7 @@ require 'hiera/puppet_function'
43
43
  #
44
44
  # @example Using `hiera_include`
45
45
  #
46
- # ~~~ yaml
46
+ # ```yaml
47
47
  # # Assuming hiera.yaml
48
48
  # # :hierarchy:
49
49
  # # - web01.example.com
@@ -56,14 +56,14 @@ require 'hiera/puppet_function'
56
56
  # # Assuming common.yaml:
57
57
  # # classes:
58
58
  # # - apache
59
- # ~~~
59
+ # ```
60
60
  #
61
- # ~~~ puppet
61
+ # ```puppet
62
62
  # # In site.pp, outside of any node definitions and below any top-scope variables:
63
63
  # hiera_include('classes', undef)
64
64
  #
65
65
  # # Puppet assigns the apache and apache::mod::php classes to the web01.example.com node.
66
- # ~~~
66
+ # ```
67
67
  #
68
68
  # You can optionally generate the default value with a
69
69
  # [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) that
@@ -71,7 +71,7 @@ require 'hiera/puppet_function'
71
71
  #
72
72
  # @example Using `hiera_include` with a lambda
73
73
  #
74
- # ~~~ puppet
74
+ # ```puppet
75
75
  # # Assuming the same Hiera data as the previous example:
76
76
  #
77
77
  # # In site.pp, outside of any node definitions and below any top-scope variables:
@@ -80,7 +80,7 @@ require 'hiera/puppet_function'
80
80
  # # Puppet assigns the apache and apache::mod::php classes to the web01.example.com node.
81
81
  # # If hiera_include couldn't match its key, it would return the lambda result,
82
82
  # # "Key 'classes' not found".
83
- # ~~~
83
+ # ```
84
84
  #
85
85
  # See
86
86
  # [the 'Using the lookup function' documentation](https://docs.puppet.com/puppet/latest/hiera_use_function.html) for how to perform lookup of data.
@@ -1,5 +1,31 @@
1
- # Include the specified classes
2
- # For documentation see the 3.x stub
1
+ # Declares one or more classes, causing the resources in them to be
2
+ # evaluated and added to the catalog. Accepts a class name, an array of class
3
+ # names, or a comma-separated list of class names.
4
+ #
5
+ # The `include` function can be used multiple times on the same class and will
6
+ # only declare a given class once. If a class declared with `include` has any
7
+ # parameters, Puppet will automatically look up values for them in Hiera, using
8
+ # `<class name>::<parameter name>` as the lookup key.
9
+ #
10
+ # Contrast this behavior with resource-like class declarations
11
+ # (`class {'name': parameter => 'value',}`), which must be used in only one place
12
+ # per class and can directly set parameters. You should avoid using both `include`
13
+ # and resource-like declarations with the same class.
14
+ #
15
+ # The `include` function does not cause classes to be contained in the class
16
+ # where they are declared. For that, see the `contain` function. It also
17
+ # does not create a dependency relationship between the declared class and the
18
+ # surrounding class; for that, see the `require` function.
19
+ #
20
+ # You must use the class's full name;
21
+ # relative names are not allowed. In addition to names in string form,
22
+ # you may also directly use `Class` and `Resource` `Type`-values that are produced by
23
+ # the resource and relationship expressions.
24
+ #
25
+ # - Since < 3.0.0
26
+ # - Since 4.0.0 support for class and resource type values, absolute names
27
+ # - Since 4.7.0 returns an `Array[Type[Class]]` of all included classes
28
+ #
3
29
  Puppet::Functions.create_function(:include, Puppet::Functions::InternalFunction) do
4
30
  dispatch :include do
5
31
  scope_param
@@ -1,4 +1,4 @@
1
- # Log a message on the server at level info.
1
+ # Logs a message on the server at level `info`.
2
2
  Puppet::Functions.create_function(:info, Puppet::Functions::InternalFunction) do
3
3
  # @param values The values to log.
4
4
  # @return [Undef]
@@ -35,13 +35,13 @@
35
35
  # For example, to evaluate an inline EPP template using a heredoc, call the
36
36
  # `inline_epp` function like this:
37
37
  #
38
- # ~~~ puppet
38
+ # ```puppet
39
39
  # # Outputs 'Hello given argument planet!'
40
40
  # inline_epp(@(END), { x => 'given argument' })
41
41
  # <%- | $x, $y = planet | -%>
42
42
  # Hello <%= $x %> <%= $y %>!
43
43
  # END
44
- # ~~~
44
+ # ```
45
45
  #
46
46
  # @since 4.0.0
47
47
  #
@@ -0,0 +1,56 @@
1
+ # Joins the values of an Array into a string with elements separated by a delimiter.
2
+ #
3
+ # Supports up to two arguments
4
+ # * **values** - first argument is required and must be an an `Array`
5
+ # * **delimiter** - second arguments is the delimiter between elements, must be a `String` if given, and defaults to an empty string.
6
+ #
7
+ # @example Typical use of `join`
8
+ #
9
+ # ```puppet
10
+ # join(['a','b','c'], ",")
11
+ # # Would result in: "a,b,c"
12
+ # ```
13
+ #
14
+ # Note that array is flattened before elements are joined, but flattening does not extend to arrays nested in hashes or other objects.
15
+ #
16
+ # @example Arrays nested in hashes are not joined
17
+ #
18
+ # ```puppet
19
+ # $a = [1,2, undef, 'hello', [x,y,z], {a => 2, b => [3, 4]}]
20
+ # notice join($a, ', ')
21
+ #
22
+ # # would result in noticing:
23
+ # # 1, 2, , hello, x, y, z, {"a"=>2, "b"=>[3, 4]}
24
+ # ```
25
+ #
26
+ # For joining iterators and other containers of elements a conversion must first be made to
27
+ # an `Array`. The reason for this is that there are many options how such a conversion should
28
+ # be made.
29
+ #
30
+ # @example Joining the result of a reverse_each converted to an array
31
+ #
32
+ # ```puppet
33
+ # [1,2,3].reverse_each.convert_to(Array).join(', ')
34
+ # # would result in: "3, 2, 1"
35
+ # ```
36
+ # @example Joining a hash
37
+ #
38
+ # ```puppet
39
+ # {a => 1, b => 2}.convert_to(Array).join(', ')
40
+ # # would result in "a, 1, b, 2"
41
+ # ```
42
+ #
43
+ # For more detailed control over the formatting (including indentations and line breaks, delimiters around arrays
44
+ # and hash entries, between key/values in hash entries, and individual formatting of values in the array)
45
+ # see the `new` function for `String` and its formatting options for `Array` and `Hash`.
46
+ #
47
+ Puppet::Functions.create_function(:join) do
48
+ dispatch :join do
49
+ param 'Array', :arg
50
+ optional_param 'String', :delimiter
51
+ end
52
+
53
+ def join(arg, delimiter = '', puppet_formatting = false)
54
+ arg.join(delimiter)
55
+ end
56
+ end