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,5 +1,8 @@
1
1
  require 'puppet/indirector/none'
2
2
 
3
3
  class Puppet::DataBinding::None < Puppet::Indirector::None
4
- desc "A Dummy terminus that always returns nil for data lookups."
4
+ desc "A Dummy terminus that always throws :no_such_key for data lookups."
5
+ def find(request)
6
+ throw :no_such_key
7
+ end
5
8
  end
@@ -1,15 +1,23 @@
1
1
  require 'puppet/indirector/code'
2
2
  require 'puppet/file_bucket/file'
3
3
  require 'puppet/util/checksums'
4
+ require 'puppet/util/diff'
4
5
  require 'fileutils'
5
6
 
6
7
  module Puppet::FileBucketFile
7
8
  class File < Puppet::Indirector::Code
8
9
  include Puppet::Util::Checksums
10
+ include Puppet::Util::Diff
9
11
 
10
12
  desc "Store files in a directory set based on their checksums."
11
13
 
12
14
  def find(request)
15
+ request.options[:bucket_path] ||= Puppet[:bucketdir]
16
+ # If filebucket mode is 'list'
17
+ if request.options[:list_all]
18
+ return nil unless ::File.exists?(request.options[:bucket_path])
19
+ return list(request)
20
+ end
13
21
  checksum, files_original_path = request_to_checksum_and_path(request)
14
22
  contents_file = path_for(request.options[:bucket_path], checksum, 'contents')
15
23
  paths_file = path_for(request.options[:bucket_path], checksum, 'paths')
@@ -18,7 +26,8 @@ module Puppet::FileBucketFile
18
26
  if request.options[:diff_with]
19
27
  other_contents_file = path_for(request.options[:bucket_path], request.options[:diff_with], 'contents')
20
28
  raise "could not find diff_with #{request.options[:diff_with]}" unless Puppet::FileSystem.exist?(other_contents_file)
21
- return `diff #{Puppet::FileSystem.path_string(contents_file).inspect} #{Puppet::FileSystem.path_string(other_contents_file).inspect}`
29
+ raise "Unable to diff on this platform" unless Puppet[:diff] != ""
30
+ return diff(Puppet::FileSystem.path_string(contents_file), Puppet::FileSystem.path_string(other_contents_file))
22
31
  else
23
32
  Puppet.info "FileBucket read #{checksum}"
24
33
  model.new(Puppet::FileSystem.binread(contents_file))
@@ -28,6 +37,54 @@ module Puppet::FileBucketFile
28
37
  end
29
38
  end
30
39
 
40
+ def list(request)
41
+ if request.remote?
42
+ raise Puppet::Error, "Listing remote file buckets is not allowed"
43
+ end
44
+
45
+ fromdate = request.options[:fromdate] || "0:0:0 1-1-1970"
46
+ todate = request.options[:todate] || Time.now.strftime("%F %T")
47
+ begin
48
+ to = Time.parse(todate)
49
+ rescue ArgumentError
50
+ raise Puppet::Error, "Error while parsing 'todate'"
51
+ end
52
+ begin
53
+ from = Time.parse(fromdate)
54
+ rescue ArgumentError
55
+ raise Puppet::Error, "Error while parsing 'fromdate'"
56
+ end
57
+ # Setting hash's default value to [], needed by the following loop
58
+ bucket = Hash.new {[]}
59
+ msg = ""
60
+ # Get all files with mtime between 'from' and 'to'
61
+ Pathname.new(request.options[:bucket_path]).find { |item|
62
+ if item.file? and item.basename.to_s == "paths"
63
+ filenames = item.read.strip.split("\n")
64
+ filestat = Time.parse(item.stat.mtime.to_s)
65
+ if from <= filestat and filestat <= to
66
+ filenames.each do |filename|
67
+ bucket[filename] += [[ item.stat.mtime , item.parent.basename ]]
68
+ end
69
+ end
70
+ end
71
+ }
72
+ # Sort the results
73
+ bucket.each { |filename, contents|
74
+ contents.sort_by! do |item|
75
+ item[0]
76
+ end
77
+ }
78
+ # Build the output message. Sorted by names then by dates
79
+ bucket.sort.each { |filename,contents|
80
+ contents.each { |mtime, chksum|
81
+ date = mtime.strftime("%F %T")
82
+ msg += "#{chksum} #{date} #{filename}\n"
83
+ }
84
+ }
85
+ return model.new(msg)
86
+ end
87
+
31
88
  def head(request)
