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
data/lib/puppet/type.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require 'puppet'
2
3
  require 'puppet/util/log'
3
4
  require 'puppet/util/metric'
@@ -106,6 +107,24 @@ class Type
106
107
  attr_reader :properties
107
108
  end
108
109
 
110
+ # Allow declaring that a type is actually a capability
111
+ class << self
112
+ attr_accessor :is_capability
113
+
114
+ def is_capability?
115
+ is_capability
116
+ end
117
+ end
118
+
119
+ # Returns whether this type represents an application instance; since
120
+ # only defined types, i.e., instances of Puppet::Resource::Type can
121
+ # represent application instances, this implementation always returns
122
+ # +false+. Having this method though makes code checking whether a
123
+ # resource is an application instance simpler
124
+ def self.application?
125
+ false
126
+ end
127
+
109
128
  # Returns all the attribute names of the type in the appropriate order.
110
129
  # The {key_attributes} come first, then the {provider}, then the {properties}, and finally
111
130
  # the {parameters} and {metaparams},
@@ -639,7 +658,7 @@ class Type
639
658
  def []=(name,value)
640
659
  name = name.intern
641
660
 
642
- fail("Invalid parameter #{name}") unless self.class.validattr?(name)
661
+ fail("no parameter named '#{name}'") unless self.class.validattr?(name)
643
662
 
644
663
  if name == :name && nv = name_var
645
664
  name = nv
@@ -1539,7 +1558,7 @@ class Type
1539
1558
 
1540
1559
  newmetaparam(:require, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :NONE}) do
1541
1560
  desc "One or more resources that this resource depends on, expressed as
