puppet 4.8.2 → 4.9.0

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.rb +52 -0
  11. data/lib/puppet/application/face_base.rb +4 -0
  12. data/lib/puppet/application/lookup.rb +4 -2
  13. data/lib/puppet/application/resource.rb +1 -1
  14. data/lib/puppet/data_providers.rb +6 -3
  15. data/lib/puppet/data_providers/data_adapter.rb +6 -0
  16. data/lib/puppet/data_providers/data_function_support.rb +7 -0
  17. data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
  18. data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
  19. data/lib/puppet/data_providers/hiera_config.rb +31 -10
  20. data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
  21. data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
  22. data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
  23. data/lib/puppet/data_providers/hiera_support.rb +6 -0
  24. data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
  25. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
  26. data/lib/puppet/defaults.rb +25 -4
  27. data/lib/puppet/face/ca.rb +2 -0
  28. data/lib/puppet/face/certificate_request.rb +2 -0
  29. data/lib/puppet/face/certificate_revocation_list.rb +2 -0
  30. data/lib/puppet/face/file.rb +3 -0
  31. data/lib/puppet/face/help.rb +19 -17
  32. data/lib/puppet/face/help/face.erb +3 -0
  33. data/lib/puppet/face/key.rb +1 -0
  34. data/lib/puppet/face/man.rb +4 -2
  35. data/lib/puppet/face/module/generate.rb +1 -1
  36. data/lib/puppet/face/status.rb +2 -0
  37. data/lib/puppet/feature/base.rb +9 -2
  38. data/lib/puppet/feature/hocon.rb +3 -0
  39. data/lib/puppet/file_system.rb +15 -3
  40. data/lib/puppet/file_system/windows.rb +8 -0
  41. data/lib/puppet/forge.rb +6 -6
  42. data/lib/puppet/forge/repository.rb +1 -2
  43. data/lib/puppet/functions/binary_file.rb +4 -10
  44. data/lib/puppet/functions/hiera_array.rb +1 -1
  45. data/lib/puppet/functions/hiera_include.rb +1 -1
  46. data/lib/puppet/functions/hocon_data.rb +24 -0
  47. data/lib/puppet/functions/json_data.rb +18 -0
  48. data/lib/puppet/functions/yaml_data.rb +21 -0
  49. data/lib/puppet/generate/type.rb +1 -1
  50. data/lib/puppet/graph/simple_graph.rb +4 -2
  51. data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
  52. data/lib/puppet/indirector/request.rb +5 -1
  53. data/lib/puppet/interface.rb +14 -2
  54. data/lib/puppet/interface/face_collection.rb +1 -1
  55. data/lib/puppet/module.rb +14 -2
  56. data/lib/puppet/module_tool.rb +4 -4
  57. data/lib/puppet/module_tool/applications/builder.rb +3 -2
  58. data/lib/puppet/module_tool/applications/installer.rb +14 -14
  59. data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
  60. data/lib/puppet/module_tool/installed_modules.rb +7 -7
  61. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  62. data/lib/puppet/module_tool/metadata.rb +1 -1
  63. data/lib/puppet/network/http/connection.rb +2 -0
  64. data/lib/puppet/network/http/webrick.rb +2 -1
  65. data/lib/puppet/parser/functions/hiera.rb +14 -0
  66. data/lib/puppet/parser/functions/hiera_array.rb +14 -0
  67. data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
  68. data/lib/puppet/parser/functions/hiera_include.rb +14 -0
  69. data/lib/puppet/parser/scope.rb +14 -20
  70. data/lib/puppet/plugins/data_providers.rb +2 -0
  71. data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
  72. data/lib/puppet/plugins/data_providers/registry.rb +2 -36
  73. data/lib/puppet/pops.rb +6 -9
  74. data/lib/puppet/pops/adaptable.rb +0 -3
  75. data/lib/puppet/pops/binder/producers.rb +3 -3
  76. data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
  77. data/lib/puppet/pops/evaluator/closure.rb +1 -1
  78. data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
  79. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  80. data/lib/puppet/pops/issues.rb +4 -0
  81. data/lib/puppet/pops/label_provider.rb +14 -0
  82. data/lib/puppet/pops/loader/loader_paths.rb +3 -1
  83. data/lib/puppet/pops/loader/module_loaders.rb +21 -7
  84. data/lib/puppet/pops/loader/typed_name.rb +0 -2
  85. data/lib/puppet/pops/loaders.rb +31 -12
  86. data/lib/puppet/pops/lookup.rb +4 -3
  87. data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
  88. data/lib/puppet/pops/lookup/context.rb +121 -71
  89. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  90. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
  91. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
  92. data/lib/puppet/pops/lookup/data_provider.rb +102 -0
  93. data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
  94. data/lib/puppet/pops/lookup/explainer.rb +122 -82
  95. data/lib/puppet/pops/lookup/function_provider.rb +82 -0
  96. data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
  97. data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
  98. data/lib/puppet/pops/lookup/interpolation.rb +56 -35
  99. data/lib/puppet/pops/lookup/invocation.rb +179 -101
  100. data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
  101. data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
  102. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  103. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
  104. data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
  105. data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
  106. data/lib/puppet/pops/merge_strategy.rb +120 -39
  107. data/lib/puppet/pops/parser/egrammar.ra +2 -0
  108. data/lib/puppet/pops/parser/eparser.rb +816 -808
  109. data/lib/puppet/pops/parser/locator.rb +3 -3
  110. data/lib/puppet/pops/parser/slurp_support.rb +4 -3
  111. data/lib/puppet/pops/pcore.rb +21 -12
  112. data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
  113. data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
  114. data/lib/puppet/pops/serialization/deserializer.rb +17 -4
  115. data/lib/puppet/pops/serialization/extension.rb +37 -8
  116. data/lib/puppet/pops/serialization/object.rb +14 -6
  117. data/lib/puppet/pops/serialization/rgen.rb +2 -1
  118. data/lib/puppet/pops/serialization/serializer.rb +30 -7
  119. data/lib/puppet/pops/types/implementation_registry.rb +1 -1
  120. data/lib/puppet/pops/types/p_object_type.rb +55 -12
  121. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
  122. data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
  123. data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
  124. data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
  125. data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
  126. data/lib/puppet/pops/types/recursion_guard.rb +64 -20
  127. data/lib/puppet/pops/types/ruby_generator.rb +10 -0
  128. data/lib/puppet/pops/types/type_calculator.rb +23 -13
  129. data/lib/puppet/pops/types/type_factory.rb +20 -9
  130. data/lib/puppet/pops/types/type_formatter.rb +37 -17
  131. data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
  132. data/lib/puppet/pops/types/type_parser.rb +6 -0
  133. data/lib/puppet/pops/types/types.rb +225 -132
  134. data/lib/puppet/pops/validation.rb +1 -1
  135. data/lib/puppet/pops/validation/checker4_0.rb +12 -2
  136. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  137. data/lib/puppet/pops/visitor.rb +4 -3
  138. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
  139. data/lib/puppet/provider/nameservice.rb +15 -0
  140. data/lib/puppet/provider/package/appdmg.rb +1 -1
  141. data/lib/puppet/provider/package/dnf.rb +1 -1
  142. data/lib/puppet/provider/package/pkg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  144. data/lib/puppet/provider/package/pkgng.rb +1 -1
  145. data/lib/puppet/provider/package/rpm.rb +2 -2
  146. data/lib/puppet/provider/service/smf.rb +3 -3
  147. data/lib/puppet/provider/service/systemd.rb +5 -1
  148. data/lib/puppet/provider/user/directoryservice.rb +1 -0
  149. data/lib/puppet/provider/user/user_role_add.rb +15 -0
  150. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  151. data/lib/puppet/provider/zone/solaris.rb +4 -1
  152. data/lib/puppet/reference/indirection.rb +1 -1
  153. data/lib/puppet/resource.rb +2 -3
  154. data/lib/puppet/resource/catalog.rb +12 -4
  155. data/lib/puppet/resource/type.rb +3 -3
  156. data/lib/puppet/settings.rb +1 -1
  157. data/lib/puppet/settings/config_file.rb +2 -1
  158. data/lib/puppet/settings/directory_setting.rb +6 -0
  159. data/lib/puppet/settings/environment_conf.rb +6 -2
  160. data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
  161. data/lib/puppet/settings/file_setting.rb +10 -0
  162. data/lib/puppet/ssl/certificate_authority.rb +13 -2
  163. data/lib/puppet/ssl/host.rb +23 -1
  164. data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
  165. data/lib/puppet/type/user.rb +16 -3
  166. data/lib/puppet/util.rb +1 -0
  167. data/lib/puppet/util/execution.rb +3 -3
  168. data/lib/puppet/util/filetype.rb +11 -5
  169. data/lib/puppet/util/logging.rb +2 -1
  170. data/lib/puppet/util/network_device/config.rb +1 -1
  171. data/lib/puppet/util/plist.rb +6 -0
  172. data/lib/puppet/util/profiler/aggregate.rb +1 -1
  173. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  174. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
  175. data/lib/puppet/util/windows/adsi.rb +15 -12
  176. data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  177. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
  178. data/lib/puppet/vendor/require_vendored.rb +0 -1
  179. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
  180. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
  181. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
  182. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
  183. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
  184. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
  185. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
  186. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  187. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
  188. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
  189. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
  190. data/lib/puppet/version.rb +1 -1
  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 -2593
  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.rb +0 -7
  338. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
  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