32
89
  checksum, files_original_path = request_to_checksum_and_path(request)
33
90
  contents_file = path_for(request.options[:bucket_path], checksum, 'contents')
@@ -18,6 +18,7 @@ class Puppet::Indirector::Hiera < Puppet::Indirector::Terminus
18
18
  def find(request)
19
19
  not_found = Object.new
20
20
  options = request.options
21
+ Puppet.debug { "Performing a hiera indirector lookup of #{request.key} with options #{options.inspect}" }
21
22
  value = hiera.lookup(request.key, not_found, Hiera::Scope.new(options[:variables]), nil, convert_merge(options[:merge]))
22
23
  throw :no_such_key if value.equal?(not_found)
23
24
  value
@@ -34,8 +35,11 @@ class Puppet::Indirector::Hiera < Puppet::Indirector::Terminus
34
35
  def convert_merge(merge)
35
36
  case merge
36
37
  when nil
38
+ when 'first'
37
39
  # Nil is OK. Defaults to Hiera :priority
38
40
  nil
41
+ when Puppet::Pops::MergeStrategy
42
+ convert_merge(merge.configuration)
39
43
  when 'unique'
40
44
  # Equivalent to Hiera :array
41
45
  :array
@@ -17,7 +17,7 @@ class Puppet::Indirector::JSON < Puppet::Indirector::Terminus
17
17
 
18
18
  Puppet::Util.replace_file(filename, 0660) {|f| f.print to_json(request.instance) }
19
19
  rescue TypeError => detail
20
- Puppet.log_exception "Could not save #{self.name} #{request.key}: #{detail}"
20
+ Puppet.log_exception(detail, "Could not save #{self.name} #{request.key}: #{detail}")
21
21
  end
22
22
 
23
23
  def destroy(request)
@@ -23,7 +23,7 @@ class Puppet::Indirector::Msgpack < Puppet::Indirector::Terminus
23
23
 
24
24
  Puppet::Util.replace_file(filename, 0660) {|f| f.print to_msgpack(request.instance) }
25
25
  rescue TypeError => detail
26
- Puppet.log_exception "Could not save #{self.name} #{request.key}: #{detail}"
26
+ Puppet.log_exception(detail, "Could not save #{self.name} #{request.key}: #{detail}")
27
27
  end
28
28
 
29
29
  def destroy(request)
@@ -243,15 +243,14 @@ class Puppet::Indirector::Request
243
243
  @port = uri.port.to_i
244
244
  end
245
245
 
