puppet 4.2.3-x64-mingw32 → 4.3.0-x64-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 (337) hide show
  1. data/Gemfile +3 -0
  2. data/README.md +1 -1
  3. data/ext/debian/puppet.init +0 -1
  4. data/ext/debian/puppet.logrotate +14 -5
  5. data/ext/osx/puppet.plist +0 -2
  6. data/ext/redhat/client.init +13 -5
  7. data/ext/redhat/logrotate +15 -3
  8. data/ext/redhat/puppet.spec.erb +5 -1
  9. data/ext/redhat/server.init +1 -1
  10. data/ext/systemd/puppet.service +1 -0
  11. data/lib/puppet.rb +12 -0
  12. data/lib/puppet/agent.rb +4 -4
  13. data/lib/puppet/agent/locker.rb +11 -2
  14. data/lib/puppet/application/agent.rb +5 -1
  15. data/lib/puppet/application/apply.rb +4 -0
  16. data/lib/puppet/application/filebucket.rb +78 -4
  17. data/lib/puppet/application/lookup.rb +356 -0
  18. data/lib/puppet/application/master.rb +3 -0
  19. data/lib/puppet/configurer.rb +9 -5
  20. data/lib/puppet/context.rb +16 -1
  21. data/lib/puppet/context/trusted_information.rb +21 -1
  22. data/lib/puppet/daemon.rb +17 -13
  23. data/lib/puppet/data_binding.rb +4 -2
  24. data/lib/puppet/data_providers.rb +12 -13
  25. data/lib/puppet/data_providers/data_adapter.rb +7 -68
  26. data/lib/puppet/data_providers/data_function_support.rb +5 -26
  27. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -10
  28. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -22
  29. data/lib/puppet/data_providers/hiera_config.rb +106 -0
  30. data/lib/puppet/data_providers/hiera_env_data_provider.rb +18 -0
  31. data/lib/puppet/data_providers/hiera_interpolate.rb +97 -0
  32. data/lib/puppet/data_providers/hiera_module_data_provider.rb +23 -0
  33. data/lib/puppet/data_providers/hiera_support.rb +37 -0
  34. data/lib/puppet/data_providers/json_data_provider_factory.rb +31 -0
  35. data/lib/puppet/data_providers/lookup_adapter.rb +200 -0
  36. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +32 -0
  37. data/lib/puppet/defaults.rb +12 -2
  38. data/lib/puppet/error.rb +4 -0
  39. data/lib/puppet/face/module/changes.rb +2 -1
  40. data/lib/puppet/feature/cfacter.rb +1 -0
  41. data/lib/puppet/file_bucket/dipper.rb +58 -2
  42. data/lib/puppet/functions.rb +2 -4
  43. data/lib/puppet/functions/assert_type.rb +48 -12
  44. data/lib/puppet/functions/defined.rb +79 -48
  45. data/lib/puppet/functions/each.rb +85 -27
  46. data/lib/puppet/functions/filter.rb +58 -23
  47. data/lib/puppet/functions/hiera.rb +76 -3
  48. data/lib/puppet/functions/hiera_array.rb +65 -3
  49. data/lib/puppet/functions/hiera_hash.rb +74 -2
  50. data/lib/puppet/functions/hiera_include.rb +75 -2
  51. data/lib/puppet/functions/lookup.rb +19 -17
  52. data/lib/puppet/functions/map.rb +56 -21
  53. data/lib/puppet/functions/match.rb +29 -12
  54. data/lib/puppet/functions/reduce.rb +95 -58
  55. data/lib/puppet/functions/versioncmp.rb +36 -0
  56. data/lib/puppet/functions/with.rb +15 -7
  57. data/lib/puppet/indirector/catalog/compiler.rb +3 -3
  58. data/lib/puppet/indirector/catalog/static_compiler.rb +46 -30
  59. data/lib/puppet/indirector/data_binding/none.rb +4 -1
  60. data/lib/puppet/indirector/file_bucket_file/file.rb +58 -1
  61. data/lib/puppet/indirector/hiera.rb +4 -0
  62. data/lib/puppet/indirector/json.rb +1 -1
  63. data/lib/puppet/indirector/msgpack.rb +1 -1
  64. data/lib/puppet/indirector/request.rb +7 -8
  65. data/lib/puppet/indirector/resource_type/parser.rb +5 -3
  66. data/lib/puppet/info_service.rb +7 -0
  67. data/lib/puppet/info_service/class_information_service.rb +111 -0
  68. data/lib/puppet/module_tool/metadata.rb +32 -9
  69. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +42 -38
  70. data/lib/puppet/network/authconfig.rb +21 -1
  71. data/lib/puppet/network/authorization.rb +8 -1
  72. data/lib/puppet/network/http/api/master/v3.rb +7 -1
  73. data/lib/puppet/network/http/api/master/v3/environment.rb +59 -0
  74. data/lib/puppet/node/environment.rb +9 -2
  75. data/lib/puppet/parser.rb +3 -0
  76. data/lib/puppet/parser/ast/pops_bridge.rb +39 -1
  77. data/lib/puppet/parser/compiler.rb +302 -12
  78. data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  79. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
  80. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +38 -0
  81. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
  82. data/lib/puppet/parser/environment_compiler.rb +165 -0
  83. data/lib/puppet/parser/functions/assert_type.rb +46 -16
  84. data/lib/puppet/parser/functions/defined.rb +105 -68
  85. data/lib/puppet/parser/functions/each.rb +85 -27
  86. data/lib/puppet/parser/functions/filter.rb +59 -23
  87. data/lib/puppet/parser/functions/hiera.rb +83 -27
  88. data/lib/puppet/parser/functions/hiera_array.rb +71 -28
  89. data/lib/puppet/parser/functions/hiera_hash.rb +81 -30
  90. data/lib/puppet/parser/functions/hiera_include.rb +81 -40
  91. data/lib/puppet/parser/functions/map.rb +55 -20
  92. data/lib/puppet/parser/functions/match.rb +27 -12
  93. data/lib/puppet/parser/functions/reduce.rb +97 -60
  94. data/lib/puppet/parser/functions/with.rb +16 -8
  95. data/lib/puppet/parser/resource.rb +98 -19
  96. data/lib/puppet/plugins/configuration.rb +3 -2
  97. data/lib/puppet/plugins/data_providers.rb +12 -60
  98. data/lib/puppet/plugins/data_providers/data_provider.rb +283 -0
  99. data/lib/puppet/plugins/data_providers/registry.rb +84 -0
  100. data/lib/puppet/pops.rb +19 -17
  101. data/lib/puppet/pops/adapters.rb +12 -0
  102. data/lib/puppet/pops/binder/binder.rb +2 -2
  103. data/lib/puppet/pops/binder/bindings_checker.rb +1 -1
  104. data/lib/puppet/pops/binder/bindings_label_provider.rb +3 -1
  105. data/lib/puppet/pops/binder/bindings_loader.rb +6 -2
  106. data/lib/puppet/pops/binder/bindings_model_meta.rb +2 -2
  107. data/lib/puppet/pops/binder/config/binder_config.rb +1 -1
  108. data/lib/puppet/pops/binder/injector.rb +4 -4
  109. data/lib/puppet/pops/binder/key_factory.rb +3 -9
  110. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +68 -9
  111. data/lib/puppet/pops/evaluator/access_operator.rb +27 -60
  112. data/lib/puppet/pops/evaluator/closure.rb +8 -8
  113. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
  114. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  115. data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
  116. data/lib/puppet/pops/evaluator/relationship_operator.rb +7 -1
  117. data/lib/puppet/pops/functions/dispatcher.rb +3 -3
  118. data/lib/puppet/pops/issues.rb +1 -1
  119. data/lib/puppet/pops/label_provider.rb +1 -1
  120. data/lib/puppet/pops/lookup.rb +25 -47
  121. data/lib/puppet/pops/lookup/explainer.rb +402 -0
  122. data/lib/puppet/pops/lookup/invocation.rb +117 -0
  123. data/lib/puppet/pops/merge_strategy.rb +73 -5
  124. data/lib/puppet/pops/model/factory.rb +34 -0
  125. data/lib/puppet/pops/model/model_label_provider.rb +10 -1
  126. data/lib/puppet/pops/model/model_meta.rb +15 -0
  127. data/lib/puppet/pops/model/model_tree_dumper.rb +18 -0
  128. data/lib/puppet/pops/parser/code_merger.rb +13 -1
  129. data/lib/puppet/pops/parser/egrammar.ra +56 -3
  130. data/lib/puppet/pops/parser/eparser.rb +1549 -1352
  131. data/lib/puppet/pops/parser/lexer2.rb +31 -6
  132. data/lib/puppet/pops/parser/locator.rb +1 -1
  133. data/lib/puppet/pops/parser/parser_support.rb +25 -13
  134. data/lib/puppet/pops/types/enumeration.rb +1 -2
  135. data/lib/puppet/pops/types/type_asserter.rb +16 -15
  136. data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
  137. data/lib/puppet/pops/types/type_calculator.rb +171 -1020
  138. data/lib/puppet/pops/types/type_factory.rb +87 -148
  139. data/lib/puppet/pops/types/type_mismatch_describer.rb +743 -0
  140. data/lib/puppet/pops/types/type_parser.rb +116 -127
  141. data/lib/puppet/pops/types/types.rb +1394 -255
  142. data/lib/puppet/pops/types/types_meta.rb +0 -234
  143. data/lib/puppet/pops/validation.rb +7 -2
  144. data/lib/puppet/pops/validation/checker4_0.rb +28 -0
  145. data/lib/puppet/provider/augeas/augeas.rb +50 -0
  146. data/lib/puppet/provider/group/directoryservice.rb +10 -0
  147. data/lib/puppet/provider/package/dnf.rb +41 -0
  148. data/lib/puppet/provider/package/gem.rb +7 -2
  149. data/lib/puppet/provider/package/rpm.rb +1 -0
  150. data/lib/puppet/provider/package/windows/exe_package.rb +10 -8
  151. data/lib/puppet/provider/package/windows/msi_package.rb +4 -3
  152. data/lib/puppet/provider/package/windows/package.rb +9 -1
  153. data/lib/puppet/provider/package/yum.rb +14 -9
  154. data/lib/puppet/provider/service/bsd.rb +1 -1
  155. data/lib/puppet/provider/service/debian.rb +21 -0
  156. data/lib/puppet/provider/service/init.rb +6 -0
  157. data/lib/puppet/provider/service/rcng.rb +51 -0
  158. data/lib/puppet/provider/service/redhat.rb +2 -1
  159. data/lib/puppet/provider/service/smf.rb +43 -2
  160. data/lib/puppet/provider/service/src.rb +27 -0
  161. data/lib/puppet/provider/service/systemd.rb +15 -3
  162. data/lib/puppet/provider/sshkey/parsed.rb +19 -9
  163. data/lib/puppet/reference/report.rb +9 -12
  164. data/lib/puppet/reports.rb +5 -1
  165. data/lib/puppet/resource.rb +50 -73
  166. data/lib/puppet/resource/capability_finder.rb +95 -0
  167. data/lib/puppet/resource/catalog.rb +47 -7
  168. data/lib/puppet/resource/status.rb +0 -2
  169. data/lib/puppet/resource/type.rb +238 -44
  170. data/lib/puppet/resource/type_collection.rb +60 -2
  171. data/lib/puppet/settings.rb +2 -2
  172. data/lib/puppet/ssl/certificate_authority/interface.rb +2 -2
  173. data/lib/puppet/ssl/oids.rb +9 -1
  174. data/lib/puppet/transaction.rb +4 -1
  175. data/lib/puppet/transaction/additional_resource_generator.rb +71 -8
  176. data/lib/puppet/transaction/resource_harness.rb +9 -4
  177. data/lib/puppet/type.rb +74 -3
  178. data/lib/puppet/type/augeas.rb +8 -0
  179. data/lib/puppet/type/file/source.rb +14 -12
  180. data/lib/puppet/type/user.rb +4 -2
  181. data/lib/puppet/util/windows/security.rb +4 -1
  182. data/lib/puppet/util/windows/taskscheduler.rb +1 -1
  183. data/lib/puppet/version.rb +1 -1
  184. data/spec/fixtures/unit/application/environments/production/data/common.yaml +3 -0
  185. data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
  186. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
  187. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/environment.conf +2 -0
  188. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
  189. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
  190. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
  191. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
  192. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
  193. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
  194. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
  195. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
  196. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
  197. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
  198. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
  199. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
  200. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
  201. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
  202. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
  203. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
  204. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
  205. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
  206. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +18 -0
  207. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
  208. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +46 -0
  209. data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
  210. data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
  211. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
  212. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
  213. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
  214. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
  215. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
  216. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
  217. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +1 -0
  218. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
  219. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
  220. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
  221. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +18 -0
  222. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
  223. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
  224. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
  225. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +1 -0
  226. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +3 -0
  227. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/hiera.yaml +8 -0
  228. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
  229. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/metadata.json +9 -0
  230. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
  231. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/manifests/init.pp +3 -0
  232. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/metadata.json +9 -0
  233. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +10 -0
  234. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +23 -0
  235. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/manifests/init.pp +3 -0
  236. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/metadata.json +9 -0
  237. data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
  238. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
  239. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
  240. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
  241. data/spec/integration/data_binding_spec.rb +229 -0
  242. data/spec/integration/file_bucket/file_spec.rb +2 -2
  243. data/spec/integration/parser/compiler_spec.rb +23 -19
  244. data/spec/integration/parser/resource_expressions_spec.rb +4 -4
  245. data/spec/integration/parser/undef_param_spec.rb +1 -1
  246. data/spec/integration/resource/catalog_spec.rb +1 -1
  247. data/spec/integration/type/package_spec.rb +2 -0
  248. data/spec/integration/util/windows/security_spec.rb +18 -0
  249. data/spec/lib/matchers/include_in_order.rb +2 -2
  250. data/spec/shared_behaviours/iterative_functions.rb +8 -8
  251. data/spec/spec_helper.rb +7 -0
  252. data/spec/unit/agent/locker_spec.rb +4 -4
  253. data/spec/unit/agent_spec.rb +0 -8
  254. data/spec/unit/application/agent_spec.rb +5 -0
  255. data/spec/unit/application/apply_spec.rb +8 -0
  256. data/spec/unit/application/filebucket_spec.rb +87 -1
  257. data/spec/unit/application/lookup_spec.rb +195 -0
  258. data/spec/unit/appmgmt_spec.rb +657 -0
  259. data/spec/unit/capability_spec.rb +414 -0
  260. data/spec/unit/configurer_spec.rb +7 -1
  261. data/spec/unit/context/trusted_information_spec.rb +24 -1
  262. data/spec/unit/daemon_spec.rb +18 -8
  263. data/spec/unit/data_providers/hiera_data_provider_spec.rb +201 -0
  264. data/spec/unit/file_bucket/dipper_spec.rb +210 -1
  265. data/spec/unit/functions/assert_type_spec.rb +5 -7
  266. data/spec/unit/functions/defined_spec.rb +2 -2
  267. data/spec/unit/functions/epp_spec.rb +2 -2
  268. data/spec/unit/functions/lookup_spec.rb +200 -9
  269. data/spec/unit/functions/regsubst_spec.rb +17 -8
  270. data/spec/unit/functions/scanf_spec.rb +1 -1
  271. data/spec/unit/functions/split_spec.rb +2 -2
  272. data/spec/unit/functions/versioncmp_spec.rb +36 -0
  273. data/spec/unit/functions4_spec.rb +58 -72
  274. data/spec/unit/indirector/catalog/compiler_spec.rb +28 -8
  275. data/spec/unit/indirector/catalog/static_compiler_spec.rb +38 -20
  276. data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
  277. data/spec/unit/indirector/file_bucket_file/file_spec.rb +52 -1
  278. data/spec/unit/indirector/request_spec.rb +8 -8
  279. data/spec/unit/info_service_spec.rb +236 -0
  280. data/spec/unit/module_tool/metadata_spec.rb +31 -2
  281. data/spec/unit/network/authconfig_spec.rb +62 -32
  282. data/spec/unit/network/authorization_spec.rb +30 -2
  283. data/spec/unit/network/http/connection_spec.rb +14 -19
  284. data/spec/unit/parser/compiler_spec.rb +86 -2
  285. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  286. data/spec/unit/parser/resource_spec.rb +2 -20
  287. data/spec/unit/pops/binder/config/binder_config_spec.rb +1 -1
  288. data/spec/unit/pops/binder/injector_spec.rb +3 -3
  289. data/spec/unit/pops/evaluator/access_ops_spec.rb +13 -11
  290. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -2
  291. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +19 -11
  292. data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
  293. data/spec/unit/pops/label_provider_spec.rb +5 -1
  294. data/spec/unit/pops/parser/lexer2_spec.rb +33 -7
  295. data/spec/unit/pops/parser/parse_application_spec.rb +40 -0
  296. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -0
  297. data/spec/unit/pops/parser/parse_capabilities_spec.rb +47 -0
  298. data/spec/unit/pops/parser/parse_site_spec.rb +38 -0
  299. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  300. data/spec/unit/pops/parser/parser_spec.rb +18 -0
  301. data/spec/unit/pops/types/type_calculator_spec.rb +427 -444
  302. data/spec/unit/pops/types/type_factory_spec.rb +12 -12
  303. data/spec/unit/pops/types/type_parser_spec.rb +7 -12
  304. data/spec/unit/pops/validator/validator_spec.rb +25 -0
  305. data/spec/unit/provider/augeas/augeas_spec.rb +50 -0
  306. data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
  307. data/spec/unit/provider/group/windows_adsi_spec.rb +3 -0
  308. data/spec/unit/provider/package/dnf_spec.rb +92 -0
  309. data/spec/unit/provider/package/gem_spec.rb +7 -0
  310. data/spec/unit/provider/package/rpm_spec.rb +25 -2
  311. data/spec/unit/provider/package/windows/package_spec.rb +41 -0
  312. data/spec/unit/provider/package/yum_spec.rb +21 -13
  313. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +10 -0
  314. data/spec/unit/provider/service/debian_spec.rb +27 -0
  315. data/spec/unit/provider/service/rcng_spec.rb +41 -0
  316. data/spec/unit/provider/service/redhat_spec.rb +8 -1
  317. data/spec/unit/provider/service/smf_spec.rb +30 -5
  318. data/spec/unit/provider/service/src_spec.rb +19 -4
  319. data/spec/unit/provider/service/systemd_spec.rb +78 -29
  320. data/spec/unit/provider/sshkey/parsed_spec.rb +23 -0
  321. data/spec/unit/reports_spec.rb +10 -0
  322. data/spec/unit/resource/capability_finder_spec.rb +56 -0
  323. data/spec/unit/resource/catalog_spec.rb +31 -8
  324. data/spec/unit/resource/type_collection_spec.rb +23 -2
  325. data/spec/unit/resource/type_spec.rb +1 -1
  326. data/spec/unit/resource_spec.rb +22 -4
  327. data/spec/unit/settings_spec.rb +90 -1
  328. data/spec/unit/ssl/certificate_authority/interface_spec.rb +4 -3
  329. data/spec/unit/ssl/oids_spec.rb +8 -0
  330. data/spec/unit/transaction/additional_resource_generator_spec.rb +78 -5
  331. data/spec/unit/transaction/report_spec.rb +24 -1
  332. data/spec/unit/type/package_spec.rb +1 -0
  333. data/spec/unit/type/user_spec.rb +14 -7
  334. data/spec/unit/type_spec.rb +1 -1
  335. metadata +169 -5
  336. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
  337. data/spec/integration/data_binding.rb +0 -104