@@ -131,11 +131,12 @@ module Puppet::ModuleTool
131
131
  # TODO: This may necessarily change the order in which the metadata.json
132
132
  # file is packaged from what was written by the user. This is a
133
133
  # regretable, but required for now.
134
- File.open(metadata_path, 'w') do |f|
134
+ Puppet::FileSystem.open(metadata_path, nil, 'w:UTF-8') do |f|
135
135
  f.write(metadata.to_json)
136
136
  end
137
137
 
138
- File.open(File.join(build_path, 'checksums.json'), 'w') do |f|
138
+ # PSON.pretty_generate is a BINARY string
139
+ Puppet::FileSystem.open(File.join(build_path, 'checksums.json'), nil, 'wb') do |f|
139
140
  f.write(PSON.pretty_generate(Checksums.new(build_path)))
140
141
  end
141
142
  end
@@ -34,19 +34,19 @@ module Puppet::ModuleTool
34
34
  release = local_tarball_source.release
35
35
  @name = release.name
36
36
  options[:version] = release.version.to_s
37
- Semantic::Dependency.add_source(local_tarball_source)
37
+ SemanticPuppet::Dependency.add_source(local_tarball_source)
38
38
 
39
39
  # If we're operating on a local tarball and ignoring dependencies, we
40
40
  # don't need to search any additional sources. This will cut down on
41
41
  # unnecessary network traffic.
42
42
  unless @ignore_dependencies
43
- Semantic::Dependency.add_source(installed_modules_source)
44
- Semantic::Dependency.add_source(module_repository)
43
+ SemanticPuppet::Dependency.add_source(installed_modules_source)
44
+ SemanticPuppet::Dependency.add_source(module_repository)
45
45
  end
46
46
 
47
47
  else
48
- Semantic::Dependency.add_source(installed_modules_source) unless forced?
49
- Semantic::Dependency.add_source(module_repository)
48
+ SemanticPuppet::Dependency.add_source(installed_modules_source) unless forced?
49
+ SemanticPuppet::Dependency.add_source(module_repository)
50
50
  end
51
51
  end
52
52
 
@@ -59,7 +59,7 @@ module Puppet::ModuleTool
59
59
  begin
60
60
  if installed_module = installed_modules[name]
61
61
  unless forced?
62
- if Semantic::VersionRange.parse(version).include? installed_module.version
62
+ if SemanticPuppet::VersionRange.parse(version).include? installed_module.version
63
63
  results[:result] = :noop
