puppet 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/debian/README.source +1 -1
  10. data/ext/debian/control +1 -1
  11. data/ext/debian/copyright +4 -4
  12. data/ext/debian/puppetmaster.README.debian +11 -9
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/ext/envpuppet +2 -2
  15. data/ext/ips/puppetagent.xml +1 -1
  16. data/ext/ips/puppetmaster.xml +1 -1
  17. data/ext/project_data.yaml +8 -0
  18. data/ext/puppet-test +3 -3
  19. data/ext/rack/example-passenger-vhost.conf +1 -1
  20. data/ext/redhat/puppet.spec.erb +2 -2
  21. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  22. data/ext/solaris/pkginfo +1 -1
  23. data/ext/solaris/smf/puppet.xml +1 -1
  24. data/ext/suse/puppet.spec +2 -2
  25. data/ext/upload_facts.rb +1 -1
  26. data/ext/windows/puppet_interactive.bat +6 -0
  27. data/ext/windows/puppet_shell.bat +9 -0
  28. data/ext/windows/run_puppet_interactive.bat +9 -0
  29. data/ext/yaml_nodes.rb +1 -1
  30. data/install.rb +30 -20
  31. data/lib/hiera/scope.rb +1 -1
  32. data/lib/puppet/agent.rb +1 -1
  33. data/lib/puppet/application/agent.rb +4 -2
  34. data/lib/puppet/application/apply.rb +7 -4
  35. data/lib/puppet/application/cert.rb +1 -1
  36. data/lib/puppet/application/device.rb +1 -1
  37. data/lib/puppet/application/filebucket.rb +1 -1
  38. data/lib/puppet/application/inspect.rb +1 -1
  39. data/lib/puppet/application/lookup.rb +45 -47
  40. data/lib/puppet/application/master.rb +2 -2
  41. data/lib/puppet/application/resource.rb +1 -1
  42. data/lib/puppet/configurer.rb +100 -22
  43. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  44. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  45. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  46. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  47. data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
  48. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  49. data/lib/puppet/defaults.rb +69 -22
  50. data/lib/puppet/environments.rb +3 -1
  51. data/lib/puppet/face/config.rb +1 -1
  52. data/lib/puppet/face/epp.rb +1 -1
  53. data/lib/puppet/face/help/man.erb +1 -1
  54. data/lib/puppet/face/module/install.rb +6 -6
  55. data/lib/puppet/face/parser.rb +12 -9
  56. data/lib/puppet/face/status.rb +2 -1
  57. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  58. data/lib/puppet/feature/telnet.rb +9 -0
  59. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  60. data/lib/puppet/file_serving/metadata.rb +18 -2
  61. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  62. data/lib/puppet/file_system/file_impl.rb +2 -2
  63. data/lib/puppet/file_system/memory_impl.rb +1 -1
  64. data/lib/puppet/file_system/uniquefile.rb +1 -1
  65. data/lib/puppet/file_system.rb +2 -2
  66. data/lib/puppet/forge/repository.rb +1 -31
  67. data/lib/puppet/forge.rb +1 -1
  68. data/lib/puppet/functions/assert_type.rb +9 -9
  69. data/lib/puppet/functions/each.rb +5 -13
  70. data/lib/puppet/functions/filter.rb +5 -14
  71. data/lib/puppet/functions/lookup.rb +126 -150
  72. data/lib/puppet/functions/map.rb +6 -14
  73. data/lib/puppet/functions/match.rb +1 -0
  74. data/lib/puppet/functions/reduce.rb +5 -13
  75. data/lib/puppet/functions/reverse_each.rb +82 -0
  76. data/lib/puppet/functions/scanf.rb +15 -18
  77. data/lib/puppet/functions/slice.rb +22 -36
  78. data/lib/puppet/functions/split.rb +2 -2
  79. data/lib/puppet/functions/step.rb +88 -0
  80. data/lib/puppet/functions/type.rb +70 -0
  81. data/lib/puppet/functions.rb +45 -6
  82. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  83. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  84. data/lib/puppet/indirector/facts/facter.rb +2 -13
  85. data/lib/puppet/indirector/file_content/http.rb +15 -0
  86. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  87. data/lib/puppet/indirector/generic_http.rb +16 -0
  88. data/lib/puppet/indirector/hiera.rb +3 -1
  89. data/lib/puppet/indirector/indirection.rb +6 -2
  90. data/lib/puppet/indirector/json.rb +2 -2
  91. data/lib/puppet/indirector/node/exec.rb +1 -1
  92. data/lib/puppet/indirector/node/ldap.rb +1 -1
  93. data/lib/puppet/indirector/rest.rb +2 -1
  94. data/lib/puppet/info_service/class_information_service.rb +13 -12
  95. data/lib/puppet/loaders.rb +1 -0
  96. data/lib/puppet/module.rb +6 -2
  97. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  98. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  99. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  100. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  101. data/lib/puppet/network/http/pool.rb +9 -0
  102. data/lib/puppet/node/environment.rb +11 -2
  103. data/lib/puppet/node.rb +11 -2
  104. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  105. data/lib/puppet/parser/compiler.rb +4 -11
  106. data/lib/puppet/parser/environment_compiler.rb +0 -1
  107. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  108. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  109. data/lib/puppet/parser/functions/lookup.rb +128 -149
  110. data/lib/puppet/parser/functions/map.rb +1 -1
  111. data/lib/puppet/parser/functions/match.rb +1 -0
  112. data/lib/puppet/parser/functions/scanf.rb +15 -26
  113. data/lib/puppet/parser/functions/slice.rb +17 -24
  114. data/lib/puppet/parser/functions/split.rb +1 -1
  115. data/lib/puppet/parser/functions.rb +28 -16
  116. data/lib/puppet/parser/resource.rb +19 -17
  117. data/lib/puppet/parser/scope.rb +176 -5
  118. data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
  119. data/lib/puppet/pops/adaptable.rb +4 -1
  120. data/lib/puppet/pops/adapters.rb +80 -12
  121. data/lib/puppet/pops/binder/binder.rb +21 -17
  122. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  123. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  124. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  125. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  126. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  127. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  128. data/lib/puppet/pops/binder/injector.rb +53 -48
  129. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  130. data/lib/puppet/pops/binder/producers.rb +67 -62
  131. data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
  132. data/lib/puppet/pops/evaluator/closure.rb +122 -106
  133. data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
  134. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  135. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  136. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  137. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  138. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  139. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  140. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  141. data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
  142. data/lib/puppet/pops/functions/function.rb +6 -2
  143. data/lib/puppet/pops/issue_reporter.rb +6 -4
  144. data/lib/puppet/pops/issues.rb +50 -11
  145. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  146. data/lib/puppet/pops/loader/loader.rb +1 -1
  147. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  148. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  149. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
  150. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  151. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  152. data/lib/puppet/pops/loaders.rb +51 -9
  153. data/lib/puppet/pops/lookup/explainer.rb +73 -3
  154. data/lib/puppet/pops/lookup/invocation.rb +21 -19
  155. data/lib/puppet/pops/lookup.rb +17 -12
  156. data/lib/puppet/pops/merge_strategy.rb +16 -19
  157. data/lib/puppet/pops/model/factory.rb +179 -157
  158. data/lib/puppet/pops/model/model.rb +17 -8
  159. data/lib/puppet/pops/model/model_label_provider.rb +14 -7
  160. data/lib/puppet/pops/model/model_meta.rb +17 -0
  161. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  162. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  163. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  164. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  165. data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
  166. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  167. data/lib/puppet/pops/parser/lexer2.rb +428 -403
  168. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  169. data/lib/puppet/pops/parser/locator.rb +21 -0
  170. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  171. data/lib/puppet/pops/parser/slurp_support.rb +16 -8
  172. data/lib/puppet/pops/types/class_loader.rb +23 -19
  173. data/lib/puppet/pops/types/enumeration.rb +9 -26
  174. data/lib/puppet/pops/types/iterable.rb +308 -0
  175. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  176. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  177. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  178. data/lib/puppet/pops/types/type_calculator.rb +140 -387
  179. data/lib/puppet/pops/types/type_factory.rb +91 -57
  180. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  181. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  182. data/lib/puppet/pops/types/type_parser.rb +159 -112
  183. data/lib/puppet/pops/types/types.rb +2057 -1253
  184. data/lib/puppet/pops/utils.rb +11 -10
  185. data/lib/puppet/pops/validation/checker4_0.rb +115 -63
  186. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  187. data/lib/puppet/pops/validation.rb +11 -9
  188. data/lib/puppet/pops.rb +0 -8
  189. data/lib/puppet/provider/aixobject.rb +1 -1
  190. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  191. data/lib/puppet/provider/cron/crontab.rb +1 -1
  192. data/lib/puppet/provider/exec/windows.rb +1 -1
  193. data/lib/puppet/provider/group/windows_adsi.rb +2 -2
  194. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  195. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  196. data/lib/puppet/provider/package/appdmg.rb +3 -2
  197. data/lib/puppet/provider/package/dnf.rb +1 -1
  198. data/lib/puppet/provider/package/pip.rb +16 -9
  199. data/lib/puppet/provider/package/pip3.rb +1 -1
  200. data/lib/puppet/provider/package/pkg.rb +1 -1
  201. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  202. data/lib/puppet/provider/package/pkgng.rb +13 -4
  203. data/lib/puppet/provider/package/rpm.rb +0 -1
  204. data/lib/puppet/provider/package/windows.rb +1 -1
  205. data/lib/puppet/provider/package/yum.rb +2 -2
  206. data/lib/puppet/provider/package/zypper.rb +19 -0
  207. data/lib/puppet/provider/service/debian.rb +7 -20
  208. data/lib/puppet/provider/service/init.rb +7 -0
  209. data/lib/puppet/provider/service/launchd.rb +6 -12
  210. data/lib/puppet/provider/service/systemd.rb +9 -2
  211. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +1 -1
  213. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  214. data/lib/puppet/provider/user/windows_adsi.rb +2 -2
  215. data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
  216. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  217. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  218. data/lib/puppet/reference/configuration.rb +1 -1
  219. data/lib/puppet/reference/providers.rb +1 -1
  220. data/lib/puppet/resource/capability_finder.rb +20 -13
  221. data/lib/puppet/resource/catalog.rb +60 -3
  222. data/lib/puppet/resource/status.rb +11 -2
  223. data/lib/puppet/resource/type.rb +33 -42
  224. data/lib/puppet/resource.rb +15 -12
  225. data/lib/puppet/settings/config_file.rb +1 -1
  226. data/lib/puppet/settings/environment_conf.rb +13 -5
  227. data/lib/puppet/settings.rb +1 -1
  228. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  229. data/lib/puppet/ssl/certificate_request.rb +4 -4
  230. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  231. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  232. data/lib/puppet/test/test_helper.rb +16 -4
  233. data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
  234. data/lib/puppet/transaction/report.rb +31 -1
  235. data/lib/puppet/transaction/resource_harness.rb +0 -25
  236. data/lib/puppet/transaction.rb +15 -2
  237. data/lib/puppet/type/augeas.rb +1 -1
  238. data/lib/puppet/type/cron.rb +12 -12
  239. data/lib/puppet/type/file/checksum_value.rb +53 -0
  240. data/lib/puppet/type/file/content.rb +26 -111
  241. data/lib/puppet/type/file/data_sync.rb +84 -0
  242. data/lib/puppet/type/file/ensure.rb +17 -14
  243. data/lib/puppet/type/file/selcontext.rb +1 -1
  244. data/lib/puppet/type/file/source.rb +103 -18
  245. data/lib/puppet/type/file.rb +91 -39
  246. data/lib/puppet/type/filebucket.rb +1 -1
  247. data/lib/puppet/type/group.rb +6 -2
  248. data/lib/puppet/type/interface.rb +8 -3
  249. data/lib/puppet/type/macauthorization.rb +1 -1
  250. data/lib/puppet/type/package.rb +6 -0
  251. data/lib/puppet/type/schedule.rb +1 -1
  252. data/lib/puppet/type/stage.rb +1 -1
  253. data/lib/puppet/type/user.rb +19 -17
  254. data/lib/puppet/type/yumrepo.rb +20 -0
  255. data/lib/puppet/type.rb +11 -11
  256. data/lib/puppet/util/autoload.rb +16 -11
  257. data/lib/puppet/util/checksums.rb +74 -31
  258. data/lib/puppet/util/execution.rb +1 -1
  259. data/lib/puppet/util/http_proxy.rb +72 -0
  260. data/lib/puppet/util/log.rb +2 -0
  261. data/lib/puppet/util/logging.rb +43 -1
  262. data/lib/puppet/util/monkey_patches.rb +2 -2
  263. data/lib/puppet/util/multi_match.rb +51 -0
  264. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  265. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  266. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  267. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  268. data/lib/puppet/util/plist.rb +130 -0
  269. data/lib/puppet/util/resource_template.rb +1 -1
  270. data/lib/puppet/util/run_mode.rb +2 -2
  271. data/lib/puppet/util/skip_tags.rb +9 -0
  272. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  273. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  274. data/lib/puppet/util/windows/adsi.rb +65 -28
  275. data/lib/puppet/util/windows/api_types.rb +24 -18
  276. data/lib/puppet/util/windows/com.rb +3 -3
  277. data/lib/puppet/util/windows/error.rb +1 -1
  278. data/lib/puppet/util/windows/file.rb +8 -8
  279. data/lib/puppet/util/windows/principal.rb +190 -0
  280. data/lib/puppet/util/windows/process.rb +78 -11
  281. data/lib/puppet/util/windows/registry.rb +22 -16
  282. data/lib/puppet/util/windows/root_certs.rb +5 -5
  283. data/lib/puppet/util/windows/security.rb +33 -35
  284. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  285. data/lib/puppet/util/windows/sid.rb +84 -15
  286. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  287. data/lib/puppet/util/windows/user.rb +10 -10
  288. data/lib/puppet/util/windows.rb +4 -0
  289. data/lib/puppet/util.rb +109 -22
  290. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  291. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  292. data/lib/puppet/vendor/pathspec/README.md +1 -1
  293. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  294. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  295. data/lib/puppet/version.rb +1 -1
  296. data/lib/puppet.rb +17 -0
  297. data/lib/semver.rb +17 -1
  298. data/man/man5/puppet.conf.5 +12 -12
  299. data/man/man8/extlookup2hiera.8 +1 -1
  300. data/man/man8/puppet-agent.8 +2 -2
  301. data/man/man8/puppet-apply.8 +2 -2
  302. data/man/man8/puppet-ca.8 +2 -2
  303. data/man/man8/puppet-catalog.8 +2 -2
  304. data/man/man8/puppet-cert.8 +2 -2
  305. data/man/man8/puppet-certificate.8 +2 -2
  306. data/man/man8/puppet-certificate_request.8 +2 -2
  307. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  308. data/man/man8/puppet-config.8 +3 -3
  309. data/man/man8/puppet-describe.8 +1 -1
  310. data/man/man8/puppet-device.8 +1 -1
  311. data/man/man8/puppet-doc.8 +1 -1
  312. data/man/man8/puppet-epp.8 +2 -2
  313. data/man/man8/puppet-facts.8 +2 -2
  314. data/man/man8/puppet-file.8 +2 -2
  315. data/man/man8/puppet-filebucket.8 +2 -2
  316. data/man/man8/puppet-help.8 +2 -2
  317. data/man/man8/puppet-inspect.8 +2 -2
  318. data/man/man8/puppet-key.8 +2 -2
  319. data/man/man8/puppet-man.8 +2 -2
  320. data/man/man8/puppet-master.8 +2 -2
  321. data/man/man8/puppet-module.8 +9 -9
  322. data/man/man8/puppet-node.8 +2 -2
  323. data/man/man8/puppet-parser.8 +2 -2
  324. data/man/man8/puppet-plugin.8 +2 -2
  325. data/man/man8/puppet-report.8 +2 -2
  326. data/man/man8/puppet-resource.8 +2 -2
  327. data/man/man8/puppet-resource_type.8 +2 -2
  328. data/man/man8/puppet-status.8 +3 -3
  329. data/man/man8/puppet.8 +1 -1
  330. data/spec/fixtures/module.tar.gz +0 -0
  331. data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
  332. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  333. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  334. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
  335. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  336. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  337. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  338. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  339. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  340. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  341. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  342. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  343. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  344. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  345. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  346. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  347. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  348. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  349. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  350. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  351. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  352. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  353. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  354. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  355. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  356. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  357. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  358. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  359. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  360. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  361. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  362. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  363. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  364. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  365. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  366. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  367. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  368. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  369. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  370. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  371. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  372. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  373. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  374. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  375. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  376. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
  377. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  378. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  379. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  380. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  381. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  382. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  383. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  384. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  385. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  386. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  387. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  388. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  389. data/spec/integration/defaults_spec.rb +14 -2
  390. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  391. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  392. data/spec/integration/node/environment_spec.rb +13 -0
  393. data/spec/integration/parser/collection_spec.rb +8 -0
  394. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  395. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  396. data/spec/integration/parser/undef_param_spec.rb +8 -0
  397. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  398. data/spec/integration/test/test_helper_spec.rb +28 -0
  399. data/spec/integration/transaction/report_spec.rb +16 -0
  400. data/spec/integration/transaction_spec.rb +11 -0
  401. data/spec/integration/type/file_spec.rb +194 -4
  402. data/spec/integration/type/package_spec.rb +5 -1
  403. data/spec/integration/type/tidy_spec.rb +21 -9
  404. data/spec/integration/util/execution_spec.rb +22 -0
  405. data/spec/integration/util/windows/principal_spec.rb +201 -0
  406. data/spec/integration/util/windows/process_spec.rb +31 -0
  407. data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
  408. data/spec/integration/util/windows/security_spec.rb +8 -8
  409. data/spec/integration/util/windows/user_spec.rb +1 -1
  410. data/spec/integration/util_spec.rb +49 -27
  411. data/spec/lib/puppet_spec/compiler.rb +17 -0
  412. data/spec/lib/puppet_spec/files.rb +2 -2
  413. data/spec/lib/puppet_spec/pops.rb +13 -0
  414. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  415. data/spec/shared_contexts/types_setup.rb +96 -0
  416. data/spec/unit/agent_spec.rb +1 -0
  417. data/spec/unit/application/agent_spec.rb +10 -0
  418. data/spec/unit/application/apply_spec.rb +9 -0
  419. data/spec/unit/application/lookup_spec.rb +138 -28
  420. data/spec/unit/configurer/downloader_spec.rb +5 -5
  421. data/spec/unit/configurer_spec.rb +271 -39
  422. data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
  423. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  424. data/spec/unit/defaults_spec.rb +15 -0
  425. data/spec/unit/environments_spec.rb +24 -4
  426. data/spec/unit/face/epp_face_spec.rb +2 -2
  427. data/spec/unit/face/parser_spec.rb +43 -2
  428. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  429. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  430. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  431. data/spec/unit/file_system_spec.rb +26 -0
  432. data/spec/unit/functions/assert_type_spec.rb +36 -2
  433. data/spec/unit/functions/defined_spec.rb +2 -2
  434. data/spec/unit/functions/epp_spec.rb +17 -9
  435. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  436. data/spec/unit/functions/lookup_spec.rb +88 -16
  437. data/spec/unit/functions/regsubst_spec.rb +1 -1
  438. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  439. data/spec/unit/functions/step_spec.rb +113 -0
  440. data/spec/unit/functions/type_spec.rb +35 -0
  441. data/spec/unit/functions4_spec.rb +62 -6
  442. data/spec/unit/hiera/scope_spec.rb +5 -2
  443. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  444. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  445. data/spec/unit/indirector/indirection_spec.rb +1 -1
  446. data/spec/unit/indirector/json_spec.rb +1 -1
  447. data/spec/unit/info_service_spec.rb +94 -32
  448. data/spec/unit/module_spec.rb +14 -0
  449. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  450. data/spec/unit/network/authstore_spec.rb +1 -1
  451. data/spec/unit/network/http/connection_spec.rb +1 -0
  452. data/spec/unit/network/http/pool_spec.rb +30 -0
  453. data/spec/unit/node_spec.rb +8 -0
  454. data/spec/unit/parser/compiler_spec.rb +16 -18
  455. data/spec/unit/parser/scope_spec.rb +28 -11
  456. data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
  457. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  458. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
  459. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  460. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  461. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  462. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  463. data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
  464. data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
  465. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  466. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  467. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  468. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  469. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  470. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  471. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  473. data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
  474. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  475. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  476. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  477. data/spec/unit/pops/types/types_spec.rb +241 -0
  478. data/spec/unit/pops/validator/validator_spec.rb +159 -15
  479. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  480. data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
  481. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  482. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  483. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  484. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  485. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  486. data/spec/unit/provider/package/pip_spec.rb +88 -47
  487. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  488. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  489. data/spec/unit/provider/package/rpm_spec.rb +2 -25
  490. data/spec/unit/provider/package/yum_spec.rb +12 -1
  491. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  492. data/spec/unit/provider/service/debian_spec.rb +6 -24
  493. data/spec/unit/provider/service/init_spec.rb +11 -1
  494. data/spec/unit/provider/service/launchd_spec.rb +18 -25
  495. data/spec/unit/provider/service/systemd_spec.rb +25 -12
  496. data/spec/unit/provider/service/upstart_spec.rb +57 -0
  497. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  498. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  499. data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
  500. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  501. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  502. data/spec/unit/resource/catalog_spec.rb +33 -1
  503. data/spec/unit/resource/type_spec.rb +149 -7
  504. data/spec/unit/resource_spec.rb +99 -50
  505. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  506. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  507. data/spec/unit/transaction/report_spec.rb +27 -0
  508. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  509. data/spec/unit/transaction_spec.rb +5 -0
  510. data/spec/unit/type/file/checksum_spec.rb +6 -0
  511. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  512. data/spec/unit/type/file/content_spec.rb +12 -193
  513. data/spec/unit/type/file/source_spec.rb +211 -119
  514. data/spec/unit/type/file_spec.rb +133 -34
  515. data/spec/unit/type/interface_spec.rb +32 -0
  516. data/spec/unit/type/macauthorization_spec.rb +4 -1
  517. data/spec/unit/type/yumrepo_spec.rb +2 -2
  518. data/spec/unit/util/filetype_spec.rb +1 -1
  519. data/spec/unit/util/http_proxy_spec.rb +2 -2
  520. data/spec/unit/util/log/destinations_spec.rb +0 -2
  521. data/spec/unit/util/logging_spec.rb +69 -0
  522. data/spec/unit/util/multi_match_spec.rb +39 -0
  523. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  524. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  525. data/spec/unit/util/plist_spec.rb +110 -0
  526. data/spec/unit/util/resource_template_spec.rb +2 -2
  527. data/spec/unit/util/run_mode_spec.rb +27 -3
  528. data/spec/unit/util/windows/adsi_spec.rb +46 -38
  529. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  530. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  531. data/spec/unit/util/windows/sid_spec.rb +48 -11
  532. data/spec/unit/util_spec.rb +123 -13
  533. data/tasks/cfpropertylist.rake +15 -0
  534. metadata +3342 -3195
  535. data/lib/puppet/vendor/load_plist.rb +0 -1
  536. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  537. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  538. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  539. data/lib/puppet/vendor/plist/README +0 -36
  540. data/lib/puppet/vendor/plist/Rakefile +0 -144
  541. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  542. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  543. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  544. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  545. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  546. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  547. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  548. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  549. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  550. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  551. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  552. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  553. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  554. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  555. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  556. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  557. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  558. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  559. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  560. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -240,9 +240,26 @@ describe Puppet::Resource::Type do