@@ -0,0 +1,414 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet_spec/compiler'
4
+ require_relative 'pops/parser/parser_rspec_helper'
5
+
6
+ describe "Capability types" do
7
+ include PuppetSpec::Compiler
8
+ # We pull this in because we need access to with_app_management; and
9
+ # since that has to root around in the guts of the Pops parser, there's
10
+ # no really elegant way to do this
11
+ include ParserRspecHelper
12
+
13
+ def make_cap_type
14
+ Puppet::Type.newtype :cap, :is_capability => true do
15
+ newparam :name
16
+ newparam :host
17
+ end
18
+ end
19
+
20
+ before :each do
21
+ with_app_management(true)
22
+ end
23
+
24
+ after :each do
25
+ with_app_management(false)
26
+ end
27
+
28
+ describe "annotations" do
29
+ it "adds a blueprint for a produced resource" do
30
+ catalog = compile_to_catalog(<<-MANIFEST)
31
+ define test($hostname) {
32
+ notify { "hostname ${hostname}":}
33
+ }
34
+
35
+ Test produces Cap {
36
+ host => $hostname
37
+ }
38
+ MANIFEST
39
+
40
+ krt = catalog.environment_instance.known_resource_types
41
+ type = krt.definition(:test)
42
+ expect(type.produces).to be_instance_of(Array)
43
+ prd = type.produces.first
44
+
45
+ expect(prd).to be_instance_of(Hash)
46
+ expect(prd[:capability]).to eq("Cap")
47
+ expect(prd[:mappings]).to be_instance_of(Hash)
48
+ expect(prd[:mappings]["host"]).to be_instance_of(Puppet::Parser::AST::PopsBridge::Expression)
49
+ end
50
+
51
+ it "adds a blueprint for a consumed resource" do
52
+ catalog = compile_to_catalog(<<-MANIFEST)
53
+ define test($hostname) {
54
+ notify { "hostname ${hostname}":}
55
+ }
56
+
57
+ Test consumes Cap {
58
+ host => $hostname
59
+ }
60
+ MANIFEST
61
+
62
+ krt = catalog.environment_instance.known_resource_types
63
+ type = krt.definition(:test)
64
+ expect(type.produces).to be_instance_of(Array)
65
+ cns = type.consumes.first
66
+
67
+ expect(cns).to be_instance_of(Hash)
68
+ expect(cns[:capability]).to eq("Cap")
69
+ expect(cns[:mappings]).to be_instance_of(Hash)
70
+ expect(cns[:mappings]["host"]).to be_instance_of(Puppet::Parser::AST::PopsBridge::Expression)
71
+ end
72
+
73
+ it 'can place define and consumes/produces in separate manifests' do
74
+ parse_results = []
75
+ parser = Puppet::Parser::ParserFactory.parser
76
+
77
+ parser.string = <<-MANIFEST
78
+ define test($hostname) {
79
+ notify { "hostname ${hostname}":}
80
+ }
81
+ MANIFEST
82
+ parse_results << parser.parse
83
+
84
+ parser.string = <<-MANIFEST
85
+ Test consumes Cap {
86
+ host => $hostname
87
+ }
88
+ MANIFEST
89
+ parse_results << parser.parse
90
+
91
+ main = Puppet::Parser::AST::Hostclass.new('', :code => Puppet::Parser::ParserFactory.code_merger.concatenate(parse_results))
92
+ Puppet::Node::Environment.any_instance.stubs(:perform_initial_import).returns main
93
+
94
+ type = compile_to_catalog(nil).environment_instance.known_resource_types.definition(:test)
95
+ expect(type.produces).to be_instance_of(Array)
96
+ cns = type.consumes.first
97
+
98
+ expect(cns).to be_instance_of(Hash)
99
+ expect(cns[:capability]).to eq('Cap')
100
+ expect(cns[:mappings]).to be_instance_of(Hash)
101
+ expect(cns[:mappings]['host']).to be_instance_of(Puppet::Parser::AST::PopsBridge::Expression)
102
+ end
103
+
104
+ it 'can place use a qualified name for defines that produces capabilities' do
105
+ parse_results = []
106
+ parser = Puppet::Parser::ParserFactory.parser
107
+
108
+ parser.string = <<-MANIFEST
109
+ class mod {
110
+ define test($hostname) {
111
+ notify { "hostname ${hostname}":}
112
+ }
113
+ }
114
+ include mod
115
+ MANIFEST
116
+ parse_results << parser.parse
117
+
118
+ parser.string = <<-MANIFEST
119
+ Mod::Test consumes Cap {
120
+ host => $hostname
121
+ }
122
+ MANIFEST
123
+ parse_results << parser.parse
124
+
125
+ main = Puppet::Parser::AST::Hostclass.new('', :code => Puppet::Parser::ParserFactory.code_merger.concatenate(parse_results))
126
+ Puppet::Node::Environment.any_instance.stubs(:perform_initial_import).returns main
127
+
128
+ type = compile_to_catalog(nil).environment_instance.known_resource_types.definition('Mod::Test')
129
+ expect(type.produces).to be_instance_of(Array)
130
+ cns = type.consumes.first
131
+
132
+ expect(cns).to be_instance_of(Hash)
133
+ expect(cns[:capability]).to eq('Cap')
134
+ expect(cns[:mappings]).to be_instance_of(Hash)
135
+ expect(cns[:mappings]['host']).to be_instance_of(Puppet::Parser::AST::PopsBridge::Expression)
136
+ end
137
+ it "does not allow operator '+>' in a mapping" do
138
+ expect do
139
+ compile_to_catalog(<<-MANIFEST)
140
+ define test($hostname) {
141
+ notify { "hostname ${hostname}":}
142
+ }
143
+
144
+ Test consumes Cap {
145
+ host +> $hostname
146
+ }
147
+ MANIFEST
148
+ end.to raise_error(Puppet::ParseErrorWithIssue, /Illegal \+> operation.*This operator can not be used in a Capability Mapping/)
149
+ end
150
+
151
+ it "does not allow operator '*=>' in a mapping" do
152
+ expect do
153
+ compile_to_catalog(<<-MANIFEST)
154
+ define test($hostname) {
155
+ notify { "hostname ${hostname}":}
156
+ }
157
+
158
+ Test consumes Cap {
159
+ *=> { host => $hostname }
160
+ }
161
+ MANIFEST
162
+ end.to raise_error(Puppet::ParseError, /The operator '\* =>' in a Capability Mapping is not supported/)
163
+ end
164
+
165
+ it "does not allow 'before' relationship to capability mapping" do
166
+ make_cap_type
167
+ expect do
168
+ compile_to_catalog(<<-MANIFEST)
169
+ define test() {
170
+ notify { "hello":}
171
+ }
172
+
173
+ Test consumes Cap {}
174
+
175
+ test { one: before => Cap[cap] }
176
+ MANIFEST
177
+ end.to raise_error(Puppet::Error, /'before' is not a valid relationship to a capability/)
178
+ end
179
+
180
+ ["produces", "consumes"].each do |kw|
181
+ it "creates an error when #{kw} references nonexistent type" do
182
+ manifest = <<-MANIFEST
183
+ Test #{kw} Cap {
184
+ host => $hostname
185
+ }
186
+ MANIFEST
187
+
188
+ expect {
189
+ compile_to_catalog(manifest)
190
+ }.to raise_error(Puppet::Error,
191
+ /#{kw} clause references nonexistent type Test/)
192
+ end
193
+ end
194
+ end
195
+
196
+ describe "exporting a capability" do
197
+ before(:each) do
198
+ make_cap_type
199
+ end
200
+
201
+ after :each do
202
+ Puppet::Type.rmtype(:cap)
203
+ end
204
+
205
+ it "does not add produced resources that are not exported" do
206
+ manifest = <<-MANIFEST
207
+ define test($hostname) {
208
+ notify { "hostname ${hostname}":}
209
+ }
210
+
211
+ Test produces Cap {
212
+ host => $hostname
213
+ }
214
+
215
+ test { one: hostname => "ahost" }
216
+ MANIFEST
217
+ catalog = compile_to_catalog(manifest)
218
+ expect(catalog.resource("Test[one]")).to be_instance_of(Puppet::Resource)
219
+ expect(catalog.resource_keys.find { |type, _| type == "Cap" }).to be_nil
220
+ end
221
+
222
+ it "adds produced resources that are exported" do
223
+ manifest = <<-MANIFEST
224
+ define test($hostname) {
225
+ notify { "hostname ${hostname}":}
226
+ }
227
+
228
+ # The $hostname in the produces clause does not refer to this variable,
229
+ # instead, it referes to the hostname property of the Test resource
230
+ # that is producing the Cap
231
+ $hostname = "other_host"
232
+
233
+ Test produces Cap {
234
+ host => $hostname
235
+ }
236
+
237
+ test { one: hostname => "ahost", export => Cap[two] }
238
+ MANIFEST
239
+ catalog = compile_to_catalog(manifest)
240
+ expect(catalog.resource("Test[one]")).to be_instance_of(Puppet::Resource)
241
+
242
+ caps = catalog.resource_keys.select { |type, _| type == "Cap" }
243
+ expect(caps.size).to eq(1)
244
+
245
+ cap = catalog.resource("Cap[two]")
246
+ expect(cap).to be_instance_of(Puppet::Resource)
247
+ expect(cap["require"]).to eq("Test[one]")
248
+ expect(cap["host"]).to eq("ahost")
249
+ expect(cap.resource_type).to eq(Puppet::Type::Cap)
250
+ expect(cap.tags.any? { |t| t == "producer:production" }).to eq(true)
251
+ end
252
+ end
253
+
254
+ describe "consuming a capability" do
255
+ before(:each) do
256
+ make_cap_type
257
+ end
258
+
259
+ after :each do
260
+ Puppet::Type.rmtype(:cap)
261
+ end
262
+
263
+ def make_catalog(instance)
264
+ manifest = <<-MANIFEST
265
+ define test($hostname = nohost) {
266
+ notify { "hostname ${hostname}":}
267
+ }
268
+
269
+ Test consumes Cap {
270
+ hostname => $host
271
+ }
272
+ MANIFEST
273
+ compile_to_catalog(manifest + instance)
274
+ end
275
+
276
+ def mock_cap_finding
277
+ cap = Puppet::Resource.new("Cap", "two")
278
+ cap["host"] = "ahost"
279
+ Puppet::Resource::CapabilityFinder.expects(:find).returns(cap)
280
+ cap
281
+ end
282
+
283
+ it "does not fetch a consumed resource when consume metaparam not set" do
284
+ Puppet::Resource::CapabilityFinder.expects(:find).never
285
+ catalog = make_catalog("test { one: }")
286
+ expect(catalog.resource_keys.find { |type, _| type == "Cap" }).to be_nil
287
+ expect(catalog.resource("Test", "one")["hostname"]).to eq("nohost")
288
+ end
289
+
290
+ it "sets hostname from consumed capability" do
291
+ cap = mock_cap_finding
292
+ catalog = make_catalog("test { one: consume => Cap[two] }")
293
+ expect(catalog.resource("Cap[two]")).to eq(cap)
294
+ expect(catalog.resource("Cap[two]")["host"]).to eq("ahost")
295
+ expect(catalog.resource("Test", "one")["hostname"]).to eq("ahost")
296
+ end
297
+
298
+ it "does not override explicit hostname property when consuming" do
299
+ cap = mock_cap_finding
300
+ catalog = make_catalog("test { one: hostname => other_host, consume => Cap[two] }")
301
+ expect(catalog.resource("Cap[two]")).to eq(cap)
302
+ expect(catalog.resource("Cap[two]")["host"]).to eq("ahost")
303
+ expect(catalog.resource("Test", "one")["hostname"]).to eq("other_host")
304
+ end
305
+
306
+ it "fetches required capability" do
307
+ cap = mock_cap_finding
308
+ catalog = make_catalog("test { one: require => Cap[two] }")
309
+ expect(catalog.resource("Cap[two]")).to eq(cap)
310
+ expect(catalog.resource("Cap[two]")["host"]).to eq("ahost")
311
+ expect(catalog.resource("Test", "one")["hostname"]).to eq("nohost")
312
+ end
313
+
314
+ ['export', 'consume'].each do |metaparam|
315
+
316
+ it "validates that #{metaparam} metaparameter rejects values that are not resources" do
317
+ expect { make_catalog("test { one: #{metaparam} => 'hello' }") }.to raise_error(Puppet::Error, /not a resource/)
318
+ end
319
+
320
+ it "validates that #{metaparam} metaparameter rejects resources that are not capability resources" do
321
+ expect { make_catalog("notify{hello:} test { one: #{metaparam} => Notify[hello] }") }.to raise_error(Puppet::Error, /not a capability resource/)
322
+ end
323
+ end
324
+
325
+ describe 'producing/consuming resources' do
326
+
327
+ let(:ral) do
328
+ compile_to_ral(<<-MANIFEST)
329
+ define producer() {
330
+ notify { "producer":}
331
+ }
332
+
333
+ define consumer() {
334
+ notify { $title:}
335
+ }
336
+
337
+ Producer produces Cap {}
338
+
339
+ Consumer consumes Cap {}
340
+
341
+ producer {x: export => Cap[cap]}
342
+ consumer {x: consume => Cap[cap]}
343
+ consumer {y: require => Cap[cap]}
344
+ MANIFEST
345
+ end
346
+
347
+ let(:graph) do
348
+ graph = Puppet::Graph::RelationshipGraph.new(Puppet::Graph::SequentialPrioritizer.new)
349
+ graph.populate_from(ral)
350
+ graph
351
+ end
352
+
353
+ let(:capability) { ral.resource('Cap[cap]') }
354
+
355
+ it 'the produced resource depends on the producer' do
356
+ expect(graph.dependencies(capability).map {|d| d.to_s }).to include('Producer[x]')
357
+ end
358
+
359
+ it 'the consumer depends on the consumed resource' do
360
+ expect(graph.dependents(capability).map {|d| d.to_s }).to include('Consumer[x]')
361
+ end
362
+
363
+ it 'the consumer depends on the required resource' do
364
+ expect(graph.dependents(capability).map {|d| d.to_s }).to include('Consumer[y]')
365
+ end
366
+ end
367
+
368
+ describe 'producing/consuming resources to/from classes' do
369
+
370
+ let(:ral) do
371
+ compile_to_ral(<<-MANIFEST)
372
+ define test($hostname) {
373
+ notify { $hostname:}
374
+ }
375
+
376
+ class producer($host) {
377
+ notify { p: }
378
+ }
379
+
380
+ class consumer($host) {
381
+ test { c: hostname => $host }
382
+ }
383
+
384
+ Class[producer] produces Cap {}
385
+
386
+ Class[consumer] consumes Cap {}
387
+
388
+ class { producer: host => 'produced.host', export => Cap[one]}
389
+ class { consumer: consume => Cap[one]}
390
+ MANIFEST
391
+ end
392
+
393
+ let(:graph) do
394
+ graph = Puppet::Graph::RelationshipGraph.new(Puppet::Graph::SequentialPrioritizer.new)
395
+ graph.populate_from(ral)
396
+ graph
397
+ end
398
+
399
+ let(:capability) { ral.resource('Cap[one]') }
400
+
401
+ it 'the produced resource depends on the producer' do
402
+ expect(graph.dependencies(capability).map {|d| d.to_s }).to include('Class[Producer]')
403
+ end
404
+
405
+ it 'the consumer depends on the consumed resource' do
406
+ expect(graph.dependents(capability).map {|d| d.to_s }).to include('Class[Consumer]')
407
+ end
408
+
409
+ it 'resource in the consumer class gets values from producer via the capability resource' do
410
+ expect(graph.dependents(capability).map {|d| d.to_s }).to include('Notify[produced.host]')
411
+ end
412
+ end
413
+ end
414
+ end
@@ -532,10 +532,16 @@ describe Puppet::Configurer do
532
532
  @agent.run
533
533
  end
534
534
 
535
- it "sends the configured environment in the request" do
535
+ it "sends an explicitly configured environment request" do
536
+ Puppet.settings.expects(:set_by_config?).with(:environment).returns(true)
536
537
  Puppet::Node.indirection.expects(:find).with(anything, has_entries(:configured_environment => Puppet[:environment])).twice
537
538
  @agent.run
538
539
  end
540
+
541
+ it "does not send a configured_environment when using the default" do
542
+ Puppet::Node.indirection.expects(:find).with(anything, has_entries(:configured_environment => nil)).twice
543
+ @agent.run
544
+ end
539
545
  end
540
546
 
541
547
  describe "when retrieving a catalog" do
@@ -47,6 +47,8 @@ describe Puppet::Context::TrustedInformation do
47
47
  '1.3.6.1.4.1.34380.1.2.1' => 'CSR specific info',
48
48
  '1.3.6.1.4.1.34380.1.2.2' => 'more CSR specific info',
49
49
  })