64
64
  results[:version] = installed_module.version
65
65
  return results
@@ -103,7 +103,7 @@ module Puppet::ModuleTool
103
103
  # locking it to upgrades within the same major version.
104
104
  installed_range = ">=#{version} #{version.major}.x"
105
105
  graph.add_constraint('installed', mod, installed_range) do |node|
106
- Semantic::VersionRange.parse(installed_range).include? node.version
106
+ SemanticPuppet::VersionRange.parse(installed_range).include? node.version
107
107
  end
108
108
 
109
109
  release.mod.dependencies.each do |dep|
@@ -111,7 +111,7 @@ module Puppet::ModuleTool
111
111
 
112
112
  range = dep['version_requirement']
113
113
  graph.add_constraint("#{mod} constraint", dep_name, range) do |node|
114
- Semantic::VersionRange.parse(range).include? node.version
114
+ SemanticPuppet::VersionRange.parse(range).include? node.version
115
115
  end
116
116
  end
117
117
  end
@@ -125,8 +125,8 @@ module Puppet::ModuleTool
125
125
 
126
126
  begin
127
127
  Puppet.info "Resolving dependencies ..."
128
- releases = Semantic::Dependency.resolve(graph)
129
- rescue Semantic::Dependency::UnsatisfiableGraph
128
+ releases = SemanticPuppet::Dependency.resolve(graph)
129
+ rescue SemanticPuppet::Dependency::UnsatisfiableGraph
130
130
  raise NoVersionsSatisfyError, results.merge(:requested_name => name)
131
131
  end
132
132
 
@@ -205,15 +205,15 @@ module Puppet::ModuleTool
205
205
  end
206
206
 
207
207
  def build_single_module_graph(name, version)
208
- range = Semantic::VersionRange.parse(version)
209
- graph = Semantic::Dependency::Graph.new(name => range)
210
- releases = Semantic::Dependency.fetch_releases(name)
208
+ range = SemanticPuppet::VersionRange.parse(version)
209
+ graph = SemanticPuppet::Dependency::Graph.new(name => range)
210
+ releases = SemanticPuppet::Dependency.fetch_releases(name)
211
211
  releases.each { |release| release.dependencies.clear }
212
212
  graph << releases
213
213
  end
214
214
 
215
215
  def build_dependency_graph(name, version)
216
- Semantic::Dependency.query(name => version)
216
+ SemanticPuppet::Dependency.query(name => version)
217
217
  end
218
218
 
219
219
  def build_install_graph(release, installed, graphed = [])
@@ -21,8 +21,8 @@ module Puppet::ModuleTool
21
21
  @ignore_changes = forced? || options[:ignore_changes]
22
22
  @ignore_dependencies = forced? || options[:ignore_dependencies]
23
23
 
24
- Semantic::Dependency.add_source(installed_modules_source)
25
- Semantic::Dependency.add_source(module_repository)
24
+ SemanticPuppet::Dependency.add_source(installed_modules_source)
25
+ SemanticPuppet::Dependency.add_source(module_repository)
26
26
  end
27
27
 
28
28
  def run
@@ -48,7 +48,7 @@ module Puppet::ModuleTool
48
48
 
49
49
  installed_release = installed_modules[name]
50
50
 
51
- # `priority` is an attribute of a `Semantic::Dependency::Source`,
51
+ # `priority` is an attribute of a `SemanticPuppet::Dependency::Source`,
52
52
  # which is delegated through `ModuleRelease` instances for the sake of
53
53
  # comparison (sorting). By default, the `InstalledModules` source has
54
54
  # a priority of 10 (making it the most preferable source, so that
@@ -66,7 +66,7 @@ module Puppet::ModuleTool
66
66
  end
67
67
 
68
68
  mod = installed_release.mod
69
- results[:installed_version] = Semantic::Version.parse(mod.version)
69
+ results[:installed_version] = SemanticPuppet::Version.parse(mod.version)
70
70
  dir = Pathname.new(mod.modulepath)
71
71
 
72
72
  vstring = mod.version ? "v#{mod.version}" : '???'
@@ -90,7 +90,7 @@ module Puppet::ModuleTool
90
90
  if available_versions.empty?
91
91
  raise NoCandidateReleasesError, results.merge(:module_name => name, :source => module_repository.host)
92
92
  elsif results[:requested_version] != :latest
93
- requested = Semantic::VersionRange.parse(results[:requested_version])
93
+ requested = SemanticPuppet::VersionRange.parse(results[:requested_version])
94
94
  unless available_versions.any? {|m| requested.include? m.version}
95
95
  raise NoCandidateReleasesError, results.merge(:module_name => name, :source => module_repository.host)
96
96
  end
@@ -119,7 +119,7 @@ module Puppet::ModuleTool
119
119
  # module, locking it to upgrades within the same major version.
120
120
  installed_range = ">=#{version} #{version.major}.x"
121
121
  graph.add_constraint('installed', installed_module, installed_range) do |node|
122
- Semantic::VersionRange.parse(installed_range).include? node.version
122
+ SemanticPuppet::VersionRange.parse(installed_range).include? node.version
123
123
  end
124
124
 
125
125
  release.mod.dependencies.each do |dep|
@@ -127,7 +127,7 @@ module Puppet::ModuleTool
127
127
 
128
128
  range = dep['version_requirement']
129
129
  graph.add_constraint("#{installed_module} constraint", dep_name, range) do |node|
130
- Semantic::VersionRange.parse(range).include? node.version
130
+ SemanticPuppet::VersionRange.parse(range).include? node.version
131
131
  end
132
132
  end
133
133
  end
@@ -135,8 +135,8 @@ module Puppet::ModuleTool
135
135
 
136
136
  begin
137
137
  Puppet.info "Resolving dependencies ..."
