puppet 4.2.3-x86-mingw32 → 4.3.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 (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,117 @@
1
+ module Puppet::Pops::Lookup
2
+ class Invocation
3
+ attr_reader :scope, :override_values, :default_values, :explainer, :module_name
4
+
5
+ # Creates a context object for a lookup invocation. The object contains the current scope, overrides, and default
6
+ # values and may optionally contain an {ExplanationAcceptor} instance that will receive book-keeping information
7
+ # about the progress of the lookup.
8
+ #
9
+ # If the _explain_ argument is a boolean, then _false_ means that no explanation is needed and _true_ means that
10
+ # the default explanation acceptor should be used. The _explain_ argument may also be an instance of the
11
+ # `ExplanationAcceptor` class.
12
+ #
13
+ # @param scope [Puppet::Parser::Scope] The scope to use for the lookup
14
+ # @param override_values [Hash<String,Object>|nil] A map to use as override. Values found here are returned immediately (no merge)
15
+ # @param default_values [Hash<String,Object>] A map to use as the last resort (but before default)
16
+ # @param explainer [boolean,Explanainer] An boolean true to use the default explanation acceptor or an explainer instance that will receive information about the lookup
17
+ def initialize(scope, override_values = {}, default_values = {}, explainer = nil)
18
+ @name_stack = []
19
+ @scope = scope
20
+ @override_values = override_values
21
+ @default_values = default_values
22
+ unless explainer.is_a?(Explainer)
23
+ explainer = explainer == true ? Explainer.new : nil
24
+ end
25
+ @explainer = explainer
26
+ end
27
+
28
+ def check(name)
29
+ if @name_stack.include?(name)
30
+ raise Puppet::DataBinding::RecursiveLookupError, "Recursive lookup detected in [#{@name_stack.join(', ')}]"
31
+ end
32
+ return unless block_given?
33
+
34
+ @name_stack.push(name)
35
+ begin
36
+ yield
37
+ rescue Puppet::DataBinding::LookupError
38
+ raise
39
+ rescue Puppet::Error => detail
40
+ raise Puppet::DataBinding::LookupError.new(detail.message, detail)
41
+ ensure
42
+ @name_stack.pop
43
+ end
44
+ end
45
+
46
+ # The qualifier_type can be one of:
47
+ # :global - qualifier is the data binding terminus name
48
+ # :data_provider - qualifier a DataProvider instance
49
+ # :path - qualifier is a ResolvedPath instance
50
+ # :merge - qualifier is a MergeStrategy instance
51
+ # :module - qualifier is the name of a module
52
+ # :interpolation - qualifier is the unresolved interpolation expression
53
+ # :meta - qualifier is the name of a module or nil if that's not applicable
54
+ #
55
+ # @param qualifier [Object] A branch, a provider, or a path
56
+ def with(qualifier_type, qualifier)
57
+ is_meta = qualifier_type == :meta
58
+ @module_name = qualifier if is_meta
59
+ if @explainer.nil?
60
+ yield
61
+ else
62
+ if is_meta
63
+ save_explainer = @explainer
64
+ @explainer = nil
65
+ begin
66
+ yield
67
+ ensure
68
+ @explainer = save_explainer
69
+ end
70
+ else
71
+ @explainer.push(qualifier_type, qualifier)
72
+ begin
73
+ yield
74
+ ensure
75
+ @explainer.pop
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ def report_found_in_overrides(key, value)
82
+ @explainer.accept_found_in_overrides(key, value) unless @explainer.nil?
83
+ value
84
+ end
85
+
86
+ def report_found_in_defaults(key, value)
87
+ @explainer.accept_found_in_defaults(key, value) unless @explainer.nil?
88
+ value
89
+ end
90
+
91
+ def report_found(key, value)
92
+ @explainer.accept_found(key, value) unless @explainer.nil?
93
+ value
94
+ end
95
+
96
+ # Report the result of a merge or fully resolved interpolated string
97
+ # @param value [Object] The result to report
98
+ # @return [Object] the given value
99
+ def report_result(value)
100
+ @explainer.accept_result(value) unless @explainer.nil?
101
+ value
102
+ end
103
+
104
+ def report_not_found(key)
105
+ @explainer.accept_not_found(key) unless @explainer.nil?
106
+ end
107
+
108
+ def report_path_not_found
109
+ @explainer.accept_path_not_found unless @explainer.nil?
110
+ end
111
+
112
+ def report_module_not_found
113
+ @explainer.accept_module_not_found unless @explainer.nil?
114
+ end
115
+ end
116
+ end
117
+
@@ -4,6 +4,8 @@ module Puppet::Pops
4
4
  # Merges to objects into one based on an implemented strategy.
5
5
  #
6
6
  class MergeStrategy
7
+ NOT_FOUND = Object.new.freeze
8
+
7
9
  TypeAsserter = Puppet::Pops::Types::TypeAsserter
8
10
  TypeParser = Puppet::Pops::Types::TypeParser
9
11
 
@@ -20,12 +22,14 @@ module Puppet::Pops
20
22
 
21
23
  # Finds the merge strategy for the given _merge_, creates an instance of it and returns that instance.
22
24
  #
23
- # @param merge [String|Symbol|Hash<String,Object>] The merge strategy. Can be a string or symbol denoting the key
25
+ # @param merge [Puppet::Pops::MergeStrategy,String,Hash<String,Object>,nil] The merge strategy. Can be a string or symbol denoting the key
24
26
  # identifier or a hash with options where the key 'strategy' denotes the key
25
27
  # @return [MergeStrategy] The matching merge strategy
26
28
  #
27
29
  def self.strategy(merge)
28
- TypeAsserter.assert_instance_of("MergeStrategies.merge 'merge' parameter", merge_t, merge)
30
+ return merge if merge.is_a?(MergeStrategy)
31
+ merge = :first if merge.nil?
32
+ TypeAsserter.assert_instance_of("MergeStrategy 'merge' parameter", merge_t, merge)
29
33
  if merge.is_a?(Hash)
30
34
  merge_strategy = merge['strategy']
31
35
  if merge_strategy.nil?
@@ -82,7 +86,7 @@ module Puppet::Pops
82
86
  @options = options
83
87
  end
84
88
 
85
- # Merges the elements of _e1_ and _e2_ accoring to the implemented strategy and options given when this
89
+ # Merges the elements of _e1_ and _e2_ according to the rules of this strategy and options given when this
86
90
  # instance was created
87
91
  #
88
92
  # @param e1 [Object] The first element
@@ -95,6 +99,33 @@ module Puppet::Pops
95
99
  assert_type('e2', value_t, e2))
