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
@@ -1,254 +0,0 @@
1
- # A LookupAdapter is a specialized DataAdapter that uses its hash to store module providers. It also remembers the compiler
2
- # that it is attached to and maintains a cache of _lookup options_ retrieved from the data providers associated with the
3
- # compiler's environment.
4
- #
5
- # @api private
6
- class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter
7
-
8
- LOOKUP_OPTIONS = Puppet::Pops::Lookup::LOOKUP_OPTIONS
9
- LOOKUP_OPTIONS_PREFIX = LOOKUP_OPTIONS + '.'
10
- LOOKUP_OPTIONS_PREFIX.freeze
11
- HASH = 'hash'.freeze
12
- MERGE = 'merge'.freeze
13
-
14
- def self.create_adapter(compiler)
15
- new(compiler)
16
- end
17
-
18
- def initialize(compiler)
19
- super()
20
- @compiler = compiler
21
- @lookup_options = {}
22
- end
23
-
24
- # Performs a lookup using global, environment, and module data providers. Merge the result using the given
25
- # _merge_ strategy. If the merge strategy is nil, then an attempt is made to find merge options in the
26
- # `lookup_options` hash for an entry associated with the key. If no options are found, the no merge is performed
27
- # and the first found entry is returned.
28
- #
29
- # @param key [String] The key to lookup
30
- # @param merge [Puppet::Pops::MergeStrategy,String,Hash<String,Object>,nil] Merge strategy or hash with strategy and options
31
- # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] Invocation data containing scope, overrides, and defaults
32
- # @return [Object] The found value
33
- # @throws :no_such_key if the given key is not found
34
- #
35
- def lookup(key, lookup_invocation, merge)
36
- # The 'lookup_options' key is reserved and not found as normal data
37
- if key == LOOKUP_OPTIONS || key.start_with?(LOOKUP_OPTIONS_PREFIX)
38
- lookup_invocation.with(:invalid_key, LOOKUP_OPTIONS) do
39
- throw :no_such_key
40
- end
41
- end
42
-
43
- lookup_invocation.top_key ||= key
44
- merge_explained = false
45
- if lookup_invocation.explain_options?
46
- catch(:no_such_key) do
47
- module_name = extract_module_name(key) unless key == Puppet::Pops::Lookup::GLOBAL
48
- lookup_invocation.module_name = module_name
49
- if lookup_invocation.only_explain_options?
50
- do_lookup(LOOKUP_OPTIONS, lookup_invocation, HASH)
51
- return nil
52
- end
53
-
54
- # Bypass cache and do a "normal" lookup of the lookup_options
55
- lookup_invocation.with(:meta, LOOKUP_OPTIONS) do
56
- key_options = do_lookup(LOOKUP_OPTIONS, lookup_invocation, HASH)[key]
57
- merge = key_options[MERGE] unless key_options.nil?
58
- merge_explained = true
59
- end
60
- end
61
- elsif merge.nil?
62
- # Used cached lookup_options
63
- merge = lookup_merge_options(key, lookup_invocation)
64
- lookup_invocation.report_merge_source('lookup_options') unless merge.nil?
65
- end
66
-
67
- if merge_explained
68
- # Merge lookup is explained in detail so we need to explain the data in a section
69
- # on the same level to avoid confusion
70
- lookup_invocation.with(:data, key) { do_lookup(key, lookup_invocation, merge) }
71
- else
72
- do_lookup(key, lookup_invocation, merge)
73
- end
74
- end
75
-
76
- # @api private
77
- def lookup_global(name, lookup_invocation, merge_strategy)
78
- terminus = Puppet[:data_binding_terminus]
79
- lookup_invocation.with(:global, terminus) do
80
- catch(:no_such_key) do
81
- return lookup_invocation.report_found(name, Puppet::DataBinding.indirection.find(name,
82
- { :environment => environment, :variables => lookup_invocation.scope, :merge => merge_strategy }))
83
- end
84
- lookup_invocation.report_not_found(name)
85
- throw :no_such_key
86
- end
87
- rescue Puppet::DataBinding::LookupError => detail
88
- error = Puppet::Error.new("Lookup of key '#{lookup_invocation.top_key}' failed: #{detail.message}")
89
- error.set_backtrace(detail.backtrace)
90
- raise error
91
- end
92
-
93
- # @api private
94
- def lookup_in_environment(name, lookup_invocation, merge_strategy)
95
- env_provider.lookup(name, lookup_invocation, merge_strategy)
96
- end
97
-
98
- # @api private
99
- def lookup_in_module(name, lookup_invocation, merge_strategy)
100
- module_name = lookup_invocation.module_name || extract_module_name(name)
101
-
102
- # Do not attempt to do a lookup in a module unless the name is qualified.
103
- throw :no_such_key if module_name.nil?
104
-
105
- lookup_invocation.with(:module, module_name) do
106
- if environment.module(module_name).nil?
107
- lookup_invocation.report_module_not_found
108
- throw :no_such_key
109
- end
110
- module_provider(module_name).lookup(name, lookup_invocation, merge_strategy)
111
- end
112
- end
113
-
114
- # Retrieve the merge options that match the given `name`.
115
- #
116
- # @param name [String] The key for which we want merge options
117
- # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] the lookup invocation
118
- # @return [String,Hash,nil] The found merge options or nil
119
- #
120
- def lookup_merge_options(name, lookup_invocation)
121
- lookup_options = lookup_lookup_options(name, lookup_invocation)
122
- lookup_options.nil? ? nil : lookup_options[MERGE]
123
- end
124
-
125
- # Retrieve the lookup options that match the given `name`.
126
- #
127
- # @param name [String] The key for which we want lookup options
128
- # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] the lookup invocation
129
- # @return [String,Hash,nil] The found lookup options or nil
130
- #
131
- def lookup_lookup_options(name, lookup_invocation)
132
- module_name = extract_module_name(name)
133
-
134
- # Retrieve the options for the module. We use nil as a key in case we have none
135
- if !@lookup_options.include?(module_name)
136
- options = retrieve_lookup_options(module_name, lookup_invocation, Puppet::Pops::MergeStrategy.strategy(HASH))
137
- raise Puppet::DataBinding::LookupError.new("value of #{LOOKUP_OPTIONS} must be a hash") unless options.nil? || options.is_a?(Hash)
138
- @lookup_options[module_name] = options
139
- else
140
- options = @lookup_options[module_name]
141
- end
142
- options.nil? ? nil : options[name]
143
- end
144
-
145
- private
146
-
147
- def do_lookup(key, lookup_invocation, merge)
148
- merge_strategy = Puppet::Pops::MergeStrategy.strategy(merge)
149
- lookup_invocation.with(:merge, merge_strategy) do
150
- result = merge_strategy.merge_lookup([:lookup_global, :lookup_in_environment, :lookup_in_module]) { |m| send(m, key, lookup_invocation, merge_strategy) }
151
- lookup_invocation.report_result(result)
152
- result
153
- end
154
- end
155
-
156
- # Retrieve lookup options that applies when using a specific module (i.e. a merge of the pre-cached
157
- # `env_lookup_options` and the module specific data)
158
- def retrieve_lookup_options(module_name, lookup_invocation, merge_strategy)
159
- meta_invocation = Puppet::Pops::Lookup::Invocation.new(lookup_invocation.scope)
160
- meta_invocation.top_key = lookup_invocation.top_key
161
- env_opts = env_lookup_options(meta_invocation, merge_strategy)
162
- unless module_name.nil? || environment.module(module_name).nil?
163
- catch(:no_such_key) do
164
- meta_invocation.module_name = module_name
165
- options = module_provider(module_name).lookup(LOOKUP_OPTIONS, meta_invocation, merge_strategy)
166
- options = merge_strategy.merge(env_opts, options) unless env_opts.nil?
167
- return options
168
- end
169
- end
170
- env_opts
171
- end
172
-
173
- # Retrieve and cache lookup options specific to the environment of the compiler that this adapter is attached to (i.e. a merge
174
- # of global and environment lookup options).
175
- def env_lookup_options(meta_invocation, merge_strategy)
176
- if !instance_variable_defined?(:@env_lookup_options)
177
- @env_lookup_options = nil
178
- catch(:no_such_key) do
179
- @env_lookup_options = merge_strategy.merge_lookup([:lookup_global, :lookup_in_environment]) do |m|
180
- send(m, LOOKUP_OPTIONS, meta_invocation, merge_strategy)
181
- end
182
- end
183
- end
184
- @env_lookup_options
185
- end
186
-
187
- def env_provider
188
- @env_provider ||= initialize_env_provider
189
- end
190
-
191
- def module_provider(module_name)
192
- # Test if the key is present for the given module_name. It might be there even if the
193
- # value is nil (which indicates that no module provider is configured for the given name)
194
- unless data.include?(module_name)
195
- data[module_name] = initialize_module_provider(module_name)
196
- end
197
- data[module_name]
198
- end
199
-
200
- def initialize_module_provider(module_name)
201
- injector = Puppet.lookup(:injector) { nil }
202
-
203
- # Support running tests without an injector being configured == using a null implementation
204
- return ModuleDataProvider.new() unless injector
205
-
206
- # Get the registry of module to provider implementation name
207
- module_service_type = Registry.hash_of_per_module_data_provider
208
- module_service_name = PER_MODULE_DATA_PROVIDER_KEY
209
- module_service = injector.lookup(nil, module_service_type, module_service_name)
210
- provider_name = module_service[module_name] || 'none'
211
-
212
- service_type = Registry.hash_of_module_data_providers
213
- service_name = MODULE_DATA_PROVIDERS_KEY
214
-
215
- # Get the service (registry of known implementations)
216
- service = injector.lookup(nil, service_type, service_name)
217
- provider = service[provider_name]
218
- unless provider
219
- raise Puppet::Error.new("Environment '#{environment.name}', cannot find module_data_provider '#{provider_name}'")
220
- end
221
- # Provider is configured per module but cached using compiler life cycle so it must be cloned
222
- provider.clone
223
- end
224
-
225
- def initialize_env_provider
226
- injector = Puppet.lookup(:injector) { nil }
227
-
228
- # Support running tests without an injector being configured == using a null implementation
229
- return EnvironmentDataProvider.new() unless injector
230
-
231
- # Get the name of the data provider from the environment's configuration and find the bound implementation
232
- provider_name = environment.configuration.environment_data_provider
233
- service_type = Registry.hash_of_environment_data_providers
234
- service_name = ENV_DATA_PROVIDERS_KEY
235
-
236
- # Get the service (registry of known implementations)
237
- service = injector.lookup(nil, service_type, service_name)
238
- provider = service[provider_name]
239
- unless provider
240
- raise Puppet::Error.new("Environment '#{environment.name}', cannot find environment_data_provider '#{provider_name}'")
241
- end
242
- provider
243
- end
244
-
245
- def extract_module_name(name)
246
- qual_index = name.index('::')
247
- qual_index.nil? ? nil : name[0..qual_index-1]
248
- end
249
-
250
- # @return [Puppet::Node::Environment] the environment of the compiler that this adapter is associated with
251
- def environment
252
- @compiler.environment
253
- end
254
- end
@@ -1 +0,0 @@
1
- $: << File.join([File.dirname(__FILE__), "semantic/lib"])
@@ -1,20 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- group :development do
4
- gem 'rake'
5
- gem 'rubygems-tasks'
6
- end
7
-
8
- group :test do
9
- gem 'rspec'
10
- end
11
-
12
- group :metrics do
13
- gem 'cane', :platform => [ :mri_19, :mri_20, :mri_21 ]
14
- gem 'simplecov', :platform => [ :mri_19, :mri_20, :mri_21 ]
15
- end
16
-
17
- group :doc do
18
- gem 'yard', '~> 0.8', :platform => [ :mri_19, :mri_20, :mri_21 ]
19
- gem 'redcarpet', :platform => [ :mri_19, :mri_20, :mri_21 ]
20
- end
@@ -1,6 +0,0 @@
1
- Semantic
2
- ========
3
-
4
- Semantic 0.0.1
5
-
6
- Copied from https://github.com/puppetlabs/semantic/tree/6d17d5283e0868cfc3d74d1e9d37b572e1739b6e
@@ -1,69 +0,0 @@
1
- # RSpec tasks
2
- begin
3
- require 'rspec/core/rake_task'
4
-
5
- # Create the 'spec' task
6
- RSpec::Core::RakeTask.new(:spec) do |task|
7
- task.rspec_opts = '--color'
8
- end
9
-
10
- namespace :spec do
11
- desc "Run the test suite and generate coverage metrics"
12
- task :coverage => [ :simplecov, :spec ]
13
-
14
- # Add test coverage to the 'spec' task.
15
- task :simplecov do
16
- ENV['COVERAGE'] = '1'
17
- end
18
- end
19
-
20
- task :default => :spec
21
- rescue LoadError
22
- warn "[Warning]: Could not load `rspec`."
23
- end
24
-
25
- # YARD tasks
26
- begin
27
- require 'yard'
28
- require 'yard/rake/yardoc_task'
29
-
30
- YARD::Rake::YardocTask.new(:doc) do |yardoc|
31
- yardoc.files = [ 'lib/**/*.rb', '-', '**/*.md' ]
32
- end
33
- rescue LoadError
34
- warn "[Warning]: Could not load `yard`."
35
- end
36
-
37
- # Cane tasks
38
- begin
39
- require 'cane/rake_task'
40
-
41
- Cane::RakeTask.new(:cane) do |cane|
42
- cane.add_threshold 'coverage/.last_run.json', :>=, 100
43
- cane.abc_max = 15
44
- end
45
-
46
- Rake::Task['cane'].prerequisites << Rake::Task['spec:coverage']
47
- Rake::Task[:default].clear_prerequisites
48
- task :default => :cane
49
- rescue LoadError
50
- warn "[Warning]: Could not load `cane`."
51
- end
52
-
53
- # Gem tasks
54
- begin
55
- require 'rubygems/tasks'
56
-
57
- task :gem => 'gem:build'
58
- task :validate => [ 'cane', 'doc', 'gem:validate' ]
59
-
60
- namespace :gem do
61
- Gem::Tasks.new(
62
- :tag => { :format => 'v%s' },
63
- :sign => { :checksum => true, :pgp => true },
64
- :build => { :tar => true }
65
- )
66
- end
67
- rescue LoadError
68
- warn "[Warning]: Could not load `rubygems/tasks`."
69
- end
@@ -1,7 +0,0 @@
1
- module Semantic
2
- autoload :Version, 'semantic/version'
3
- autoload :VersionRange, 'semantic/version_range'
4
- autoload :Dependency, 'semantic/dependency'
5
-
6
- VERSION = '0.0.1'
7
- end
@@ -1,60 +0,0 @@
1
- require 'semantic/dependency'
2
-
3
- module Semantic
4
- module Dependency
5
- class ModuleRelease
6
- include GraphNode
7
-
8
- attr_reader :name, :version
9
-
10
- # Create a new instance of a module release.
11
- #
12
- # @param source [Semantic::Dependency::Source]
13
- # @param name [String]
14
- # @param version [Semantic::Version]
15
- # @param dependencies [{String => Semantic::VersionRange}]
16
- def initialize(source, name, version, dependencies = {})
17
- @source = source
18
- @name = name.freeze
19
- @version = version.freeze
20
-
21
- dependencies.each do |name, range|
22
- add_constraint('initialize', name, range.to_s) do |node|
23
- range === node.version
24
- end
25
-
26
- add_dependency(name)
27
- end
28
- end
29
-
30
- def priority
31
- @source.priority
32
- end
33
-
34
- def <=>(oth)
35
- # Note that prior to ruby 2.3.0, if a <=> method threw an exception, ruby
36
- # would silently rescue the exception and return nil from <=> (which causes
37
- # the derived == comparison to return false). Starting in ruby 2.3.0, this
38
- # behavior changed and the exception is actually thrown. Some comments at:
39
- # https://bugs.ruby-lang.org/issues/7688
40
- #
41
- # So simply return nil here if any of the needed fields are not available,
42
- # since attempting to access a missing field is one way to force an exception.
43
- # This doesn't help if the <=> use below throws an exception, but it
44
- # handles the most typical cause.
45
- return nil if !oth.respond_to?(:priority) ||
46
- !oth.respond_to?(:name) ||
47
- !oth.respond_to?(:version)
48
-
49
- our_key = [ priority, name, version ]
50
- their_key = [ oth.priority, oth.name, oth.version ]
51
-
52
- return our_key <=> their_key
53
- end
54
-
55
- def to_s
56
- "#<#{self.class} #{name}@#{version}>"
57
- end
58
- end
59
- end
60
- end
@@ -1,24 +0,0 @@
1
- PROJECT_ROOT = File.join(File.dirname(__FILE__), '..')
2
-
3
- if ENV['COVERAGE']
4
- require 'simplecov'
5
- SimpleCov.start do
6
- add_filter "/spec/"
7
- end
8
- end
9
-
10
- RSpec.configure do |config|
11
- config.treat_symbols_as_metadata_keys_with_true_values = true
12
- config.run_all_when_everything_filtered = true
13
- config.filter_run :focus
14
-
15
- # Run specs in random order to surface order dependencies. If you find an
16
- # order dependency and want to debug it, you can fix the order by providing
17
- # the seed, which is printed after each run.
18
- # --seed 1234
19
- config.order = 'random'
20
-
21
- config.before do
22
- Semantic::Dependency.instance_variable_set(:@sources, nil)
23
- end
24
- end