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
@@ -1,234 +0,0 @@
1
- require 'rgen/metamodel_builder'
2
-
3
- # The Types model is a model of Puppet Language types.
4
- #
5
- # The exact relationship between types is not visible in this model wrt. the PDataType which is an abstraction
6
- # of Scalar, Array[Data], and Hash[Scalar, Data] nested to any depth. This means it is not possible to
7
- # infer the type by simply looking at the inheritance hierarchy. The {Puppet::Pops::Types::TypeCalculator} should
8
- # be used to answer questions about types. The {Puppet::Pops::Types::TypeFactory} should be used to create an instance
9
- # of a type whenever one is needed.
10
- #
11
- # The implementation of the Types model contains methods that are required for the type objects to behave as
12
- # expected when comparing them and using them as keys in hashes. (No other logic is, or should be included directly in
13
- # the model's classes).
14
- #
15
- # @api public
16
- #
17
- module Puppet::Pops::Types
18
- extend RGen::MetamodelBuilder::ModuleExtension
19
-
20
- class TypeModelObject < RGen::MetamodelBuilder::MMBase
21
- abstract
22
- end
23
-
24
- # Base type for all types except {Puppet::Pops::Types::PType PType}, the type of types.
25
- # @api public
26
- #
27
- class PAnyType < TypeModelObject
28
- end
29
-
30
- # A type that is assignable from the same types as its contained `type` except the
31
- # types assignable from {Puppet::Pops::Types::PUndefType}
32
- #
33
- # @api public
34
- #
35
- class PNotUndefType < PAnyType
36
- contains_one_uni 'type', PAnyType
37
- end
38
-
39
- # The type of types.
40
- # @api public
41
- #
42
- class PType < PAnyType
43
- contains_one_uni 'type', PAnyType
44
- end
45
-
46
- # @api public
47
- #
48
- class PUndefType < PAnyType
49
- end
50
-
51
-
52
- # A type private to the type system that describes "ignored type" - i.e. "I am what you are"
53
- # @api private
54
- #
55
- class PUnitType < PAnyType
56
- end
57
-
58
- # @api public
59
- #
60
- class PDefaultType < PAnyType
61
- end
62
-
63
- # A flexible data type, being assignable to its subtypes as well as PArrayType and PHashType with element type assignable to PDataType.
64
- #
65
- # @api public
66
- #
67
- class PDataType < PAnyType
68
- end
69
-
70
- # A flexible type describing an any? of other types
71
- # @api public
72
- #
73
- class PVariantType < PAnyType
74
- contains_many_uni 'types', PAnyType, :lowerBound => 1
75
- end
76
-
77
- # Type that is PDataType compatible, but is not a PCollectionType.
78
- # @api public
79
- #
80
- class PScalarType < PAnyType
81
- end
82
-
83
- # A string type describing the set of strings having one of the given values
84
- # @api public
85
- #
86
- class PEnumType < PScalarType
87
- has_many_attr 'values', String, :lowerBound => 1
88
- end
89
-
90
- # @api public
91
- #
92
- class PNumericType < PScalarType
93
- end
94
-
95
- # @api public
96
- #
97
- class PIntegerType < PNumericType
98
- has_attr 'from', Integer, :lowerBound => 0
99
- has_attr 'to', Integer, :lowerBound => 0
100
- end
101
-
102
- # @api public
103
- #
104
- class PFloatType < PNumericType
105
- has_attr 'from', Float, :lowerBound => 0
106
- has_attr 'to', Float, :lowerBound => 0
107
- end
108
-
109
- # @api public
110
- #
111
- class PStringType < PScalarType
112
- has_many_attr 'values', String, :lowerBound => 0, :upperBound => -1, :unique => true
113
- contains_one_uni 'size_type', PIntegerType
114
- end
115
-
116
- # @api public
117
- #
118
- class PRegexpType < PScalarType
119
- has_attr 'pattern', String, :lowerBound => 1
120
- has_attr 'regexp', Object, :derived => true
121
- end
122
-
123
- # Represents a subtype of String that narrows the string to those matching the patterns
124
- # If specified without a pattern it is basically the same as the String type.
125
- #
126
- # @api public
127
- #
128
- class PPatternType < PScalarType
129
- contains_many_uni 'patterns', PRegexpType
130
- end
131
-
132
- # @api public
133
- #
134
- class PBooleanType < PScalarType
135
- end
136
-
137
- # @api public
138
- #
139
- class PCollectionType < PAnyType
140
- contains_one_uni 'element_type', PAnyType
141
- contains_one_uni 'size_type', PIntegerType
142
- end
143
-
144
- # @api public
145
- #
146
- class PStructElement < TypeModelObject
147
- # key_type must be either String[1] or Optional[String[1]] and the String[1] must
148
- # have a values collection with exactly one element
149
- contains_one_uni 'key_type', PAnyType, :lowerBound => 1
150
- contains_one_uni 'value_type', PAnyType
151
- end
152
-
153
- # @api public
154
- #
155
- class PStructType < PAnyType
156
- contains_many_uni 'elements', PStructElement, :lowerBound => 1
157
- has_attr 'hashed_elements', Object, :derived => true
158
- end
159
-
160
- # @api public
161
- #
162
- class PTupleType < PAnyType
163
- contains_many_uni 'types', PAnyType, :lowerBound => 1
164
- # If set, describes min and max required of the given types - if max > size of
165
- # types, the last type entry repeats
166
- #
167
- contains_one_uni 'size_type', PIntegerType, :lowerBound => 0
168
- end
169
-
170
- # @api public
171
- #
172
- class PCallableType < PAnyType
173
- # Types of parameters as a Tuple with required/optional count, or an Integer with min (required), max count
174
- contains_one_uni 'param_types', PAnyType, :lowerBound => 1
175
-
176
- # Although being an abstract type reference, only Callable, or all Callables wrapped in
177
- # Optional or Variant are supported
178
- # If not set, the meaning is that block is not supported.
179
- #
180
- contains_one_uni 'block_type', PAnyType, :lowerBound => 0
181
- end
182
-
183
- # @api public
184
- #
185
- class PArrayType < PCollectionType
186
- end
187
-
188
- # @api public
189
- #
190
- class PHashType < PCollectionType
191
- contains_one_uni 'key_type', PAnyType
192
- end
193
-
194
- RuntimeEnum = RGen::MetamodelBuilder::DataTypes::Enum.new(
195
- :name => 'RuntimeEnum',
196
- :literals => [:'ruby', ])
197
-
198
- # @api public
199
- #
200
- class PRuntimeType < PAnyType
201
- has_attr 'runtime', RuntimeEnum, :lowerBound => 1
202
- has_attr 'runtime_type_name', String
203
- end
204
-
205
- # Abstract representation of a type that can be placed in a Catalog.
206
- # @api public
207
- #
208
- class PCatalogEntryType < PAnyType
209
- end
210
-
211
- # Represents a (host-) class in the Puppet Language.
212
- # @api public
213
- #
214
- class PHostClassType < PCatalogEntryType
215
- has_attr 'class_name', String
216
- end
217
-
218
- # Represents a Resource Type in the Puppet Language
219
- # @api public
220
- #
221
- class PResourceType < PCatalogEntryType
222
- has_attr 'type_name', String
223
- has_attr 'title', String
224
- end
225
-
226
- # Represents a type that accept PUndefType instead of the type parameter
227
- # required_type - is a short hand for Variant[T, Undef]
228
- # @api public
229
- #
230
- class POptionalType < PAnyType
231
- contains_one_uni 'optional_type', PAnyType
232
- end
233
-
234
- end
@@ -199,8 +199,13 @@ module Puppet::Pops::Validation
199
199
  # TODO: this support is questionable, it requires knowledge that :detail is special
