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
@@ -828,9 +828,9 @@ class Puppet::Settings
828
828
 
829
829
  # Allow later inspection to determine if the setting was set by user
830
830
  # config, rather than a default setting.
831
- def set_by_config?(param)
831
+ def set_by_config?(param, environment = nil, run_mode = preferred_run_mode)
832
832
  param = param.to_sym
833
- configsearchpath.any? do |source|
833
+ configsearchpath(environment, run_mode).any? do |source|
834
834
  if vals = searchpath_values(source)
835
835
  vals.lookup(param)
836
836
  end
@@ -140,7 +140,7 @@ module Puppet
140
140
  if value = ca.print(host)
141
141
  puts value
142
142
  else
143
- Puppet.err "Could not find certificate for #{host}"
143
+ raise ArgumentError, "Could not find certificate for #{host}"
144
144
  end
145
145
  end
146
146
  end
@@ -151,7 +151,7 @@ module Puppet
151
151
  if cert = (Puppet::SSL::Certificate.indirection.find(host) || Puppet::SSL::CertificateRequest.indirection.find(host))
152
152
  puts "#{host} #{cert.digest(@digest)}"
153
153
  else
154
- Puppet.err "Could not find certificate for #{host}"
154
+ raise ArgumentError, "Could not find certificate for #{host}"
155
155
  end
156
156
  end
157
157
  end
@@ -48,7 +48,15 @@ module Puppet::SSL::Oids
48
48
  ["1.3.6.1.4.1.34380.1.1.15", 'pp_department', 'Puppet Node Department Name'],
49
49
  ["1.3.6.1.4.1.34380.1.1.16", 'pp_cluster', 'Puppet Node Cluster Name'],
50
50
  ["1.3.6.1.4.1.34380.1.1.17", 'pp_provisioner', 'Puppet Node Provisioner Name'],
51
-
51
+ ["1.3.6.1.4.1.34380.1.1.18", 'pp_region', 'Puppet Node Region Name'],
52
+ ["1.3.6.1.4.1.34380.1.1.19", 'pp_datacenter', 'Puppet Node Datacenter Name'],
53
+ ["1.3.6.1.4.1.34380.1.1.20", 'pp_zone', 'Puppet Node Zone Name'],
54
+ ["1.3.6.1.4.1.34380.1.1.21", 'pp_network', 'Puppet Node Network Name'],
55
+ ["1.3.6.1.4.1.34380.1.1.22", 'pp_securitypolicy', 'Puppet Node Security Policy Name'],
56
+ ["1.3.6.1.4.1.34380.1.1.23", 'pp_cloudplatform', 'Puppet Node Cloud Platform Name'],
57
+ ["1.3.6.1.4.1.34380.1.1.24", 'pp_apptier', 'Puppet Node Application Tier'],
58
+ ["1.3.6.1.4.1.34380.1.1.25", 'pp_hostname', 'Puppet Node Hostname'],
59
+
52
60
  ["1.3.6.1.4.1.34380.1.2", 'ppPrivCertExt', 'Puppet Private Certificate Extension'],
53
61
  ]
54
62
 
@@ -79,7 +79,7 @@ class Puppet::Transaction
79
79
  # necessary events.
80
80
  def evaluate(&block)
81
81
  block ||= method(:eval_resource)
82
- generator = AdditionalResourceGenerator.new(@catalog, relationship_graph, @prioritizer)
82
+ generator = AdditionalResourceGenerator.new(@catalog, nil, @prioritizer)
83
83
  @catalog.vertices.each { |resource| generator.generate_additional_resources(resource) }
84
84
 
85
85
  perform_pre_run_checks
@@ -135,6 +135,9 @@ class Puppet::Transaction
135
135
  end
136
136
  end
137
137
 
