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
@@ -74,11 +74,7 @@ describe 'the 4x function api' do
74
74
  it 'an error is raised when calling a no arguments function with arguments' do
75
75
  f = create_noargs_function_class()
76
76
  func = f.new(:closure_scope, :loader)
77
- expect{func.call({}, 'surprise')}.to raise_error(ArgumentError, "function 'test' called with mis-matched arguments
78
- expected:
79
- test() - arg count {0}
80
- actual:
81
- test(String) - arg count {1}")
77
+ expect{func.call({}, 'surprise')}.to raise_error(ArgumentError, "'test' expects no arguments, got 1")
82
78
  end
83
79
 
84
80
  it 'a simple function can be called' do
@@ -97,11 +93,7 @@ actual:
97
93
  signature = 'Any x, Any y'
98
94
  expect do
99
95
  func.call({}, 10)
100
- end.to raise_error(ArgumentError, "function 'min' called with mis-matched arguments
101
- expected:
102
- min(#{signature}) - arg count {2}
103
- actual:
104
- min(Integer) - arg count {1}")
96
+ end.to raise_error(ArgumentError, "'min' expects 2 arguments, got 1")
105
97
  end
106
98
 
107
99
  it 'an error is raised if called with too many arguments' do
@@ -112,12 +104,7 @@ actual:
112
104
  signature = 'Any x, Any y'
113
105
  expect do
114
106
  func.call({}, 10, 10, 10)
115
- end.to raise_error(ArgumentError, Regexp.new(Regexp.escape(
116
- "function 'min' called with mis-matched arguments
117
- expected:
118
- min(#{signature}) - arg count {2}
119
- actual:
120
- min(Integer, Integer, Integer) - arg count {3}")))
107
+ end.to raise_error(ArgumentError, "'min' expects 2 arguments, got 3")
121
108
  end
122
109
 
123
110
  it 'an error is raised if simple function-name and method are not matched' do
@@ -151,44 +138,22 @@ actual:
151
138
  func = f.new(:closure_scope, :loader)
152
139
  expect(func.is_a?(Puppet::Functions::Function)).to be_truthy
153
140
  expect do
154
- func.call({}, 10, 10, 10)
155
- end.to raise_error(ArgumentError, Regexp.new(Regexp.escape(
156
- "function 'min' called with mis-matched arguments
157
- expected:
158
- min(Numeric a, Numeric b) - arg count {2}
159
- actual:
160
- min(Integer, Integer, Integer) - arg count {3}")))
141
+ func.call({}, 10, 'ten')
142
+ end.to raise_error(ArgumentError, "'min' parameter 'b' expects a Numeric value, got String")
161
143
  end
162
144
 
163
- it 'an error includes optional indicators and count for last element' do
164
- f = create_function_with_optionals_and_varargs()
145
+ it 'an error includes optional indicators for last element' do
146
+ f = create_function_with_optionals_and_repeated_via_multiple_dispatch()
165
147
  # TODO: Bogus parameters, not yet used
166
148
  func = f.new(:closure_scope, :loader)
167
149
  expect(func.is_a?(Puppet::Functions::Function)).to be_truthy
168
- signature = 'Any x, Any y, Any a?, Any b?, Any c{0,}'
169
150
  expect do
170
- func.call({}, 10)
171
- end.to raise_error(ArgumentError,
172
- "function 'min' called with mis-matched arguments
173
- expected:
174
- min(#{signature}) - arg count {2,}
175
- actual:
176
- min(Integer) - arg count {1}")
177
- end
178
-
179
- it 'an error includes optional indicators and count for last element when defined via dispatch' do
180
- f = create_function_with_optionals_and_repeated_via_dispatch()
181
- # TODO: Bogus parameters, not yet used
182
- func = f.new(:closure_scope, :loader)
183
- expect(func.is_a?(Puppet::Functions::Function)).to be_truthy
184
- expect do
185
- func.call({}, 10)
186
- end.to raise_error(ArgumentError,
187
- "function 'min' called with mis-matched arguments
188
- expected:
189
- min(Numeric x, Numeric y, Numeric a?, Numeric b?, Numeric c{0,}) - arg count {2,}
190
- actual:
191
- min(Integer) - arg count {1}")
151
+ func.call({}, 3, 10, 3, "4")
152
+ end.to raise_error(ArgumentError, "'min' expected one of:
153
+ (Numeric x, Numeric y, Numeric a?, Numeric b?, Numeric c*)
154
+ rejected: parameter 'b' expects a Numeric value, got String
155
+ (String x, String y, String a+)
156
+ rejected: parameter 'x' expects a String value, got Integer")
192
157
  end
193
158
 
194
159
  it 'can create optional repeated parameter' do
@@ -210,12 +175,7 @@ actual:
210
175
  func = f.new(:closure_scope, :loader)
211
176
  expect(func.call({}, 1)).to eql(1)
212
177
  expect(func.call({}, 1, 2)).to eql(2)
213
- expect { func.call({}) }.to raise_error(ArgumentError,
214
- "function 'count_args' called with mis-matched arguments
215
- expected:
216
- count_args(Any c{1,}) - arg count {1,}
217
- actual:
218
- count_args(Undef{0}) - arg count {0}")
178
+ expect { func.call({}) }.to raise_error(ArgumentError, "'count_args' expects at least 1 argument, got none")
219
179
  end
220
180
 
221
181
  it 'can create scope_param followed by repeated parameter' do
@@ -256,14 +216,12 @@ actual:
256
216
  func = f.new(:closure_scope, :loader)
257
217
  expect(func.is_a?(Puppet::Functions::Function)).to be_truthy
258
218
  expect do
259
- func.call({}, 10, 10, 10)
260
- end.to raise_error(ArgumentError,
261
- "function 'min' called with mis-matched arguments
262
- expected one of:
263
- min(Numeric a, Numeric b) - arg count {2}
264
- min(String s1, String s2) - arg count {2}
265
- actual:
266
- min(Integer, Integer, Integer) - arg count {3}")
219
+ func.call({}, 10, '20')
220
+ end.to raise_error(ArgumentError, "'min' expected one of:
221
+ (Numeric a, Numeric b)
222
+ rejected: parameter 'b' expects a Numeric value, got String
223
+ (String s1, String s2)
224
+ rejected: parameter 's1' expects a String value, got Integer")
267
225
  end
268
226
 
269
227
  context 'can use injection' do
@@ -334,12 +292,7 @@ actual:
334
292
  the_function = create_function_with_required_block_all_defaults().new(:closure_scope, :loader)
335
293
  expect do
336
294
  the_function.call({}, 10)
337
- end.to raise_error(ArgumentError,
338
- "function 'test' called with mis-matched arguments
339
- expected:
340
- test(Integer x, Callable block) - arg count {2}
341
- actual:
342
- test(Integer) - arg count {1}")
295
+ end.to raise_error(ArgumentError, "'test' expects a block")
343
296
  end
344
297
 
345
298
  it 'such that, an optional block can be defined and given as an argument' do
@@ -361,7 +314,7 @@ actual:
361
314
 
362
315
  context 'provides signature information' do
363
316
  it 'about capture rest (varargs)' do
364
- fc = create_function_with_optionals_and_varargs
317
+ fc = create_function_with_optionals_and_repeated
365
318
  signatures = fc.signatures
366
319
  expect(signatures.size).to eql(1)
367
320
  signature = signatures[0]
@@ -369,14 +322,14 @@ actual:
369
322
  end
370
323
 
371
324
  it 'about optional and required parameters' do
372
- fc = create_function_with_optionals_and_varargs
325
+ fc = create_function_with_optionals_and_repeated
373
326
  signature = fc.signatures[0]
374
327
  expect(signature.args_range).to eql( [2, Float::INFINITY ] )
375
328
  expect(signature.infinity?(signature.args_range[1])).to be_truthy
376
329
  end
377
330
 
378
331
  it 'about block not being allowed' do
379
- fc = create_function_with_optionals_and_varargs
332
+ fc = create_function_with_optionals_and_repeated
380
333
  signature = fc.signatures[0]
381
334
  expect(signature.block_range).to eql( [ 0, 0 ] )
382
335
  expect(signature.block_type).to be_nil
@@ -582,7 +535,7 @@ actual:
582
535
  end
583
536
  end
584
537
 
585
- def create_function_with_optionals_and_varargs
538
+ def create_function_with_optionals_and_repeated
586
539
  f = Puppet::Functions.create_function('min') do
587
540
  def min(x,y,a=1, b=1, *c)
588
541
  x <= y ? x : y
@@ -605,6 +558,39 @@ actual:
605
558
  end
606
559
  end
607
560
 
561
+ def create_function_with_optionals_and_repeated_via_multiple_dispatch
562
+ f = Puppet::Functions.create_function('min') do
563
+ dispatch :min do
564
+ param 'Numeric', :x
565
+ param 'Numeric', :y
566
+ optional_param 'Numeric', :a
567
+ optional_param 'Numeric', :b
568
+ repeated_param 'Numeric', :c
569
+ end
570
+ dispatch :min do
571
+ param 'String', :x
572
+ param 'String', :y
573
+ required_repeated_param 'String', :a
574
+ end
575
+ def min(x,y,a=1, b=1, *c)
576
+ x <= y ? x : y
577
+ end
578
+ end
579
+ end
580
+
581
+ def create_function_with_required_repeated_via_dispatch
582
+ f = Puppet::Functions.create_function('min') do
583
+ dispatch :min do
584
+ param 'Numeric', :x
585
+ param 'Numeric', :y
586
+ required_repeated_param 'Numeric', :z
587
+ end
588
+ def min(x,y, *z)
589
+ x <= y ? x : y
590
+ end
591
+ end
592
+ end
593
+
608
594
  def create_function_with_repeated
609
595
  f = Puppet::Functions.create_function('count_args') do
610
596
  dispatch :count_args do
@@ -46,7 +46,7 @@ describe Puppet::Resource::Catalog::Compiler do
46
46
 
47
47
  it "should directly use provided nodes for a local request" do
48
48
  Puppet::Node.indirection.expects(:find).never
49
- @compiler.expects(:compile).with(@node)
49
+ @compiler.expects(:compile).with(@node, nil)
50
50
  @request.stubs(:options).returns(:use_node => @node)
51
51
  @request.stubs(:remote?).returns(false)
52
52
  @compiler.find(@request)
@@ -63,7 +63,7 @@ describe Puppet::Resource::Catalog::Compiler do
63
63
  it "should use the authenticated node name if no request key is provided" do
64
64
  @request.stubs(:key).returns(nil)
65
65
  Puppet::Node.indirection.expects(:find).with(@name, anything).returns(@node)
66
- @compiler.expects(:compile).with(@node)
66
+ @compiler.expects(:compile).with(@node, nil)
67
67
  @compiler.find(@request)
68
68
  end
69
69
 
@@ -71,7 +71,7 @@ describe Puppet::Resource::Catalog::Compiler do
71
71
  @request.expects(:key).returns "my_node"
72
72
 
73
73
  Puppet::Node.indirection.expects(:find).with("my_node", anything).returns @node
74
- @compiler.expects(:compile).with(@node)
74
+ @compiler.expects(:compile).with(@node, nil)
75
75
  @compiler.find(@request)
76
76
  end
77
77
 
@@ -88,7 +88,7 @@ describe Puppet::Resource::Catalog::Compiler do
88
88
  it "should pass the found node to the compiler for compiling" do
89
89
  Puppet::Node.indirection.expects(:find).with(@name, anything).returns(@node)
90
90
  config = mock 'config'
91
- Puppet::Parser::Compiler.expects(:compile).with(@node)
91
+ Puppet::Parser::Compiler.expects(:compile).with(@node, nil)
92
92
  @compiler.find(@request)
93
93
  end
94
94
 
@@ -119,11 +119,31 @@ describe Puppet::Resource::Catalog::Compiler do
119
119
 
120
120
  it "should return the results of compiling as the catalog" do
121
121
  Puppet::Node.indirection.stubs(:find).returns(@node)
122
- config = mock 'config'
123
- result = mock 'result'
122
+ catalog = Puppet::Resource::Catalog.new(@node.name)
123
+ Puppet::Parser::Compiler.stubs(:compile).returns catalog
124
+
125
+ expect(@compiler.find(@request)).to equal(catalog)
126
+ end
127
+
128
+ it "passes the code_id from the request to the compiler" do
129
+ Puppet::Node.indirection.stubs(:find).returns(@node)
130
+ code_id = 'b59e5df0578ef411f773ee6c33d8073c50e7b8fe'
131
+ @request.options[:code_id] = code_id
132
+
133
+ Puppet::Parser::Compiler.expects(:compile).with(anything, code_id)
134
+
135
+ @compiler.find(@request)
136
+ end
137
+
138
+ it "returns a catalog with the code_id from the request" do
139
+ Puppet::Node.indirection.stubs(:find).returns(@node)
140
+ code_id = 'b59e5df0578ef411f773ee6c33d8073c50e7b8fe'
141
+ @request.options[:code_id] = code_id
142
+
143
+ catalog = Puppet::Resource::Catalog.new(@node.name, @node.environment, code_id)
144
+ Puppet::Parser::Compiler.stubs(:compile).returns catalog
124
145
 
125
- Puppet::Parser::Compiler.expects(:compile).returns result
126
- expect(@compiler.find(@request)).to equal(result)
146
+ expect(@compiler.find(@request).code_id).to eq(code_id)
127
147
  end
128
148
  end
129
149
 
@@ -34,6 +34,10 @@ describe Puppet::Resource::Catalog::StaticCompiler do
34
34
  end
35
35
 
36
36
  describe "#find" do
37
+ before :each do
38
+ subject.stubs(:store_content)
39
+ end
40
+
37
41
  it "returns a catalog" do
38
42
  expect(subject.find(request)).to be_a_kind_of(Puppet::Resource::Catalog)
39
43
  end
@@ -45,7 +49,8 @@ describe Puppet::Resource::Catalog::StaticCompiler do
45
49
 
46
50
  describe "a catalog with file resources containing source parameters with puppet:// URIs" do
47
51
  it "filters file resource source URI's to checksums" do
48
- stub_the_compiler
52
+ subject.stubs(:compile).returns(build_catalog)
53
+
49
54
  resource_catalog = subject.find(request)
50
55
  resource_catalog.resources.each do |resource|
51
56
  next unless resource.type == "File"
@@ -56,7 +61,8 @@ describe Puppet::Resource::Catalog::StaticCompiler do
56
61
 
57
62
  it "does not modify file resources with non-puppet:// URI's" do
58
63
  uri = "/this/is/not/a/puppet/uri.txt"
59
- stub_the_compiler(:source => uri)
64
+ subject.stubs(:compile).returns(build_catalog(:source => uri))
65
+
60
66
  resource_catalog = subject.find(request)
61
67
  resource_catalog.resources.each do |resource|
62
68
  next unless resource.type == "File"
@@ -65,16 +71,41 @@ describe Puppet::Resource::Catalog::StaticCompiler do
65
71
  end
66
72
  end
67
73
 
68
- it "copies the owner, group and mode from the fileserer" do
69
- stub_the_compiler
74
+ it "copies the owner, group and mode from the fileserver" do
75
+ subject.stubs(:compile).returns(build_catalog)
76
+
70
77
  resource_catalog = subject.find(request)
71
78
  resource_catalog.resources.each do |resource|
72
79
  next unless resource.type == "File"
73
- expect(resource[:owner]).to eq(0)
74
- expect(resource[:group]).to eq(0)
75
- expect(resource[:mode]).to eq(420)
80
+ expect(resource[:owner]).to eq("0")
81
+ expect(resource[:group]).to eq("0")
82
+ expect(resource[:mode]).to eq("644")
76
83
  end
77
84
  end
85
+
86
+ it "ignores recurse when source refers to a file" do
87
+ path = File.expand_path('/tmp/foo')
88
+ metadata = fileserver_metadata(:path => path)
89
+ metadata.relative_path = '.'
90
+
91
+ Puppet::FileServing::Metadata.indirection.stubs(:search).returns([metadata])
92
+ Puppet::FileServing::Metadata.indirection.stubs(:find).returns(metadata)
93
+
94
+ catalog = Puppet::Resource::Catalog.new(request)
95
+ catalog.add_resource(
96
+ Puppet::Resource.new('file', path,
97
+ :parameters => {
98
+ :recurse => true,
99
+ :source => 'puppet:///modules/mymodule/foo'
100
+ }
101
+ )
102
+ )
103
+ subject.stubs(:compile).returns(catalog)
104
+
105
+ resource = subject.find(request).resources.first
106
+ expect(resource[:ensure]).to eq('file')
107
+ expect(resource.title).to eq(path)
108
+ end
78
109
  end
79
110
  end
80
111
 
@@ -120,19 +151,6 @@ describe Puppet::Resource::Catalog::StaticCompiler do
120
151
 
121
152
  # Spec helper methods
122
153
 
123
- def stub_the_compiler(options = {:stub_methods => [:store_content]})
124
- # Build a resource catalog suitable for specifying the behavior of the
125
- # static compiler.
126
- compiler = mock('indirection terminus compiler')
127
- compiler.stubs(:find).returns(build_catalog(options))
128
- subject.stubs(:compiler).returns(compiler)
129
- # Mock the store content method to prevent copying the contents to the
130
- # file bucket.
131
- (options[:stub_methods] || []).each do |mthd|
132
- subject.stubs(mthd)
133
- end
134
- end
135
-
136
154
  def build_catalog(options = {})
137
155
  options = options.dup
138
156
  options[:source] ||= 'puppet:///modules/mymodule/config_file.txt'
@@ -20,9 +20,9 @@ describe Puppet::DataBinding::None do
20
20
  end
21
21
 
22
22
  describe "the behavior of the find method" do
23
- it "should just return nil" do
23
+ it "should just throw :no_such_key" do
24
24
  data_binding = Puppet::DataBinding::None.new
25
- expect(data_binding.find('fake_request')).to be_nil
25
+ expect { data_binding.find('fake_request') }.to throw_symbol(:no_such_key)
26
26
  end
27
27
  end
28
28
  end
@@ -109,6 +109,57 @@ describe Puppet::FileBucketFile::File, :uses_checksums => true do
109
109
  let(:not_bucketed_plaintext) { "other stuff" }
110
110
  let(:not_bucketed_checksum) { digest(not_bucketed_plaintext) }
111
111
 
112
+ describe "when listing the filebucket" do
113
+ it "should return false/nil when the bucket is empty" do
114
+ expect(Puppet::FileBucket::File.indirection.find("#{digest_algorithm}/#{not_bucketed_checksum}/foo/bar", :list_all => true)).to eq(nil)
115
+ end
116
+
117
+ it "raises when the request is remote" do
118
+ Puppet[:bucketdir] = tmpdir('bucket')
119
+
120
+ request = Puppet::Indirector::Request.new(:file_bucket_file, :find, "#{digest_algorithm}/#{checksum}/foo/bar", nil, :list_all => true)
121
+ request.node = 'client.example.com'
122
+
123
+ expect {
124
+ Puppet::FileBucketFile::File.new.find(request)
125
+ }.to raise_error(Puppet::Error, "Listing remote file buckets is not allowed")
126
+ end
127
+
128
+ it "should return the list of bucketed files in a human readable way" do
129
+ checksum1 = save_bucket_file("I'm the contents of a file", '/foo/bar1')
130
+ checksum2 = save_bucket_file("I'm the contents of another file", '/foo/bar2')
131
+ checksum3 = save_bucket_file("I'm the modified content of a existing file", '/foo/bar1')
132
+
133
+ # Use the first checksum as we know it's stored in the bucket
134
+ find_result = Puppet::FileBucket::File.indirection.find("#{digest_algorithm}/#{checksum1}/foo/bar1", :list_all => true)
135
+
136
+ # The list is sort order from date and file name, so first and third checksums come before the second
137
+ date_pattern = '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
138
+ expect(find_result.to_s).to match(Regexp.new("^#{checksum1} #{date_pattern} foo/bar1\\n#{checksum3} #{date_pattern} foo/bar1\\n#{checksum2} #{date_pattern} foo/bar2\\n$"))
139
+ end
140
+
141
+ it "should fail in an informative way when provided dates are not in the right format" do
142
+ contents = "I'm the contents of a file"
143
+ save_bucket_file(contents, '/foo/bar1')
144
+ expect {
145
+ Puppet::FileBucket::File.indirection.find(
146
+ "#{digest_algorithm}/#{not_bucketed_checksum}/foo/bar",
147
+ :list_all => true,
148
+ :todate => "0:0:0 1-1-1970",
149
+ :fromdate => "WEIRD"
150
+ )
151
+ }.to raise_error(Puppet::Error, /fromdate/)
152
+ expect {
153
+ Puppet::FileBucket::File.indirection.find(
154
+ "#{digest_algorithm}/#{not_bucketed_checksum}/foo/bar",
155
+ :list_all => true,
156
+ :todate => "WEIRD",
157
+ :fromdate => Time.now
158
+ )
159
+ }.to raise_error(Puppet::Error, /todate/)
160
+ end
161
+ end
162
+
112
163
  describe "when supplying a path" do
113
164
  it "should return false/nil if the file isn't bucketed" do
114
165
  expect(Puppet::FileBucket::File.indirection.head("#{digest_algorithm}/#{not_bucketed_checksum}/foo/bar")).to eq(false)
@@ -177,7 +228,7 @@ describe Puppet::FileBucketFile::File, :uses_checksums => true do
177
228
  checksum2 = save_bucket_file("foo\nbiz\nbaz")
178
229
 
179
230
  diff = Puppet::FileBucket::File.indirection.find("#{digest_algorithm}/#{checksum1}", :diff_with => checksum2)
180
- expect(diff).to eq("2c2\n< bar\n---\n> biz\n")
231
+ expect(diff).to include("-bar\n+biz\n")
181
232
  end
182
233
 
183
234
  it "should raise an exception if the hash to diff against isn't found" do