96
100
  end
97
101
 
102
+ # Merges the result of yielding the given _lookup_variants_ to a given block.
103
+ #
104
+ # @param lookup_variants [Array] The variants to pass as second argument to the given block
105
+ # @return [Object] the merged value.
106
+ # @yield [} ]
107
+ # @yieldparam variant [Object] each variant given in the _lookup_variants_ array.
108
+ # @yieldreturn [Object] the value to merge with other values
109
+ # @throws :no_such_key if the lookup was unsuccessful
110
+ #
111
+ def merge_lookup(lookup_variants)
112
+ result = lookup_variants.reduce(NOT_FOUND) do |memo, lookup_variant|
113
+ not_found = true
114
+ value = catch(:no_such_key) do
115
+ v = yield(lookup_variant)
116
+ not_found = false
117
+ v
118
+ end
119
+ if not_found
120
+ memo
121
+ else
122
+ memo.equal?(NOT_FOUND) ? convert_value(value) : merge(memo, value)
123
+ end
124
+ end
125
+ throw :no_such_key if result == NOT_FOUND
126
+ result
127
+ end
128
+
98
129
  # Converts a single value to the type expeced when peforming a merge of two elements
99
130
  # @param value [Object] the value to convert
100
131
  # @return [Object] the converted value
@@ -102,12 +133,20 @@ module Puppet::Pops
102
133
  value
