puppet 4.8.2-x86-mingw32 → 4.9.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (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 -2607
  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
@@ -0,0 +1,87 @@
1
+ require_relative 'hiera_config'
2
+ require_relative 'data_provider'
3
+
4
+ module Puppet::Pops
5
+ module Lookup
6
+ # @api private
7
+ class ConfiguredDataProvider
8
+ include DataProvider
9
+
10
+ # @param config [HieraConfig,nil] the configuration
11
+ def initialize(config = nil)
12
+ @config = config.nil? ? nil : assert_config_version(config)
13
+ end
14
+
15
+ def config(lookup_invocation)
16
+ @config ||= assert_config_version(HieraConfig.create(configuration_path(lookup_invocation)))
17
+ end
18
+
19
+ # @return [Pathname] the path to the configuration
20
+ def config_path
21
+ @config.nil? ? nil : @config.config_path
22
+ end
23
+
24
+ # @return [String] the name of this provider
25
+ def name
26
+ n = "#{place} "
27
+ n << '"' << module_name << '" ' unless module_name.nil?
28
+ n << 'Data Provider'
29
+ n << " (#{@config.name})" unless @config.nil?
30
+ n
31
+ end
32
+
33
+ # Performs a lookup by searching all configured locations for the given _key_. A merge will be performed if
34
+ # the value is found in more than one location.
35
+ #
36
+ # @param key [String] The key to lookup
37
+ # @param lookup_invocation [Invocation] The current lookup invocation
38
+ # @param merge [MergeStrategy,String,Hash{String => Object},nil] Merge strategy, merge strategy name, strategy and options hash, or nil (implies "first found")
39
+ # @return [Object] the found object
40
+ # @throw :no_such_key when the object is not found
41
+ def unchecked_key_lookup(key, lookup_invocation, merge)
42
+ lookup_invocation.with(:data_provider, self) do
43
+ merge_strategy = MergeStrategy.strategy(merge)
44
+ dps = data_providers(lookup_invocation)
45
+ if dps.empty?
46
+ lookup_invocation.report_not_found(key)
47
+ throw :no_such_key
48
+ end
49
+ merge_strategy.lookup(data_providers(lookup_invocation), lookup_invocation) do |data_provider|
50
+ data_provider.unchecked_key_lookup(key, lookup_invocation, merge_strategy)
51
+ end
52
+ end
53
+ end
54
+
55
+ protected
56
+
57
+ # Assert that the given config version is accepted by this data provider.
58
+ #
59
+ # @param config [HieraConfig] the configuration to check
60
+ # @return [HieraConfig] the argument
61
+ # @raise [Puppet::DataBinding::LookupError] if the configuration version is unacceptable
62
+ def assert_config_version(config)
63
+ config
64
+ end
65
+
66
+ # Return the root of the configured entity
67
+ #
68
+ # @param lookup_invocation [Invocation] The current lookup invocation
69
+ # @return [Pathname] Path to root of the module
70
+ # @raise [Puppet::DataBinding::LookupError] if the given module is can not be found
71
+ #
72
+ def provider_root(lookup_invocation)
73
+ raise NotImplementedError, "#{self.class.name} must implement method '#provider_root'"
74
+ end
75
+
76
+ def configuration_path(lookup_invocation)
77
+ provider_root(lookup_invocation) + HieraConfig::CONFIG_FILE_NAME
78
+ end
79
+
80
+ private
81
+
82
+ def data_providers(lookup_invocation)
83
+ config(lookup_invocation).configured_data_providers(lookup_invocation, self)
84
+ end
85
+ end
86
+ end
87
+ end
@@ -1,86 +1,136 @@
1
+ require_relative 'interpolation'
2
+
1
3
  module Puppet::Pops
2
- module Lookup
3
- class Context
4
- include Types::PuppetObject
4
+ module Lookup
5
+ # A FunctionContext is created for each unique hierarchy entry and adapted to the Compiler (and hence shares
6
+ # the compiler's life-cycle).
7
+ # @api private
8
+ class FunctionContext
9
+ include Interpolation
5
10
 
6
- def self._ptype
7
- @type
8
- end
11
+ attr_reader :environment_name, :module_name, :function
12
+ attr_accessor :data_hash
9
13
 
10
- def self.register_ptype(loader, ir)
11
- tf = Types::TypeFactory
12
- @type = Pcore::create_object_type(loader, ir, self, 'Puppet::LookupContext', 'Any',
13
- {
14
- 'environment_name' => Types::PStringType::NON_EMPTY,
15
- 'module_name' => {
16
- Types::KEY_TYPE => tf.optional(Types::PStringType::NON_EMPTY),
17
- Types::KEY_VALUE => nil
18
- }
19
- },
20
- {
21
- 'not_found' => tf.callable([0, 0], tf.undef),
22
- 'explain' => tf.callable([0, 0, tf.callable(0,0)], tf.undef),
23
- 'cache' => tf.callable([tf.scalar, tf.any], tf.undef),
24
- 'cache_all' => tf.callable([tf.hash_kv(tf.scalar, tf.any)], tf.undef),
25
- 'cached_value' => tf.callable([tf.scalar], tf.any),
26
- 'cached_entries' => tf.variant(
27
- tf.callable([0, 0, tf.callable(1,1)], tf.undef),
28
- tf.callable([0, 0, tf.callable(2,2)], tf.undef),
29
- tf.callable([0, 0], tf.iterable(tf.tuple([tf.scalar, tf.any])))
30
- )
31
- }
32
- ).resolve(Types::TypeParser.singleton, loader)
33
- end
34
-
35
- attr_reader :environment_name
36
- attr_reader :module_name
14
+ def initialize(environment_name, module_name, function)
15
+ @data_hash = nil
16
+ @cache = {}
17
+ @environment_name = environment_name
18
+ @module_name = module_name
19
+ @function = function
20
+ end
37
21
 
38
- def initialize(environment_name, module_name, lookup_invocation = Invocation.current)
39
- @lookup_invocation = lookup_invocation
40
- @environment_name = environment_name
41
- @module_name = module_name
42
- @cache = {}
43
- end
22
+ def cache(key, value)
23
+ @cache[key] = value
24
+ end
44
25
 
45
- def cache(key, value)
46
- @cache[key] = value
47
- nil
48
- end
26
+ def cache_all(hash)
27
+ @cache.merge!(hash)
28
+ nil
29
+ end
49
30
 
50
- def cache_all(hash)
51
- @cache.merge!(hash)
52
- nil
53
- end
31
+ def cache_has_key(key)
32
+ @cache.include?(key)
33
+ end
54
34
 
55
- def cached_value(key)
56
- @cache[key]
57
- end
35
+ def cached_value(key)
36
+ @cache[key]
37
+ end
58
38
 
59
- def cached_entries(&block)
60
- @cache
61
- if block_given?
62
- enumerator = @cache.each_pair
63
- @cache.size.times do
64
- if block.arity == 2
65
- yield(*enumerator.next)
66
- else
67
- yield(enumerator.next)
68
- end
69
- end
70
- nil
39
+ def cached_entries(&block)
40
+ if block_given?
41
+ enumerator = @cache.each_pair
42
+ @cache.size.times do
43
+ if block.arity == 2
44
+ yield(*enumerator.next)
71
45
  else
72
- Types::Iterable.on(@cache)
46
+ yield(enumerator.next)
73
47
  end
74
48
  end
49
+ nil
50
+ else
51
+ Types::Iterable.on(@cache)
52
+ end
53
+ end
54
+ end
75
55
 
76
- def explain(&block)
77
- @lookup_invocation.report_text(&block) unless @lookup_invocation.nil?
78
- nil
79
- end
56
+ # The Context is created once for each call to a function. It provides a combination of the {Invocation} object needed
57
+ # to provide explanation support and the {FunctionContext} object needed to provide the private cache.
58
+ # The {Context} is part of the public API. It will be passed to a _data_hash_, _data_dig_, or _lookup_key_ function and its
59
+ # attributes and methods can be used in a Puppet function as well as in a Ruby function.
60
+ # The {Context} is maps to the Pcore type 'Puppet::LookupContext'
61
+ #
62
+ # @api public
63
+ class Context
64
+ include Types::PuppetObject
65
+ extend Forwardable
80
66
 
81
- def not_found
82
- throw :no_such_key
83
- end
84
- end
67
+ def self._ptype
68
+ @type
69
+ end
70
+
71
+ def self.register_ptype(loader, ir)
72
+ tf = Types::TypeFactory
73
+ key_type = tf.optional(tf.scalar)
74
+ @type = Pcore::create_object_type(loader, ir, self, 'Puppet::LookupContext', 'Any',
75
+ {
76
+ 'environment_name' => Types::PStringType::NON_EMPTY,
77
+ 'module_name' => {
78
+ Types::KEY_TYPE => tf.optional(Types::PStringType::NON_EMPTY),
79
+ Types::KEY_VALUE => nil
80
+ }
81
+ },
82
+ {
83
+ 'not_found' => tf.callable([0, 0], tf.undef),
84
+ 'explain' => tf.callable([0, 0, tf.callable(0,0)], tf.undef),
85
+ 'interpolate' => tf.callable(1, 1),
86
+ 'cache' => tf.callable([key_type, tf.any], tf.any),
87
+ 'cache_all' => tf.callable([tf.hash_kv(key_type, tf.any)], tf.undef),
88
+ 'cache_has_key' => tf.callable([key_type], tf.boolean),
89
+ 'cached_value' => tf.callable([key_type], tf.any),
90
+ 'cached_entries' => tf.variant(
91
+ tf.callable([0, 0, tf.callable(1,1)], tf.undef),
92
+ tf.callable([0, 0, tf.callable(2,2)], tf.undef),
93
+ tf.callable([0, 0], tf.iterable(tf.tuple([key_type, tf.any])))
94
+ )
95
+ }
96
+ ).resolve(Types::TypeParser.singleton, loader)
97
+ end
98
+
99
+ # Mainly for test purposes. Makes it possible to create a {Context} in Puppet code provided that a current {Invocation} exists.
100
+ def self.from_asserted_args(environment_name, module_name)
101
+ new(FunctionContext.new(environment_name, module_name, nil), Invocation.current)
102
+ end
103
+
104
+ # Public methods delegated to the {FunctionContext}
105
+ def_delegators :@function_context, :cache, :cache_all, :cache_has_key, :cached_value, :cached_entries, :environment_name, :module_name
106
+
107
+ def initialize(function_context, lookup_invocation)
108
+ @lookup_invocation = lookup_invocation
109
+ @function_context = function_context
110
+ end
111
+
112
+ # Will call the given block to obtain a textual explanation if explanation support is active.
113
+ #
114
+ def explain(&block)
115
+ @lookup_invocation.report_text(&block)
116
+ nil
117
+ end
118
+
119
+ # Resolve interpolation expressions in the given value
120
+ # @param [Object] value
121
+ # @return [Object] the value with all interpolation expressions resolved
122
+ def interpolate(value)
123
+ @function_context.interpolate(value, @lookup_invocation, true)
124
+ end
125
+
126
+ def not_found
127
+ throw :no_such_key
85
128
  end
129
+
130
+ # @api private
131
+ def invocation
132
+ @lookup_invocation
133
+ end
134
+ end
135
+ end
86
136
  end
@@ -0,0 +1,27 @@
1
+ module Puppet::Pops
2
+ module Lookup
3
+ # A class that adapts a Hash
4
+ # @api private
5
+ class DataAdapter < Adaptable::Adapter
6
+ def self.create_adapter(o)
7
+ new
8
+ end
9
+
10
+ def initialize
11
+ @data = {}
12
+ end
13
+
14
+ def [](name)
15
+ @data[name]
16
+ end
17
+
18
+ def include?(name)
19
+ @data.include? name
20
+ end
21
+
22
+ def []=(name, value)
23
+ @data[name] = value
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,55 @@
1
+ require_relative 'function_provider'
2
+
3
+ module Puppet::Pops
4
+ module Lookup
5
+ # @api private
6
+ class DataDigFunctionProvider < FunctionProvider
7
+ TAG = 'data_dig'.freeze
8
+
9
+ # Performs a lookup with the assumption that a recursive check has been made.
10
+ #
11
+ # @param key [LookupKey] The key to lookup
12
+ # @param lookup_invocation [Invocation] The current lookup invocation
13
+ # @param merge [MergeStrategy,String,Hash{String => Object},nil] Merge strategy, merge strategy name, strategy and options hash, or nil (implies "first found")
14
+ # @return [Object] the found object
15
+ # @throw :no_such_key when the object is not found
16
+ def unchecked_key_lookup(key, lookup_invocation, merge)
17
+ segments = key.to_a
18
+ lookup_invocation.with(:data_provider, self) do
19
+ MergeStrategy.strategy(merge).lookup(locations, lookup_invocation) do |location|
20
+ if location.nil?
21
+ value = data_dig(key, segments, lookup_invocation, nil)
22
+ lookup_invocation.report_found(key, validate_data_value(self, value))
23
+ key.undig(value)
24
+ else
25
+ lookup_invocation.with(:location, location) do
26
+ if location.exist?
27
+ value = data_dig(key, segments, lookup_invocation, location.location)
28
+ lookup_invocation.report_found(key, validate_data_value(self, value))
29
+ key.undig(value)
30
+ else
31
+ lookup_invocation.report_path_not_found
32
+ throw :no_such_key
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def data_dig(key, segments, lookup_invocation, location)
43
+ ctx = function_context(lookup_invocation, location)
44
+ ctx.data_hash ||= {}
45
+ catch(:no_such_key) do
46
+ hash = ctx.data_hash
47
+ hash[key] = ctx.function.call(lookup_invocation.scope, segments, options(location), Context.new(ctx, lookup_invocation)) unless hash.include?(key)
48
+ return hash[key]
49
+ end
50
+ lookup_invocation.report_not_found(key)
51
+ throw :no_such_key
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,111 @@
1
+ require_relative 'function_provider'
2
+ require_relative 'interpolation'
3
+
4
+ module Puppet::Pops
5
+ module Lookup
6
+ # @api private
7
+ class DataHashFunctionProvider < FunctionProvider
8
+ include SubLookup
9
+ include Interpolation
10
+
11
+ TAG = 'data_hash'.freeze
12
+
13
+ # Performs a lookup with the assumption that a recursive check has been made.
14
+ #
15
+ # @param key [LookupKey] The key to lookup
16
+ # @param lookup_invocation [Invocation] The current lookup invocation
17
+ # @param merge [MergeStrategy,String,Hash{String => Object},nil] Merge strategy, merge strategy name, strategy and options hash, or nil (implies "first found")
18
+ # @return [Object] the found object
19
+ # @throw :no_such_key when the object is not found
20
+ def unchecked_key_lookup(key, lookup_invocation, merge)
21
+ root_key = key.root_key
22
+ lookup_invocation.with(:data_provider, self) do
23
+ MergeStrategy.strategy(merge).lookup(locations, lookup_invocation) do |location|
24
+ invoke_with_location(lookup_invocation, location, root_key)
25
+ end
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def invoke_with_location(lookup_invocation, location, root_key)
32
+ if location.nil?
33
+ lookup_key(lookup_invocation, nil, root_key)
34
+ else
35
+ lookup_invocation.with(:location, location) do
36
+ if location.exist?
37
+ lookup_key(lookup_invocation, location.location, root_key)
38
+ else
39
+ lookup_invocation.report_location_not_found
40
+ throw :no_such_key
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ def lookup_key(lookup_invocation, location, root_key)
47
+ lookup_invocation.report_found(root_key, data_value(lookup_invocation, location, root_key))
48
+ end
49
+
50
+ def data_value(lookup_invocation, location, root_key)
51
+ hash = data_hash(lookup_invocation, location)
52
+ value = hash[root_key]
53
+ if value.nil? && !hash.include?(root_key)
54
+ lookup_invocation.report_not_found(root_key)
55
+ throw :no_such_key
56
+ end
57
+ interpolate(value, lookup_invocation, true)
58
+ end
59
+
60
+ def data_hash(lookup_invocation, location)
61
+ ctx = function_context(lookup_invocation, location)
62
+ ctx.data_hash ||= parent_data_provider.validate_data_hash(self, call_data_hash_function(ctx, lookup_invocation, location))
63
+ end
64
+
65
+ def call_data_hash_function(ctx, lookup_invocation, location)
66
+ ctx.function.call(lookup_invocation.scope, options(location), Context.new(ctx, lookup_invocation))
67
+ end
68
+ end
69
+
70
+ # @api private
71
+ class V3DataHashFunctionProvider < DataHashFunctionProvider
72
+ TAG = 'v3_data_hash'.freeze
73
+
74
+ def initialize(name, parent_data_provider, function_name, options, locations)
75
+ @datadir = options.delete(HieraConfig::KEY_DATADIR)
76
+ super
77
+ end
78
+
79
+ def unchecked_key_lookup(key, lookup_invocation, merge)
80
+ extra_paths = lookup_invocation.hiera_v3_location_overrides
81
+ if extra_paths.nil? || extra_paths.empty?
82
+ super
83
+ else
84
+ # Extra paths provided. Must be resolved and placed in front of known paths
85
+ paths = parent_data_provider.config(lookup_invocation).resolve_paths(@datadir, extra_paths, lookup_invocation, false, ".#{@name}")
86
+ all_locations = paths + locations
87
+ root_key = key.root_key
88
+ lookup_invocation.with(:data_provider, self) do
89
+ MergeStrategy.strategy(merge).lookup(all_locations, lookup_invocation) do |location|
90
+ invoke_with_location(lookup_invocation, location, root_key)
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ # TODO: API 5.0, remove this class
98
+ # @api private
99
+ class V4DataHashFunctionProvider < DataHashFunctionProvider
100
+ TAG = 'v4_data_hash'.freeze
101
+
102
+ def name
103
+ "deprecated API function \"#{function_name}\""
104
+ end
105
+
106
+ def call_data_hash_function(ctx, lookup_invocation, location)
107
+ ctx.function.call(lookup_invocation.scope)
108
+ end
109
+ end
110
+ end
111
+ end