138
- releases = Semantic::Dependency.resolve(graph)
139
- rescue Semantic::Dependency::UnsatisfiableGraph
138
+ releases = SemanticPuppet::Dependency.resolve(graph)
139
+ rescue SemanticPuppet::Dependency::UnsatisfiableGraph
140
140
  raise NoVersionsSatisfyError, results.merge(:requested_name => name)
141
141
  end
142
142
 
@@ -227,15 +227,15 @@ module Puppet::ModuleTool
227
227
  end
228
228
 
229
229
  def build_single_module_graph(name, version)
230
- range = Semantic::VersionRange.parse(version)
231
- graph = Semantic::Dependency::Graph.new(name => range)
232
- releases = Semantic::Dependency.fetch_releases(name)
230
+ range = SemanticPuppet::VersionRange.parse(version)
231
+ graph = SemanticPuppet::Dependency::Graph.new(name => range)
232
+ releases = SemanticPuppet::Dependency.fetch_releases(name)
233
233
  releases.each { |release| release.dependencies.clear }
234
234
  graph << releases
235
235
  end
236
236
 
237
237
  def build_dependency_graph(name, version)
238
- Semantic::Dependency.query(name => version)
238
+ SemanticPuppet::Dependency.query(name => version)
239
239
  end
240
240
 
241
241
  def build_install_graph(release, installed, graphed = [])
@@ -4,7 +4,7 @@ require 'puppet/forge'
4
4
  require 'puppet/module_tool'
5
5
 
6
6
  module Puppet::ModuleTool
7
- class InstalledModules < Semantic::Dependency::Source
7
+ class InstalledModules < SemanticPuppet::Dependency::Source
8
8
  attr_reader :modules, :by_name
9
9
 
10
10
  def priority
@@ -33,9 +33,9 @@ module Puppet::ModuleTool
33
33
  # Fetches {ModuleRelease} entries for each release of the named module.
34
34
  #
35
35
  # @param name [String] the module name to look up
36
- # @return [Array<Semantic::Dependency::ModuleRelease>] a list of releases for
36
+ # @return [Array<SemanticPuppet::Dependency::ModuleRelease>] a list of releases for
37
37
  # the given name
38
- # @see Semantic::Dependency::Source#fetch
38
+ # @see SemanticPuppet::Dependency::Source#fetch
39
39
  def fetch(name)
40
40
  name = name.tr('/', '-')
41
41
 
@@ -51,7 +51,7 @@ module Puppet::ModuleTool
51
51
  @fetched
52
52
  end
53
53
 
54
- class ModuleRelease < Semantic::Dependency::ModuleRelease
54
+ class ModuleRelease < SemanticPuppet::Dependency::ModuleRelease
55
55
  attr_reader :mod, :metadata
56
56
 
57
57
  def initialize(source, mod)
@@ -59,10 +59,10 @@ module Puppet::ModuleTool
59
59
  @metadata = mod.metadata
60
60
  name = mod.forge_name.tr('/', '-')
61
61
  begin
62
- version = Semantic::Version.parse(mod.version)
63
- rescue Semantic::Version::ValidationFailure => e
62
+ version = SemanticPuppet::Version.parse(mod.version)
63
+ rescue SemanticPuppet::Version::ValidationFailure => e
64
64
  Puppet.warning "#{mod.name} (#{mod.path}) has an invalid version number (#{mod.version}). The version has been set to 0.0.0. If you are the maintainer for this module, please update the metadata.json with a valid Semantic Version (http://semver.org)."
65
- version = Semantic::Version.parse("0.0.0")
65
+ version = SemanticPuppet::Version.parse("0.0.0")
66
66
  end
67
67
  release = "#{name}@#{version}"
68
68
 
@@ -5,7 +5,7 @@ require 'puppet/forge'
5
5
  require 'puppet/module_tool'
6
6
 
7
7
  module Puppet::ModuleTool
8
- class LocalTarball < Semantic::Dependency::Source
8
+ class LocalTarball < SemanticPuppet::Dependency::Source
9
9
  attr_accessor :release
10
10
 
11
11
  def initialize(filename)
@@ -40,14 +40,14 @@ module Puppet::ModuleTool
40
40
  FileUtils.mv(staging_dir, module_dir)
41
41
  end
42
42
 
43
- class ModuleRelease < Semantic::Dependency::ModuleRelease
43
+ class ModuleRelease < SemanticPuppet::Dependency::ModuleRelease
44
44
  attr_reader :mod, :install_dir, :metadata
45
45
 
46
46
  def initialize(source, mod)
47
47
  @mod = mod
48
48
  @metadata = mod.metadata
49
49
  name = mod.forge_name.tr('/', '-')
50
- version = Semantic::Version.parse(mod.version)
50
+ version = SemanticPuppet::Version.parse(mod.version)
51
51
  release = "#{name}@#{version}"
52
52
 
53
53
  if mod.dependencies
@@ -213,7 +213,7 @@ module Puppet::ModuleTool
213
213
 
214
214
  # Validates that the version range can be parsed by Semantic.
215
215
  def validate_version_range(version_range)
216
- Semantic::VersionRange.parse(version_range)
216
+ SemanticPuppet::VersionRange.parse(version_range)
217
217
  rescue ArgumentError => e
218
218
  raise ArgumentError, "Invalid 'version_range' field in metadata.json: #{e}"
219
219
  end
@@ -197,6 +197,8 @@ module Puppet::Network::HTTP
197
197
  end
198
198
 
199
199
  def apply_options_to(request, options)
200
+ request["User-Agent"] = Puppet[:http_user_agent]
201
+
200
202
  if options[:basic_auth]
201
203
  request.basic_auth(options[:basic_auth][:user], options[:basic_auth][:password])
202
204
  end
@@ -73,7 +73,8 @@ class Puppet::Network::HTTP::WEBrick
73
73
  file = Puppet[:masterhttplog]
74
74
 
75
75
  # open the log manually to prevent file descriptor leak
76
- file_io = ::File.open(file, "a+")
76
+ # webrick logged strings may contain UTF-8
77
+ file_io = ::File.open(file, "a+:UTF-8")
77
78
  file_io.sync = true