138
+ # Generate the relationship graph, set up our generator to use it
139
+ # for eval_generate, then kick off our traversal.
140
+ generator.relationship_graph = relationship_graph
138
141
  relationship_graph.traverse(:while => continue_while,
139
142
  :pre_process => pre_process,
140
143
  :overly_deferred_resource_handler => overly_deferred_resource_handler,
@@ -5,6 +5,8 @@
5
5
  #
6
6
  # @api private
7
7
  class Puppet::Transaction::AdditionalResourceGenerator
8
+ attr_writer :relationship_graph
9
+
8
10
  def initialize(catalog, relationship_graph, prioritizer)
9
11
  @catalog = catalog
10
12
  @relationship_graph = relationship_graph
@@ -22,11 +24,19 @@ class Puppet::Transaction::AdditionalResourceGenerator
22
24
  generated = [generated] unless generated.is_a?(Array)
23
25
  generated.collect do |res|
24
26
  @catalog.resource(res.ref) || res
25
- end.each do |res|
26
- priority = @prioritizer.generate_priority_contained_in(resource, res)
27
- add_resource(res, resource, priority)
28
-
29
- add_conditional_directed_dependency(resource, res)
27
+ end.reverse_each do |res|
28
+ # This is reversed becuase PUP-1963 changed how generated
29
+ # resources were added to the catalog. It exists for backwards
30
+ # compatibility only, and can probably be removed in Puppet 5
31
+ #
32
+ # Previously, resources were given sequential priorities in the
33
+ # relationship graph. Post-1963, resources are added to the
34
+ # catalog one by one adjacent to the parent resource. This
35
+ # causes an implicit reversal of their application order from
36
+ # the old code. The reverse makes it all work like it did.
37
+ add_resource(res, resource)
38
+
39
+ add_generated_directed_dependency(resource, res)
30
40
  generate_additional_resources(res)
31
41
  end
32
42
  end
@@ -102,16 +112,69 @@ class Puppet::Transaction::AdditionalResourceGenerator
102
112
  end
103
113
  end
104
114
 
105
- def add_resource(res, parent_resource, priority)
115
+ def add_resource(res, parent_resource, priority=nil)
106
116
  if @catalog.resource(res.ref).nil?
107
117
  res.tag(*parent_resource.tags)
108
- @catalog.add_resource(res)
109
- @relationship_graph.add_vertex(res, priority)
118
+ if parent_resource.depthfirst?
119
+ @catalog.add_resource_before(parent_resource, res)
120
+ else
121
+ @catalog.add_resource_after(parent_resource, res)
122
+ end
110
123
  @catalog.add_edge(@catalog.container_of(parent_resource), res)
124
+ if @relationship_graph && priority
125
+ # If we have a relationship_graph we should add the resource
126
+ # to it (this is an eval_generate). If we don't, then the
127
+ # relationship_graph has not yet been created and we can skip
128
+ # adding it.
129
+ @relationship_graph.add_vertex(res, priority)
130
+ end
111
131
  res.finish
112
132
  end
113
133
  end
114
134
 
135
+ # add correct edge for depth- or breadth- first traversal of
136
+ # generated resource. Skip generating the edge if there is already
137
+ # some sort of edge between the two resources.
138
+ def add_generated_directed_dependency(parent, child, label=nil)
139
+ if parent.depthfirst?
140
+ source = child
141
+ target = parent.to_resource
142
+ else
143
+ source = parent
144
+ target = child.to_resource
145
+ end
146
+
147
+ # For each potential relationship metaparam, check if parent or
148
+ # child references the other. If there are none, we should add our
149
+ # edge.
150
+ edge_exists = Puppet::Type.relationship_params.any? { |param|
151
+ param_sym = param.name.to_sym
152
+
153
+ if parent[param_sym]
154
+ parent_contains = parent[param_sym].any? { |res|
155
+ res.ref == child.ref
156
+ }
157
+ else
158
+ parent_contains = false
159
+ end
160
+
161
+ if child[param_sym]
162
+ child_contains = child[param_sym].any? { |res|
163
+ res.ref == parent.ref
164
+ }
165
+ else
166
+ child_contains = false
167
+ end
168
+
169
+ parent_contains || child_contains
170
+ }
171
+
172
+ if not edge_exists
173
+ source[:before] ||= []
174
+ source[:before] << target
175
+ end
176
+ end
177
+
115
178
  # Copy an important relationships from the parent to the newly-generated
116
179
  # child resource.
117
180
  def add_conditional_directed_dependency(parent, child, label=nil)
@@ -99,10 +99,15 @@ class Puppet::Transaction::ResourceHarness
99
99
  def allow_changes?(resource)
100
100
  if resource.purging? and resource.deleting? and deps = relationship_graph.dependents(resource) \
101
101
  and ! deps.empty? and deps.detect { |d| ! d.deleting? }
102
- deplabel = deps.collect { |r| r.ref }.join(",")
103
- plurality = deps.length > 1 ? "":"s"
104
- resource.warning "#{deplabel} still depend#{plurality} on me -- not purging"
105
- false
102
+ real_deps = deps.reject { |r| r.class.name == :whit }
103
+ if real_deps.empty?
104
+ true
105
+ else
106
+ deplabel = real_deps.collect { |r| r.ref }.join(",")
107
+ plurality = real_deps.length > 1 ? "":"s"
108
+ resource.warning "#{deplabel} still depend#{plurality} on me -- not purging"
109
+ false
110
+ end
106
111
  else
107
112
  true
108
113
  end
data/lib/puppet/type.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require 'puppet'
2
3
  require 'puppet/util/log'
3
4
  require 'puppet/util/metric'
@@ -106,6 +107,24 @@ class Type
106
107
  attr_reader :properties
107
108
  end
108
109
 
110
+ # Allow declaring that a type is actually a capability
111
+ class << self
112
+ attr_accessor :is_capability
113
+
114
+ def is_capability?
115
+ is_capability
116
+ end
117
+ end
118
+
119
+ # Returns whether this type represents an application instance; since
120
+ # only defined types, i.e., instances of Puppet::Resource::Type can
121
+ # represent application instances, this implementation always returns
122
+ # +false+. Having this method though makes code checking whether a
123
+ # resource is an application instance simpler
124
+ def self.application?
125
+ false
126
+ end
127
+
109
128
  # Returns all the attribute names of the type in the appropriate order.
110
129
  # The {key_attributes} come first, then the {provider}, then the {properties}, and finally
111
130
  # the {parameters} and {metaparams},
@@ -639,7 +658,7 @@ class Type
639
658
  def []=(name,value)
640
659
  name = name.intern
641
660
 
642
- fail("Invalid parameter #{name}") unless self.class.validattr?(name)
661
+ fail("no parameter named '#{name}'") unless self.class.validattr?(name)
643
662
 
644
663
  if name == :name && nv = name_var
645
664
  name = nv
@@ -1628,6 +1647,57 @@ class Type
1628
1647
  }