1542
- [resource references](http://docs.puppetlabs.com/puppet/latest/reference/lang_datatypes.html#resource-references).
1561
+ [resource references](http://docs.puppetlabs.com/puppet/latest/reference/lang_data_resource_reference.html).
1543
1562
  Multiple resources can be specified as an array of references. When this
1544
1563
  attribute is present:
1545
1564
 
@@ -1553,7 +1572,7 @@ class Type
1553
1572
 
1554
1573
  newmetaparam(:subscribe, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :ALL_EVENTS, :callback => :refresh}) do
1555
1574
  desc "One or more resources that this resource depends on, expressed as
1556
- [resource references](http://docs.puppetlabs.com/puppet/latest/reference/lang_datatypes.html#resource-references).
1575
+ [resource references](http://docs.puppetlabs.com/puppet/latest/reference/lang_data_resource_reference.html).
1557
1576
  Multiple resources can be specified as an array of references. When this
1558
1577
  attribute is present:
1559
1578
 
@@ -1571,7 +1590,7 @@ class Type
1571
1590
 
1572
1591
  newmetaparam(:before, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :NONE}) do
1573
1592
  desc "One or more resources that depend on this resource, expressed as
1574
- [resource references](http://docs.puppetlabs.com/puppet/latest/reference/lang_datatypes.html#resource-references).
1593
+ [resource references](http://docs.puppetlabs.com/puppet/latest/reference/lang_data_resource_reference.html).
1575
1594
  Multiple resources can be specified as an array of references. When this
1576
1595
  attribute is present:
1577
1596
 
@@ -1585,7 +1604,7 @@ class Type
1585
1604
 
1586
1605
  newmetaparam(:notify, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :ALL_EVENTS, :callback => :refresh}) do
1587
1606
  desc "One or more resources that depend on this resource, expressed as
1588
- [resource references](http://docs.puppetlabs.com/puppet/latest/reference/lang_datatypes.html#resource-references).
1607
+ [resource references](http://docs.puppetlabs.com/puppet/latest/reference/lang_data_resource_reference.html).
1589
1608
  Multiple resources can be specified as an array of references. When this
1590
1609
  attribute is present:
1591
1610
 
@@ -1628,6 +1647,57 @@ class Type
1628
1647
  }
1629
1648
  end
1630
1649
 
1650
+ newmetaparam(:export, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :NONE}) do
1651
+ desc <<EOS
1652
+ Export a capability resource.
1653
+
1654
+ The value of this parameter must be a reference to a capability resource,
1655
+ or an array of such references. Each capability resource referenced here
1656
+ will be instantiated in the node catalog and exported to consumers of this
1657
+ resource. The title of the capability resource will be the title given in
1658
+ the reference, and all other attributes of the resource will be filled
1659
+ according to the corresponding produces statement.
1660
+
1661
+ It is an error if this metaparameter references resources whose type is not
1662
+ a capability type, or of there is no produces clause for the type of the
1663
+ current resource and the capability resource mentioned in this parameter.
1664
+
1665
+ For example:
1666
+
1667
+ define web(..) { .. }
1668
+ Web produces Http { .. }
1669
+ web { server:
1670
+ export => Http[main_server]
1671
+ }
1672
+ EOS
1673
+ end
1674
+
1675
+ newmetaparam(:consume, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :NONE}) do
1676
+ desc <<EOS
1677
+ Consume a capability resource.
1678
+
1679
+ The value of this parameter must be a reference to a capability resource,
1680
+ or an array of such references. Each capability resource referenced here
1681
+ must have been exported by another resource in the same environment.
1682
+
1683
+ The referenced capability resource(s) will be looked up, added to the
1684
+ current node catalog, and processed following the underlying consumes
1685
+ clause.
1686
+
1687
+ It is an error if this metaparameter references resources whose type is not
1688
+ a capability type, or of there is no consumes clause for the type of the
1689
+ current resource and the capability resource mentioned in this parameter.
1690
+
1691
+ For example:
1692
+
1693
+ define web(..) { .. }
1694
+ Web consumes Sql { .. }
1695
+ web { server:
1696
+ consume => Sql[my_db]
1697
+ }
1698
+ EOS
1699
+ end
1700
+
1631
1701
  ###############################
1632
1702
  # All of the provider plumbing for the resource types.
1633
1703
  require 'puppet/provider'
@@ -1795,7 +1865,7 @@ class Type
1795
1865
  def self.providify
1796
1866
  return if @paramhash.has_key? :provider
1797
1867
 
1798
- newparam(:provider) do
1868
+ param = newparam(:provider) do
1799
1869
  # We're using a hacky way to get the name of our type, since there doesn't
1800
1870
  # seem to be a correct way to introspect this at the time this code is run.
1801
1871
  # We expect that the class in which this code is executed will be something
@@ -1855,7 +1925,8 @@ class Type
1855
1925
  provider
1856
1926
  end
1857
1927
  end
1858
- end.parenttype = self
1928
+ end
1929
+ param.parenttype = self
1859
1930
  end
1860
1931
 
1861
1932
  # @todo this needs a better explanation
@@ -117,6 +117,10 @@ module Puppet
117
117
  configured_environment.each_plugin_directory do |dir|
118
118
  $LOAD_PATH << dir unless $LOAD_PATH.include?(dir)
119
119
  end
120
+
121
+ # Puppet requires Facter, which initializes its lookup paths. Reset Facter to
122
+ # pickup the new $LOAD_PATH.
123
+ Facter.reset
120
124
  end
121
125
  end
122
126
 
@@ -1,3 +1,4 @@
1
+ require 'timeout'
1
2
  require 'puppet/file_system/uniquefile'
2
3
 
3
4
  module Puppet
@@ -192,8 +193,23 @@ module Puppet::Util::Execution
192
193
  if execution_stub = Puppet::Util::ExecutionStub.current_value
193
194
  return execution_stub.call(*exec_args)
194
195
  elsif Puppet.features.posix?
195
- child_pid = execute_posix(*exec_args)
196
- exit_status = Process.waitpid2(child_pid).last.exitstatus
196
+ child_pid = nil
197
+ begin
198
+ child_pid = execute_posix(*exec_args)
199
+ exit_status = Process.waitpid2(child_pid).last.exitstatus
200
+ child_pid = nil
201
+ rescue Timeout::Error => e
202
+ # NOTE: For Ruby 2.1+, an explicit Timeout::Error class has to be
203
+ # passed to Timeout.timeout in order for there to be something for
204
+ # this block to rescue.
205
+ unless child_pid.nil?
206
+ Process.kill(:TERM, child_pid)
207
+ # Spawn a thread to reap the process if it dies.
208
+ Thread.new { Process.waitpid(child_pid) }
209
+ end
210
+
211
+ raise e
212
+ end
197
213
  elsif Puppet.features.microsoft_windows?
198
214
  process_info = execute_windows(*exec_args)
199
215
  begin
@@ -18,8 +18,10 @@ module Puppet::Util::Tagging
18
18
  if @tags.add?(name)
19
19
  # not seen before, so now we test if it is valid
20
20
  if name =~ ValidTagRegex
21
+ if split_qualified_tags?
21
22
  # avoid adding twice by first testing if the string contains '::'
22
- @tags.merge(name.split('::')) if name.include?('::')
23
+ @tags.merge(name.split('::')) if name.include?('::')
24
+ end
23
25
  else
24
26
  @tags.delete(name)
25
27
  fail(Puppet::ParseError, "Invalid tag '#{name}'")
@@ -106,6 +108,10 @@ module Puppet::Util::Tagging
106
108
 
107
109
  private
108
110
 
111
+ def split_qualified_tags?
112
+ true
113
+ end
114
+
109
115
  def new_tags
110
116
  Puppet::Util::TagSet.new
111
117
  end
@@ -214,8 +214,11 @@ module Puppet::Util::Windows::ADSI
214
214
  end
215
215
 
216
216
  def password=(password)
217
- native_user.SetPassword(password)
218
- commit
217
+ if !password.nil?
218
+ native_user.SetPassword(password)
219
+ commit
220
+ end
221
+
219
222
  fADS_UF_DONT_EXPIRE_PASSWD = 0x10000
220
223
  add_flag("UserFlags", fADS_UF_DONT_EXPIRE_PASSWD)
221
224
  end
@@ -352,7 +352,10 @@ module Puppet::Util::Windows::Security
352
352
  dacl.allow(well_known_nobody_sid, nobody_allow)
353
353
 
354
354
  # TODO: system should be first?
355
- dacl.allow(well_known_system_sid, system_allow)
355
+ flags = !isdir ? 0 :
356
+ Puppet::Util::Windows::AccessControlEntry::CONTAINER_INHERIT_ACE |
357
+ Puppet::Util::Windows::AccessControlEntry::OBJECT_INHERIT_ACE
358
+ dacl.allow(well_known_system_sid, system_allow, flags)
356
359
 
357
360
  # add inherit-only aces for child dirs and files that are created within the dir
358
361
  inherit_only = Puppet::Util::Windows::AccessControlEntry::INHERIT_ONLY_ACE
@@ -809,7 +809,7 @@ module Win32
809
809
  # Returns whether or not the scheduled task exists.
810
810
  def exists?(job_name)
811
811
  bool = false
812
- Dir.foreach('C:/Windows/Tasks'){ |file|
812
+ Dir.foreach("#{ENV['SystemRoot']}/Tasks"){ |file|
813
813
  if File.basename(file, '.job') == job_name
814
814
  bool = true
815
815
  break
data/lib/puppet/util.rb CHANGED
@@ -260,7 +260,15 @@ module Util
260
260
  $stdout.reopen(stdout)
261
261
  $stderr.reopen(stderr)
262
262
 
263
- 3.upto(256){|fd| IO::new(fd).close rescue nil}
263
+ begin
264
+ Dir.foreach('/proc/self/fd') do |f|
265
+ if f != '.' && f != '..' && f.to_i >= 3
266
+ IO::new(f.to_i).close rescue nil
267
+ end
268
+ end
269
+ rescue Errno::ENOENT # /proc/self/fd not found
270
+ 3.upto(256){|fd| IO::new(fd).close rescue nil}
271
+ end
264
272
 
265
273
  block.call if block
266
274
  end
@@ -7,7 +7,7 @@
7
7
 
8
8
 
9
9
  module Puppet
10
- PUPPETVERSION = '4.2.0'
10
+ PUPPETVERSION = '4.3.0'
11
11
 
12
12
  ##
13
13
  # version is a public API method intended to always provide a fast and
data/lib/puppet.rb CHANGED
@@ -223,6 +223,18 @@ module Puppet
223
223
  @context.override(bindings, description, &block)
224
224
  end
225
225
 
226
+ # @param name The name of a context key to ignore; intended for test usage.
227
+ # @api private
228
+ def self.ignore(name)
229
+ @context.ignore(name)
230
+ end
231
+
232
+ # @param name The name of a previously ignored context key to restore; intended for test usage.
233
+ # @api private
234
+ def self.restore(name)
235
+ @context.restore(name)
236
+ end
237
+
226
238
  # @api private
227
239
  def self.mark_context(name)
228
240
  @context.mark(name)
@@ -0,0 +1,3 @@
1
+ ---
2
+ a: This is A
3
+ b: This is B
@@ -0,0 +1 @@
1
+ environment_data_provider = 'hiera'
@@ -0,0 +1,3 @@
1
+ {
2
+ "test::param_a": "env data param_a is 10",
3
+ }
@@ -0,0 +1,2 @@
1
+ # Use the 'sample' env data provider (in this fixture)
2
+ environment_data_provider=hiera
@@ -0,0 +1,5 @@
1
+ ---
2
+ :version: 4
3
+ :hierarchy:
4
+ - :name: "bad"
5
+ :backend: json
@@ -0,0 +1,5 @@
1
+ class test($param_a) {
2
+ notify { "$param_a": }
3
+ }
4
+
5
+ include test
@@ -0,0 +1,3 @@
1
+ ---
2
+ {
3
+ one::test::param_c: env data param_c is 300
@@ -0,0 +1,2 @@
1
+ # Use the 'sample' env data provider (in this fixture)
2
+ environment_data_provider=hiera
@@ -0,0 +1,5 @@
1
+ ---
2
+ :version: 4
3
+ :hierarchy:
4
+ - :name: "bad"
5
+ :backend: yaml
@@ -0,0 +1,5 @@
1
+ class test($param_a) {
2
+ notify { "$param_a": }
3
+ }
4
+
5
+ include test
@@ -0,0 +1,2 @@
1
+ ---
2
+ one::test::param_c: env data param_c is 300
@@ -0,0 +1,2 @@
1
+ # Use the 'sample' env data provider (in this fixture)
2
+ environment_data_provider=hiera
@@ -0,0 +1,2 @@
1
+ ---
2
+ one::test::param_a: module data param_a is 100
@@ -0,0 +1,5 @@
1
+ class one {
2
+ class test($param_a = "param default is 100", $param_b = "param default is 200", $param_c = "param default is 300") {
3
+ notify { "$param_a, $param_b, $param_c": }
4
+ }
5
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "example/one",
3
+ "version": "0.0.2",
4
+ "source": "git@github.com/example/example-one.git",
5
+ "dependencies": [],
6
+ "author": "Bob the Builder",
7
+ "license": "Apache-2.0",
8
+ "data_provider": "hiera"
9
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "test::param_a": "env data param_a is 10"
3
+ }
@@ -0,0 +1,2 @@
1
+ ---
2
+ test::param_b: env data param_b is 20
@@ -0,0 +1,3 @@
1
+ {
2
+ "test::param_c": "env data param_c is 30"
3
+ }
@@ -0,0 +1,2 @@
1
+ ---
2
+ test::param_d: env data param_d is 40
@@ -0,0 +1,2 @@
1
+ ---
2
+ test::param_e: env data param_e is 50
@@ -0,0 +1,2 @@
1
+ # Use the 'sample' env data provider (in this fixture)
2
+ environment_data_provider=hiera
@@ -0,0 +1,18 @@
1
+ ---
2
+ :version: 4
3
+ :hierarchy:
4
+ - :name: "name"
5
+ :backend: yaml
6
+ - :name: "one path"
7
+ :backend: yaml
8
+ :path: "single"
9
+ - :name: "two paths"
10
+ :backend: json
11
+ :paths:
12
+ - "first"
13
+ - "second"
14
+ - :name: 'other datadir'
15
+ :backend: yaml
16
+ :datadir: "data2"
17
+ :path: "single"
18
+ :datadir: "data1"
@@ -0,0 +1,5 @@
1
+ class test($param_a = 1, $param_b = 2, $param_c = 3, $param_d = 4, $param_e = 5) {
2
+ notify { "$param_a, $param_b, $param_c, $param_d, $param_e": }
3
+ }
4
+
5
+ include test
@@ -0,0 +1,46 @@
1
+ ---
2
+ lookup_options:
3
+ one::lopts_test::hash:
4
+ merge: deep
5
+
6
+ one::test::param:
7
+ key1: env 1
8
+
9
+ one::array:
10
+ - second
11
+ - third
12
+ - fourth
13
+
14
+ one::lopts_test::hash:
15
+ a: A
16
+ b: B
17
+ m:
18
+ ma: MA
19
+ mb: MB
20
+
21
+ one::loptsm_test::hash:
22
+ a: A
23
+ b: B
24
+ m:
25
+ ma: MA
26
+ mb: MB
27
+
28
+ ukey1: Some value
29
+
30
+ target_lookup: with lookup
31
+ target_hiera: with hiera
32
+ target_alias: Value from interpolation with alias
33
+
34
+ km_default: 'Value from interpolation %{target_default}'
35
+ km_alias: '%{alias("target_alias")}'
36
+ km_lookup: 'Value from interpolation %{lookup("target_lookup")}'
37
+ km_hiera: 'Value from interpolation %{hiera("target_hiera")}'
38
+ km_scope: 'Value from interpolation %{scope("target_scope")}'
39
+ km_literal: 'Value from interpolation %{literal("with literal")}'
40
+
41
+ km_sqalias: "%{alias('target_alias')}"
42
+ recursive: '%{r1}'
43
+
44
+ km_qualified: "Value from qualified interpolation OS = %{os.name}"
45
+
46
+ km_multi: "cluster/%{literal('%')}{::cluster}/%{literal('%')}{role}"
@@ -0,0 +1,2 @@
1
+ # Use the 'sample' env data provider (in this fixture)
2
+ environment_data_provider=hiera
@@ -0,0 +1,30 @@
1
+ ---
2
+ one::test::param:
3
+ key2: module 2
4
+
5
+ one::array:
6
+ - first
7
+ - second
8
+ - third
9
+
10
+ one::lopts_test::hash:
11
+ a: A
12
+ c: C
13
+ m:
14
+ ma: MA
15
+ mc: MC
16
+
17
+ one::loptsm_test::hash:
18
+ a: A
19
+ c: C
20
+ m:
21
+ ma: MA
22
+ mc: MC
23
+
24
+ lookup_options:
25
+ one::loptsm_test::hash:
26
+ merge: deep
27
+
28
+
29
+ # should not be found since it's not qualified with module name
30
+ ukey2: Some value
@@ -0,0 +1,13 @@
1
+ class one {
2
+ class test($param = { key1 => 'default 1', key2 => 'default 2' }) {
3
+ notify { "${param[key1]}, ${param[key2]}": }
4
+ }
5
+
6
+ class lopts_test($hash = { a => 'default A', b => 'default B', c => 'default C', m => {} }) {
7
+ notify { "${hash[a]}, ${hash[b]}, ${hash[c]}, ${hash[m]['ma']}, ${hash[m]['mb']}, ${hash[m]['mc']}": }
8
+ }
9
+
10
+ class loptsm_test($hash = { a => 'default A', b => 'default B', c => 'default C', m => {} }) {
11
+ notify { "${hash[a]}, ${hash[b]}, ${hash[c]}, ${hash[m]['ma']}, ${hash[m]['mb']}, ${hash[m]['mc']}": }
12
+ }
13
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "example/one",
3
+ "version": "0.0.2",
4
+ "source": "git@github.com/example/example-one.git",
5
+ "dependencies": [],
6
+ "author": "Bob the Builder",
7
+ "license": "Apache-2.0",
8
+ "data_provider": "hiera"
9
+ }
@@ -0,0 +1,2 @@
1
+ # Use the 'sample' env data provider (in this fixture)
2
+ environment_data_provider=hiera
@@ -0,0 +1,3 @@
1
+ {
2
+ "one::test::param_a": "module data param_a is 100"
3
+ }
@@ -0,0 +1 @@
1
+ one::test::param_b: module data param_b is 200
@@ -0,0 +1,3 @@
1
+ {
2
+ "one::test::param_c": "module data param_c is 300"
3
+ }
@@ -0,0 +1,2 @@
1
+ ---
2
+ one::test::param_d: module data param_d is 400
@@ -0,0 +1,2 @@
1
+ ---
2
+ one::test::param_e: module data param_e is 500
@@ -0,0 +1,18 @@
1
+ ---
2
+ :version: 4
3
+ :hierarchy:
4
+ - :name: "name"
5
+ :backend: yaml
6
+ - :name: "one path"
7
+ :backend: yaml
8
+ :path: "single"
9
+ - :name: "two paths"
10
+ :backend: json
11
+ :paths:
12
+ - "first"
13
+ - "second"
14
+ - :name: 'other datadir'
15
+ :backend: yaml
16
+ :datadir: "data2"
17
+ :path: "single"
18
+ :datadir: "data1"
@@ -0,0 +1,5 @@
1
+ class one {
2
+ class test($param_a = "param default is 100", $param_b = "param default is 200", $param_c = "param default is 300", $param_d = "param default is 400", $param_e = "param default is 500") {
3
+ notify { "$param_a, $param_b, $param_c, $param_d, $param_e": }
4
+ }
5
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "example/one",
3
+ "version": "0.0.2",
4
+ "source": "git@github.com/example/example-one.git",
5
+ "dependencies": [],
6
+ "author": "Bob the Builder",
7
+ "license": "Apache-2.0",
8
+ "data_provider": "hiera"
9
+ }
@@ -24,6 +24,7 @@ module PuppetX::Helindbe
24
24
  end
25
25
 
26
26
  def lookup(name, scope, merge)
27
+ throw :no_such_key unless @data.include?(name)
27
28
  @data[name]
28
29
  end
29
30
  end
@@ -25,6 +25,7 @@ module PuppetX::Helindbe
25
25
  end
26
26
 
27
27
  def lookup(name, scope, merge)
28
+ throw :no_such_key unless @data.include?(name)
28
29
  @data[name]
29
30
  end
30
31
  end
@@ -0,0 +1,3 @@
1
+ {
2
+ "hieraprovider::test::param_a": "module data param_a is 100"
3
+ }