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
@@ -143,7 +143,7 @@ describe "Data binding" do
143
143
  def configure_hiera_for_one_tier(data)
144
144
  hiera_config_file = tmpfile("hiera.yaml")
145
145
 
146
- File.open(hiera_config_file, 'w') do |f|
146
+ File.open(hiera_config_file, 'w:UTF-8') do |f|
147
147
  f.write("---
148
148
  :yaml:
149
149
  :datadir: #{dir}
@@ -154,7 +154,7 @@ describe "Data binding" do
154
154
  end
155
155
 
156
156
  data.each do | file, contents |
157
- File.open(File.join(dir, "#{file}.yaml"), 'w') do |f|
157
+ File.open(File.join(dir, "#{file}.yaml"), 'w:UTF-8') do |f|
158
158
  f.write(YAML.dump(contents))
159
159
  end
160
160
  end
@@ -165,7 +165,7 @@ describe "Data binding" do
165
165
  def configure_hiera_for_two_tier(data)
166
166
  hiera_config_file = tmpfile("hiera.yaml")
167
167
 
168
- File.open(hiera_config_file, 'w') do |f|
168
+ File.open(hiera_config_file, 'w:UTF-8') do |f|
169
169
  f.write("---
170
170
  :yaml:
171
171
  :datadir: #{dir}
@@ -176,7 +176,7 @@ describe "Data binding" do
176
176
  end
177
177
 
178
178
  data.each do | file, contents |
179
- File.open(File.join(dir, "#{file}.yaml"), 'w') do |f|
179
+ File.open(File.join(dir, "#{file}.yaml"), 'w:UTF-8') do |f|
180
180
  f.write(YAML.dump(contents))
181
181
  end
182
182
  end
@@ -188,7 +188,7 @@ describe "Data binding" do
188
188
  module_dir = File.join(dir, module_name, 'manifests')
189
189
  FileUtils.mkdir_p(module_dir)
190
190
 
191
- File.open(File.join(module_dir, name), 'w') do |f|
191
+ File.open(File.join(module_dir, name), 'w:UTF-8') do |f|
192
192
  f.write(manifest)
193
193
  end
194
194
  end
@@ -235,6 +235,19 @@ describe "Puppet defaults" do
235
235
  it "should be set to hiera by default" do
236
236
  expect(Puppet.settings[:data_binding_terminus]).to eq(:hiera)
237
237
  end
238
+
239
+ it "to be neither 'hiera' nor 'none', a deprecation warning is logged" do
240
+ expect(@logs).to eql([])
241
+ Puppet[:data_binding_terminus] = 'magic'
242
+ expect(@logs[0].to_s).to match(/Setting 'data_binding_terminus' is deprecated/)
243
+ end
244
+
245
+ it "to not log a warning if set to 'none' or 'hiera'" do
246
+ expect(@logs).to eql([])
247
+ Puppet[:data_binding_terminus] = 'none'
248
+ Puppet[:data_binding_terminus] = 'hiera'
249
+ expect(@logs).to eql([])
250
+ end
238
251
  end
239
252
 
240
253
  describe "agent_catalog_run_lockfile" do
@@ -18,11 +18,11 @@ describe "default manifests" do
18
18
  manifestsdir = File.join(testingdir, "manifests")
19
19
  FileUtils.mkdir_p(manifestsdir)
20
20
 
21
- File.open(File.join(manifestsdir, "site.pp"), "w") do |f|
21
+ File.open(File.join(manifestsdir, "site.pp"), "w", :encoding => Encoding::UTF_8) do |f|
22
22
  f.puts("notify { 'ManifestFromRelativeDefault': }")
23
23
  end
24
24
 
25
- File.open(File.join(confdir, "puppet.conf"), "w") do |f|
25
+ File.open(File.join(confdir, "puppet.conf"), "w", :encoding => Encoding::UTF_8) do |f|
26
26
  f.puts("environmentpath=#{environmentpath}")
27
27
  end
28
28
 
@@ -43,14 +43,14 @@ describe "default manifests" do
43
43
  manifestsdir = File.expand_path("manifests", confdir)
44
44
  FileUtils.mkdir_p(manifestsdir)
45
45
 
46
- File.open(File.join(confdir, "puppet.conf"), "w") do |f|
46
+ File.open(File.join(confdir, "puppet.conf"), "w", :encoding => Encoding::UTF_8) do |f|
47
47
  f.puts(<<-EOF)
48
48
  environmentpath=#{environmentpath}
49
49
  default_manifest=#{manifestsdir}
50
50
  EOF
51
51
  end
52
52
 
53
- File.open(File.join(manifestsdir, "site.pp"), "w") do |f|
53
+ File.open(File.join(manifestsdir, "site.pp"), "w", :encoding => Encoding::UTF_8) do |f|
54
54
  f.puts("notify { 'ManifestFromAbsoluteDefaultManifest': }")
55
55
  end
56
56
 
@@ -61,7 +61,7 @@ describe "default manifests" do
61
61
 
62
62
  it "reads manifest from directory environment manifest when environment.conf manifest set" do
63
63
  default_manifestsdir = File.expand_path("manifests", confdir)
64
- File.open(File.join(confdir, "puppet.conf"), "w") do |f|
64
+ File.open(File.join(confdir, "puppet.conf"), "w", :encoding => Encoding::UTF_8) do |f|
65
65
  f.puts(<<-EOF)
66
66
  environmentpath=#{environmentpath}
67
67
  default_manifest=#{default_manifestsdir}
@@ -71,11 +71,11 @@ describe "default manifests" do
71
71
  manifestsdir = File.join(testingdir, "special_manifests")
72
72
  FileUtils.mkdir_p(manifestsdir)
73
73
 
74
- File.open(File.join(manifestsdir, "site.pp"), "w") do |f|
74
+ File.open(File.join(manifestsdir, "site.pp"), "w", :encoding => Encoding::UTF_8) do |f|
75
75
  f.puts("notify { 'ManifestFromEnvironmentConfManifest': }")
76
76
  end
77
77
 
78
- File.open(File.join(testingdir, "environment.conf"), "w") do |f|
78
+ File.open(File.join(testingdir, "environment.conf"), "w", :encoding => Encoding::UTF_8) do |f|
79
79
  f.puts("manifest=./special_manifests")
80
80
  end
81
81
 
@@ -89,21 +89,21 @@ describe "default manifests" do
89
89
  default_manifestsdir = File.expand_path("manifests", confdir)
90
90
  FileUtils.mkdir_p(default_manifestsdir)
91
91
 
92
- File.open(File.join(confdir, "puppet.conf"), "w") do |f|
92
+ File.open(File.join(confdir, "puppet.conf"), "w", :encoding => Encoding::UTF_8) do |f|
93
93
  f.puts(<<-EOF)
94
94
  environmentpath=#{environmentpath}
95
95
  default_manifest=#{default_manifestsdir}
96
96
  EOF
97
97
  end
98
98
 
99
- File.open(File.join(default_manifestsdir, "site.pp"), "w") do |f|
99
+ File.open(File.join(default_manifestsdir, "site.pp"), "w", :encoding => Encoding::UTF_8) do |f|
100
100
  f.puts("notify { 'ManifestFromAbsoluteDefaultManifest': }")
101
101
  end
102
102
 
103
103
  implicit_manifestsdir = File.join(testingdir, "manifests")
104
104
  FileUtils.mkdir_p(implicit_manifestsdir)
105
105
 
106
- File.open(File.join(implicit_manifestsdir, "site.pp"), "w") do |f|
106
+ File.open(File.join(implicit_manifestsdir, "site.pp"), "w", :encoding => Encoding::UTF_8) do |f|
107
107
  f.puts("notify { 'ManifestFromImplicitRelativeEnvironmentManifestDirectory': }")
108
108
  end
109
109
 
@@ -125,7 +125,7 @@ describe "default manifests" do
125
125
  before(:each) do
126
126
  FileUtils.mkdir_p(manifestsdir)
127
127
 
128
- File.open(File.join(confdir, "puppet.conf"), "w") do |f|
128
+ File.open(File.join(confdir, "puppet.conf"), "w", :encoding => Encoding::UTF_8) do |f|
129
129
  f.puts(<<-EOF)
130
130
  environmentpath=#{environmentpath}
131
131
  default_manifest=#{manifestsdir}
@@ -133,7 +133,7 @@ describe "default manifests" do
133
133
  EOF
134
134
  end
135
135
 
136
- File.open(File.join(manifestsdir, "site.pp"), "w") do |f|
136
+ File.open(File.join(manifestsdir, "site.pp"), "w", :encoding => Encoding::UTF_8) do |f|
137
137
  f.puts("notify { 'ManifestFromAbsoluteDefaultManifest': }")
138
138
  end
139
139
  end
@@ -145,7 +145,7 @@ describe "default manifests" do
145
145
  end
146
146
 
147
147
  it "refuses to compile if environment.conf specifies a different manifest" do
148
- File.open(File.join(testingdir, "environment.conf"), "w") do |f|
148
+ File.open(File.join(testingdir, "environment.conf"), "w", :encoding => Encoding::UTF_8) do |f|
149
149
  f.puts("manifest=./special_manifests")
150
150
  end
151
151
 
@@ -155,7 +155,7 @@ describe "default manifests" do
155
155
  end
156
156
 
157
157
  it "reads manifest from default_manifest setting when environment.conf has manifest set if setting equals default_manifest setting" do
158
- File.open(File.join(testingdir, "environment.conf"), "w") do |f|
158
+ File.open(File.join(testingdir, "environment.conf"), "w", :encoding => Encoding::UTF_8) do |f|
159
159
  f.puts("manifest=#{manifestsdir}")
160
160
  end
161
161
 
@@ -165,7 +165,7 @@ describe "default manifests" do
165
165
  end
166
166
 
167
167
  it "logs errors if environment.conf specifies a different manifest" do
168
- File.open(File.join(testingdir, "environment.conf"), "w") do |f|
168
+ File.open(File.join(testingdir, "environment.conf"), "w", :encoding => Encoding::UTF_8) do |f|
169
169
  f.puts("manifest=./special_manifests")
170
170
  end
171
171
 
@@ -177,7 +177,7 @@ describe "default manifests" do
177
177
  end
178
178
 
179
179
  it "raises an error if default_manifest is not absolute" do
180
- File.open(File.join(confdir, "puppet.conf"), "w") do |f|
180
+ File.open(File.join(confdir, "puppet.conf"), "w", :encoding => Encoding::UTF_8) do |f|
181
181
  f.puts(<<-EOF)
182
182
  environmentpath=#{environmentpath}
183
183
  default_manifest=./relative
@@ -14,7 +14,7 @@ describe "setting hooks" do
14
14
  it "accesses correct directory environment settings after initializing a setting with an on_write hook" do
15
15
  expect(Puppet.settings.setting(:certname).call_hook).to eq(:on_write_only)
16
16
 
17
- File.open(File.join(confdir, "puppet.conf"), "w") do |f|
17
+ File.open(File.join(confdir, "puppet.conf"), "w:UTF-8") do |f|
18
18
  f.puts("environmentpath=#{environmentpath}")
19
19
  f.puts("certname=something")
20
20
  end
@@ -7,12 +7,16 @@ describe "Windows UTF8 environment variables", :if => Puppet.features.microsoft_
7
7
  # Do not use before and after hooks in these tests as it may have unintended consequences
8
8
 
9
9
  before(:all) {
10
- @varname = 'test-helper-foo'
10
+ @varname = 'test_helper_spec-test_variable'
11
11
  @rune_utf8 = "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7"
12
12
 
13
13
  Puppet::Util::Windows::Process.set_environment_variable(@varname, @rune_utf8)
14
14
  }
15
-
15
+ after(:all) {
16
+ # Need to cleanup this environment variable otherwise it contaminates any subsequent tests
17
+ Puppet::Util::Windows::Process.set_environment_variable(@varname, nil)
18
+ }
19
+
16
20
  it "#after_each_test should preserve UTF8 environment variables" do
17
21
  envhash = Puppet::Util::Windows::Process.get_environment_strings
18
22
  expect(envhash[@varname]).to eq(@rune_utf8)
@@ -266,6 +266,80 @@ describe Puppet::Transaction do
266
266
  expect(Puppet::FileSystem.exist?(newfile)).to be_truthy
267
267
  end
268
268
 
269
+ # Ensure when resources have been generated with eval_generate that event
270
+ # propagation still works when filtering with tags
271
+ context "when filtering with tags" do
272
+ context "when resources are dependent on dynamically generated resources" do
273
+ it "should trigger (only) appropriately tagged dependent resources" do
274
+ source = dir_containing('sourcedir', {'foo' => 'bar'})
275
+ target = tmpdir('targetdir')
276
+ file1 = tmpfile("file1")
277
+ file2 = tmpfile("file2")
278
+
279
+ file = Puppet::Type.type(:file).new(
280
+ :path => target,
281
+ :source => source,
282
+ :ensure => :present,
283
+ :recurse => true,
284
+ :tag => "foo_tag",
285
+ )
286
+
287
+ exec1 = Puppet::Type.type(:exec).new(
288
+ :path => ENV["PATH"],
289
+ :command => touch(file1),
290
+ :refreshonly => true,
291
+ :subscribe => file,
292
+ :tag => "foo_tag",
293
+ )
294
+
295
+ exec2 = Puppet::Type.type(:exec).new(
296
+ :path => ENV["PATH"],
297
+ :command => touch(file2),
298
+ :refreshonly => true,
299
+ :subscribe => file,
300
+ )
301
+
302
+ Puppet[:tags] = "foo_tag"
303
+ catalog = mk_catalog(file, exec1, exec2)
304
+ catalog.apply
305
+ expect(Puppet::FileSystem.exist?(file1)).to be_truthy
306
+ expect(Puppet::FileSystem.exist?(file2)).to be_falsey
307
+ end
308
+
309
+ it "should trigger implicitly tagged dependent resources, ie via type name" do
310
+ file1 = tmpfile("file1")
311
+ file2 = tmpfile("file2")
312
+
313
+ exec1 = Puppet::Type.type(:exec).new(
314
+ :name => "exec1",
315
+ :path => ENV["PATH"],
316
+ :command => touch(file1),
317
+ )
318
+
319
+ exec1.stubs(:eval_generate).returns(
320
+ [ (Puppet::Type.type(:notify).new :name => "eval1_notify")]
321
+ )
322
+
323
+ exec2 = Puppet::Type.type(:exec).new(
324
+ :name => "exec2",
325
+ :path => ENV["PATH"],
326
+ :command => touch(file2),
327
+ :refreshonly => true,
328
+ :subscribe => exec1,
329
+ )
330
+ exec2.stubs(:eval_generate).returns(
331
+ [ (Puppet::Type.type(:notify).new :name => "eval2_notify")]
332
+ )
333
+
334
+ Puppet[:tags] = "exec"
335
+ catalog = mk_catalog(exec1, exec2)
336
+ catalog.apply
337
+ expect(Puppet::FileSystem.exist?(file1)).to be_truthy
338
+ expect(Puppet::FileSystem.exist?(file2)).to be_truthy
339
+ end
340
+ end
341
+ end
342
+
269
343
  describe "skipping resources" do
270
344
  let(:fname) { tmpfile("exec") }
271
345
 
@@ -17,6 +17,14 @@ describe Puppet::Util::Execution do
17
17
  end
18
18
  end
19
19
 
20
+ describe "#execute (non-Windows)", :if => !Puppet.features.microsoft_windows? do
21
+ it "should execute basic shell command" do
22
+ result = Puppet::Util::Execution.execute("ls /tmp", :failonfail => true)
23
+ expect(result.exitstatus).to eq(0)
24
+ expect(result.to_s).to_not be_nil
25
+ end
26
+ end
27
+
20
28
  describe "#execute (Windows)", :if => Puppet.features.microsoft_windows? do
21
29
  let(:utf8text) do
22
30
  # Japanese Lorem Ipsum snippet
@@ -31,7 +31,7 @@ module PuppetSpec
31
31
  if options.nil?
32
32
  expect(release).to be_nil
33
33
  else
34
- from = options.keys.find { |k| k.nil? || k.is_a?(Semantic::Version) }
34
+ from = options.keys.find { |k| k.nil? || k.is_a?(SemanticPuppet::Version) }
35
35
  to = options.delete(from)
36
36
 
37
37
  if to or from
@@ -49,7 +49,7 @@ module PuppetSpec
49
49
  end
50
50
 
51
51
  def v(str)
52
- Semantic::Version.parse(str)
52
+ SemanticPuppet::Version.parse(str)
53
53
  end
54
54
  end
55
55
  end
@@ -1,6 +1,6 @@
1
1
  module PuppetSpec
2
2
  module ModuleTool
3
- class StubSource < Semantic::Dependency::Source
3
+ class StubSource < SemanticPuppet::Dependency::Source
4
4
  def inspect; "Stub Source"; end
5
5
  def host
6
6
  "http://nowhe.re"
@@ -1,5 +1,5 @@
1
1
  class String
2
- def unindent
3
- gsub(/^#{scan(/^\s*/).min_by{ |l| l.length }}/, '')
2
+ def unindent(left_padding = '')
3
+ gsub(/^#{scan(/^\s*/).min_by{ |l| l.length }}/, left_padding)
4
4
  end
5
5
  end
@@ -267,6 +267,22 @@ describe Puppet::Application::FaceBase do
267
267
  app.expects(:render).with(app.arguments.length + 1, ["myname", "myarg"])
268
268
  expect { app.main }.to exit_with(0)
269
269
  end
270
+
271
+ it "should issue a deprecation warning if the face is deprecated" do
272
+ # since app is shared across examples, stub to avoid affecting shared context
273
+ app.face.stubs(:deprecated?).returns(true)
274
+ app.face.expects(:foo).with(*app.arguments)
275
+ Puppet.expects(:deprecation_warning).with(regexp_matches(/'puppet basetest' is deprecated/))
276
+ expect { app.main }.to exit_with(0)
277
+ end
278
+
279
+ it "should not issue a deprecation warning if the face is not deprecated" do
280
+ Puppet.expects(:deprecation_warning).never
281
+ # since app is shared across examples, stub to avoid affecting shared context
282
+ app.face.stubs(:deprecated?).returns(false)
283
+ app.face.expects(:foo).with(*app.arguments)
284
+ expect { app.main }.to exit_with(0)
285
+ end
270
286
  end
271
287
 
272
288
  describe "error reporting" do
@@ -4,6 +4,18 @@ require 'puppet/pops/lookup'
4
4
 
5
5
  describe Puppet::Application::Lookup do
6
6
 
7
+ def run_lookup(lookup)
8
+ capture = StringIO.new
9
+ saved_stdout = $stdout
10
+ begin
11
+ $stdout = capture
12
+ expect { lookup.run_command }.to exit_with(0)
13
+ ensure
14
+ $stdout = saved_stdout
15
+ end
16
+ capture.string.strip
17
+ end
18
+
7
19
  context "when running with incorrect command line options" do
8
20
  let (:lookup) { Puppet::Application[:lookup] }
9
21
 
@@ -51,7 +63,7 @@ describe Puppet::Application::Lookup do
51
63
 
52
64
  (Puppet::Pops::Lookup).expects(:lookup).with(['atton', 'kreia'], nil, nil, false, expected_merge, anything).returns('rand')
53
65
 
54
- expect { lookup.run_command }.to output("rand\n").to_stdout
66
+ expect(run_lookup(lookup)).to eql("rand")
55
67
  end
56
68
 
57
69
  %w(first unique hash deep).each do |opt|
@@ -62,7 +74,7 @@ describe Puppet::Application::Lookup do
62
74
  lookup.command_line.stubs(:args).returns(['atton', 'kreia'])
63
75
  lookup.stubs(:generate_scope).yields('scope')
64
76
  Puppet::Pops::Lookup.stubs(:lookup).returns('rand')
65
- expect { lookup.run_command }.to output("--- rand\n...\n").to_stdout
77
+ expect(run_lookup(lookup)).to eql("--- rand\n...")
66
78
  end
67
79
  end
68
80
 
@@ -73,7 +85,7 @@ describe Puppet::Application::Lookup do
73
85
 
74
86
  Puppet::Pops::Lookup.stubs(:lookup).returns('rand')
75
87
 
76
- expect { lookup.run_command }.to output("--- rand\n...\n").to_stdout
88
+ expect(run_lookup(lookup)).to eql("--- rand\n...")
77
89
  end
78
90
  end
79
91
 
@@ -88,69 +100,161 @@ describe Puppet::Application::Lookup do
88
100
 
89
101
  let(:node) { Puppet::Node.new("testnode", :facts => facts, :environment => 'production') }
90
102
 
91
- let(:expected_json_hash) { {
92
- 'type' => 'merge',
93
- 'merge' => 'first',
94
- 'event' => 'result',
95
- 'value' => 'This is A',
96
- 'branches' => [
97
- { 'key' => 'a',
98
- 'event' => 'not_found',
99
- 'type' => 'global',
100
- 'name' => 'hiera'
101
- },
103
+ let(:expected_json_hash) {
102
104
  {
103
- 'type' => 'data_provider',
104
- 'name' => 'Hiera Data Provider, version 4',
105
- 'configuration_path' => "#{environmentpath}/production/hiera.yaml",
106
- 'branches' => [
107
- {
108
- 'name' => 'common',
109
- 'type' => 'data_provider',
110
- 'branches' => [
111
- {
112
- 'key' => 'a',
113
- 'value' => 'This is A',
114
- 'event' => 'found',
115
- 'type' => 'path',
116
- 'original_path' => 'common',
117
- 'path' => "#{environmentpath}/production/data/common.yaml",
118
- }]
119
- }]
120
- }]
121
- } }
122
-
123
- let(:expected_yaml_hash) { {
124
- :type => :merge,
125
- :merge => :first,
126
- :event => :result,
127
- :value => 'This is A',
128
- :branches => [
129
- { :key => 'a',
130
- :event => :not_found,
131
- :type => :global,
132
- :name => :hiera
133
- },
134
- {
135
- :type => :data_provider,
136
- :name => 'Hiera Data Provider, version 4',
137
- :configuration_path => "#{environmentpath}/production/hiera.yaml",
138
- :branches => [
105
+ 'branches' =>
106
+ [
139
107
  {
140
- :type => :data_provider,
141
- :name => 'common',
142
- :branches => [
108
+ 'branches'=>
109
+ [
110
+ {
111
+ 'key'=>'lookup_options',
112
+ 'event'=>'not_found',
113
+ 'type'=>'data_provider',
114
+ 'name'=>'Global Data Provider (hiera configuration version 5)'
115
+ },
116
+ {
117
+ 'branches'=>
118
+ [
119
+ {
120
+ 'branches'=>
121
+ [
122
+ {
123
+ 'key' => 'lookup_options',
124
+ 'value' => {'a'=>'first'},
125
+ 'event'=>'found',
126
+ 'type'=>'path',
127
+ 'original_path'=>'common.yaml',
128
+ 'path'=>"#{environmentpath}/production/data/common.yaml"
129
+ }
130
+ ],
131
+ 'type'=>'data_provider',
132
+ 'name'=>'Hierarchy entry "Common"'
133
+ }
134
+ ],
135
+ 'type'=>'data_provider',
136
+ 'name'=>'Environment Data Provider (hiera configuration version 5)'
137
+ }
138
+ ],
139
+ 'key'=>'lookup_options',
140
+ 'type'=>'root'
141
+ },
142
+ {
143
+ 'branches'=>
144
+ [
145
+ {
146
+ 'key'=>'a',
147
+ 'event'=>'not_found',
148
+ 'type'=>'data_provider',
149
+ 'name'=>'Global Data Provider (hiera configuration version 5)'
150
+ },
151
+ {
152
+ 'branches'=>
153
+ [
154
+ {
155
+ 'branches'=>
156
+ [
157
+ {
158
+ 'key'=>'a',
159
+ 'value'=>'This is A',
160
+ 'event'=>'found',
161
+ 'type'=>'path',
162
+ 'original_path'=>'common.yaml',
163
+ 'path'=>"#{environmentpath}/production/data/common.yaml"
164
+ }
165
+ ],
166
+ 'type'=>'data_provider',
167
+ 'name'=>'Hierarchy entry "Common"'
168
+ }
169
+ ],
170
+ 'type'=>'data_provider',
171
+ 'name'=>'Environment Data Provider (hiera configuration version 5)'
172
+ }
173
+ ],
174
+ 'key'=>'a',
175
+ 'type'=>'root'
176
+ }
177
+ ]
178
+ }
179
+ }
180
+
181
+ let(:expected_yaml_hash) {
182
+ {
183
+ :branches =>
184
+ [
185
+ {
186
+ :branches=>
187
+ [
143
188
  {
144
- :key => 'a',
145
- :value => 'This is A',
146
- :event => :found,
147
- :type => :path,
148
- :original_path => 'common',
149
- :path => "#{environmentpath}/production/data/common.yaml",
150
- }]
151
- }]
152
- }]
153
- } }
189
+ :key=>'lookup_options',
190
+ :event=>:not_found,
191
+ :type=>:data_provider,
192
+ :name=>'Global Data Provider (hiera configuration version 5)'
193
+ },
194
+ {
195
+ :branches=>
196
+ [
197
+ {
198
+ :branches=>
199
+ [
200
+ {
201
+ :key => 'lookup_options',
202
+ :value => {'a'=>'first'},
203
+ :event=>:found,
204
+ :type=>:path,
205
+ :original_path=>'common.yaml',
206
+ :path=>"#{environmentpath}/production/data/common.yaml"
207
+ }
208
+ ],
209
+ :type=>:data_provider,
210
+ :name=>'Hierarchy entry "Common"'
211
+ }
212
+ ],
213
+ :type=>:data_provider,
214
+ :name=>'Environment Data Provider (hiera configuration version 5)'
215
+ }
216
+ ],
217
+ :key=>'lookup_options',
218
+ :type=>:root
219
+ },
220
+ {
221
+ :branches=>
222
+ [
223
+ {
224
+ :key=>'a',
225
+ :event=>:not_found,
226
+ :type=>:data_provider,
227
+ :name=>'Global Data Provider (hiera configuration version 5)'
228
+ },
229
+ {
230
+ :branches=>
231
+ [
232
+ {
233
+ :branches=>
234
+ [
235
+ {
236
+ :key=>'a',
237
+ :value=>'This is A',
238
+ :event=>:found,
239
+ :type=>:path,
240
+ :original_path=>'common.yaml',
241
+ :path=>"#{environmentpath}/production/data/common.yaml"
242
+ }
243
+ ],
244
+ :type=>:data_provider,
245
+ :name=>'Hierarchy entry "Common"'
246
+ }
247
+ ],
248
+ :type=>:data_provider,
249
+ :name=>'Environment Data Provider (hiera configuration version 5)'
250
+ }
251
+ ],
252
+ :key=>'a',
253
+ :type=>:root
254
+ }
255
+ ]
256
+ }
257
+ }
154
258
 
155
259
  around(:each) do |example|
156
260
  # Initialize settings to get a full compile as close as possible to a real
@@ -167,23 +271,27 @@ describe Puppet::Application::Lookup do
167
271
  lookup.options[:explain] = true
168
272
  lookup.command_line.stubs(:args).returns(['a'])
169
273
  logs = []
170
- begin
171
- Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
172
- expect { lookup.run_command }.to output(<<-EXPLANATION).to_stdout
173
- Merge strategy first
174
- Data Binding "hiera"
274
+ Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
275
+ expect(run_lookup(lookup)).to eql(<<-EXPLANATION.chomp)
276
+ Searching for "lookup_options"
277
+ Global Data Provider (hiera configuration version 5)
278
+ No such key: "lookup_options"
279
+ Environment Data Provider (hiera configuration version 5)
280
+ Hierarchy entry "Common"
281
+ Path "#{environmentpath}/production/data/common.yaml"
282
+ Original path: "common.yaml"
283
+ Found key: "lookup_options" value: {
284
+ "a" => "first"
285
+ }
286
+ Searching for "a"
287
+ Global Data Provider (hiera configuration version 5)
175
288
  No such key: "a"
176
- Data Provider "Hiera Data Provider, version 4"
177
- ConfigurationPath "#{environmentpath}/production/hiera.yaml"
178
- Data Provider "common"
289
+ Environment Data Provider (hiera configuration version 5)
290
+ Hierarchy entry "Common"
179
291
  Path "#{environmentpath}/production/data/common.yaml"
180
- Original path: "common"
292
+ Original path: "common.yaml"
181
293
  Found key: "a" value: "This is A"
182
- Merged result: "This is A"
183
294
  EXPLANATION
184
- end
185
- rescue SystemExit => e
186
- expect(e.status).to eq(0)
187
295
  end
188
296
  expect(logs.any? { |log| log.level == :debug }).to be_falsey
189
297
  end
@@ -213,63 +321,70 @@ Merge strategy first
213
321
  lookup.command_line.stubs(:args).returns(['a'])
214
322
  Puppet.debug = true
215
323
  logs = []
216
- begin
217
- Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
218
- expect { lookup.run_command }.to output(<<-EXPLANATION).to_stdout
219
- Merge strategy first
220
- Data Binding "hiera"
324
+ Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
325
+ expect(run_lookup(lookup)).to eql(<<-EXPLANATION.chomp)
326
+ Searching for "lookup_options"
327
+ Global Data Provider (hiera configuration version 5)
328
+ No such key: "lookup_options"
329
+ Environment Data Provider (hiera configuration version 5)
330
+ Hierarchy entry "Common"
331
+ Path "#{environmentpath}/production/data/common.yaml"
332
+ Original path: "common.yaml"
333
+ Found key: "lookup_options" value: {
334
+ "a" => "first"
335
+ }
336
+ Searching for "a"
337
+ Global Data Provider (hiera configuration version 5)
221
338
  No such key: "a"
222
- Data Provider "Hiera Data Provider, version 4"
223
- ConfigurationPath "#{environmentpath}/production/hiera.yaml"
224
- Data Provider "common"
339
+ Environment Data Provider (hiera configuration version 5)
340
+ Hierarchy entry "Common"
225
341
  Path "#{environmentpath}/production/data/common.yaml"
226
- Original path: "common"
342
+ Original path: "common.yaml"
227
343
  Found key: "a" value: "This is A"
228
- Merged result: "This is A"
229
- EXPLANATION
230
- end
231
- rescue SystemExit => e
232
- expect(e.status).to eq(0)
344
+ EXPLANATION
233
345
  end
234
346
  logs = logs.select { |log| log.level == :debug }.map { |log| log.message }
235
347
  expect(logs).to include(<<-EXPLANATION.chomp)
236
348
  Lookup of 'a'
237
- Merge strategy first
238
- Data Binding "hiera"
349
+ Searching for "lookup_options"
350
+ Global Data Provider (hiera configuration version 5)
351
+ No such key: "lookup_options"
352
+ Environment Data Provider (hiera configuration version 5)
353
+ Hierarchy entry "Common"
354
+ Path "#{environmentpath}/production/data/common.yaml"
355
+ Original path: "common.yaml"
356
+ Found key: "lookup_options" value: {
357
+ "a" => "first"
358
+ }
359
+ Searching for "a"
360
+ Global Data Provider (hiera configuration version 5)
239
361
  No such key: "a"
240
- Data Provider "Hiera Data Provider, version 4"
241
- ConfigurationPath "#{environmentpath}/production/hiera.yaml"
242
- Data Provider "common"
362
+ Environment Data Provider (hiera configuration version 5)
363
+ Hierarchy entry "Common"
243
364
  Path "#{environmentpath}/production/data/common.yaml"
244
- Original path: "common"
365
+ Original path: "common.yaml"
245
366
  Found key: "a" value: "This is A"
246
- Merged result: "This is A"
247
367
  EXPLANATION
248
368
  end
249
369
 
250
370
  it '--explain-options produces human readable text of a hash merge' do
251
371
  lookup.options[:node] = node
252
372
  lookup.options[:explain_options] = true
253
- begin
254
- expect { lookup.run_command }.to output(<<-EXPLANATION).to_stdout
373
+ expect(run_lookup(lookup)).to eql(<<-EXPLANATION.chomp)
255
374
  Merge strategy hash
256
- Data Binding "hiera"
375
+ Global Data Provider (hiera configuration version 5)
257
376
  No such key: "lookup_options"
258
- Data Provider "Hiera Data Provider, version 4"
259
- ConfigurationPath "#{environmentpath}/production/hiera.yaml"
260
- Data Provider "common"
377
+ Environment Data Provider (hiera configuration version 5)
378
+ Hierarchy entry "Common"
261
379
  Path "#{environmentpath}/production/data/common.yaml"
262
- Original path: "common"
380
+ Original path: "common.yaml"
263
381
  Found key: "lookup_options" value: {
264
382
  "a" => "first"
265
383
  }
266
384
  Merged result: {
267
385
  "a" => "first"
268
386
  }
269
- EXPLANATION
270
- rescue SystemExit => e
271
- expect(e.status).to eq(0)
272
- end
387
+ EXPLANATION
273
388
  end
274
389
 
275
390
  it '--explain-options produces human readable text of a hash merge and --debug produces the same output to debug logger' do
@@ -277,17 +392,15 @@ Merge strategy hash
277
392
  lookup.options[:explain_options] = true
278
393
  Puppet.debug = true
279
394
  logs = []
280
- begin
281
- Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
282
- expect { lookup.run_command }.to output(<<-EXPLANATION).to_stdout
395
+ Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
396
+ expect(run_lookup(lookup)).to eql(<<-EXPLANATION.chomp)
283
397
  Merge strategy hash
284
- Data Binding "hiera"
398
+ Global Data Provider (hiera configuration version 5)
285
399
  No such key: "lookup_options"
286
- Data Provider "Hiera Data Provider, version 4"
287
- ConfigurationPath "#{environmentpath}/production/hiera.yaml"
288
- Data Provider "common"
400
+ Environment Data Provider (hiera configuration version 5)
401
+ Hierarchy entry "Common"
289
402
  Path "#{environmentpath}/production/data/common.yaml"
290
- Original path: "common"
403
+ Original path: "common.yaml"
291
404
  Found key: "lookup_options" value: {
292
405
  "a" => "first"
293
406
  }
@@ -295,28 +408,24 @@ Merge strategy hash
295
408
  "a" => "first"
296
409
  }