78
79
  if defined?(Fcntl::FD_CLOEXEC)
79
80
  file_io.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
@@ -77,6 +77,20 @@ $users = hiera('users') | $key | { "Key \'${key}\' not found" }
77
77
  The returned value's data type depends on the types of the results. In the example
78
78
  above, Hiera matches the 'users' key and returns it as a hash.
79
79
 
80
+ The `hiera` function is deprecated in favor of using `lookup` and will be removed in 6.0.0.
81
+ See https://docs.puppet.com/puppet/#{Puppet.version}/reference/deprecated_language.html.
82
+ Replace the calls as follows:
83
+
84
+ | from | to |
85
+ | ---- | ---|
86
+ | hiera($key) | lookup($key) |
87
+ | hiera($key, $default) | lookup($key, { 'default_value' => $default }) |
88
+ | hiera($key, $default, $level) | override level not supported |
89
+
90
+ Note that calls using the 'override level' option are not directly supported by 'lookup' and the produced
91
+ result must be post processed to get exactly the same result, for example using simple hash/array `+` or
92
+ with calls to stdlib's `deep_merge` function depending on kind of hiera call and setting of merge in hiera.yaml.
93
+
80
94
  See
81
95
  [the documentation](https://docs.puppetlabs.com/hiera/latest/puppet.html#hiera-lookup-functions)
82
96
  for more information about Hiera lookup functions.
@@ -65,6 +65,20 @@ $allusers = hiera_array('users') | $key | { "Key \'${key}\' not found" }
65
65
  `hiera_array` expects that all values returned will be strings or arrays. If any matched
66
66
  value is a hash, Puppet raises a type mismatch error.
67
67
 
68
+ `hiera_array` is deprecated in favor of using `lookup` and will be removed in 6.0.0.
69
+ See https://docs.puppet.com/puppet/#{Puppet.version}/reference/deprecated_language.html.
70
+ Replace the calls as follows:
71
+
72
+ | from | to |
73
+ | ---- | ---|
74
+ | hiera_array($key) | lookup($key, { 'merge' => 'unique' }) |
75
+ | hiera_array($key, $default) | lookup($key, { 'default_value' => $default, 'merge' => 'unique' }) |
76
+ | hiera_array($key, $default, $level) | override level not supported |
77
+
78
+ Note that calls using the 'override level' option are not directly supported by 'lookup' and the produced
79
+ result must be post processed to get exactly the same result, for example using simple hash/array `+` or
80
+ with calls to stdlib's `deep_merge` function depending on kind of hiera call and setting of merge in hiera.yaml.
81
+
68
82
  See
69
83
  [the documentation](https://docs.puppetlabs.com/hiera/latest/puppet.html#hiera-lookup-functions)
70
84
  for more information about Hiera lookup functions.
@@ -75,6 +75,20 @@ $allusers = hiera_hash('users') | $key | { "Key \'${key}\' not found" }
75
75
  `hiera_hash` expects that all values returned will be hashes. If any of the values
76
76
  found in the data sources are strings or arrays, Puppet raises a type mismatch error.
77
77
 
78
+ `hiera_hash` is deprecated in favor of using `lookup` and will be removed in 6.0.0.
79
+ See https://docs.puppet.com/puppet/#{Puppet.version}/reference/deprecated_language.html.
80
+ Replace the calls as follows:
81
+
82
+ | from | to |
83
+ | ---- | ---|
84
+ | hiera_hash($key) | lookup($key, { 'merge' => 'hash' }) |
85
+ | hiera_hash($key, $default) | lookup($key, { 'default_value' => $default, 'merge' => 'hash' }) |
86
+ | hiera_hash($key, $default, $level) | override level not supported |
87
+
88
+ Note that calls using the 'override level' option are not directly supported by 'lookup' and the produced
89
+ result must be post processed to get exactly the same result, for example using simple hash/array `+` or
90
+ with calls to stdlib's `deep_merge` function depending on kind of hiera call and setting of merge in hiera.yaml.
91
+
78
92
  See
79
93
  [the documentation](https://docs.puppetlabs.com/hiera/latest/puppet.html#hiera-lookup-functions)
80
94
  for more information about Hiera lookup functions.
@@ -75,6 +75,20 @@ hiera_include('classes') | $key | {"Key \'${key}\' not found" }
75
75
  # "Key 'classes' not found".
76
76
  ~~~
77
77
 
78
+ `hiera_include` is deprecated in favor of using a combination of `include`and `lookup` and will be
79
+ removed in 6.0.0. See https://docs.puppet.com/puppet/#{Puppet.version}/reference/deprecated_language.html.
80
+ Replace the calls as follows:
81
+
82
+ | from | to |
83
+ | ---- | ---|
84
+ | hiera_include($key) | include(lookup($key, { 'merge' => 'unique' })) |
85
+ | hiera_include($key, $default) | include(lookup($key, { 'default_value' => $default, 'merge' => 'unique' })) |
86
+ | hiera_include($key, $default, $level) | override level not supported |
87
+
88
+ Note that calls using the 'override level' option are not directly supported by 'lookup' and the produced
89
+ result must be post processed to get exactly the same result, for example using simple hash/array `+` or
90
+ with calls to stdlib's `deep_merge` function depending on kind of hiera call and setting of merge in hiera.yaml.
91
+
78
92
  See [the documentation](http://links.puppetlabs.com/hierainclude) for more information
79
93
  and a more detailed example of how `hiera_include` uses array merge lookups to classify
80
94
  nodes.
@@ -23,6 +23,7 @@ class Puppet::Parser::Scope
23
23
 
24
24
  # Variables that always exist with nil value even if not set
25
25
  BUILT_IN_VARS = ['module_name'.freeze, 'caller_module_name'.freeze].freeze
26
+ EMPTY_HASH = {}.freeze
26
27
 
27
28
  Puppet::Util.logmethods(self)
28
29
 
@@ -83,11 +84,8 @@ class Puppet::Parser::Scope
83
84
  end
84
85
 
85
86
  def [](name)
86
- if @symbols.include?(name)
87
- @symbols[name]
88
- else
89
- super
90
- end
87
+ val = @symbols[name]
88
+ val.nil? && !@symbols.include?(val) ? super : val
91
89
  end
92
90
 
93
91
  def is_local_scope?
@@ -486,28 +484,24 @@ class Puppet::Parser::Scope
486
484
  # @return Object the value of the variable, or nil if it's not found
487
485
  #
488
486
  # @api public
489
- def lookupvar(name, options = {})
487
+ def lookupvar(name, options = EMPTY_HASH)
490
488
  unless name.is_a? String
491
489
  raise Puppet::ParseError, "Scope variable name #{name.inspect} is a #{name.class}, not a string"
492
490
  end
493
491
 
494
- table = @ephemeral.last
495
-
496
492
  if name =~ /^(.*)::(.+)$/
497
- class_name = $1
498
- variable_name = $2
499
- lookup_qualified_variable(class_name, variable_name, options)
493
+ return lookup_qualified_variable($1, $2, options)
494
+ end
495
+
496
+ table = @ephemeral.last
497
+ val = table[name]
498
+ return val unless val.nil? && !table.include?(name)
500
499
 
501
- # TODO: optimize with an assoc instead, this searches through scopes twice for a hit
502
- elsif table.include?(name)
503
- table[name]
500
+ next_scope = inherited_scope || enclosing_scope
501
+ if next_scope
502
+ next_scope.lookupvar(name, options)
504
503
  else
505
- next_scope = inherited_scope || enclosing_scope
506
- if next_scope
507
- next_scope.lookupvar(name, options)
508
- else
509
- variable_not_found(name)
510
- end
504
+ variable_not_found(name)
511
505
  end
512
506
  end
513
507
 
@@ -1,6 +1,8 @@
1
1
  module Puppet::Plugins; end
2
2
 
3
+ # TODO: API 5.0, remove this module
3
4
  # @api private
5
+ # @deprecated
4
6
  module Puppet::Plugins::DataProviders
5
7
 
6
8
  # The lookup **key** for the multibind containing data provider name per module
@@ -1,25 +1,37 @@
1
1
  require 'puppet/pops/lookup/interpolation'
2
2
 
3
+ # TODO: API 5.0, remove this module
4
+ # @api private
5
+ # @deprecated
3
6
  module Puppet::Plugins::DataProviders
4
- # @api private
7
+ # @deprecated
5
8
  module DataProvider
9
+ include Puppet::Pops::Lookup::DataProvider
6
10
  include Puppet::Pops::Lookup::Interpolation
7
11
 
8
- # Performs a lookup with an endless recursion check.
9
- #
10
- # @param key [String] The key to lookup
11
- # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
12
- # @param merge [String|Hash<String,Object>|nil] Merge strategy or hash with strategy and options
13
- def lookup(name, lookup_invocation, merge)
14
- lookup_invocation.check(name) { unchecked_lookup(name, lookup_invocation, merge) }
12
+ def key_lookup(key, lookup_invocation, merge)
13
+ lookup(key.to_s, lookup_invocation, merge)
14
+ end
15
+
16
+ def unchecked_key_lookup(key, lookup_invocation, merge)
17
+ unchecked_lookup(key.to_s, lookup_invocation, merge)
18
+ end
19
+
20
+ # @deprecated
21
+ def lookup(key, lookup_invocation, merge)
22
+ lookup_invocation.check(key) { unchecked_lookup(key, lookup_invocation, merge) }
15
23
  end
16
24
 
17
25
  # Performs a lookup with the assumption that a recursive check has been made.
18
26
  #
19
27
  # @param key [String] The key to lookup
20
28
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
21
- # @param merge [String|Hash<String,Object>|nil] Merge strategy or hash with strategy and options
29
+ # @param merge [String|Hash{String => Object}] Merge strategy or hash with strategy and options
22
30
  def unchecked_lookup(key, lookup_invocation, merge)
31
+ unless Puppet[:strict] == :off
32
+ Puppet.warn_once(:deprecation, 'DataProvider#unchecked_lookup',
33
+ 'DataProvider#unchecked_lookup is deprecated and will be removed in the next major version of Puppet')
34
+ end
23
35
  segments = split_key(key)
24
36
  root_key = segments.shift
25
37
  lookup_invocation.with(:data_provider, self) do
@@ -41,6 +53,7 @@ module Puppet::Plugins::DataProviders
41
53
  # @param value [Object] The value to perform post processing on
42
54
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
43
55
  # @return [Object] The result of post processing the value.
56
+ # @deprecated
44
57
  def post_process(value, lookup_invocation)
45
58
  interpolate(value, lookup_invocation, true)
46
59
  end
@@ -56,10 +69,15 @@ module Puppet::Plugins::DataProviders
56
69
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
57
70
  # @param merge [String|Hash<String,Object>|nil] Merge strategy or hash with strategy and options
58
71
  # @return [Hash] The data hash for the given _key_
72
+ # @deprecated
59
73
  def data(data_key, lookup_invocation)
74
+ unless Puppet[:strict] == :off
75
+ Puppet.warn_once(:deprecation, 'DataProvider#data',
76
+ 'DataProvider#data is deprecated and will be removed in the next major version of Puppet')
77
+ end
60
78
  compiler = lookup_invocation.scope.compiler
61
79
  adapter = Puppet::DataProviders::DataAdapter.get(compiler) || Puppet::DataProviders::DataAdapter.adapt(compiler)
62
- adapter.data[data_key] ||= validate_data(initialize_data(data_key, lookup_invocation), data_key)
80
+ adapter.data[data_key] ||= validate_data(initialize_data(data_key, lookup_invocation))
63
81
  end
64
82
  protected :data
65
83
 
@@ -67,7 +85,12 @@ module Puppet::Plugins::DataProviders
67
85
  #
68
86
  # @param key [String] The key to lookup
69
87
  # @return [String,nil] The data key or nil if not applicable
88
+ # @deprecated
70
89
  def data_key(key, lookup_invocation)
90
+ unless Puppet[:strict] == :off
91
+ Puppet.warn_once(:deprecation, 'DataProvider#data_key',
92
+ 'DataProvider#data_key is deprecated and will be removed in the next major version of Puppet')
93
+ end
71
94
  nil
72
95
  end
73
96
 
@@ -76,7 +99,12 @@ module Puppet::Plugins::DataProviders
76
99
  # @param data_key [String] The data key such as the name of a module or the constant 'environment'
77
100
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
78
101
  # @return [Hash] The hash of values
102
+ # @deprecated
79
103
  def initialize_data(data_key, lookup_invocation)
104
+ unless Puppet[:strict] == :off
105
+ Puppet.warn_once(:deprecation, 'DataProvider#initialize_data',
106
+ 'DataProvider#initialize_data is deprecated and will be removed in the next major version of Puppet')
107
+ end
80
108
  {}
81
109
  end
82
110
  protected :initialize_data
@@ -86,23 +114,38 @@ module Puppet::Plugins::DataProviders
86
114
  cname[cname.rindex(':')+1..-1]
87
115
  end
88
116
 
117
+ # @deprecated
89
118
  def validate_data(data, data_key)
90
119
  data
91
120
  end
92
121
  end
93
122
 
123
+ # TODO: API 5.0 Remove this class
124
+ # @deprecated
94
125
  # @api private
95
126
  class ModuleDataProvider
96
- LOOKUP_OPTIONS = Puppet::Pops::Lookup::LOOKUP_OPTIONS
127
+ LOOKUP_OPTIONS = 'lookup_options'.freeze
97
128
  include DataProvider
98
129
 
130
+ attr_reader :module_name
131
+
132
+ def initialize(module_name = nil)
133
+ unless Puppet[:strict] == :off
134
+ Puppet.warn_once(:deprecation, 'Plugins::DataProviders::ModuleDataProvider',
135
+ 'Plugins::DataProviders::ModuleDataProvider is deprecated and will be removed in the next major version of Puppet')
136
+ end
137
+ @module_name = module_name || Puppet::Pops::Lookup::Invocation.current.module_name
138
+ end
139
+
99
140
  # Retrieve the first segment of the qualified name _key_. This method will throw
100
141
  # :no_such_key unless the segment can be extracted.
101
142
  #
102
143
  # @param key [String] The key
103
144
  # @return [String] The first segment of the given key
145
+ # @api private
146
+ # @deprecated
104
147
  def data_key(key, lookup_invocation)
105
- return lookup_invocation.module_name if key == LOOKUP_OPTIONS
148
+ return module_name if key == LOOKUP_OPTIONS
106
149
  qual_index = key.index('::')
107
150
  throw :no_such_key if qual_index.nil?
108
151
  key[0..qual_index-1]
@@ -132,10 +175,21 @@ module Puppet::Plugins::DataProviders
132
175
  end
133
176
  end
134
177
 
178
+ # TODO: API 5.0 Remove this class
179
+ # @deprecated
135
180
  # @api private
136
181
  class EnvironmentDataProvider
137
182
  include DataProvider
138
183
 
184
+ def initialize
185
+ unless Puppet[:strict] == :off
186
+ Puppet.warn_once(:deprecation, 'Plugins::DataProviders::EnvironmentDataProvider',
187
+ 'Plugins::DataProviders::EnvironmentDataProvider is deprecated and will be removed in the next major version of Puppet')
188
+ end
189
+ end
190
+
191
+ # @api private
192
+ # @deprecated
139
193
  def data_key(key, lookup_invocation)
140
194
  'environment'
141
195
  end
@@ -145,11 +199,13 @@ module Puppet::Plugins::DataProviders
145
199
  # the fully resolved path, and whether or the resolved path exists.
146
200
  #
147
201
  # @api private
202
+ # @deprecated
148
203
  class ResolvedPath
149
204
  attr_reader :original_path, :path
150
205
 
151
206
  # @param original_path [String] path as found in declaration. May contain interpolation expressions
152
207
  # @param path [Pathname] the expanded absolute path
208
+ # @deprecated
153
209
  def initialize(original_path, path)
154
210
  @original_path = original_path
155
211
  @path = path
@@ -157,11 +213,12 @@ module Puppet::Plugins::DataProviders
157
213
  end
158
214
 
159
215
  # @return [Boolean] cached info if the path exists or not
160
- # @api public
216
+ # @deprecated
161
217
  def exists?
162
218
  @exists = @path.exist? if @exists.nil?
163
219
  @exists
164
220
  end
221
+ alias exist? exists?
165
222
  end
166
223
 
167
224
  # A data provider that is initialized with a set of _paths_. When performing lookup, each
@@ -170,6 +227,7 @@ module Puppet::Plugins::DataProviders
170
227
  #
171
228
  # @abstract
172
229
  # @api private
230
+ # @deprecated
173
231
  class PathBasedDataProvider
174
232
  include DataProvider
175
233
 
@@ -178,7 +236,12 @@ module Puppet::Plugins::DataProviders
178
236
  # @param name [String] The name of the data provider
179
237
  # @param paths [Array<ResolvedPath>] Paths used by this provider
180
238
  # @param parent_data_provider [DataProvider] The data provider that is the container of this data provider
239
+ # @deprecated
181
240
  def initialize(name, paths, parent_data_provider = nil)
241
+ unless Puppet[:strict] == :off
242
+ Puppet.warn_once(:deprecation, 'PathBasedDataProvider',
243
+ 'PathBasedDataProvider is deprecated and will be removed in the next major version of Puppet')
244
+ end
182
245
  @name = name
183
246
  @paths = paths
184
247
  @parent_data_provider = parent_data_provider
@@ -196,6 +259,7 @@ module Puppet::Plugins::DataProviders
196
259
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
197
260
  # @param merge [String|Hash<String,Object>|nil] Merge strategy or hash with strategy and options
198
261
  # @return [Hash] The data hash for the given _key_
262
+ # @deprecated
199
263
  def load_data(path, data_key, lookup_invocation)
200
264
  compiler = lookup_invocation.scope.compiler
201
265
  adapter = Puppet::DataProviders::DataAdapter.get(compiler) || Puppet::DataProviders::DataAdapter.adapt(compiler)
@@ -203,6 +267,7 @@ module Puppet::Plugins::DataProviders
203
267
  end
204
268
  protected :data
205
269
 
270
+ # @deprecated
206
271
  def validate_data(data, module_name)
207
272
  @parent_data_provider.nil? ? data : @parent_data_provider.validate_data(data, module_name)
208
273
  end
@@ -213,6 +278,7 @@ module Puppet::Plugins::DataProviders
213
278
  # @param key [String] The key to lookup
214
279
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
215
280
  # @param merge [Puppet::Pops::MergeStrategy,String,Hash<String,Object>,nil] Merge strategy or hash with strategy and options
281
+ # @deprecated
216
282
  def unchecked_lookup(key, lookup_invocation, merge)
217
283
  segments = split_key(key)
218
284
  root_key = segments.shift
@@ -222,7 +288,7 @@ module Puppet::Plugins::DataProviders
222
288
  merge_strategy = Puppet::Pops::MergeStrategy.strategy(merge)
223
289
  lookup_invocation.with(:merge, merge_strategy) do
224
290
  merged_result = merge_strategy.merge_lookup(@paths) do |path|
225
- lookup_invocation.with(:path, path) do
291
+ lookup_invocation.with(:location, path) do
226
292
  if path.exists?
227
293
  hash = load_data(path.path, module_name, lookup_invocation)
228
294
  value = hash[root_key]
@@ -234,7 +300,7 @@ module Puppet::Plugins::DataProviders
234
300
  throw :no_such_key
235
301
  end
236
302
  else
237
- lookup_invocation.report_path_not_found
303
+ lookup_invocation.report_location_not_found
238
304
  throw :no_such_key
239
305
  end
240
306
  end
@@ -245,17 +311,28 @@ module Puppet::Plugins::DataProviders
245
311
  end
246
312
  end
247
313
 
314
+ # TODO: API 5.0 Remove this class
248
315
  # Factory for creating path based data providers
249
316
  #
250
317
  # @abstract
251
318
  # @api private
319
+ # @deprecated
252
320
  class PathBasedDataProviderFactory
321
+ # @deprecated
322
+ def initialize
323
+ unless Puppet[:strict] == :off
324
+ Puppet.warn_once(:deprecation, 'PathBasedDataProviderFactory',
325
+ 'PathBasedDataProviderFactory is deprecated and will be removed in the next major version of Puppet')
326
+ end
327
+ end
328
+
253
329
  # Create a path based data provider with the given _name_ and _paths_
254
330
  #
255
331
  # @param name [String] the name of the created provider (for logging and debugging)
256
332
  # @param paths [Array<String>] array of resolved paths
257
333
  # @param parent_data_provider [DataProvider] The data provider that is the container of this data provider
258
334
  # @return [DataProvider] The created data provider
335
+ # @deprecated
259
336
  def create(name, paths, parent_data_provider)
260
337
  raise NotImplementedError, "Subclass of PathBasedDataProviderFactory must implement 'create' method"
261
338
  end
@@ -271,6 +348,7 @@ module Puppet::Plugins::DataProviders
271
348
  # @param paths [Array<String>] paths that have been preprocessed (interpolations resolved)
272
349
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
273
350
  # @return [Array<ResolvedPath>] Array of resolved paths
351
+ # @deprecated
274
352
  def resolve_paths(datadir, declared_paths, paths, lookup_invocation)
275
353
  []
276
354
  end
@@ -283,30 +361,43 @@ module Puppet::Plugins::DataProviders
283
361
  end
284
362
  end
285
363
 
364
+ # TODO: API 5.0 Remove this class
286
365
  # Factory for creating file based data providers. This is an extension of the path based
287
366
  # factory where it is required that each resolved path appoints an existing file in the local
288
367
  # file system.
289
368
  #
290
369
  # @abstract
291
370
  # @api private
371
+ # @deprecated
292
372
  class FileBasedDataProviderFactory < PathBasedDataProviderFactory
373
+ # @deprecated
374
+ def initialize
375
+ unless Puppet[:strict] == :off
376
+ Puppet.warn_once(:deprecation, 'FileBasedDataProviderFactory',
377
+ 'FileBasedDataProviderFactory is deprecated and will be removed in the next major version of Puppet')
378
+ end
379
+ end
380
+
293
381
  # @param datadir [Pathname] The base when creating absolute paths
294
382
  # @param declared_paths [Array<String>] paths as found in declaration. May contain interpolation expressions
295
383
  # @param paths [Array<String>] paths that have been preprocessed (interpolations resolved)
296
384
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
297
- # @return [Array<ResolvedPath>] Array of resolved paths
385
+ # @return [Array<Puppet::DataProviders::ResolvedLocation>] Array of resolved paths
386
+ # @deprecated
298
387
  def resolve_paths(datadir, declared_paths, paths, lookup_invocation)
299
388
  resolved_paths = []
300
389
  unless paths.nil? || datadir.nil?
301
390
  ext = path_extension
302
391
  paths.each_with_index do |path, idx|
303
392
  path = path + ext unless path.end_with?(ext)
304
- resolved_paths << ResolvedPath.new(declared_paths[idx], datadir + path)
393
+ path = datadir + path
394
+ resolved_paths << Puppet::Pops::Lookup::ResolvedLocation.new(declared_paths[idx], path, path.exist?)
305
395
  end
306
396
  end
307
397
  resolved_paths
308
398
  end
309
399
 
400
+ # @deprecated
310
401
  def path_extension
311
402
  raise NotImplementedError, "Subclass of FileBasedProviderFactory must implement 'path_extension' method"
312
403
  end