240
240
  end
241
241
 
242
242
  describe "when setting its parameters in the scope" do
243
+ let(:parser) { Puppet::Pops::Parser::Parser.new() }
244
+
245
+ def wrap3x(expression)
246
+ Puppet::Parser::AST::PopsBridge::Expression.new(:value => expression.current)
247
+ end
248
+
249
+ def parse_expression(expr_string)
250
+ wrap3x(parser.parse_string(expr_string))
251
+ end
252
+
253
+ def number_expression(number)
254
+ wrap3x(Puppet::Pops::Model::Factory.NUMBER(number))
255
+ end
256
+
243
257
  def variable_expression(name)
244
- varexpr = Puppet::Pops::Model::Factory.QNAME(name).var().current
245
- Puppet::Parser::AST::PopsBridge::Expression.new(:value => varexpr)
258
+ wrap3x(Puppet::Pops::Model::Factory.QNAME(name).var())
259
+ end
260
+
261
+ def matchref_expression(number)
262
+ wrap3x(Puppet::Pops::Model::Factory.NUMBER(number).var())
246
263
  end
247
264
 
248
265
  before do
@@ -272,6 +289,134 @@ describe Puppet::Resource::Type do
272
289
  expect(@scope['foo']).to eq('foobar')
273
290
  end