297
410
  EXPLANATION
298
- end
299
- rescue SystemExit => e
300
- expect(e.status).to eq(0)
301
- end
302
411
  logs = logs.select { |log| log.level == :debug }.map { |log| log.message }
303
412
  expect(logs).to include(<<-EXPLANATION.chomp)
304
413
  Lookup of '__global__'
305
414
  Merge strategy hash
306
- Data Binding "hiera"
415
+ Global Data Provider (hiera configuration version 5)
307
416
  No such key: "lookup_options"
308
- Data Provider "Hiera Data Provider, version 4"
309
- ConfigurationPath "#{environmentpath}/production/hiera.yaml"
310
- Data Provider "common"
417
+ Environment Data Provider (hiera configuration version 5)
418
+ Hierarchy entry "Common"
311
419
  Path "#{environmentpath}/production/data/common.yaml"
312
- Original path: "common"
420
+ Original path: "common.yaml"
313
421
  Found key: "lookup_options" value: {
314
422
  "a" => "first"
315
423
  }
316
424
  Merged result: {
317
425
  "a" => "first"
318
426
  }
319
- EXPLANATION
427
+ EXPLANATION
428
+ end
320
429
  end
321
430
 
322
431
  it '--explain produces human readable text of a hash merge when using both --explain and --explain-options' do
