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,102 @@
1
+ module Puppet::Pops
2
+ module Lookup
3
+ # @api private
4
+ module DataProvider
5
+ def self.key_type
6
+ ensure_types_initialized
7
+ @key_type
8
+ end
9
+
10
+ def self.value_type
11
+ ensure_types_initialized
12
+ @value_type
13
+ end
14
+
15
+ def self.ensure_types_initialized
16
+ if @key_type.nil?
17
+ (@key_type, @value_type) = Pcore::register_aliases(
18
+ # The Pcore type for all keys and subkeys in a data hash.
19
+ 'Puppet::LookupKey' => 'Variant[String,Numeric]',
20
+
21
+ # The Pcore type for all values and sub-values in a data hash. The
22
+ # type is self-recursive to enforce the same constraint on values contained
23
+ # in arrays and hashes
24
+ 'Puppet::LookupValue' => <<-PUPPET
25
+ Variant[
26
+ Scalar,
27
+ Undef,
28
+ Sensitive,
29
+ Type,
30
+ Hash[Puppet::LookupKey, Puppet::LookupValue],
31
+ Array[Puppet::LookupValue]
32
+ ]
33
+ PUPPET
34
+ )
35
+ end
36
+ end
37
+
38
+ # Performs a lookup with an endless recursion check.
39
+ #
40
+ # @param key [LookupKey] The key to lookup
41
+ # @param lookup_invocation [Invocation] The current lookup invocation
42
+ # @param merge [MergeStrategy,String,Hash{String=>Object},nil] Merge strategy or hash with strategy and options
43
+ #
44
+ def key_lookup(key, lookup_invocation, merge)
45
+ lookup_invocation.check(key.to_s) { unchecked_key_lookup(key, lookup_invocation, merge) }
46
+ end
47
+
48
+ def lookup(key, lookup_invocation, merge)
49
+ lookup_invocation.check(key.to_s) { unchecked_key_lookup(key, lookup_invocation, merge) }
50
+ end
51
+
52
+ # Performs a lookup with the assumption that a recursive check has been made.
53
+ #
54
+ # @param key [LookupKey] The key to lookup
55
+ # @param lookup_invocation [Invocation] The current lookup invocation
56
+ # @param merge [MergeStrategy,String,Hash{String => Object},nil] Merge strategy, merge strategy name, strategy and options hash, or nil (implies "first found")
57
+ # @return [Object] the found object
58
+ # @throw :no_such_key when the object is not found
59
+ def unchecked_key_lookup(key, lookup_invocation, merge)
60
+ raise NotImplementedError, "Subclass of #{DataProvider.name} must implement 'unchecked_lookup' method"
61
+ end
62
+
63
+ # @return [String,nil] the name of the module that this provider belongs to nor `nil` if it doesn't belong to a module
64
+ def module_name
65
+ nil
66
+ end
67
+
68
+ # @return [String] the name of the this data provider
69
+ def name
70
+ raise NotImplementedError, "Subclass of #{DataProvider.name} must implement 'name' method"
71
+ end
72
+
73
+ # Asserts that _data_hash_ is a valid hash.
74
+ #
75
+ # @param data_provider [DataProvider] The data provider that produced the hash
76
+ # @param data_hash [Hash{String=>Object}] The data hash
77
+ # @return [Hash{String=>Object}] The data hash
78
+ def validate_data_hash(data_provider, data_hash)
79
+ Types::TypeAsserter.assert_instance_of(nil, Types::PHashType::DEFAULT, data_hash) { "Value returned from #{data_provider.name}" }
80
+ data_hash.each_pair { |k, v| validate_data_entry(data_provider, k, v) }
81
+ data_hash
82
+ end
83
+
84
+ def validate_data_value(data_provider, value, where = '')
85
+ Types::TypeAsserter.assert_instance_of(nil, DataProvider.value_type, value) { "Value #{where}returned from #{data_provider.name}" }
86
+ case value
87
+ when Hash
88
+ value.each_pair { |k, v| validate_data_entry(data_provider, k, v) }
89
+ when Array
90
+ value.each {|v| validate_data_value(data_provider, v, 'in array ') }
91
+ end
92
+ value
93
+ end
94
+
95
+ def validate_data_entry(data_provider, key, value)
96
+ Types::TypeAsserter.assert_instance_of(nil, DataProvider.key_type, key) { "Key in hash returned from #{data_provider.name}" }
97
+ validate_data_value(data_provider, value, 'in hash ')
98
+ nil
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,27 @@
1
+ require_relative 'configured_data_provider'
2
+
3
+ module Puppet::Pops
4
+ module Lookup
5
+ # @api private
6
+ class EnvironmentDataProvider < ConfiguredDataProvider
7
+ def place
8
+ 'Environment'
9
+ end
10
+
11
+ protected
12
+
13
+ def assert_config_version(config)
14
+ raise Puppet::DataBinding::LookupError, "#{config.name} cannot be used in an environment" unless config.version > 3
15
+ config
16
+ end
17
+
18
+ # Return the root of the environment
19
+ #
20
+ # @param lookup_invocation [Invocation] The current lookup invocation
21
+ # @return [Pathname] Path to root of the environment
22
+ def provider_root(lookup_invocation)
23
+ Pathname.new(lookup_invocation.scope.environment.configuration.path_to_env)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,4 +1,5 @@
1
- module Puppet::Pops::Lookup
1
+ module Puppet::Pops
2
+ module Lookup
2
3
 