103
134
  end
104
135
 
105
- protected
106
-
107
136
  def options
108
137
  @options
109
138
  end
110
139
 
140
+ def configuration
141
+ if @options.nil? || @options.empty?
142
+ self.class.key.to_s
143
+ else
144
+ @options.include?('strategy') ? @options : { 'strategy' => self.class.key.to_s }.merge(@options)
145
+ end
146
+ end
147
+
148
+ protected
149
+
111
150
  # Returns the type used to validate the options hash
112
151
  #
113
152
  # @return [Puppet::Pops::Types::PStructType] the puppet type
@@ -133,6 +172,35 @@ module Puppet::Pops
133
172
  end
134
173
  end
135
174
 
175
+ # Simple strategy that returns the first value found. It never merges any values.
176
+ #
177
+ class FirstFoundStrategy < MergeStrategy
178
+ def self.key
179
+ :first
180
+ end
181
+
182
+ # Returns the first value found
183
+ #
184
+ # @param lookup_variants [Array] The variants to pass as second argument to the given block
185
+ # @return [Object] the merged value
186
+ # @throws :no_such_key unless the lookup was successful
187
+ #
188
+ def merge_lookup(lookup_variants)
189
+ lookup_variants.each do |lookup_variant|
190
+ catch(:no_such_key) { return yield(lookup_variant) }
191
+ end
192
+ throw :no_such_key
193
+ end
194
+
195
+ protected
196
+
197
+ def value_t
198
+ @value_t ||= Puppet::Pops::Types::PAnyType::DEFAULT
199
+ end
200
+
201
+ MergeStrategy.add_strategy(self)
202
+ end
203
+
136
204
  # Produces a new hash by merging hash e1 with hash e2 in such a way that the values of duplicate keys
137
205
  # will be those of e1
138
206
  #
@@ -53,6 +53,14 @@ class Puppet::Pops::Model::Factory
53
53
 
54
54
  # Building of Model classes
55
55
 
56
+ def build_Application(o, n, ps, body)
57
+ o.name = n
58
+ ps.each { |p| o.addParameters(build(p)) }
59
+ b = f_build_body(body)
60
+ o.body = b.current if b
61
+ o
62
+ end
63
+
56
64
  def build_ArithmeticExpression(o, op, a, b)
57
65
  o.operator = op
58
66
  build_BinaryExpression(o, a, b)
@@ -231,6 +239,15 @@ class Puppet::Pops::Model::Factory
231
239
  o
232
240
  end
233
241
 
242
+ def build_CapabilityMapping(o, kind, component, capability, mappings)
243
+ o.kind = kind
244
+ component = component.current if component.is_a?(Puppet::Pops::Model::Factory)
245
+ o.component = component
246
+ o.capability = capability
247
+ o.mappings = mappings.map { |m| build(m) }
248
+ o
249
+ end
250
+
234
251
  # @param o [Model::NodeDefinition]
235
252
  # @param hosts [Array<Expression>] host matches
236
253
  # @param parent [Expression] parent node matcher
@@ -243,6 +260,14 @@ class Puppet::Pops::Model::Factory
243
260
  o
244
261
  end
245
262
 
263
+ # @param o [Model::SiteDefinition]
264
+ # @param body [Object] see {#f_build_body}
265
+ def build_SiteDefinition(o, body)
266
+ b = f_build_body(body)
267
+ o.body = b.current if b
268
+ o
269
+ end
270
+
246
271
  def build_Parameter(o, name, expr)
247
272
  o.name = name
248
273
  o.value = build(expr) if expr # don't build a nil/nop