@@ -324,38 +433,26 @@ Lookup of '__global__'
324
433
  lookup.options[:explain] = true
325
434
  lookup.options[:explain_options] = true
326
435
  lookup.command_line.stubs(:args).returns(['a'])
327
- begin
328
- expect { lookup.run_command }.to output(<<-EXPLANATION).to_stdout
436
+ expect(run_lookup(lookup)).to eql(<<-EXPLANATION.chomp)
329
437
  Searching for "lookup_options"
330
- Merge strategy hash
331
- Data Binding "hiera"
332
- No such key: "lookup_options"
333
- Data Provider "Hiera Data Provider, version 4"
334
- ConfigurationPath "#{environmentpath}/production/hiera.yaml"
335
- Data Provider "common"
336
- Path "#{environmentpath}/production/data/common.yaml"
337
- Original path: "common"
338
- Found key: "lookup_options" value: {
339
- "a" => "first"
340
- }
341
- Merged result: {
342
- "a" => "first"
343
- }
438
+ Global Data Provider (hiera configuration version 5)
439
+ No such key: "lookup_options"
440
+ Environment Data Provider (hiera configuration version 5)
441
+ Hierarchy entry "Common"
442
+ Path "#{environmentpath}/production/data/common.yaml"
443
+ Original path: "common.yaml"
444
+ Found key: "lookup_options" value: {
445
+ "a" => "first"
446
+ }
344
447
  Searching for "a"