3
4
  # The ExplainNode contains information of a specific node in a tree traversed during
4
5
  # lookup. The tree can be traversed using the `parent` and `branches` attributes of
@@ -17,13 +18,33 @@ module Puppet::Pops::Lookup
17
18
  hash
18
19
  end
19
20
 
20
- def to_s
21
+ def explain
21
22
  io = ''
22
23
  dump_on(io, '', '')
23
24
  io
24
25
  end
25
26
 
27
+ def inspect
28
+ to_s
29
+ end
30
+
31
+ def to_s
32
+ s = self.class.name
33
+ s = "#{s} with #{@branches.size} branches" unless @branches.nil?
34
+ s
35
+ end
36
+
37
+ def text(text)
38
+ @texts ||= []
39
+ @texts << text
40
+ end
41
+
26
42
  def dump_on(io, indent, first_indent)
43
+ dump_texts(io, indent)
44
+ end
45
+
46
+ def dump_texts(io, indent)
47
+ @texts.each { |text| io << indent << text << "\n" } if instance_variable_defined?(:@texts)
27
48
  end
28
49
  end
29
50
 
@@ -34,23 +55,22 @@ module Puppet::Pops::Lookup
34
55
  def initialize(parent)
35
56
  @parent = parent
36
57
  @event = nil
37
- @texts = nil
38
58
  end
39
59
 
40
60
  def found_in_overrides(key, value)
41
- @key = key
61
+ @key = key.to_s
42
62
  @value = value
43
63
  @event = :found_in_overrides
44
64
  end
45
65
 
46
66
  def found_in_defaults(key, value)
47
- @key = key
67
+ @key = key.to_s
48
68
  @value = value
49
69
  @event = :found_in_defaults
50
70
  end
51
71
 
52
72
  def found(key, value)
53
- @key = key
73
+ @key = key.to_s
54
74
  @value = value
55
75
  @event = :found
56
76
  end
@@ -60,22 +80,13 @@ module Puppet::Pops::Lookup
60
80
  @event = :result
61
81
  end
62
82
 
63
- def text(text)
64
- @texts ||= []
65
- @texts << text
66
- end
67
-
68
83
  def not_found(key)
69
- @key = key
84
+ @key = key.to_s
70
85
  @event = :not_found
71
86
  end
72
87
 
73
- def path_not_found
74
- @event = :path_not_found
75
- end
76
-
77
- def module_not_found
78
- @event = :module_not_found
88
+ def location_not_found
89
+ @event = :location_not_found
79
90
  end
80
91
 
81
92
  def increase_indent(indent)
@@ -97,19 +108,17 @@ module Puppet::Pops::Lookup
97
108
  end
98
109
 
99
110
  def dump_outcome(io, indent)
100
- io << indent << 'No such key: "' << @key << "\"\n" if @event == :not_found
101
- if [:found, :found_in_overrides, :found_in_defaults].include?(@event)
111
+ case @event
112
+ when :not_found
113
+ io << indent << 'No such key: "' << @key << "\"\n"
114
+ when :found, :found_in_overrides, :found_in_defaults
102
115
  io << indent << 'Found key: "' << @key << '" value: '
103
116
  dump_value(io, indent, @value)
104
117
  io << ' in overrides' if @event == :found_in_overrides
105
118
  io << ' in defaults' if @event == :found_in_defaults
106
119
  io << "\n"
107
120
  end
108
- dump_texts(io, indent, @texts)
109
- end
110
-
111
- def dump_texts(io, indent, texts)
112
- texts.each { |text| io << indent << text << "\n" } unless texts.nil?
121
+ dump_texts(io, indent)
113
122
  end
114
123
 
115
124
  def dump_value(io, indent, value)
@@ -144,13 +153,17 @@ module Puppet::Pops::Lookup
144
153
  io << value.inspect
145
154
  end
146
155
  end