274
291
 
292
+ context 'referencing a variable to the left of the default expression' do
293
+ it 'is possible when the referenced variable uses a default' do
294
+ @type.set_arguments({
295
+ :first => number_expression(10),
296
+ :second => variable_expression('first'),
297
+ })
298
+ @type.set_resource_parameters(@resource, @scope)
299
+
300
+ expect(@scope['first']).to eq(10)
301
+ expect(@scope['second']).to eq(10)
302
+ end
303
+
304
+ it 'is possible when the referenced variable is given a value' do
305
+ @type.set_arguments({
306
+ :first => number_expression(10),
307
+ :second => variable_expression('first'),
308
+ })
309
+ @resource[:first] = 2
310
+ @type.set_resource_parameters(@resource, @scope)
311
+
312
+ expect(@scope['first']).to eq(2)
313
+ expect(@scope['second']).to eq(2)
314
+ end
315
+
316
+ it 'is possible when the referenced variable is an array produced by match function' do
317
+ @type.set_arguments({
318
+ :first => parse_expression("'hello'.match(/(h)(.*)/)"),
319
+ :second => parse_expression('$first[0]'),
320
+ :third => parse_expression('$first[1]')
321
+ })
322
+ @type.set_resource_parameters(@resource, @scope)
323
+
324
+ expect(@scope['first']).to eq(['hello', 'h', 'ello'])
325
+ expect(@scope['second']).to eq('hello')
326
+ expect(@scope['third']).to eq('h')
327
+ end
328
+
329
+ it 'does not clobber a given value' do
330
+ @type.set_arguments({
331
+ :first => number_expression(10),
332
+ :second => variable_expression('first'),
333
+ })
334
+ @resource[:first] = 2
335
+ @resource[:second] = 5
336
+ @type.set_resource_parameters(@resource, @scope)
337
+
338
+ expect(@scope['first']).to eq(2)
339
+ expect(@scope['second']).to eq(5)
340
+ end
341
+ end
342
+
343
+ context 'referencing a variable to the right of the default expression' do
344
+ before :each do
345
+ @type.set_arguments({
346
+ :first => number_expression(10),
347
+ :second => variable_expression('third'),
348
+ :third => number_expression(20)
349
+ })
350
+ end
351
+
352
+ it 'no error is raised when no defaults are evaluated' do
353
+ @resource[:first] = 1
354
+ @resource[:second] = 2
355
+ @resource[:third] = 3
356
+ @type.set_resource_parameters(@resource, @scope)
357
+
358
+ expect(@scope['first']).to eq(1)
359
+ expect(@scope['second']).to eq(2)
360
+ expect(@scope['third']).to eq(3)
361
+ end
362
+
363
+ it 'no error is raised unless the referencing default expression is evaluated' do
364
+ @resource[:second] = 2
365
+ @type.set_resource_parameters(@resource, @scope)
366
+
367
+ expect(@scope['first']).to eq(10)
368
+ expect(@scope['second']).to eq(2)
369
+ expect(@scope['third']).to eq(20)
370
+ end
371
+
372
+ it 'fails when the default expression is evaluated' do
373
+ @resource[:first] = 1
374
+ expect { @type.set_resource_parameters(@resource, @scope) }.to raise_error(Puppet::Error, 'default expression for $second tries to illegally access not yet evaluated $third')
375
+ end
376
+ end
377
+
378
+ it 'does not allow a variable to be referenced from its own default expression' do
379
+ @type.set_arguments({
380
+ :first => variable_expression('first')
381
+ })
382
+ expect { @type.set_resource_parameters(@resource, @scope) }.to raise_error(Puppet::Error, 'default expression for $first tries to illegally access not yet evaluated $first')
383
+ end
384
+
385
+ context 'when using match scope' do
386
+ it '$n evaluates to undef at the top level' do
387
+ @type.set_arguments({
388
+ :first => matchref_expression('0'),
389
+ :second => matchref_expression('1'),
390
+ })
391
+ @type.set_resource_parameters(@resource, @scope)
392
+
393
+ expect(@scope).not_to include('first')
394
+ expect(@scope).not_to include('second')
395
+ end
396
+
397
+ it 'a match scope to the left of a parameter is not visible to it' do
398
+ @type.set_arguments({
399
+ :first => parse_expression("['hello' =~ /(h)(.*)/, $1, $2]"),
400
+ :second => matchref_expression('1'),
401
+ })
402
+ @type.set_resource_parameters(@resource, @scope)
403
+
404
+ expect(@scope['first']).to eq([true, 'h', 'ello'])
405
+ expect(@scope['second']).to be_nil
406
+ end
407
+
408
+ it 'match scopes nests per parameter' do
409
+ @type.set_arguments({
410
+ :first => parse_expression("['hi' =~ /(h)(.*)/, $1, if 'foo' =~ /f(oo)/ { $1 }, $1, $2]"),
411
+ :second => matchref_expression('0'),
412
+ })
413
+ @type.set_resource_parameters(@resource, @scope)
414
+
415
+ expect(@scope['first']).to eq([true, 'h', 'oo', 'h', 'i'])
416
+ expect(@scope['second']).to be_nil
417
+ end
418
+ end
419
+
275
420
  it "should set each of the resource's parameters as variables in the scope" do