345
- Merge strategy first
346
- Data Binding "hiera"
347
- No such key: "a"
348
- Data Provider "Hiera Data Provider, version 4"
349
- ConfigurationPath "#{environmentpath}/production/hiera.yaml"
350
- Data Provider "common"
351
- Path "#{environmentpath}/production/data/common.yaml"
352
- Original path: "common"
353
- Found key: "a" value: "This is A"
354
- Merged result: "This is A"
355
- EXPLANATION
356
- rescue SystemExit => e
357
- expect(e.status).to eq(0)
358
- end
448
+ Global Data Provider (hiera configuration version 5)
449
+ No such key: "a"
450
+ Environment Data Provider (hiera configuration version 5)
451
+ Hierarchy entry "Common"
452
+ Path "#{environmentpath}/production/data/common.yaml"
453
+ Original path: "common.yaml"
454
+ Found key: "a" value: "This is A"
455
+ EXPLANATION
359
456
  end
360
457
 
361
458
  it 'can produce a yaml explanation' do
@@ -363,17 +460,7 @@ Searching for "a"
363
460
  lookup.options[:explain] = true
364
461
  lookup.options[:render_as] = :yaml
365
462
  lookup.command_line.stubs(:args).returns(['a'])
366
- save_stdout = $stdout
367
- output = nil
368
- begin
369
- $stdout = StringIO.new
370
- lookup.run_command
371
- output = $stdout.string
372
- rescue SystemExit => e
373
- expect(e.status).to eq(0)
374
- ensure
375
- $stdout = save_stdout
376
- end
463
+ output = run_lookup(lookup)
377
464
  expect(YAML.load(output)).to eq(expected_yaml_hash)