200
200
  arguments[:detail] ||= ''
201
201
 
202
- source_pos = Puppet::Pops::Utils.find_closest_positioned(semantic)
203
- file = source_pos ? source_pos.locator.file : nil
202
+ if semantic.is_a?(Puppet::Parser::Resource)
203
+ source_pos = semantic
204
+ file = semantic.file
205
+ else
206
+ source_pos = Puppet::Pops::Utils.find_closest_positioned(semantic)
207
+ file = source_pos ? source_pos.locator.file : nil
208
+ end
204
209
 
205
210
  severity = @severity_producer.severity(issue)
206
211
  @acceptor.accept(Diagnostic.new(severity, issue, file, source_pos, arguments, except))
@@ -195,6 +195,8 @@ class Puppet::Pops::Validation::Checker4_0
195
195
  case parent1
196
196
  when Model::AbstractResource
197
197
  when Model::CollectExpression
198
+ when Model::CapabilityMapping
199
+ acceptor.accept(Issues::UNSUPPORTED_OPERATOR_IN_CONTEXT, parent1, :operator=>'* =>')
198
200
  else
199
201
  # protect against just testing a snippet that has no parent, error message will be a bit strange
200
202
  # but it is not for a real program.
@@ -233,6 +235,32 @@ class Puppet::Pops::Validation::Checker4_0
233
235
  end