276
421
  @type.set_arguments :foo => nil, :boo => nil
277
422
  @resource[:foo] = "bar"
@@ -432,10 +577,9 @@ describe Puppet::Resource::Type do
432
577
  @scope.expects(:newscope).with(:source => @type, :namespace => '', :resource => @resource).returns subscope
433
578
 
434
579
  elevel = 876
435
- subscope.expects(:ephemeral_level).returns elevel
580
+ subscope.expects(:with_guarded_scope).yields
436
581
  subscope.expects(:ephemeral_from).with(match, nil, nil).returns subscope
437
582
  code.expects(:safeevaluate).with(subscope)
438
- subscope.expects(:unset_ephemeral_var).with(elevel)
439
583
 
440
584
  # Just to keep the stub quiet about intermediate calls
441
585
  @type.expects(:set_resource_parameters).with(@resource, subscope)
@@ -484,9 +628,7 @@ describe Puppet::Resource::Type do
484
628
  it "should evaluate the AST code if any is provided" do
485
629
  code = stub 'code'
486
630
  @type.stubs(:code).returns code
487
- subscope = stub_everything("subscope", :compiler => @compiler)
488
- @scope.stubs(:newscope).returns subscope
489
- code.expects(:safeevaluate).with subscope
631
+ code.expects(:safeevaluate).with kind_of(Puppet::Parser::Scope)
490
632
 