378
465
  end
379
466
 
@@ -382,17 +469,7 @@ Searching for "a"
382
469
  lookup.options[:explain] = true
383
470
  lookup.options[:render_as] = :json
384
471
  lookup.command_line.stubs(:args).returns(['a'])
385
- save_stdout = $stdout
386
- output = nil
387
- begin
388
- $stdout = StringIO.new
389
- lookup.run_command
390
- output = $stdout.string
391
- rescue SystemExit => e
392
- expect(e.status).to eq(0)
393
- ensure
394
- $stdout = save_stdout
395
- end
472
+ output = run_lookup(lookup)
396
473
  expect(JSON.parse(output)).to eq(expected_json_hash)
397
474
  end
398
475
 
@@ -400,17 +477,7 @@ Searching for "a"
400
477
  lookup.options[:node] = node
401
478
  lookup.options[:render_as] = :json
402
479
  lookup.command_line.stubs(:args).returns(['d.one.two.three'])
403
- save_stdout = $stdout
404
- output = nil
405
- begin
406
- $stdout = StringIO.new
407
- lookup.run_command
408
- output = $stdout.string
409
- rescue SystemExit => e
410
- expect(e.status).to eq(0)
411
- ensure
412
- $stdout = save_stdout
413
- end
480
+ output = run_lookup(lookup)
414
481
  expect(JSON.parse("[#{output}]")).to eq(['the value'])
