puppet 4.8.2-universal-darwin → 4.9.0-universal-darwin

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 (348) hide show
  1. checksums.yaml +15 -0
  2. data/CONTRIBUTING.md +25 -1
  3. data/Gemfile +6 -0
  4. data/Rakefile +1 -0
  5. data/ext/project_data.yaml +5 -1
  6. data/ext/windows/service/daemon.rb +2 -1
  7. data/install.rb +43 -6
  8. data/lib/hiera/puppet_function.rb +15 -17
  9. data/lib/hiera/scope.rb +12 -14
  10. data/lib/puppet/application/face_base.rb +4 -0
  11. data/lib/puppet/application/lookup.rb +4 -2
  12. data/lib/puppet/application/resource.rb +1 -1
  13. data/lib/puppet/data_providers/data_adapter.rb +6 -0
  14. data/lib/puppet/data_providers/data_function_support.rb +7 -0
  15. data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
  16. data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
  17. data/lib/puppet/data_providers/hiera_config.rb +31 -10
  18. data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
  19. data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
  20. data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
  21. data/lib/puppet/data_providers/hiera_support.rb +6 -0
  22. data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
  23. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
  24. data/lib/puppet/data_providers.rb +6 -3
  25. data/lib/puppet/defaults.rb +25 -4
  26. data/lib/puppet/face/ca.rb +2 -0
  27. data/lib/puppet/face/certificate_request.rb +2 -0
  28. data/lib/puppet/face/certificate_revocation_list.rb +2 -0
  29. data/lib/puppet/face/file.rb +3 -0
  30. data/lib/puppet/face/help/face.erb +3 -0
  31. data/lib/puppet/face/help.rb +19 -17
  32. data/lib/puppet/face/key.rb +1 -0
  33. data/lib/puppet/face/man.rb +4 -2
  34. data/lib/puppet/face/module/generate.rb +1 -1
  35. data/lib/puppet/face/status.rb +2 -0
  36. data/lib/puppet/feature/base.rb +9 -2
  37. data/lib/puppet/feature/hocon.rb +3 -0
  38. data/lib/puppet/file_system/windows.rb +8 -0
  39. data/lib/puppet/file_system.rb +15 -3
  40. data/lib/puppet/forge/repository.rb +1 -2
  41. data/lib/puppet/forge.rb +6 -6
  42. data/lib/puppet/functions/binary_file.rb +4 -10
  43. data/lib/puppet/functions/hiera_array.rb +1 -1
  44. data/lib/puppet/functions/hiera_include.rb +1 -1
  45. data/lib/puppet/functions/hocon_data.rb +24 -0
  46. data/lib/puppet/functions/json_data.rb +18 -0
  47. data/lib/puppet/functions/yaml_data.rb +21 -0
  48. data/lib/puppet/generate/type.rb +1 -1
  49. data/lib/puppet/graph/simple_graph.rb +4 -2
  50. data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
  51. data/lib/puppet/indirector/request.rb +5 -1
  52. data/lib/puppet/interface/face_collection.rb +1 -1
  53. data/lib/puppet/interface.rb +14 -2
  54. data/lib/puppet/module.rb +14 -2
  55. data/lib/puppet/module_tool/applications/builder.rb +3 -2
  56. data/lib/puppet/module_tool/applications/installer.rb +14 -14
  57. data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
  58. data/lib/puppet/module_tool/installed_modules.rb +7 -7
  59. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  60. data/lib/puppet/module_tool/metadata.rb +1 -1
  61. data/lib/puppet/module_tool.rb +4 -4
  62. data/lib/puppet/network/http/connection.rb +2 -0
  63. data/lib/puppet/network/http/webrick.rb +2 -1
  64. data/lib/puppet/parser/functions/hiera.rb +14 -0
  65. data/lib/puppet/parser/functions/hiera_array.rb +14 -0
  66. data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
  67. data/lib/puppet/parser/functions/hiera_include.rb +14 -0
  68. data/lib/puppet/parser/scope.rb +14 -20
  69. data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
  70. data/lib/puppet/plugins/data_providers/registry.rb +2 -36
  71. data/lib/puppet/plugins/data_providers.rb +2 -0
  72. data/lib/puppet/pops/adaptable.rb +0 -3
  73. data/lib/puppet/pops/binder/producers.rb +3 -3
  74. data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
  75. data/lib/puppet/pops/evaluator/closure.rb +1 -1
  76. data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
  77. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  78. data/lib/puppet/pops/issues.rb +4 -0
  79. data/lib/puppet/pops/label_provider.rb +14 -0
  80. data/lib/puppet/pops/loader/loader_paths.rb +3 -1
  81. data/lib/puppet/pops/loader/module_loaders.rb +21 -7
  82. data/lib/puppet/pops/loader/typed_name.rb +0 -2
  83. data/lib/puppet/pops/loaders.rb +31 -12
  84. data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
  85. data/lib/puppet/pops/lookup/context.rb +121 -71
  86. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  87. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
  88. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
  89. data/lib/puppet/pops/lookup/data_provider.rb +102 -0
  90. data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
  91. data/lib/puppet/pops/lookup/explainer.rb +122 -82
  92. data/lib/puppet/pops/lookup/function_provider.rb +82 -0
  93. data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
  94. data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
  95. data/lib/puppet/pops/lookup/interpolation.rb +56 -35
  96. data/lib/puppet/pops/lookup/invocation.rb +179 -101
  97. data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
  98. data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
  99. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  100. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
  101. data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
  102. data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
  103. data/lib/puppet/pops/lookup.rb +4 -3
  104. data/lib/puppet/pops/merge_strategy.rb +120 -39
  105. data/lib/puppet/pops/parser/egrammar.ra +2 -0
  106. data/lib/puppet/pops/parser/eparser.rb +816 -808
  107. data/lib/puppet/pops/parser/locator.rb +3 -3
  108. data/lib/puppet/pops/parser/slurp_support.rb +4 -3
  109. data/lib/puppet/pops/pcore.rb +21 -12
  110. data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
  111. data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
  112. data/lib/puppet/pops/serialization/deserializer.rb +17 -4
  113. data/lib/puppet/pops/serialization/extension.rb +37 -8
  114. data/lib/puppet/pops/serialization/object.rb +14 -6
  115. data/lib/puppet/pops/serialization/rgen.rb +2 -1
  116. data/lib/puppet/pops/serialization/serializer.rb +30 -7
  117. data/lib/puppet/pops/types/implementation_registry.rb +1 -1
  118. data/lib/puppet/pops/types/p_object_type.rb +55 -12
  119. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
  120. data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
  121. data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
  122. data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
  123. data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
  124. data/lib/puppet/pops/types/recursion_guard.rb +64 -20
  125. data/lib/puppet/pops/types/ruby_generator.rb +10 -0
  126. data/lib/puppet/pops/types/type_calculator.rb +23 -13
  127. data/lib/puppet/pops/types/type_factory.rb +20 -9
  128. data/lib/puppet/pops/types/type_formatter.rb +37 -17
  129. data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
  130. data/lib/puppet/pops/types/type_parser.rb +6 -0
  131. data/lib/puppet/pops/types/types.rb +225 -132
  132. data/lib/puppet/pops/validation/checker4_0.rb +12 -2
  133. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  134. data/lib/puppet/pops/validation.rb +1 -1
  135. data/lib/puppet/pops/visitor.rb +4 -3
  136. data/lib/puppet/pops.rb +6 -9
  137. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
  138. data/lib/puppet/provider/nameservice.rb +15 -0
  139. data/lib/puppet/provider/package/appdmg.rb +1 -1
  140. data/lib/puppet/provider/package/dnf.rb +1 -1
  141. data/lib/puppet/provider/package/pkg.rb +1 -1
  142. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgng.rb +1 -1
  144. data/lib/puppet/provider/package/rpm.rb +2 -2
  145. data/lib/puppet/provider/service/smf.rb +3 -3
  146. data/lib/puppet/provider/service/systemd.rb +5 -1
  147. data/lib/puppet/provider/user/directoryservice.rb +1 -0
  148. data/lib/puppet/provider/user/user_role_add.rb +15 -0
  149. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  150. data/lib/puppet/provider/zone/solaris.rb +4 -1
  151. data/lib/puppet/reference/indirection.rb +1 -1
  152. data/lib/puppet/resource/catalog.rb +12 -4
  153. data/lib/puppet/resource/type.rb +3 -3
  154. data/lib/puppet/resource.rb +2 -3
  155. data/lib/puppet/settings/config_file.rb +2 -1
  156. data/lib/puppet/settings/directory_setting.rb +6 -0
  157. data/lib/puppet/settings/environment_conf.rb +6 -2
  158. data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
  159. data/lib/puppet/settings/file_setting.rb +10 -0
  160. data/lib/puppet/settings.rb +1 -1
  161. data/lib/puppet/ssl/certificate_authority.rb +13 -2
  162. data/lib/puppet/ssl/host.rb +23 -1
  163. data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
  164. data/lib/puppet/type/user.rb +16 -3
  165. data/lib/puppet/util/execution.rb +3 -3
  166. data/lib/puppet/util/filetype.rb +11 -5
  167. data/lib/puppet/util/logging.rb +2 -1
  168. data/lib/puppet/util/network_device/config.rb +1 -1
  169. data/lib/puppet/util/plist.rb +6 -0
  170. data/lib/puppet/util/profiler/aggregate.rb +1 -1
  171. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  172. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
  173. data/lib/puppet/util/windows/adsi.rb +15 -12
  174. data/lib/puppet/util.rb +1 -0
  175. data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  176. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
  177. data/lib/puppet/vendor/require_vendored.rb +0 -1
  178. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
  179. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
  180. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
  181. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
  182. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
  183. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
  184. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  185. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
  186. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
  187. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
  188. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
  189. data/lib/puppet/version.rb +1 -1
  190. data/lib/puppet.rb +52 -0
  191. data/lib/semver.rb +19 -12
  192. data/locales/config.yaml +29 -0
  193. data/locales/puppet.pot +79 -0
  194. data/man/man5/puppet.conf.5 +1 -1
  195. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
  196. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
  197. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
  198. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
  199. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
  200. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
  201. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
  202. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
  203. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
  204. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
  205. data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
  206. data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
  207. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
  208. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
  209. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
  210. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
  211. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
  212. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
  213. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
  214. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
  215. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
  216. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
  217. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
  218. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
  219. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
  220. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
  221. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
  222. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
  223. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
  224. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
  225. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
  226. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
  227. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
  228. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
  229. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
  230. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
  231. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
  232. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
  233. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
  234. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
  235. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
  236. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
  237. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
  238. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
  239. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
  240. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
  241. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
  242. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
  243. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
  244. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
  245. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
  246. data/spec/integration/application/apply_spec.rb +88 -2
  247. data/spec/integration/application/lookup_spec.rb +155 -0
  248. data/spec/integration/data_binding_spec.rb +5 -5
  249. data/spec/integration/defaults_spec.rb +13 -0
  250. data/spec/integration/environments/default_manifest_spec.rb +16 -16
  251. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  252. data/spec/integration/test/test_helper_spec.rb +6 -2
  253. data/spec/integration/transaction_spec.rb +74 -0
  254. data/spec/integration/util/execution_spec.rb +8 -0
  255. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
  256. data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
  257. data/spec/lib/puppet_spec/unindent.rb +2 -2
  258. data/spec/unit/application/face_base_spec.rb +16 -0
  259. data/spec/unit/application/lookup_spec.rb +262 -227
  260. data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
  261. data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
  262. data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
  263. data/spec/unit/defaults_spec.rb +1 -1
  264. data/spec/unit/face/ca_spec.rb +10 -0
  265. data/spec/unit/face/certificate_request_spec.rb +10 -0
  266. data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
  267. data/spec/unit/face/file_spec.rb +4 -0
  268. data/spec/unit/face/help_spec.rb +17 -0
  269. data/spec/unit/face/key_spec.rb +10 -0
  270. data/spec/unit/face/status_spec.rb +10 -0
  271. data/spec/unit/file_system_spec.rb +143 -6
  272. data/spec/unit/functions/binary_file_spec.rb +1 -1
  273. data/spec/unit/functions/hiera_spec.rb +257 -47
  274. data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
  275. data/spec/unit/functions/lookup_spec.rb +1319 -608
  276. data/spec/unit/functions/new_spec.rb +3 -3
  277. data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
  278. data/spec/unit/graph/simple_graph_spec.rb +1 -1
  279. data/spec/unit/hiera/scope_spec.rb +4 -4
  280. data/spec/unit/indirector/request_spec.rb +9 -0
  281. data/spec/unit/interface_spec.rb +27 -0
  282. data/spec/unit/man_spec.rb +1 -1
  283. data/spec/unit/module_spec.rb +1 -1
  284. data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
  285. data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
  286. data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
  287. data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
  288. data/spec/unit/module_tool_spec.rb +3 -3
  289. data/spec/unit/network/http/connection_spec.rb +10 -0
  290. data/spec/unit/network/http/webrick_spec.rb +1 -1
  291. data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
  292. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
  293. data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
  294. data/spec/unit/pops/lookup/context_spec.rb +45 -16
  295. data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
  296. data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
  297. data/spec/unit/pops/merge_strategy_spec.rb +18 -0
  298. data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
  299. data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
  300. data/spec/unit/pops/serialization/packer_spec.rb +4 -23
  301. data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
  302. data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
  303. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
  304. data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
  305. data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
  306. data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
  307. data/spec/unit/pops/types/type_factory_spec.rb +3 -3
  308. data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
  309. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
  310. data/spec/unit/pops/types/types_spec.rb +25 -2
  311. data/spec/unit/pops/validator/validator_spec.rb +60 -4
  312. data/spec/unit/provider/nameservice_spec.rb +42 -0
  313. data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
  314. data/spec/unit/provider/package/pkg_spec.rb +22 -0
  315. data/spec/unit/provider/package/pkgng_spec.rb +12 -0
  316. data/spec/unit/provider/package/rpm_spec.rb +8 -8
  317. data/spec/unit/provider/service/smf_spec.rb +13 -11
  318. data/spec/unit/provider/service/systemd_spec.rb +8 -1
  319. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  320. data/spec/unit/puppet_spec.rb +14 -0
  321. data/spec/unit/resource/catalog_spec.rb +15 -9
  322. data/spec/unit/resource_spec.rb +20 -17
  323. data/spec/unit/semver_spec.rb +14 -0
  324. data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
  325. data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
  326. data/spec/unit/type/user_spec.rb +32 -6
  327. data/spec/unit/util/filetype_spec.rb +3 -3
  328. data/spec/unit/util/yaml_spec.rb +1 -1
  329. data/spec/unit/util_spec.rb +10 -2
  330. data/tasks/i18n.rake +20 -0
  331. metadata +2661 -2595
  332. data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
  333. data/lib/puppet/vendor/load_semantic.rb +0 -1
  334. data/lib/puppet/vendor/semantic/Gemfile +0 -20
  335. data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
  336. data/lib/puppet/vendor/semantic/Rakefile +0 -69
  337. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
  338. data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
  339. data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
  340. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
  341. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
  342. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
  343. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
  344. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
  345. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
  346. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
  347. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
  348. data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YmU1Y2MyNjEzNjkzNTJkZWVjNWJkZTQ2OTIzMmYzMWQ1YTY1MGIxOQ==