491
633
  @type.evaluate_code(@resource)
492
634
  end
@@ -315,7 +315,10 @@ describe Puppet::Resource do
315
315
  let(:environment_name) { "testing env" }
316
316
  let(:fact_values) { { :a => 1 } }
317
317
  let(:port) { Puppet::Parser::AST::Leaf.new(:value => '80') }
318
- let(:apache) { Puppet::Resource::Type.new(:hostclass, 'apache', :arguments => { 'port' => port }) }
318
+
319
+ def inject_and_set_defaults(resource, scope)
320
+ resource.resource_type.set_resource_parameters(resource, scope)
321
+ end
319
322
 
320
323
  before do
321
324
  environment.known_resource_types.add(apache)
@@ -325,72 +328,118 @@ describe Puppet::Resource do
325
328
  scope.stubs(:facts).returns(Puppet::Node::Facts.new("facts", fact_values))
326
329
  end
327
330
 
328
- context "when no value is provided" do
329
- let(:resource) do
330
- Puppet::Parser::Resource.new("class", "apache", :scope => scope)
331
- end
331
+ context 'with a default value expression' do
332
+ let(:apache) { Puppet::Resource::Type.new(:hostclass, 'apache', :arguments => { 'port' => port }) }
332
333
 
333
- it "should query the data_binding terminus using a namespaced key" do
334
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
335
- Puppet::DataBinding.indirection.expects(:find).with(
336
- 'apache::port', all_of(has_key(:environment), has_key(:variables)))
337
- resource.set_default_parameters(scope)
338
- end
334
+ context "when no value is provided" do
335
+ let(:resource) do
336
+ Puppet::Parser::Resource.new("class", "apache", :scope => scope)
337
+ end
339
338
 