1629
1648
  end
1630
1649
 
1650
+ newmetaparam(:export, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :NONE}) do
1651
+ desc <<EOS
1652
+ Export a capability resource.
1653
+
1654
+ The value of this parameter must be a reference to a capability resource,
1655
+ or an array of such references. Each capability resource referenced here
1656
+ will be instantiated in the node catalog and exported to consumers of this
1657
+ resource. The title of the capability resource will be the title given in
1658
+ the reference, and all other attributes of the resource will be filled
1659
+ according to the corresponding produces statement.
1660
+
1661
+ It is an error if this metaparameter references resources whose type is not
1662
+ a capability type, or of there is no produces clause for the type of the
1663
+ current resource and the capability resource mentioned in this parameter.
1664
+
1665
+ For example:
1666
+
1667
+ define web(..) { .. }
1668
+ Web produces Http { .. }
1669
+ web { server:
1670
+ export => Http[main_server]
1671
+ }
1672
+ EOS
1673
+ end
1674
+
1675
+ newmetaparam(:consume, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :NONE}) do
1676
+ desc <<EOS
1677
+ Consume a capability resource.
1678
+
1679
+ The value of this parameter must be a reference to a capability resource,
1680
+ or an array of such references. Each capability resource referenced here
1681
+ must have been exported by another resource in the same environment.
1682
+
1683
+ The referenced capability resource(s) will be looked up, added to the
1684
+ current node catalog, and processed following the underlying consumes
1685
+ clause.
1686
+
1687
+ It is an error if this metaparameter references resources whose type is not
1688
+ a capability type, or of there is no consumes clause for the type of the
1689
+ current resource and the capability resource mentioned in this parameter.
1690
+
1691
+ For example:
1692
+
1693
+ define web(..) { .. }
1694
+ Web consumes Sql { .. }
1695
+ web { server:
1696
+ consume => Sql[my_db]
1697
+ }
1698
+ EOS
1699
+ end
1700
+
1631
1701
  ###############################