234
236
  end
235
237
 
238
+ def check_CapabilityMapping(o)
239
+ ok =
240
+ case o.component
241
+ when Puppet::Pops::Model::QualifiedName
242
+ name = o.component.value
243
+ acceptor.accept(Issues::ILLEGAL_CLASSREF, o.component, {:name=>name}) unless name =~ Puppet::Pops::Patterns::CLASSREF_EXT
244
+ true
245
+ when Puppet::Pops::Model::AccessExpression
246
+ keys = o.component.keys
247
+ expr = o.component.left_expr
248
+ if expr.is_a?(Puppet::Pops::Model::QualifiedReference) && keys.size == 1
249
+ key = keys[0]
250
+ key.is_a?(Puppet::Pops::Model::LiteralString) || key.is_a?(Puppet::Pops::Model::QualifiedName) || key.is_a?(Puppet::Pops::Model::QualifiedReference)
251
+ else
252
+ false
253
+ end
254
+ else
255
+ false
256
+ end
257
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.component, :feature=>'capability mapping', :container => o) unless ok
258
+
259
+ if o.capability !~ Puppet::Pops::Patterns::CLASSREF_EXT
260
+ acceptor.accept(Issues::ILLEGAL_CLASSREF, o, {:name=>o.capability})
261
+ end
262
+ end
263
+
236
264
  def check_EppExpression(o)
237
265
  if o.eContainer.is_a?(Puppet::Pops::Model::LambdaExpression)
238
266
  internal_check_no_capture(o.eContainer, o)
@@ -44,6 +44,7 @@ Puppet::Type.type(:augeas).provide(:augeas) do
44
44
  "rename" => [ :path, :string ],
45
45
  "insert" => [ :string, :string, :path ],
46
46
  "get" => [ :path, :comparator, :string ],
47
+ "values" => [ :path, :glob ],
47
48
  "defvar" => [ :string, :path ],
48
49
  "defnode" => [ :string, :path, :string ],
49
50
  "match" => [ :path, :glob ],
@@ -243,6 +244,54 @@ Puppet::Type.type(:augeas).provide(:augeas) do
243
244
  !!return_value
244
245
  end
245
246
 
247
+ # Used by the need_to_run? method to process values filters. Returns
248
+ # true if there is a matched value, false if otherwise
249
+ def process_values(cmd_array)
250
+ return_value = false
251
+
252
+ #validate and tear apart the command
253
+ fail("Invalid command: #{cmd_array.join(" ")}") if cmd_array.length < 3
254
+ cmd = cmd_array.shift
255
+ path = cmd_array.shift
256
+
257
+ # Need to break apart the clause
258
+ clause_array = parse_commands(cmd_array.shift)[0]
259
+ verb = clause_array.shift
260
+
261
+ #Get the match paths from augeas
262
+ result = @aug.match(path) || []
263
+ fail("Error trying to get path '#{path}'") if (result == -1)
264
+
265
+ #Get the values of the match paths from augeas
266
+ values = result.collect{|r| @aug.get(r)}
267
+
268
+ case verb
269
+ when "include"
270
+ arg = clause_array.shift
271
+ return_value = values.include?(arg)
272
+ when "not_include"
273
+ arg = clause_array.shift
274
+ return_value = !values.include?(arg)
275
+ when "=="
276
+ begin
277
+ arg = clause_array.shift
278
+ new_array = eval arg
279
+ return_value = (values == new_array)
280
+ rescue
281
+ fail("Invalid array in command: #{cmd_array.join(" ")}")
282
+ end
283
+ when "!="
284
+ begin
285
+ arg = clause_array.shift
286
+ new_array = eval arg
287
+ return_value = (values != new_array)
288
+ rescue
289
+ fail("Invalid array in command: #{cmd_array.join(" ")}")
290
+ end
291
+ end
292
+ !!return_value
293
+ end
294
+
246
295
  # Used by the need_to_run? method to process match filters. Returns