340
- it "should use the value from the data_binding terminus" do
341
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
342
- Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns('443')
339
+ it "should query the data_binding terminus using a namespaced key" do
340
+ Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
341
+ Puppet::DataBinding.indirection.expects(:find).with(
342
+ 'apache::port', all_of(has_key(:environment), has_key(:variables)))
343
+ inject_and_set_defaults(resource, scope)
344
+ end
343
345
 
344
- resource.set_default_parameters(scope)
346
+ it "should use the value from the data_binding terminus" do
347
+ Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
348
+ Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns('443')
345
349
 
346
- expect(resource[:port]).to eq('443')
347
- end
350
+ inject_and_set_defaults(resource, scope)
348
351
 
349
- it "should use the default value if the data_binding terminus returns nil" do
350
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
351
- Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns(nil)
352
+ expect(resource[:port]).to eq('443')
353
+ end
352
354
 
353
- resource.set_default_parameters(scope)
355
+ it 'should use the default value if no value is found using the data_binding terminus' do
356
+ Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
357
+ Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).throws(:no_such_key)
354
358
 
355
- expect(resource[:port]).to eq('80')
356
- end
359
+ inject_and_set_defaults(resource, scope)
357
360
 
358
- it "should fail with error message about data binding on a hiera failure" do
359
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
360
- Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).raises(Puppet::DataBinding::LookupError, 'Forgettabotit')
361
- expect {
362
- resource.set_default_parameters(scope)
363
- }.to raise_error(Puppet::Error, /Error from DataBinding 'hiera' while looking up 'apache::port':.*Forgettabotit/)
364
- end
361
+ expect(resource[:port]).to eq('80')
362
+ end
365
363
 
366
- end
364
+ it 'should use the default value if an undef value is found using the data_binding terminus' do
365
+ Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
366
+ Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns(nil)
367
367
 
368
- context "when a value is provided" do
369
- let(:port_parameter) do
370
- Puppet::Parser::Resource::Param.new(
371
- { :name => 'port', :value => '8080' }
372
- )
373
- end
368
+ inject_and_set_defaults(resource, scope)
369
+
370
+ expect(resource[:port]).to eq('80')
371
+ end
374
372
 
375
- let(:resource) do
376
- Puppet::Parser::Resource.new("class", "apache", :scope => scope,
377
- :parameters => [port_parameter])
373
+ it "should fail with error message about data binding on a hiera failure" do
374
+ Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
375
+ Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).raises(Puppet::DataBinding::LookupError, 'Forgettabotit')
376
+ expect {
377
+ inject_and_set_defaults(resource, scope)
378
+ }.to raise_error(Puppet::Error, /Lookup of key 'apache::port' failed: Forgettabotit/)
379
+ end
378
380
  end
379
381
 