1632
1702
  # All of the provider plumbing for the resource types.
1633
1703
  require 'puppet/provider'
@@ -1795,7 +1865,7 @@ class Type
1795
1865
  def self.providify
1796
1866
  return if @paramhash.has_key? :provider
1797
1867
 
1798
- newparam(:provider) do
1868
+ param = newparam(:provider) do
1799
1869
  # We're using a hacky way to get the name of our type, since there doesn't
1800
1870
  # seem to be a correct way to introspect this at the time this code is run.
1801
1871
  # We expect that the class in which this code is executed will be something
@@ -1855,7 +1925,8 @@ class Type
1855
1925
  provider
1856
1926
  end
1857
1927
  end
1858
- end.parenttype = self
1928
+ end
1929
+ param.parenttype = self
1859
1930
  end
1860
1931
 
1861
1932
  # @todo this needs a better explanation
@@ -73,9 +73,17 @@ Puppet::Type.newtype(:augeas) do
73
73
 
74
74
  newparam (:onlyif) do
75
75
  desc "Optional augeas command and comparisons to control the execution of this type.
76
+
77
+ Note: `values` is not an actual augeas API command. It calls `match` to retrieve an array of paths
78
+ in <MATCH_PATH> and then `get` to retrieve the values from each of the returned paths.
79
+
76
80
  Supported onlyif syntax:
77
81
 
78
82
  * `get <AUGEAS_PATH> <COMPARATOR> <STRING>`
83
+ * `values <MATCH_PATH> include <STRING>`
84
+ * `values <MATCH_PATH> not_include <STRING>`
85
+ * `values <MATCH_PATH> == <AN_ARRAY>`
86
+ * `values <MATCH_PATH> != <AN_ARRAY>`
79
87
  * `match <MATCH_PATH> size <COMPARATOR> <INT>`
80
88
  * `match <MATCH_PATH> include <STRING>`
81
89
  * `match <MATCH_PATH> not_include <STRING>`
@@ -12,22 +12,24 @@ module Puppet
12
12
 
13
13
  attr_accessor :source, :local
14
14
  desc <<-'EOT'
15
- A source file, which will be copied into place on the local system.
16
- Values can be URIs pointing to remote files, or fully qualified paths to
17
- files available on the local system (including files on NFS shares or
18
- Windows mapped drives). This attribute is mutually exclusive with
19
- `content` and `target`.
15
+ A source file, which will be copied into place on the local system. This
16
+ attribute is mutually exclusive with `content` and `target`. Allowed
17
+ values are:
20
18
 
21
- The available URI schemes are *puppet* and *file*. *Puppet*
22
- URIs will retrieve files from Puppet's built-in file server, and are
23
- usually formatted as:
19
+ * `puppet:` URIs, which point to files in modules or Puppet file server
20
+ mount points.
21
+ * Fully qualified paths to locally available files (including files on NFS
22
+ shares or Windows mapped drives).
23
+ * `file:` URIs, which behave the same as local file paths.
24
24
 