50
+ expect(trusted.hostname).to eq('cert name')
51
+ expect(trusted.domain).to be_nil
50
52
  end
51
53
 
52
54
  it "is remote but lacks certificate information when it is authenticated" do
@@ -69,6 +71,8 @@ describe Puppet::Context::TrustedInformation do
69
71
  expect(trusted.authenticated).to eq('local')
70
72
  expect(trusted.certname).to eq('cert name')
71
73
  expect(trusted.extensions).to eq({})
74
+ expect(trusted.hostname).to eq('cert name')
75
+ expect(trusted.domain).to be_nil
72
76
  end
73
77
 
74
78
  it "is authenticated local with no clientcert when there is no node" do
@@ -77,6 +81,8 @@ describe Puppet::Context::TrustedInformation do
77
81
  expect(trusted.authenticated).to eq('local')
78
82
  expect(trusted.certname).to be_nil
79
83
  expect(trusted.extensions).to eq({})
84
+ expect(trusted.hostname).to be_nil
85
+ expect(trusted.domain).to be_nil
80
86
  end
81
87
  end
82
88
 
@@ -89,7 +95,24 @@ describe Puppet::Context::TrustedInformation do
89
95
  'extensions' => {
90
96
  '1.3.6.1.4.1.34380.1.2.1' => 'CSR specific info',
91
97
  '1.3.6.1.4.1.34380.1.2.2' => 'more CSR specific info',
92
- }
98
+ },
99
+ 'hostname' => 'cert name',
100
+ 'domain' => nil
101
+ })
102
+ end
103
+
104
+ it "extracts domain and hostname from certname" do
105
+ trusted = Puppet::Context::TrustedInformation.remote(true, 'hostname.domain.long', cert)
106
+
107
+ expect(trusted.to_h).to eq({
108
+ 'authenticated' => 'remote',
109
+ 'certname' => 'hostname.domain.long',
110
+ 'extensions' => {
111
+ '1.3.6.1.4.1.34380.1.2.1' => 'CSR specific info',
112
+ '1.3.6.1.4.1.34380.1.2.2' => 'more CSR specific info',
113
+ },
114
+ 'hostname' => 'hostname',
115
+ 'domain' => 'domain.long'
93
116
  })
94
117
  end
95
118