@@ -584,6 +609,7 @@ class Puppet::Pops::Model::Factory
584
609
 
585
610
  def self.NODE(hosts, parent, body); new(Model::NodeDefinition, hosts, parent, body); end
586
611
 
612
+ def self.SITE(body); new(Model::SiteDefinition, body); end
587
613
 
588
614
  # Parameters
589
615
 
@@ -755,6 +781,14 @@ class Puppet::Pops::Model::Factory
755
781
  new(Model::ResourceTypeDefinition, name, parameters, body)
756
782
  end
757
783
 
784
+ def self.CAPABILITY_MAPPING(kind, component, cap_name, mappings)
785
+ new(Model::CapabilityMapping, kind, component, cap_name, mappings)
786
+ end
787
+
788
+ def self.APPLICATION(name, parameters, body)
789
+ new(Model::Application, name, parameters, body)
790
+ end
791
+
758
792
  def self.FUNCTION(name, parameters, body)
759
793
  new(Model::FunctionDefinition, name, parameters, body)
760
794
  end
@@ -2,7 +2,9 @@
2
2
  # As an example, if object is an ArithmeticExpression with operator +, `#a_an(o)` produces "a '+' Expression",
3
3
  # #the(o) produces "the + Expression", and #label produces "+ Expression".
4
4
  #
5
- class Puppet::Pops::Model::ModelLabelProvider < Puppet::Pops::LabelProvider
5
+ class Puppet::Pops::Model::ModelLabelProvider
6
+ include Puppet::Pops::LabelProvider
7
+
6
8
  def initialize
7
9
  @@label_visitor ||= Puppet::Pops::Visitor.new(self,"label",0,0)
8
10
  end
@@ -56,6 +58,7 @@ class Puppet::Pops::Model::ModelLabelProvider < Puppet::Pops::LabelProvider
56
58
  def label_HeredocExpression o ; "'@(#{o.syntax})' expression" end
57
59
  def label_HostClassDefinition o ; "Host Class Definition" end
58
60
  def label_NodeDefinition o ; "Node Definition" end
61
+ def label_SiteDefinition o ; "Site Definition" end
59
62
  def label_ResourceTypeDefinition o ; "'define' expression" end
60
63
  def label_ResourceOverrideExpression o ; "Resource Override" end
61
64
  def label_Parameter o ; "Parameter Definition" end
@@ -64,6 +67,7 @@ class Puppet::Pops::Model::ModelLabelProvider < Puppet::Pops::LabelProvider
64
67
  def label_UnlessExpression o ; "'unless' Statement" end
65
68
  def label_CallNamedFunctionExpression o ; "Function Call" end
66
69
  def label_CallMethodExpression o ; "Method call" end
70
+ def label_CapabilityMapping o ; "Capability Mapping" end
67
71
  def label_CaseExpression o ; "'case' statement" end
68
72
  def label_CaseOption o ; "Case Option" end
69
73
  def label_RenderStringExpression o ; "Epp Text" end
@@ -97,6 +101,11 @@ class Puppet::Pops::Model::ModelLabelProvider < Puppet::Pops::LabelProvider
97
101
  end
98
102
  end
99
103
 
104
+ def label_Resource o
105
+ 'Resource Statement'
106
+ end
107
+
108
+
100
109
  def label_Class o
101
110
  if o <= Puppet::Pops::Types::PAnyType
102
111
  simple_name = o.name.split('::').last
@@ -291,6 +291,9 @@ module Puppet::Pops::Model
291
291
  class ResourceTypeDefinition < NamedDefinition
292
292
  end
293
293
 
294
+ class Application < NamedDefinition
295
+ end
296
+
294
297
  # A node definition matches hosts using Strings, or Regular expressions. It may inherit from
295
298
  # a parent node (also using a String or Regular expression).
296
299
  #
@@ -300,6 +303,10 @@ module Puppet::Pops::Model
300
303
  contains_one_uni 'body', Expression