5
+ data.tar.gz: !binary |-
6
+ OWRkMGE5Zjc4NWI3Y2VjOGI3ODBiN2JkZTA5NzZhYjI2MDdlYWViOQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MTJiODQzOTZiYzU1Y2Q3NThjYzAyYTkyZGFhMWIyNDI3Njg5MjU1M2JiNzQ3
10
+ MjVmNDg5OTlhNDVjMmJiOWYxMDM1MmM2NWZmZjU2NjU4OWU3MzQxZDc0Yzdi
11
+ MTljNWU0YjI2ODljMzIwODVhMjUxNjllNzYxMzY5YjRlMzhkNDU=
12
+ data.tar.gz: !binary |-
13
+ ZWVlYTU3M2I5OTI0YWJjYWRiNGU4NWEzMjBiMzk1NjcwZmZiYTQzZTVhMDUz
14
+ ZmMxYjY4ODNhNWE1MWM0NGY5M2RjNWMzMmMzMTlmNjExODhkODdjNjA4Yjg2
15
+ NDA4MzZmNTM3NmVlYjhhODU2N2Y4ZTYxNmNkMTA4NWUzZjI1MmI=
data/CONTRIBUTING.md CHANGED
@@ -104,13 +104,37 @@ a ticket number.
104
104
  * After feedback has been given we expect responses within two weeks. After two