156
+
157
+ def to_s
158
+ "#{self.class.name}: #{@key}, #{@event}"
159
+ end
147
160
  end
148
161
 
149
162
  class ExplainTop < ExplainTreeNode
150
163
  def initialize(parent, type, key)
151
164
  super(parent)
152
165
  @type = type
153
- self.key = key
166
+ self.key = key.to_s
154
167
  end
155
168
 
156
169
  def dump_on(io, indent, first_indent)
@@ -163,7 +176,7 @@ module Puppet::Pops::Lookup
163
176
  class ExplainInvalidKey < ExplainTreeNode
164
177
  def initialize(parent, key)
165
178
  super(parent)
166
- @key = key
179
+ @key = key.to_s
167
180
  end
168
181
 
169
182
  def dump_on(io, indent, first_indent)
@@ -195,6 +208,34 @@ module Puppet::Pops::Lookup
195
208
  end
196
209
  end
197
210
 
211
+ class ExplainModule < ExplainTreeNode
212
+ def initialize(parent, module_name)
213
+ super(parent)
214
+ @module_name = module_name
215
+ end
216
+
217
+ def dump_on(io, indent, first_indent)
218
+ case @event
219
+ when :module_not_found
220
+ io << indent << 'Module "' << @module_name << "\" not found\n"
221
+ when :module_provider_not_found
222
+ io << indent << 'Module data provider for module "' << @module_name << "\" not found\n"
223
+ end
224
+ end
225
+
226
+ def module_not_found
227
+ @event = :module_not_found
228
+ end
229
+
230
+ def module_provider_not_found
231
+ @event = :module_provider_not_found
232
+ end
233
+
234
+ def type
235
+ :module
236
+ end
237
+ end
238
+
198
239
  class ExplainInterpolate < ExplainTreeNode
199
240
  def initialize(parent, expression)
200
241
  super(parent)
@@ -269,39 +310,6 @@ module Puppet::Pops::Lookup
269
310
  end
270
311
  end
271
312
 
272
- class ExplainModule < ExplainTreeNode
273
- def initialize(parent, mod)
274
- super(parent)
275
- @module = mod
276
- end
277
-
278
- def dump_on(io, indent, first_indent)
279
- io << indent << 'Module "' << @module << '"'
280
- if branches.size == 1
281
- branches[0].dump_on(io, indent, ' using ')
282
- else
283
- io << "\n"
284
- indent = increase_indent(indent)
285
- branches.each {|b| b.dump_on(io, indent, indent)}
286
- end
287
- io << indent << "Module not found\n" if @event == :module_not_found
288
- end
289
-
290
- def to_hash
291
- if branches.size == 1
292
- branches[0].to_hash.merge(:module => @module)
293
- else
294
- hash = super
295
- hash[:module] = @module
296
- hash
297
- end
298
- end
299
-
300
- def type
301
- :module
302
- end
303
- end
304
-
305
313
  class ExplainGlobal < ExplainTreeNode
306
314
  def initialize(parent, binding_terminus)
307
315
  super(parent)
@@ -333,9 +341,12 @@ module Puppet::Pops::Lookup
333
341
  end
334
342
 
335
343
  def dump_on(io, indent, first_indent)
336
- io << first_indent << 'Data Provider "' << @provider.name << "\"\n"
344
+ io << first_indent << @provider.name << "\n"
337
345
  indent = increase_indent(indent)
338
- io << indent << 'ConfigurationPath "' << @provider.config_path.to_s << "\"\n" if @provider.respond_to?(:config_path)
346
+ if @provider.respond_to?(:config_path)
347
+ path = @provider.config_path
348
+ io << indent << 'Using configuration "' << path.to_s << "\"\n" unless path.nil?
349
+ end
339
350
  branches.each {|b| b.dump_on(io, indent, indent)}
340
351
  dump_outcome(io, indent)
341
352
  end
@@ -343,7 +354,11 @@ module Puppet::Pops::Lookup
343
354
  def to_hash
344
355
  hash = super
345
356
  hash[:name] = @provider.name
346
- hash[:configuration_path] = @provider.config_path.to_s if @provider.respond_to?(:config_path)
357
+ if @provider.respond_to?(:config_path)
358
+ path = @provider.config_path
359
+ hash[:configuration_path] = path.to_s unless path.nil?
360
+ end
361
+ hash[:module] = @provider.module_name if @provider.is_a?(ModuleDataProvider)
347
362
  hash
348
363
  end
349
364
 
@@ -352,30 +367,38 @@ module Puppet::Pops::Lookup
352
367
  end
353
368
  end
354
369
 