247
296
  # true if there is a match, false if otherwise
248
297
  def process_match(cmd_array)
@@ -367,6 +416,7 @@ Puppet::Type.type(:augeas).provide(:augeas) do
367
416
  begin
368
417
  case command
369
418
  when "get"; return_value = process_get(cmd_array)
419
+ when "values"; return_value = process_values(cmd_array)
370
420
  when "match"; return_value = process_match(cmd_array)
371
421
  end
372
422
  rescue StandardError => e
@@ -9,4 +9,14 @@ Puppet::Type.type(:group).provide :directoryservice, :parent => Puppet::Provider
9
9
  confine :operatingsystem => :darwin
10
10
  defaultfor :operatingsystem => :darwin
11
11
  has_feature :manages_members
12
+
13
+ def members_insync?(current, should)
14
+ return false unless current
15
+ if current == :absent
16
+ return should.empty?
17
+ else
18
+ return current.sort.uniq == should.sort.uniq
19
+ end
20
+ end
21
+
12
22
  end
@@ -0,0 +1,41 @@
1
+ Puppet::Type.type(:package).provide :dnf, :parent => :yum do
2
+ desc "Support via `dnf`.
3
+
4
+ Using this provider's `uninstallable` feature will not remove dependent packages. To
5
+ remove dependent packages with this provider use the `purgeable` feature, but note this
6
+ feature is destructive and should be used with the utmost care.
7
+
8
+ This provider supports the `install_options` attribute, which allows command-line flags to be passed to dnf.
9
+ These options should be specified as a string (e.g. '--flag'), a hash (e.g. {'--flag' => 'value'}),
10
+ or an array where each element is either a string or a hash."
11
+
12
+ has_feature :install_options, :versionable, :virtual_packages
13
+
14
+ commands :cmd => "dnf", :rpm => "rpm"
15
+
16
+ # Note: this confine was borrowed from the Yum provider. The
17
+ # original purpose (from way back in 2007) was to make sure we
18
+ # never try to use RPM on a machine without it. We think this
19
+ # has probably become obsolete with the way `commands` work, so
20
+ # we should investigate removing it at some point.
21
+ if command('rpm')
22
+ confine :true => begin
23
+ rpm('--version')
24
+ rescue Puppet::ExecutionFailure
25
+ false
26
+ else
27
+ true
28
+ end
29
+ end
30
+
31
+ defaultfor :operatingsystem => :fedora, :operatingsystemmajrelease => '22'
32
+
33
+ # The value to pass to DNF as its error output level.
34
+ # DNF differs from Yum slightly with regards to error outputting.
35
+ #
36
+ # @param None
37
+ # @return [String]
38
+ def self.error_level
39
+ '1'
40
+ end
41
+ end
@@ -111,8 +111,13 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package d
111
111
  # we don't support puppet:// URLs (yet)
112
112
  raise Puppet::Error.new("puppet:// URLs are not supported as gem sources")
113
113
  else
114
- # interpret it as a gem repository
115
- command << "--source" << "#{source}" << resource[:name]
114
+ # check whether it's an absolute file path to help Windows out
115
+ if Puppet::Util.absolute_path?(source)
116
+ command << source
117
+ else
118
+ # interpret it as a gem repository
119
+ command << "--source" << "#{source}" << resource[:name]
120
+ end
116
121
  end
117
122
  else
118
123
  command << "--no-rdoc" << "--no-ri" << resource[:name]
@@ -281,6 +281,7 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
281
281
  self::NEVRA_FIELDS.zip(match.captures) { |f, v| hash[f] = v }
282
282
  hash[:provider] = self.name
283
283
  hash[:ensure] = "#{hash[:version]}-#{hash[:release]}"
284
+ hash[:ensure].prepend("#{hash[:epoch]}:") if hash[:epoch] != '0'
284
285
  else
285
286
  Puppet.debug("Failed to match rpm line #{line}")
286
287
  end