105
105
  weeks we may close the pull request if it isn't showing any activity.
106
106
 
107
+ ## Revert Policy
108
+ By running tests in advance and by engaging with peer review for prospective
109
+ changes, your contributions have a high probability of becoming long lived
110
+ parts of the the project. After being merged, the code will run through a
111
+ series of testing pipelines on a large number of operating system
112
+ environments. These pipelines can reveal incompatibilities that are difficult
113
+ to detect in advance.
114
+
115
+ If the code change results in a test failure, we will make our best effort to
116
+ correct the error. If a fix cannot be determined and committed within 24 hours
117
+ of its discovery, the commit(s) responsible _may_ be reverted, at the
118
+ discretion of the committer and Puppet maintainers. This action would be taken
119
+ to help maintain passing states in our testing pipelines.
120
+
121
+ The original contributor will be notified of the revert in the Jira ticket
122
+ associated with the change. A reference to the test(s) and operating system(s)
123
+ that failed as a result of the code change will also be added to the Jira
124
+ ticket. This test(s) should be used to check future submissions of the code to
125
+ ensure the issue has been resolved.
126
+
127
+ ### Summary
128
+ * Changes resulting in test pipeline failures will be reverted if they cannot
129
+ be resolved within one business day.
130
+
107
131
  # Additional Resources
108
132
 