355
- class ExplainPath < ExplainTreeNode
356
- def initialize(parent, path)
370
+ class ExplainLocation < ExplainTreeNode
371
+ def initialize(parent, location)
357
372
  super(parent)
358
- @path = path
373
+ @location = location
359
374
  end
360
375
 
361
376
  def dump_on(io, indent, first_indent)
362
- io << indent << 'Path "' << @path.path.to_s << "\"\n"
377
+ location = @location.location
378
+ type_name = type == :path ? 'Path' : 'URI'
379
+ io << indent << type_name << ' "' << location.to_s << "\"\n"
363
380
  indent = increase_indent(indent)
364
- io << indent << 'Original path: "' << @path.original_path << "\"\n"
381
+ io << indent << 'Original ' << type_name.downcase << ': "' << @location.original_location << "\"\n"
365
382
  branches.each {|b| b.dump_on(io, indent, indent)}
366
- io << indent << "Path not found\n" if @event == :path_not_found
383
+ io << indent << type_name << " not found\n" if @event == :location_not_found
367
384
  dump_outcome(io, indent)
368
385
  end
369
386
 
370
387
  def to_hash
371
388
  hash = super
372
- hash[:original_path] = @path.original_path
373
- hash[:path] = @path.path.to_s
389
+ location = @location.location
390
+ if type == :path
391
+ hash[:original_path] = @location.original_location
392
+ hash[:path] = location.to_s
393
+ else
394
+ hash[:original_uri] = @location.original_location
395
+ hash[:uri] = location.to_s
396
+ end
374
397
  hash
375
398
  end
376
399
 
377
400
  def type
378
- :path
401
+ @location.location.is_a?(Pathname) ? :path : :uri
379
402
  end
380
403
  end
381
404
 
@@ -413,16 +436,23 @@ module Puppet::Pops::Lookup
413
436
  end
414
437
 
415
438
  class ExplainScope < ExplainTreeNode
416
- def initialize(parent)
439
+ def initialize(parent, name)
417
440
  super(parent)
441
+ @name = name
418
442
  end
419
443
 
420
444
  def dump_on(io, indent, first_indent)
421
- io << indent << 'Global Scope' << "\n"
445
+ io << indent << @name << "\n"
422
446
  indent = increase_indent(indent)
423
447
  dump_outcome(io, indent)
424
448
  end
425
449
 
450
+ def to_hash
451
+ hash = super
452
+ hash[:name] = @name
453
+ hash
454
+ end
455
+
426
456
  def type
427
457
  :scope
428
458
  end
@@ -439,18 +469,18 @@ module Puppet::Pops::Lookup
439
469
  node = case (qualifier_type)
440
470
  when :global
441
471
  ExplainGlobal.new(@current, qualifier)
442
- when :path
443
- ExplainPath.new(@current, qualifier)
444
- when :module
445
- ExplainModule.new(@current, qualifier)
472
+ when :location
473
+ ExplainLocation.new(@current, qualifier)
446
474
  when :interpolate
447
475
  ExplainInterpolate.new(@current, qualifier)
448
476
  when :data_provider
449
477
  ExplainDataProvider.new(@current, qualifier)
450
478
  when :merge
451
479
  ExplainMerge.new(@current, qualifier)
480
+ when :module
481
+ ExplainModule.new(@current, qualifier)
452
482
  when :scope
453
- ExplainScope.new(@current)
483
+ ExplainScope.new(@current, qualifier)
454
484
  when :sub_lookup
455
485
  ExplainSubLookup.new(@current, qualifier)
456
486
  when :segment
@@ -498,12 +528,20 @@ module Puppet::Pops::Lookup
498
528
  @current.not_found(key)
499
529
  end
500
530
 
501
- def accept_path_not_found
502
- @current.path_not_found
531
+ def accept_location_not_found
532
+ @current.location_not_found
503
533
  end
504
534
 
505
- def accept_module_not_found
535
+ def accept_module_not_found(module_name)
536
+ push(:module, module_name)
506
537
  @current.module_not_found
538
+ pop
539
+ end
540
+
541
+ def accept_module_provider_not_found(module_name)
542
+ push(:module, module_name)
543
+ @current.module_provider_not_found
544
+ pop
507
545
  end
508
546
 
509
547
  def accept_result(result)
@@ -516,6 +554,7 @@ module Puppet::Pops::Lookup
516
554
 
517
555
  def dump_on(io, indent, first_indent)
518
556
  branches.each { |b| b.dump_on(io, indent, first_indent) }
557
+ dump_texts(io, indent)
519
558
  end
520
559
 
521
560
  def to_hash
@@ -551,3 +590,4 @@ module Puppet::Pops::Lookup
551
590
  end
552
591
  end
553
592
  end
593
+ end