301
304
  end
302
305
 
306
+ class SiteDefinition < Definition
307
+ contains_one_uni 'body', Expression
308
+ end
309
+
303
310
  class LocatableExpression < Expression
304
311
  has_many_attr 'line_offsets', Integer
305
312
  has_attr 'locator', Object, :lowerBound => 1, :transient => true
@@ -534,6 +541,14 @@ module Puppet::Pops::Model
534
541
  contains_many_uni 'bodies', ResourceBody
535
542
  end
536
543
 
544
+ class CapabilityMapping < Definition
545
+ # 'produces' or 'consumes'
546
+ has_attr 'kind', String, :lowerBound => 1
547
+ has_attr 'capability', String, :lowerBound => 1
548
+ contains_one_uni 'component', Expression, :lowerBound => 1
549
+ contains_many_uni 'mappings', AbstractAttributeOperation
550
+ end
551
+
537
552
  # A resource defaults sets defaults for a resource type. This class inherits from AbstractResource
538
553
  # but does only support the :regular form (this is intentional to be able to produce better error messages
539
554
  # when illegal forms are applied to a model.
@@ -32,6 +32,10 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
32
32
  do_dump(o.current)
33
33
  end
34
34
 
35
+ def dump_Application o
36
+ ["application", o.name, do_dump(o.parameters), do_dump(o.body)]
37
+ end
38
+
35
39
  def dump_ArithmeticExpression o
36
40
  [o.operator.to_s, do_dump(o.left_expr), do_dump(o.right_expr)]
37
41
  end
@@ -230,6 +234,16 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
230
234
  result
231
235
  end
232
236
 
237
+ def dump_SiteDefinition o
238
+ result = ["site"]
239
+ if o.body
240
+ result << do_dump(o.body)
241
+ else
242
+ result << []
243
+ end
244
+ result
245
+ end
246
+
233
247
  def dump_NamedDefinition o
234
248
  # the nil must be replaced with a string
235
249
  result = [nil, o.name]
@@ -248,6 +262,10 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
248
262
  result
249
263
  end
250
264
 
265
+ def dump_CapabilityMapping o
266
+ [o.kind, do_dump(o.component), o.capability, do_dump(o.mappings)]
267
+ end
268
+
251
269
  def dump_ResourceOverrideExpression o
252
270
  form = o.form == :regular ? '' : o.form.to_s + "-"
253
271
  result = [form+"override", do_dump(o.resources), :indent]
@@ -8,9 +8,21 @@ class Puppet::Pops::Parser::CodeMerger
8
8
  # this is a bit brute force as the result is already 3x ast with wrapped 4x content
9
9
  # this could be combined in a more elegant way, but it is only used to process a handful of files
10
10
  # at the beginning of a puppet run. TODO: Revisit for Puppet 4x when there is no 3x ast at the top.
11
+ # PUP-5299, some sites have thousands of entries, and run out of stack when evaluating - the logic
12
+ # below maps the logic as flatly as possible.
11
13
  #
12
14
  children = parse_results.select {|x| !x.nil? && x.code}.reduce([]) do |memo, parsed_class|
13
- memo << parsed_class.code
15
+ case parsed_class.code
16
+ when Puppet::Parser::AST::BlockExpression
17
+ # the BlockExpression wraps a single 4x instruction that is most likely wrapped in a Factory
18
+ memo += parsed_class.code.children.map {|c| c.is_a?(Puppet::Pops::Model::Factory) ? c.model : c }
19
+ when Puppet::Pops::Model::Factory
20
+ # If it is a 4x instruction wrapped in a Factory
21
+ memo += parsed_class.code.model
22
+ else
23
+ # It is the instruction directly
24
+ memo << parsed_class.code
25
+ end
14
26
  end
15
27
  Puppet::Parser::AST::BlockExpression.new(:children => children)
16
28
  end