109
133
  * [Puppet community guidelines](https://docs.puppet.com/community/community_guidelines.html)
110
134
  * [Bug tracker (Jira)](https://tickets.puppetlabs.com)
111
135
  * [Contributor License Agreement](http://links.puppet.com/cla)
112
136
  * [General GitHub documentation](https://help.github.com/)
113
- * [GitHub pull request documentation](https://help.github.com/send-pull-requests/)
137
+ * [GitHub pull request documentation](https://help.github.com/articles/creating-a-pull-request/)
114
138
  * #puppet-dev IRC channel on freenode.org ([Archive](https://botbot.me/freenode/puppet-dev/))
115
139
  * [puppet-dev mailing list](https://groups.google.com/forum/#!forum/puppet-dev)
116
140
  * [Community PR Triage notes](https://github.com/puppet-community/community-triage/tree/master/core/notes)
data/Gemfile CHANGED
@@ -26,10 +26,15 @@ end
26
26
  gem "puppet", :path => File.dirname(__FILE__), :require => false
27
27
  gem "facter", *location_for(ENV['FACTER_LOCATION'] || ['> 2.0', '< 4'])
28
28
  gem "hiera", *location_for(ENV['HIERA_LOCATION'] || ['>= 2.0', '< 4'])
29
+ # PUP-7115 - return to a gem dependency in Puppet 5
30
+ # gem "semantic_puppet", *location_for(ENV['SEMANTIC_PUPPET_LOCATION'] || ['>= 0.1.3', '< 2'])
29
31
  gem "rake", "10.1.1", :require => false
30
32
  # Hiera has an unbound dependency on json_pure
31
33
  # json_pure 2.0.2+ officially requires Ruby >= 2.0, but should have specified that in 2.0
32
34
  gem 'json_pure', '~> 1.8', :require => false
35
+ # i18n support (gettext-setup and dependencies)
36
+ gem 'gettext-setup', '>= 0.10', '< 1.0', :require => false
37
+ gem 'locale', '~> 2.1', :require => false
33
38
 
34
39
  group(:development, :test) do
35
40
  gem "rspec", "~> 3.1", :require => false
@@ -58,6 +63,7 @@ group(:development, :test) do
58
63
  gem 'addressable', '< 2.5.0'
59
64
  gem 'webmock', '~> 1.24'
60
65
  gem 'vcr', '~> 2.9'
66
+ gem "hocon", :require => false
61
67
  end
62
68
 
63
69
  group(:development) do
data/Rakefile CHANGED
@@ -103,3 +103,4 @@ task(:commits) do
103
103
  puts "...passed"
104
104
  end
105
105
  end
106
+
@@ -9,7 +9,7 @@ version_file: 'lib/puppet/version.rb'
9
9
  # files and gem_files are space separated lists
10
10
  files: '[A-Z]* install.rb bin lib conf man examples ext tasks spec'
11
11
  # The gem specification bits only work on Puppet >= 3.0rc, NOT 2.7.x and earlier
12
- gem_files: '[A-Z]* install.rb bin lib conf man examples ext tasks spec'
12
+ gem_files: '[A-Z]* install.rb bin lib conf man examples ext tasks spec locales'
13
13
  gem_test_files: 'spec/**/*'
14
14
  gem_executables: 'puppet'
15
15
  gem_default_executables: 'puppet'
@@ -20,6 +20,10 @@ gem_runtime_dependencies:
20
20
  facter: ['> 2.0', '< 4']
21
21
  hiera: ['>= 2.0', '< 4']
22
22
  json_pure: '~> 1.8'
23
+ # PUP-7115 - return to a gem dependency in Puppet 5
24
+ # semantic_puppet: ['>= 0.1.3', '< 2']
25
+ gettext-setup: ['>= 0.10', '< 1']
26
+ locale: '~> 2.1'
23
27
  gem_rdoc_options:
24
28
  - --title
25
29
  - "Puppet - Configuration Management"
@@ -123,7 +123,8 @@ class WindowsDaemon < Win32::Daemon
123
123
  def log(msg, level)
124
124
  if LEVELS.index(level) >= @loglevel
125
125
  if (@LOG_TO_FILE)
126
- File.open(LOG_FILE, 'a') { |f| f.puts("#{Time.now} Puppet (#{level}): #{msg}") }
126
+ # without this change its possible that we get Encoding errors trying to write UTF-8 messages in current codepage
127
+ File.open(LOG_FILE, 'a:UTF-8') { |f| f.puts("#{Time.now} Puppet (#{level}): #{msg}") }
127
128
  end
128
129
 
129
130
  case level
data/install.rb CHANGED
@@ -108,9 +108,24 @@ def do_man(man, strip = 'man/')
108
108
  FileUtils.makedirs(om, {:mode => 0755, :verbose => true})
109
109
  FileUtils.chmod(0755, om)
110
110
  FileUtils.install(mf, omf, {:mode => 0644, :preserve => true, :verbose => true})
111
- gzip = %x{which gzip}
112
- gzip.chomp!
113
- %x{#{gzip} -f #{omf}}
111
+ # Solaris does not support gzipped man pages. When called with
112
+ # --no-check-prereqs/without facter the default gzip behavior still applies
113
+ unless $operatingsystem == "Solaris"
114
+ gzip = %x{which gzip}
115
+ gzip.chomp!
116
+ %x{#{gzip} -f #{omf}}
117
+ end
118
+ end
119
+ end
120
+
121
+ def do_locales(locale, strip = 'locales/')
122
+ locale.each do |lf|
123
+ next if File.directory? lf
124
+ olf = File.join(InstallOptions.locale_dir, lf.sub(/^#{strip}/, ''))
125
+ op = File.dirname(olf)
126
+ FileUtils.makedirs(op, {:mode => 0755, :verbose => true})
127
+ FileUtils.chmod(0755, op)
128
+ FileUtils.install(lf, olf, {:mode => 0644, :preserve => true, :verbose => true})
114
129
  end
115
130
  end
116
131
 
@@ -190,6 +205,9 @@ def prepare_installation
190
205
  opts.on('--bindir[=OPTIONAL]', 'Installation directory for binaries', 'overrides RbConfig::CONFIG["bindir"]') do |bindir|
191
206
  InstallOptions.bindir = bindir
192
207
  end
208
+ opts.on('--localedir[=OPTIONAL]', 'Installation directory for locale information', 'Default /opt/puppetlabs/puppet/share/locale') do |localedir|
209
+ InstallOptions.localedir = localedir
210
+ end
193
211
  opts.on('--ruby[=OPTIONAL]', 'Ruby interpreter to use with installation', 'overrides ruby used to call install.rb') do |ruby|
194
212
  InstallOptions.ruby = ruby
195
213
  end
@@ -242,15 +260,19 @@ def prepare_installation
242
260
  $operatingsystem = Facter.value :operatingsystem
243
261
  end
244
262
 
245
- if not InstallOptions.configdir.nil?
246
- configdir = InstallOptions.configdir
247
- elsif $operatingsystem == "windows"
263
+ if $operatingsystem == "windows"
248
264
  begin
265
+ # populates constants used to specify default Windows directories
249
266
  require 'win32/dir'
250
267
  rescue LoadError => e
251
268
  puts "Cannot run on Microsoft Windows without the win32-process, win32-dir & win32-service gems: #{e}"
252
269
  exit -1
253
270
  end
271
+ end
272
+
273
+ if not InstallOptions.configdir.nil?
274
+ configdir = InstallOptions.configdir
275
+ elsif $operatingsystem == "windows"
254
276
  configdir = File.join(Dir::COMMON_APPDATA, "PuppetLabs", "puppet", "etc")
255
277
  else
256
278
  configdir = "/etc/puppetlabs/puppet"
@@ -294,6 +316,16 @@ def prepare_installation
294
316
  bindir = RbConfig::CONFIG['bindir']
295
317
  end
296
318
 
319
+ if not InstallOptions.localedir.nil?
320
+ localedir = InstallOptions.localedir
321
+ else
322
+ if $operatingsystem == "windows"
323
+ localedir = File.join(Dir::PROGRAM_FILES, "Puppet Labs", "Puppet", "puppet", "share", "locale")
324
+ else
325
+ localedir = "/opt/puppetlabs/puppet/share/locale"
326
+ end
327
+ end
328
+
297
329
  if not InstallOptions.sitelibdir.nil?
298
330
  sitelibdir = InstallOptions.sitelibdir
299
331
  else
@@ -331,6 +363,7 @@ def prepare_installation
331
363
  rundir = join(destdir, rundir)
332
364
  logdir = join(destdir, logdir)
333
365
  bindir = join(destdir, bindir)
366
+ localedir = join(destdir, localedir)
334
367
  mandir = join(destdir, mandir)
335
368
  sitelibdir = join(destdir, sitelibdir)
336
369
 
@@ -342,6 +375,7 @@ def prepare_installation
342
375
  FileUtils.makedirs(vardir)
343
376
  FileUtils.makedirs(rundir)
344
377
  FileUtils.makedirs(logdir)
378
+ FileUtils.makedirs(localedir)
345
379
 
346
380
  InstallOptions.site_dir = sitelibdir
347
381
  InstallOptions.codedir = codedir
@@ -352,6 +386,7 @@ def prepare_installation
352
386
  InstallOptions.var_dir = vardir
353
387
  InstallOptions.run_dir = rundir
354
388
  InstallOptions.log_dir = logdir
389
+ InstallOptions.locale_dir = localedir
355
390
  end
356
391
 
357
392
  ##
@@ -464,6 +499,7 @@ FileUtils.cd File.dirname(__FILE__) do
464
499
  ri = glob(%w{bin/*.rb lib/**/*.rb}).reject { |e| e=~ /\.(bat|cmd)$/ }
465
500
  man = glob(%w{man/man[0-9]/*})
466
501
  libs = glob(%w{lib/**/*})
502
+ locales = glob(%w{locales/**/*})
467
503
 
468
504
  prepare_installation
469
505
 
@@ -477,5 +513,6 @@ FileUtils.cd File.dirname(__FILE__) do
477
513
  do_bins(bins, InstallOptions.bin_dir)
478
514
  do_bins(windows_bins, InstallOptions.bin_dir, 'ext/windows/') if $operatingsystem == "windows" && InstallOptions.batch_files
479
515
  do_libs(libs)
516
+ do_locales(locales)
480
517
  do_man(man) unless $operatingsystem == "windows"
481
518
  end
@@ -43,37 +43,35 @@ class Hiera::PuppetFunction < Puppet::Functions::InternalFunction
43
43
  end
44
44
 
45
45
  def hiera_no_default(scope, key)
46
- post_lookup(scope, key, lookup(scope, key, nil, nil))
46
+ post_lookup(scope, key, lookup(scope, key, nil, false, nil))
47
47
  end
48
48
 
49
49
  def hiera_with_default(scope, key, default, override = nil)
50
- undefined = (@@undefined_value ||= Object.new)
51
- result = lookup(scope, key, undefined, override)
52
- post_lookup(scope, key, result.equal?(undefined) ? default : result)
50
+ post_lookup(scope, key, lookup(scope, key, default, true, override))
53
51
  end
54
52
 
55
53
  def hiera_block1(scope, key, &default_block)
56
- common(scope, key, nil, default_block)
54
+ post_lookup(scope, key, lookup(scope, key, nil, false, nil, &default_block))
57
55
  end
58
56
 
59
57
  def hiera_block2(scope, key, override, &default_block)
60
- common(scope, key, override, default_block)
58
+ post_lookup(scope, key, lookup(scope, key, nil, false, override, &default_block))
61
59
  end
62
60
 
63
- def common(scope, key, override, default_block)
64
- undefined = (@@undefined_value ||= Object.new)
65
- result = lookup(scope, key, undefined, override)
66
- post_lookup(scope, key, result.equal?(undefined) ? default_block.call(key) : result)
67
- end
68
-
69
- private :common
70
-
71
- def lookup(scope, key, default, override)
72
- HieraPuppet.lookup(key, default, scope, override, merge_type)
61
+ def lookup(scope, key, default, has_default, override, &default_block)
62
+ unless Puppet[:strict] == :off
63
+ Puppet.warn_once(:deprecation, self.class.name,
64
+ "The function '#{self.class.name}' is deprecated in favor of using 'lookup'. See https://docs.puppet.com/puppet/#{Puppet.version}/reference/deprecated_language.html")
65
+ end
66
+ lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {})
67
+ adapter = lookup_invocation.lookup_adapter
68
+ lookup_invocation.set_global_only unless adapter.global_only? || adapter.has_environment_data_provider?(lookup_invocation)
69
+ lookup_invocation.set_hiera_v3_location_overrides(override) unless override.nil? || override.is_a?(Array) && override.empty?
70
+ Puppet::Pops::Lookup.lookup(key, nil, default, has_default, merge_type, lookup_invocation, &default_block)
73
71
  end
74
72
 
75
73
  def merge_type
76
- :priority
74
+ :first
77
75
  end
78
76
 
79
77
  def post_lookup(scope, key, result)
data/lib/hiera/scope.rb CHANGED
@@ -1,9 +1,12 @@
1
1
  class Hiera
2
2
  class Scope
3
- CALLING_CLASS = "calling_class"
4
- CALLING_CLASS_PATH = "calling_class_path"
5
- CALLING_MODULE = "calling_module"
6
- MODULE_NAME = "module_name"
3
+ CALLING_CLASS = 'calling_class'.freeze
4
+ CALLING_CLASS_PATH = 'calling_class_path'.freeze
5
+ CALLING_MODULE = 'calling_module'.freeze
6
+ MODULE_NAME = 'module_name'.freeze
7
+
8
+ CALLING_KEYS = [CALLING_CLASS, CALLING_CLASS_PATH, CALLING_MODULE].freeze
9
+ EMPTY_STRING = ''.freeze
7
10
 
8
11
  attr_reader :real
9
12
 
@@ -21,20 +24,15 @@ class Hiera
21
24
  else
22
25
  ans = @real.lookupvar(key)
23
26
  end
27
+ ans == EMPTY_STRING ? nil : ans
28
+ end
24
29
 
25
- if ans.nil? or ans == ""
26
- nil
27
- else
28
- ans
29
- end
30
+ def exist?(key)
31
+ CALLING_KEYS.include?(key) || @real.exist?(key)
30
32
  end
31
33
 
32
34
  def include?(key)
33
- if [CALLING_CLASS, CALLING_CLASS_PATH, CALLING_MODULE].include? key
34
- true
35
- else
36
- @real.exist?(key)
37
- end
35
+ CALLING_KEYS.include?(key) || @real.include?(key)
38
36
  end
39
37
 
40
38
  def catalog
@@ -245,6 +245,10 @@ class Puppet::Application::FaceBase < Puppet::Application
245
245
  end
246
246
  end
247
247
 
248
+ if @face.deprecated?
249
+ Puppet.deprecation_warning("'puppet #{@face.name}' is deprecated and will be removed in a future release")
250
+ end
251
+
248
252
  result = @face.send(@action.name, *arguments)
249
253
  puts render(result, arguments) unless result.nil?
250
254
  status = true
@@ -297,11 +297,13 @@ Copyright (c) 2015 Puppet Labs, LLC Licensed under the Apache 2.0 License
297
297
  type = options.include?(:type) ? Puppet::Pops::Types::TypeParser.singleton.parse(options[:type], scope) : nil
298
298
  result = Puppet::Pops::Lookup.lookup(keys, type, options[:default_value], use_default_value, merge_options, lookup_invocation)
299
299
  puts renderer.render(result) unless explain
300
- rescue Puppet::DataBinding::LookupError
300
+ rescue Puppet::DataBinding::LookupError => e
301
+ lookup_invocation.report_text { e.message }
301
302
  exit(1) unless explain
302
303
  end
303
- puts format == :s ? lookup_invocation.explainer.to_s : renderer.render(lookup_invocation.explainer.to_hash) if explain
304
+ puts format == :s ? lookup_invocation.explainer.explain : renderer.render(lookup_invocation.explainer.to_hash) if explain
304
305
  end
306
+ exit(0)
305
307
  end
306
308
 
307
309
  def generate_scope
@@ -166,7 +166,7 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
166
166
  require 'tempfile'
167
167
  # Prefer the current directory, which is more likely to be secure
168
168
  # and, in the case of interactive use, accessible to the user.
169
- tmpfile = Tempfile.new('x2puppet', Dir.pwd)
169
+ tmpfile = Tempfile.new('x2puppet', Dir.pwd, :encoding => Encoding::UTF_8)
170
170
  begin
171
171
  # sync write, so nothing buffers before we invoke the editor.
172
172
  tmpfile.sync = true
@@ -1,6 +1,8 @@
1
1
  # A DataAdapter adapts an object with a Hash of data
2
2
  #
3
+ # TODO: API 5.0, remove this class
3
4
  # @api private
5
+ # @deprecated
4
6
  class Puppet::DataProviders::DataAdapter < Puppet::Pops::Adaptable::Adapter
5
7
  include Puppet::Plugins::DataProviders
6
8
 
@@ -11,6 +13,10 @@ class Puppet::DataProviders::DataAdapter < Puppet::Pops::Adaptable::Adapter
11
13
  end
12
14
 
13
15
  def initialize
16
+ unless Puppet[:strict] == :off
17
+ Puppet.warn_once(:deprecation, 'Puppet::DataProviders::DataAdapter',
18
+ 'Puppet::DataProviders::DataAdapter is deprecated and will be removed in the next major version of Puppet')
19
+ end
14
20
  @data = {}
15
21
  end
16
22
 
@@ -1,9 +1,16 @@
1
+ # TODO: API 5.0, remove this module
1
2
  # @api private
3
+ # @deprecated
2
4
  module Puppet::DataProviders::DataFunctionSupport
3
5
  def initialize_data(data_key, lookup_invocation)
4
6
  name = "#{data_key}::data"
5
7
  scope = lookup_invocation.scope
6
8
  Puppet::Util::Profiler.profile("Called #{name}", [ :functions, name ]) do
9
+ unless Puppet[:strict] == :off
10
+ Puppet.warn_once(:deprecation, 'Puppet::DataProviders::DataFunctionSupport',
11
+ 'Puppet::DataProviders::DataFunctionSupport is deprecated and will be removed in the next major version of Puppet')
12
+ end
13
+
7
14
  loader = loader(data_key, scope)
8
15
  if loader && func = loader.load(:function, name)
9
16
  # function found, call without arguments, must return a Hash
@@ -8,11 +8,18 @@ module Puppet::DataProviders; end
8
8
  # The function is called on demand, and is associated with the compiler via an Adapter. This ensures that the data
9
9
  # is only produced once per compilation.
10
10
  #
11
+ # TODO: API 5.0, remove this class
11
12
  # @api private
13
+ # @deprecated
12
14
  class Puppet::DataProviders::FunctionEnvDataProvider < Puppet::Plugins::DataProviders::EnvironmentDataProvider
13
15
  include Puppet::DataProviders::DataFunctionSupport
14
16
 
15
17
  def loader(key, scope)
18
+ unless Puppet[:strict] == :off
19
+ Puppet.warn_once(:deprecation, 'Puppet::DataProviders::FunctionEnvDataProvider',
20
+ 'Puppet::DataProviders::FunctionEnvDataProvider is deprecated and will be removed in the next major version of Puppet')
21
+ end
22
+
16
23
  # This loader allows the data function to be private or public in the environment
17
24
  scope.compiler.loaders.private_environment_loader
18
25
  end
@@ -8,11 +8,17 @@ module Puppet::DataProviders; end
8
8
  # The function is called on demand, and is associated with the compiler via an Adapter. This ensures that the data
9
9
  # is only produced once per compilation.
10
10
  #
11
+ # TODO: API 5.0, remove this class
11
12
  # @api private
13
+ # @deprecated
12
14
  class Puppet::DataProviders::FunctionModuleDataProvider < Puppet::Plugins::DataProviders::ModuleDataProvider
13
15
  include Puppet::DataProviders::DataFunctionSupport
14
16
 
15
17
  def loader(key, scope)
18
+ unless Puppet[:strict] == :off
19
+ Puppet.warn_once(:deprecation, 'Puppet::DataProviders::FunctionModuleDataProvider',
20
+ 'Puppet::DataProviders::FunctionModuleDataProvider is deprecated and will be removed in the next major version of Puppet')
21
+ end
16
22
  scope.compiler.loaders.private_loader_for_module(key)
17
23
  end
18
24
  end
@@ -1,11 +1,13 @@
1
- require 'pathname'
2
- require 'puppet/pops/lookup/interpolation'
1
+ require 'puppet/plugins/data_providers'
3
2
 
3
+ # @api private
4
4
  module Puppet::DataProviders
5
+ # TODO: API 5.0, remove this class
5
6
  # @api private
7
+ # @deprecated
6
8
  class HieraConfig
7
9
  include Puppet::Plugins::DataProviders
8
- include Puppet::Pops::Lookup::Interpolation
10
+ include Puppet::Pops::Lookup::LocationResolver
9
11
 
10
12
  DEFAULT_CONFIG = {
11
13
  'version' => 4,
@@ -33,6 +35,11 @@ module Puppet::DataProviders
33
35
  end
34
36
  end
35
37
 
38
+ def self.config_exist?(config_root)
39
+ config_path = config_root + 'hiera.yaml'
40
+ config_path.exist?
41
+ end
42
+
36
43
  def self.create_config_type
37
44
  hierarchy_elem_type_base = 'Struct[{'\
38
45
  'backend=>String[1],'\
@@ -58,6 +65,10 @@ module Puppet::DataProviders
58
65
  # @param config_root [Pathname] Absolute path to the configuration root
59
66
  # @api public
60
67
  def initialize(config_root)
68
+ unless Puppet[:strict] == :off
69
+ Puppet.warn_once(:deprecation, 'Puppet::DataProviders::HieraConfig',
70
+ "Use of class Puppet::DataProviders::HieraConfig' is deprecated. Puppet::Pops::Lookup::HieraConfig should be used instead", config_path.to_s)
71
+ end
61
72
  @config_root = config_root
62
73
  @config_path = config_root + 'hiera.yaml'
63
74
  if @config_path.exist?
@@ -92,7 +103,7 @@ module Puppet::DataProviders
92
103
  data_providers = {}
93
104
  @config['hierarchy'].each do |he|
94
105
  name = he['name']
95
- raise Puppet::DataBinding::LookupError, "#{path}: Name '#{name}' defined more than once" if data_providers.include?(name)
106
+ raise Puppet::DataBinding::LookupError, "#{@config_path}: Name '#{name}' defined more than once" if data_providers.include?(name)
96
107
  original_paths = he['paths']
97
108
  if original_paths.nil?
98
109
  single_path = he['path']
@@ -100,17 +111,27 @@ module Puppet::DataProviders
100
111
  original_paths = [single_path]
101
112
  end
102
113
  paths = original_paths.map { |path| interpolate(path, lookup_invocation, false)}
103
- provider_name = he['backend']
104
- provider_factory = injector.lookup(nil, service_type, PATH_BASED_DATA_PROVIDER_FACTORIES_KEY)[provider_name]
105
- raise Puppet::DataBinding::LookupError, "#{@config_path}: No data provider is registered for backend '#{provider_name}' " unless provider_factory
106
-
107
114
  datadir = @config_root + (he['datadir'] || default_datadir)
108
- data_providers[name] = create_data_provider(parent_data_provider, provider_factory, name,
109
- provider_factory.resolve_paths(datadir, original_paths, paths, lookup_invocation))
115
+ provider_name = he['backend']
116
+ data_providers[name] = case provider_name
117
+ when 'json', 'yaml'
118
+ Puppet::Pops::Lookup::DataHashFunctionProvider.new(name, parent_data_provider, "#{provider_name}_data", {},
119
+ resolve_paths(datadir, original_paths, lookup_invocation, ".#{provider_name}"))
120
+ else
121
+ # TODO: Remove support for injected provider factories
122
+ paths = original_paths.map { |path| interpolate(path, lookup_invocation, false)}
123
+ provider_factory = injector.lookup(nil, service_type, PATH_BASED_DATA_PROVIDER_FACTORIES_KEY)[provider_name]
124
+ raise Puppet::DataBinding::LookupError, "#{@config_path}: No data provider is registered for backend '#{provider_name}' " unless provider_factory
125
+ create_data_provider(parent_data_provider, provider_factory, name, provider_factory.resolve_paths(datadir, original_paths, paths, lookup_invocation))
126
+ end
110
127
  end
111
128
  data_providers.values
112
129
  end
113
130
 
131
+ def name
132
+ "hiera version #{version}"
133
+ end
134
+
114
135
  def create_data_provider(parent_data_provider, provider_factory, name, resolved_paths)
115
136
  provider_factory_version = provider_factory.respond_to?(:version) ? provider_factory.version : 1
116
137
  if provider_factory_version == 1
@@ -2,7 +2,9 @@
2
2
  require_relative 'hiera_support'
3
3
 
4
4
  module Puppet::DataProviders
5
+ # TODO: API 5.0, remove this class
5
6
  # @api private
7
+ # @deprecated
6
8
  class HieraEnvDataProvider < Puppet::Plugins::DataProviders::EnvironmentDataProvider
7
9
  include HieraSupport
8
10
 
@@ -12,6 +14,10 @@ module Puppet::DataProviders
12
14
  # @param scope [Puppet::Parser::Scope] the parser scope where the environment is found
13
15
  # @return [Pathname] Path to root of the environment
14
16
  def provider_root(_, scope)
17
+ unless Puppet[:strict] == :off
18
+ Puppet.warn_once(:deprecation, 'Puppet::DataProviders::HieraEnvDataProvider',
19
+ 'Puppet::DataProviders::HieraEnvDataProvider is deprecated and will be removed in the next major version of Puppet')
20
+ end
15
21
  Pathname.new(scope.environment.configuration.path_to_env)
16
22
  end
17
23
  protected :provider_root
@@ -1,3 +1,4 @@
1
+ # TODO: API 5.0, remove this module
1
2
  # @deprecated Moved to Puppet::Pops::Lookup::Interpolation
2
3
  module Puppet::DataProviders::HieraInterpolate
3
4
  include Puppet::Pops::Lookup::Interpolation
@@ -15,6 +16,6 @@ module Puppet::DataProviders::HieraInterpolate
15
16
  Puppet.warn_once(:deprecation, 'HieraInterpolate#qualified_lookup', msg)
16
17
  end
17
18
  end
18
- sub_lookup('<unknown key>', Puppet::Pops::Lookup::Invocation.new(nil), segments, value)
19
+ sub_lookup('<unknown key>', Puppet::Pops::Lookup::Invocation.current, segments, value)
19
20
  end
20
21
  end
@@ -2,7 +2,9 @@
2
2
  require_relative 'hiera_support'
3
3
 
4
4
  module Puppet::DataProviders
5
+ # TODO: API 5.0, remove this class
5
6
  # @api private
7
+ # @deprecated
6
8
  class HieraModuleDataProvider < Puppet::Plugins::DataProviders::ModuleDataProvider
7
9
  include HieraSupport
8
10
 
@@ -14,6 +16,10 @@ module Puppet::DataProviders
14
16
  # @raise [Puppet::DataBinder::LookupError] if the given module is can not be found
15
17
  #
16
18
  def provider_root(module_name, scope)
19
+ unless Puppet[:strict] == :off
20
+ Puppet.warn_once(:deprecation, 'Puppet::DataProviders::HieraModuleDataProvider',
21
+ 'Puppet::DataProviders::HieraModuleDataProvider is deprecated and will be removed in the next major version of Puppet')
22
+ end
17
23
  env = scope.environment
18
24
  mod = env.modules.find { |m| m.name == module_name }
19
25
  raise Puppet::DataBinder::LookupError, "Environment '#{env.name}', cannot find module '#{module_name}'" unless mod
@@ -1,6 +1,8 @@
1
1
  require_relative 'hiera_config'
2
2
 
3
+ # TODO: API 5.0, remove this module
3
4
  # @api private
5
+ # @deprecated
4
6
  module Puppet::DataProviders::HieraSupport
5
7
  def config_path
6
8
  @hiera_config.nil? ? 'not yet configured' : @hiera_config.config_path
@@ -17,6 +19,10 @@ module Puppet::DataProviders::HieraSupport
17
19
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
18
20
  # @param merge [Puppet::Pops::MergeStrategy,String,Hash<String,Object>,nil] Merge strategy or hash with strategy and options
19
21
  def unchecked_lookup(key, lookup_invocation, merge)
22
+ unless Puppet[:strict] == :off
23
+ Puppet.warn_once(:deprecation, 'Puppet::DataProviders::HieraSupport',
24
+ 'Puppet::DataProviders::HieraSupport is deprecated and will be removed in the next major version of Puppet')
25
+ end
20
26
  lookup_invocation.with(:data_provider, self) do
21
27
  merge_strategy = Puppet::Pops::MergeStrategy.strategy(merge)
22
28
  lookup_invocation.with(:merge, merge_strategy) do
@@ -3,9 +3,15 @@
3
3
  require 'json'
4
4
 
5
5
  module Puppet::DataProviders
6
+ # TODO: API 5.0, remove this class
6
7
  # @api private
8
+ # @deprecated
7
9
  class JsonDataProviderFactory < Puppet::Plugins::DataProviders::FileBasedDataProviderFactory
8
10
  def create(name, paths, parent_data_provider)
11
+ unless Puppet[:strict] == :off
12
+ Puppet.warn_once(:deprecation, 'Puppet::DataProviders::JsonDataProviderFactory',
13
+ 'Puppet::DataProviders::JsonDataProviderFactory is deprecated and will be removed in the next major version of Puppet')
14
+ end
9
15
  JsonDataProvider.new(name, paths, parent_data_provider)
10
16
  end
11
17
 
@@ -14,9 +20,15 @@ module Puppet::DataProviders
14
20
  end
15
21
  end
16
22
 
23
+ # TODO: API 5.0, remove this class
17
24
  # @api private
25
+ # @deprecated
18
26
  class JsonDataProvider < Puppet::Plugins::DataProviders::PathBasedDataProvider
19
27
  def initialize_data(path, lookup_invocation)
28
+ unless Puppet[:strict] == :off
29
+ Puppet.warn_once(:deprecation, 'Puppet::DataProviders::JsonDataProvider',
30
+ 'Puppet::DataProviders::JsonDataProvider is deprecated and will be removed in the next major version of Puppet')
31
+ end
20
32
  JSON.parse(Puppet::FileSystem.read(path, :encoding => 'utf-8'))
21
33
  rescue JSON::ParserError => ex
22
34
  # Filename not included in message, so we add it here.