415
482
  end
416
483
 
@@ -418,17 +485,7 @@ Searching for "a"
418
485
  lookup.options[:node] = node
419
486
  lookup.options[:render_as] = :json
420
487
  lookup.command_line.stubs(:args).returns(['"e.one.two.three"'])
421
- save_stdout = $stdout
422
- output = nil
423
- begin
424
- $stdout = StringIO.new
425
- lookup.run_command
426
- output = $stdout.string
427
- rescue SystemExit => e
428
- expect(e.status).to eq(0)
429
- ensure
430
- $stdout = save_stdout
431
- end
488
+ output = run_lookup(lookup)
432
489
  expect(JSON.parse("[#{output}]")).to eq(['the value'])
433
490
  end
434
491
 
@@ -436,17 +493,7 @@ Searching for "a"
436
493
  lookup.options[:node] = node
437
494
  lookup.options[:render_as] = :json
438
495
  lookup.command_line.stubs(:args).returns(['"f.one"."two.three".1'])
439
- save_stdout = $stdout
440
- output = nil
441
- begin
442
- $stdout = StringIO.new
443
- lookup.run_command
444
- output = $stdout.string
445
- rescue SystemExit => e
446
- expect(e.status).to eq(0)
447
- ensure
448
- $stdout = save_stdout
449
- end
496
+ output = run_lookup(lookup)
450
497
  expect(JSON.parse("[#{output}]")).to eq(['second value'])