380
- it "should not query the data_binding terminus" do
381
- Puppet::DataBinding.indirection.expects(:find).never
382
- resource.set_default_parameters(scope)
382
+ context "when a value is provided" do
383
+ let(:port_parameter) do
384
+ Puppet::Parser::Resource::Param.new(
385
+ { :name => 'port', :value => '8080' }
386
+ )
387
+ end
388
+
389
+ let(:resource) do
390
+ Puppet::Parser::Resource.new("class", "apache", :scope => scope,
391
+ :parameters => [port_parameter])
392
+ end
393
+
394
+ it "should not query the data_binding terminus" do
395
+ Puppet::DataBinding.indirection.expects(:find).never
396
+ inject_and_set_defaults(resource, scope)
397
+ end
398
+
399
+ it "should not query the injector" do
400
+ compiler.injector.expects(:find).never
401
+ inject_and_set_defaults(resource, scope)
402
+ end
403
+
404
+ it "should use the value provided" do
405
+ Puppet::DataBinding.indirection.expects(:find).never
406
+ expect(resource.set_default_parameters(scope)).to eq([])
407
+ expect(resource[:port]).to eq('8080')
408
+ end
409
+
410
+ it "should use the value from the data_binding terminus when provided value is undef" do
411
+ Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
412
+ Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns('443')
413
+
414
+ rs = Puppet::Parser::Resource.new("class", "apache", :scope => scope,
415
+ :parameters => [Puppet::Parser::Resource::Param.new({ :name => 'port', :value => nil })])
416
+
417
+ rs.resource_type.set_resource_parameters(rs, scope)
418
+ expect(rs[:port]).to eq('443')
419
+ end
383
420
  end
421
+ end
422
+
423
+ context 'without a default value expression' do
424
+ let(:apache) { Puppet::Resource::Type.new(:hostclass, 'apache', :arguments => { 'port' => nil }) }
425
+ let(:resource) { Puppet::Parser::Resource.new("class", "apache", :scope => scope) }
426
+
427
+ it "should use the value from the data_binding terminus" do
428
+ Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
429
+ Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns('443')
384
430
 
385
- it "should not query the injector" do
386
- compiler.injector.expects(:find).never
387
- resource.set_default_parameters(scope)
431
+ inject_and_set_defaults(resource, scope)
432
+
433
+ expect(resource[:port]).to eq('443')
388
434
  end
389
435
 
390
- it "should use the value provided" do
391
- Puppet::DataBinding.indirection.expects(:find).never
392
- expect(resource.set_default_parameters(scope)).to eq([])
393
- expect(resource[:port]).to eq('8080')
436
+ it "should use an undef value from the data_binding terminus" do
437
+ Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
438
+ Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns(nil)
439
+
440
+ inject_and_set_defaults(resource, scope)
441
+
442
+ expect(resource[:port]).to be_nil
394
443
  end
395
444
  end
396
445
  end
@@ -39,6 +39,19 @@ describe Puppet::Settings::EnvironmentConf do
39
39
  expect(envconf.environment_timeout).to eq(180)
40
40
  end
41
41
 
42
+ it "reads a static_catalogs from config" do
43
+ setup_environment_conf(config, :static_catalogs => true)
44
+
45
+ expect(envconf.static_catalogs).to eq(true)
46
+ end
47
+
48
+ it "can retrieve untruthy settings" do
49
+ Puppet[:static_catalogs] = true
50
+ setup_environment_conf(config, :static_catalogs => false)
51
+
52
+ expect(envconf.static_catalogs).to eq(false)
53
+ end
54
+
42
55
  it "can retrieve raw settings" do
43
56
  setup_environment_conf(config, :manifest => 'manifest.pp')
44
57
 
@@ -64,10 +77,14 @@ describe Puppet::Settings::EnvironmentConf do
64
77
  expect(envconf.config_version).to be_nil
65
78
  end
66
79
 
67
- it "returns a defult of 0 for environment_timeout when config has none" do
80
+ it "returns a default of 0 for environment_timeout when config has none" do
68
81
  expect(envconf.environment_timeout).to eq(0)
69
82
  end
70
83
 
84
+ it "returns default of true for static_catalogs when config has none" do
85
+ expect(envconf.static_catalogs).to eq(true)
86
+ end
87
+
71
88
  it "can still retrieve raw setting" do
72
89
  expect(envconf.raw_setting(:manifest)).to be_nil
73
90
  end
@@ -105,14 +105,14 @@ describe Puppet::SSL::CertificateRevocationList do
105
105
  end
106
106
 
107
107
  it "returns the last update time in UTC" do
108
- # http://tools.ietf.org/html/rfc5280#section-5.1.2.4
108
+ # https://tools.ietf.org/html/rfc5280#section-5.1.2.4
109
109
  thisUpdate = @crl.generate(@cert, @key).last_update
110
110
  expect(thisUpdate).to be_utc
111
111
  expects_time_close_to_now(thisUpdate)
112
112
  end
113
113
 
114
114
  it "returns the next update time in UTC 5 years from now" do
115
- # http://tools.ietf.org/html/rfc5280#section-5.1.2.5
115
+ # https://tools.ietf.org/html/rfc5280#section-5.1.2.5
116
116
  nextUpdate = @crl.generate(@cert, @key).next_update
117
117
  expect(nextUpdate).to be_utc
118
118
  expects_time_close_to_five_years(nextUpdate)
@@ -179,7 +179,7 @@ describe Puppet::SSL::CertificateRevocationList do
179
179
  end
180
180
 
181
181
  it "adds a non-critical CRL reason specifying key compromise by default" do
182
- # http://tools.ietf.org/html/rfc5280#section-5.3.1
182
+ # https://tools.ietf.org/html/rfc5280#section-5.3.1
183
183
  serial = 1
184
184
  @crl.revoke(serial, @key)
185
185
 
@@ -52,6 +52,24 @@ describe Puppet::Transaction::Report do
52
52
  expect(report.transaction_uuid).to eq("some transaction uuid")
53
53
  end
54
54
 