25
- `puppet:///modules/name_of_module/filename`
25
+ The normal form of a `puppet:` URI is:
26
26
 
27
- This will fetch a file from a module on the puppet master (or from a
28
- local module when using puppet apply). Given a `modulepath` of
27
+ `puppet:///modules/<MODULE NAME>/<FILE PATH>`
28
+
29
+ This will fetch a file from a module on the Puppet master (or from a
30
+ local module when using Puppet apply). Given a `modulepath` of
29
31
  `/etc/puppetlabs/code/modules`, the example above would resolve to
30
- `/etc/puppetlabs/code/modules/name_of_module/files/filename`.
32
+ `/etc/puppetlabs/code/modules/<MODULE NAME>/files/<FILE PATH>`.
31
33
 
32
34
  Unlike `content`, the `source` attribute can be used to recursively copy
33
35
  directories if the `recurse` attribute is set to `true` or `remote`. If
@@ -170,8 +170,10 @@ module Puppet
170
170
 
171
171
  newproperty(:comment) do
172
172
  desc "A description of the user. Generally the user's full name."
173
- munge do |v|
174
- v.respond_to?(:force_encoding) ? v.force_encoding(Encoding::ASCII_8BIT) : v
173
+ if RUBY_VERSION < "2.1.0"
174
+ munge do |v|
175
+ v.respond_to?(:force_encoding) ? v.force_encoding(Encoding::ASCII_8BIT) : v
176
+ end
175
177
  end
176
178
  end
177
179
 
@@ -352,7 +352,10 @@ module Puppet::Util::Windows::Security
352
352
  dacl.allow(well_known_nobody_sid, nobody_allow)
353
353
 
354
354
  # TODO: system should be first?
355
- dacl.allow(well_known_system_sid, system_allow)
355
+ flags = !isdir ? 0 :
356
+ Puppet::Util::Windows::AccessControlEntry::CONTAINER_INHERIT_ACE |
357
+ Puppet::Util::Windows::AccessControlEntry::OBJECT_INHERIT_ACE
358
+ dacl.allow(well_known_system_sid, system_allow, flags)
356
359
 
357
360
  # add inherit-only aces for child dirs and files that are created within the dir
358
361
  inherit_only = Puppet::Util::Windows::AccessControlEntry::INHERIT_ONLY_ACE
@@ -809,7 +809,7 @@ module Win32
809
809
  # Returns whether or not the scheduled task exists.
810
810
  def exists?(job_name)
811
811
  bool = false
812
- Dir.foreach('C:/Windows/Tasks'){ |file|
812
+ Dir.foreach("#{ENV['SystemRoot']}/Tasks"){ |file|
813
813
  if File.basename(file, '.job') == job_name
814
814
  bool = true
815
815
  break
@@ -7,7 +7,7 @@
7
7
 
8
8
 
9
9
  module Puppet
10
- PUPPETVERSION = '4.2.3'
10
+ PUPPETVERSION = '4.3.0'
11
11
 
12
12
  ##
13
13
  # version is a public API method intended to always provide a fast and
@@ -0,0 +1,3 @@
1
+ ---
2
+ a: This is A
3
+ b: This is B
@@ -0,0 +1 @@
1
+ environment_data_provider = 'hiera'
@@ -0,0 +1,3 @@
1
+ {
2
+ "test::param_a": "env data param_a is 10",
3
+ }
@@ -0,0 +1,2 @@
1
+ # Use the 'sample' env data provider (in this fixture)
2
+ environment_data_provider=hiera
@@ -0,0 +1,5 @@
1
+ ---
2
+ :version: 4
3
+ :hierarchy:
4
+ - :name: "bad"
5
+ :backend: json
@@ -0,0 +1,5 @@
1
+ class test($param_a) {
2
+ notify { "$param_a": }
3
+ }
4
+
5
+ include test