451
498
  end
452
499
 
@@ -454,18 +501,14 @@ Searching for "a"
454
501
  it "is unaffected by global variables unless '--compile' is used" do
455
502
  lookup.options[:node] = node
456
503
  lookup.command_line.stubs(:args).returns(['c'])
457
- expect { lookup.run_command }.to output("--- This is\n...\n").to_stdout
504
+ expect(run_lookup(lookup)).to eql("--- This is\n...")
458
505
  end
459
506
 
460
507
  it "is affected by global variables when '--compile' is used" do
461
508
  lookup.options[:node] = node
462
509
  lookup.options[:compile] = true
463
510
  lookup.command_line.stubs(:args).returns(['c'])
464
- begin
465
- expect { lookup.run_command }.to output("--- This is C from site.pp\n...\n").to_stdout
466
- rescue SystemExit => e
467
- expect(e.status).to eq(0)
468
- end
511
+ expect(run_lookup(lookup)).to eql("--- This is C from site.pp\n...")
469
512
  end
470
513
  end
471
514
 
@@ -475,22 +518,14 @@ Searching for "a"
475
518
  it "works OK in the absense of '--compile'" do
476
519
  lookup.options[:node] = node
477
520
  lookup.command_line.stubs(:args).returns(['c'])
478
- begin
479
- expect { lookup.run_command }.to output("--- This is C from data.pp\n...\n").to_stdout
480
- rescue SystemExit => e
481
- expect(e.status).to eq(0)
482
- end
521
+ expect(run_lookup(lookup)).to eql("--- This is C from data.pp\n...")
483
522
  end
484
523
 
485
524
  it "global scope is affected by global variables when '--compile' is used" do
486
525
  lookup.options[:node] = node
487
526
  lookup.options[:compile] = true
488
527
  lookup.command_line.stubs(:args).returns(['c'])
489
- begin
490
- expect { lookup.run_command }.to output("--- This is C from site.pp\n...\n").to_stdout
491
- rescue SystemExit => e
492
- expect(e.status).to eq(0)
493
- end
528
+ expect(run_lookup(lookup)).to eql("--- This is C from site.pp\n...")
494
529
  end
495
530
  end
496
531
  end