55
+ it "should be able to set code_id" do
56
+ report = Puppet::Transaction::Report.new("inspect")
57
+ report.code_id = "some code id"
58
+ expect(report.code_id).to eq("some code id")
59
+ end
60
+
61
+ it "should be able to set catalog_uuid" do
62
+ report = Puppet::Transaction::Report.new("inspect")
63
+ report.catalog_uuid = "some catalog uuid"
64
+ expect(report.catalog_uuid).to eq("some catalog uuid")
65
+ end
66
+
67
+ it "should be able to set cached_catalog_status" do
68
+ report = Puppet::Transaction::Report.new("inspect")
69
+ report.cached_catalog_status = "explicitly_requested"
70
+ expect(report.cached_catalog_status).to eq("explicitly_requested")
71
+ end
72
+
55
73
  it "should take 'environment' as an argument" do
56
74
  expect(Puppet::Transaction::Report.new("inspect", "some configuration version", "some environment").environment).to eq("some environment")
57
75
  end
@@ -419,6 +437,9 @@ describe Puppet::Transaction::Report do
419
437
  expect(tripped.time.to_i).to eq(report.time.to_i)
420
438
  expect(tripped.configuration_version).to eq(report.configuration_version)
421
439
  expect(tripped.transaction_uuid).to eq(report.transaction_uuid)
440
+ expect(tripped.code_id).to eq(report.code_id)
441
+ expect(tripped.catalog_uuid).to eq(report.catalog_uuid)
442
+ expect(tripped.cached_catalog_status).to eq(report.cached_catalog_status)
422
443
  expect(tripped.report_format).to eq(report.report_format)
423
444
  expect(tripped.puppet_version).to eq(report.puppet_version)
424
445
  expect(tripped.kind).to eq(report.kind)
@@ -485,6 +506,9 @@ describe Puppet::Transaction::Report do
485
506
  report = Puppet::Transaction::Report.new('apply', 1357986, 'test_environment', "df34516e-4050-402d-a166-05b03b940749")
486
507
  report << Puppet::Util::Log.new(:level => :warning, :message => "log message")
487
508
  report.add_times("timing", 4)
509
+ report.code_id = "some code id"
510
+ report.catalog_uuid = "some catalog uuid"
511
+ report.cached_catalog_status = "not_used"
488
512
  report.add_resource_status(status)
489
513
  report.finalize_report
490
514
  report
@@ -498,6 +522,9 @@ describe Puppet::Transaction::Report do
498
522
  report = Puppet::Transaction::Report.new('apply', 1357986, 'test_environment', "df34516e-4050-402d-a166-05b03b940749")
499
523
  report << Puppet::Util::Log.new(:level => :warning, :message => "log message")
500
524
  report.add_times("timing", 4)
525
+ report.code_id = "some code id"
526
+ report.catalog_uuid = "some catalog uuid"
527
+ report.cached_catalog_status = "not_used"
501
528
  report.add_resource_status(status)
502
529
  report.finalize_report
503
530
  report
@@ -418,53 +418,6 @@ describe Puppet::Transaction::ResourceHarness do
418
418
  end
419
419
  end
420
420
 
421
- describe "when applying changes" do
422
- it "should not apply changes if allow_changes?() returns false" do
423
- test_file = tmpfile('foo')
424
- resource = Puppet::Type.type(:file).new :path => test_file, :backup => false, :ensure => :file
425
- resource.expects(:err).never # make sure no exceptions get swallowed
426
- @harness.expects(:allow_changes?).with(resource).returns false
427
- status = @harness.evaluate(resource)
428
- expect(Puppet::FileSystem.exist?(test_file)).to eq(false)
429
- end
430
- end
431
-
432
- describe "when determining whether the resource can be changed" do
433
- before do
434
- @resource.stubs(:purging?).returns true
435
- @resource.stubs(:deleting?).returns true
436
- end
437
-
438
- it "should be true if the resource is not being purged" do
439
- @resource.expects(:purging?).returns false
440
- expect(@harness).to be_allow_changes(@resource)
441
- end
442
-
443
- it "should be true if the resource is not being deleted" do
444
- @resource.expects(:deleting?).returns false
445
- expect(@harness).to be_allow_changes(@resource)
446
- end
447
-
448
- it "should be true if the resource has no dependents" do
449
- @harness.relationship_graph.expects(:dependents).with(@resource).returns []
450
- expect(@harness).to be_allow_changes(@resource)
451
- end
452
-
453
- it "should be true if all dependents are being deleted" do
454
- dep = stub 'dependent', :deleting? => true
455
- @harness.relationship_graph.expects(:dependents).with(@resource).returns [dep]
456
- @resource.expects(:purging?).returns true
457
- expect(@harness).to be_allow_changes(@resource)
458
- end
459
-
460
- it "should be false if the resource's dependents are not being deleted" do
461
- dep = stub 'dependent', :deleting? => false, :ref => "myres"
462
- @resource.expects(:warning)
463
- @harness.relationship_graph.expects(:dependents).with(@resource).returns [dep]
464
- expect(@harness).not_to be_allow_changes(@resource)
465
- end
466
- end
467
-
468
421
  describe "when finding the schedule" do
469
422
  before do
470
423
  @catalog = Puppet::Resource::Catalog.new
@@ -365,6 +365,11 @@ describe Puppet::Transaction do
365
365
  expect(@transaction).to be_skip(@resource)
366
366
  end
367
367
 
368
+ it "should skip resources tagged with the skip tags" do
369
+ @transaction.stubs(:skip_tags?).returns(true)
370
+ expect(@transaction).to be_skip(@resource)
371
+ end
372
+
368
373
  it "should skip unscheduled resources" do
369
374
  @transaction.stubs(:scheduled?).returns(false)
370
375
  expect(@transaction).to be_skip(@resource)
@@ -76,4 +76,10 @@ describe checksum do
76
76
  expect(sum).to eq("something")
77
77
  end
78
78
  end
79
+
80
+ it 'should use values allowed by the supported_checksum_types setting' do
81
+ values = checksum.value_collection.values.reject {|v| v == :none}.map {|v| v.to_s}
82
+ Puppet.settings[:supported_checksum_types] = values
83
+ expect(Puppet.settings[:supported_checksum_types]).to eq(values)
84
+ end
79
85
  end