246
- @protocol = uri.scheme
247
-
248
- if uri.scheme == 'puppet'
249
- @key = URI.unescape(uri.path.sub(/^\//, ''))
250
- return
246
+ # filebucket:// is only used internally to pass request details
247
+ # from Dipper objects to the indirector. The wire always uses HTTPS.
248
+ if uri.scheme == 'filebucket'
249
+ @protocol = 'https'
250
+ else
251
+ @protocol = uri.scheme
251
252
  end
252
253
 
253
- env, indirector, @key = URI.unescape(uri.path.sub(/^\//, '')).split('/',3)
254
- @key ||= ''
255
- self.environment = env unless env == ''
254
+ @key = URI.unescape(uri.path.sub(/^\//, ''))
256
255
  end
257
256
  end
@@ -27,7 +27,7 @@ class Puppet::Indirector::ResourceType::Parser < Puppet::Indirector::Code
27
27
  krt = resource_types_in(request.environment)
28
28
 
29
29
  # This is a bit ugly.
30
- [:hostclass, :definition, :node].each do |type|
30
+ [:hostclass, :definition, :application, :node].each do |type|
31
31
  # We have to us 'find_<type>' here because it will
32
32
  # load any missing types from disk, whereas the plain
33
33
  # '<type>' method only returns from memory.
@@ -66,14 +66,16 @@ class Puppet::Indirector::ResourceType::Parser < Puppet::Indirector::Code
66
66
  krt.hostclasses.values
67
67
  when "defined_type"
68
68
  krt.definitions.values
69
+ when "application"
70
+ krt.applications.values
69
71
  when "node"
70
72
  krt.nodes.values
71
73
  when nil
72
- result_candidates = [krt.hostclasses.values, krt.definitions.values, krt.nodes.values]
74
+ result_candidates = [krt.hostclasses.values, krt.definitions.values, krt.applications.values, krt.nodes.values]
73
75
  else
74
76
  raise ArgumentError, "Unrecognized kind filter: " +
75
77
  "'#{request.options[:kind]}', expected one " +
76
- " of 'class', 'defined_type', or 'node'."
78
+ " of 'class', 'defined_type', 'application', or 'node'."
77
79
  end
78
80
 
79
81
  result = result_candidates.flatten.reject { |t| t.name == "" }
@@ -0,0 +1,7 @@
1
+
2
+ module Puppet::InfoService
3
+ require 'puppet/info_service/class_information_service'
4
+ def self.classes_per_environment(env_file_hash)
5
+ Puppet::InfoService::ClassInformationService.new.classes_per_environment(env_file_hash)
6
+ end
7
+ end
@@ -0,0 +1,111 @@
1
+ require 'puppet'
2
+ require 'puppet/pops'
3
+ require 'puppet/pops/evaluator/literal_evaluator'
4
+
5
+ class Puppet::InfoService::ClassInformationService
6
+
7
+ def initialize
8
+ @file_to_result = {}
9
+ @parser = Puppet::Pops::Parser::EvaluatingParser.new()
10
+ end
11
+
12
+ def classes_per_environment(env_file_hash)
13
+ # In this version of puppet there is only one way to parse manifests, as feature switches per environment
14
+ # are added or removed, this logic needs to change to compute the result per environment with the correct
15
+ # feature flags in effect.
16
+
17
+ unless env_file_hash.is_a?(Hash)
18
+ raise ArgumentError, 'Given argument must be a Hash'
19
+ end
20
+
21
+ result = {}
22
+
23
+ # for each environment
24
+ # for each file
25
+ # if file already processed, use last result or error
26
+ #
27
+ env_file_hash.each do |env, files|
28
+ env_result = result[env] = {}
29
+ files.each do |f|
30
+ env_result[f] = result_of(f)
31
+ end
32
+ end
33
+ result
34
+ end
35
+
36
+ private
37
+
38
+ def type_parser
39
+ # Safe to cache this as it would otherwise constantly build up the visitor cache
40
+ @@type_parser ||= Puppet::Pops::Types::TypeParser.new
41
+ end
42
+
43
+ def literal_evaluator
44
+ @@literal_evaluator ||= Puppet::Pops::Evaluator::LiteralEvaluator.new
45
+ end
46
+
47
+ def result_of(f)
48
+ entry = @file_to_result[f]
49
+ if entry.nil?
50
+ @file_to_result[f] = entry = parse_file(f)
51
+ end
52
+ entry
53
+ end
54
+
55
+ def parse_file(f)
56
+ begin
57
+ parse_result = @parser.parse_file(f)
58
+ parse_result.definitions.select {|d| d.is_a?(Puppet::Pops::Model::HostClassDefinition)}.map do |d|
59
+ {:name => d.name,
60
+ :params => params = d.parameters.map {|p| extract_param(p) }
61
+ }
62
+ end
63
+ rescue StandardError => e
64
+ {:error => e.message }
65
+ end
66
+ end
67
+
68
+ def extract_param(p)
69
+ extract_default(extract_type({:name => p.name}, p), p)
70
+ end
71
+
72
+ def extract_type(structure, p)
73
+ return structure if p.type_expr.nil?
74
+ structure[:type] = typeexpr_to_string(p.type_expr)
75
+ structure
76
+ end
77
+
78
+ def extract_default(structure, p)
79
+ value_expr = p.value
80
+ return structure if value_expr.nil?
81
+ default_value = value_as_literal(value_expr)
82
+ if !default_value.nil?
83
+ structure[:default_literal] = default_value
84
+ return structure
85
+ end
86
+ structure[:default_source] = extract_value_source(value_expr)
87
+ structure
88
+ end
89
+
90
+ def typeexpr_to_string(type_expr)
91
+ begin
92
+ type_parser.interpret_any(type_expr).to_s
93
+ rescue Puppet::ParseError
94
+ # type is to complex - contains expressions that are not literal
95
+ nil
96
+ end
97
+ end
98
+
99
+ def value_as_literal(value_expr)
100
+ catch(:not_literal) do
101
+ return literal_evaluator.literal(value_expr)
102
+ end
103
+ nil
104
+ end
105
+
106
+ # Extracts the source for the expression
107
+ def extract_value_source(value_expr)
108
+ position = Puppet::Pops::Adapters::SourcePosAdapter.adapt(value_expr)
109
+ position.extract_tree_text
110
+ end
111
+ end
@@ -15,15 +15,16 @@ module Puppet::ModuleTool
15
15
  attr_accessor :module_name
16
16
 
17
17
  DEFAULTS = {
18
- 'name' => nil,
19
- 'version' => nil,
20
- 'author' => nil,
21
- 'summary' => nil,
22
- 'license' => 'Apache-2.0',
23
- 'source' => '',
24
- 'project_page' => nil,
25
- 'issues_url' => nil,
26
- 'dependencies' => Set.new.freeze,
18
+ 'name' => nil,
19
+ 'version' => nil,
20
+ 'author' => nil,
21
+ 'summary' => nil,
22
+ 'license' => 'Apache-2.0',
23
+ 'source' => '',
24
+ 'project_page' => nil,
25
+ 'issues_url' => nil,
26
+ 'dependencies' => Set.new.freeze,
27
+ 'data_provider' => nil,
27
28
  }
28
29
 
29
30
  def initialize
@@ -52,6 +53,7 @@ module Puppet::ModuleTool
52
53
  process_name(data) if data['name']
53
54
  process_version(data) if data['version']
54
55
  process_source(data) if data['source']
56
+ process_data_provider(data) if data['data_provider']
55
57
  merge_dependencies(data) if data['dependencies']
56
58
 
57
59
  @data.merge!(data)
@@ -128,6 +130,10 @@ module Puppet::ModuleTool
128
130
  validate_version(data['version'])
129
131
  end
130
132
 
133
+ def process_data_provider(data)
134
+ validate_data_provider(data['data_provider'])
135
+ end
136
+
131
137
  # Do basic parsing of the source parameter. If the source is hosted on
132
138
  # GitHub, we can predict sensible defaults for both project_page and
133
139
  # issues_url.
@@ -188,6 +194,23 @@ module Puppet::ModuleTool
188
194
  raise ArgumentError, "Invalid 'version' field in metadata.json: #{err}"
189
195
  end
190
196
 
197
+ # Validates that the given _value_ is a symbolic name that starts with a letter
198
+ # and then contains only letters, digits, or underscore. Will raise an ArgumentError
199
+ # if that's not the case.
200
+ #
201
+ # @param value [Object] The value to be tested
202
+ def validate_data_provider(value)
203
+ err = nil
204
+ if value.is_a?(String)
205
+ unless value =~ /^[a-zA-Z][a-zA-Z0-9_]*$/
206
+ err = value =~ /^[a-zA-Z]/ ? 'contains non-alphanumeric characters' : 'must begin with a letter'
207
+ end
208
+ else
209
+ err = 'must be a string'
210
+ end
211
+ raise ArgumentError, "field 'data_provider' #{err}" if err
212
+ end
213
+
191
214
  # Validates that the version range can be parsed by Semantic.
192
215
  def validate_version_range(version_range)
193
216
  Semantic::VersionRange.parse(version_range)
@@ -2,78 +2,82 @@
2
2
 
3
3
  #### Table of Contents
4
4
 
5
- 1. [Overview](#overview)
6
- 2. [Module Description - What the module does and why it is useful](#module-description)
7
- 3. [Setup - The basics of getting started with <%= metadata.name %>](#setup)
5
+ 1. [Description](#description)
6
+ 1. [Setup - The basics of getting started with <%= metadata.name %>](#setup)
8
7
  * [What <%= metadata.name %> affects](#what-<%= metadata.name %>-affects)
9
8
  * [Setup requirements](#setup-requirements)
10
9
  * [Beginning with <%= metadata.name %>](#beginning-with-<%= metadata.name %>)
11
- 4. [Usage - Configuration options and additional functionality](#usage)
12
- 5. [Reference - An under-the-hood peek at what the module is doing and how](#reference)
13
- 5. [Limitations - OS compatibility, etc.](#limitations)
14
- 6. [Development - Guide for contributing to the module](#development)
10
+ 1. [Usage - Configuration options and additional functionality](#usage)
11
+ 1. [Reference - An under-the-hood peek at what the module is doing and how](#reference)
12
+ 1. [Limitations - OS compatibility, etc.](#limitations)
13
+ 1. [Development - Guide for contributing to the module](#development)
15
14
 
16
- ## Overview
15
+ ## Description
17
16
 
18
- A one-maybe-two sentence summary of what the module does/what problem it solves.
19
- This is your 30 second elevator pitch for your module. Consider including
20
- OS/Puppet version it works with.
17
+ Start with a one- or two-sentence summary of what the module does and/or what
18
+ problem it solves. This is your 30-second elevator pitch for your module.
19
+ Consider including OS/Puppet version it works with.
21
20
 
22
- ## Module Description
23
-
24
- If applicable, this section should have a brief description of the technology
25
- the module integrates with and what that integration enables. This section
21
+ You can give more descriptive information in a second paragraph. This paragraph
26
22
  should answer the questions: "What does this module *do*?" and "Why would I use
27
- it?"
28
-
29
- If your module has a range of functionality (installation, configuration,
30
- management, etc.) this is the time to mention it.
23
+ it?" If your module has a range of functionality (installation, configuration,
24
+ management, etc.), this is the time to mention it.
31
25
 
32
26
  ## Setup
33
27
 
34
- ### What <%= metadata.name %> affects
28
+ ### What <%= metadata.name %> affects **OPTIONAL**
29
+
30
+ If it's obvious what your module touches, you can skip this section. For
31
+ example, folks can probably figure out that your mysql_instance module affects
32
+ their MySQL instances.
33
+
34
+ If there's more that they should know about, though, this is the place to mention:
35
35
 
36
36
  * A list of files, packages, services, or operations that the module will alter,
37
- impact, or execute on the system it's installed on.
38
- * This is a great place to stick any warnings.
39
- * Can be in list or paragraph form.
37
+ impact, or execute.
38
+ * Dependencies that your module automatically installs.
39
+ * Warnings or other important notices.
40
40
 
41
41
  ### Setup Requirements **OPTIONAL**
42
42
 
43
43
  If your module requires anything extra before setting up (pluginsync enabled,
44
44
  etc.), mention it here.
45
45
 
46
- ### Beginning with <%= metadata.name %>
46
+ If your most recent release breaks compatibility or requires particular steps
47
+ for upgrading, you might want to include an additional "Upgrading" section
48
+ here.
47
49
 
48
- The very basic steps needed for a user to get the module up and running.
50
+ ### Beginning with <%= metadata.name %>
49
51
 
50
- If your most recent release breaks compatibility or requires particular steps
51
- for upgrading, you may wish to include an additional section here: Upgrading
52
- (For an example, see http://forge.puppetlabs.com/puppetlabs/firewall).
52
+ The very basic steps needed for a user to get the module up and running. This
53
+ can include setup steps, if necessary, or it can be an example of the most
54
+ basic use of the module.
53
55
 
54
56
  ## Usage
55
57
 
56
- Put the classes, types, and resources for customizing, configuring, and doing
57
- the fancy stuff with your module here.
58
+ This section is where you describe how to customize, configure, and do the
59
+ fancy stuff with your module here. It's especially helpful if you include usage
60
+ examples and code samples for doing things with your module.
58
61
 
59
62
  ## Reference
60
63
 
61
- Here, list the classes, types, providers, facts, etc contained in your module.
62
- This section should include all of the under-the-hood workings of your module so
63
- people know what the module is touching on their system but don't need to mess
64
- with things. (We are working on automating this section!)
64
+ Here, include a complete list of your module's classes, types, providers,
65
+ facts, along with the parameters for each. Users refer to this section (thus
66
+ the name "Reference") to find specific details; most users don't read it per
67
+ se.
65
68
 
66
69
  ## Limitations
67
70
 
68
- This is where you list OS compatibility, version compatibility, etc.
71
+ This is where you list OS compatibility, version compatibility, etc. If there
72
+ are Known Issues, you might want to include them under their own heading here.
69
73
 
70
74
  ## Development
71
75
 
72
76
  Since your module is awesome, other users will want to play with it. Let them
73
77
  know what the ground rules for contributing are.
74
78
 
75
- ## Release Notes/Contributors/Etc **Optional**
79
+ ## Release Notes/Contributors/Etc. **Optional**
76
80
 
77
81
  If you aren't using changelog, put your release notes here (though you should
78
- consider using changelog). You may also add any additional sections you feel are
79
- necessary or important to include here. Please use the `## ` header.
82
+ consider using changelog). You can also add any additional sections you feel
83
+ are necessary or important to include here. Please use the `## ` header.