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
@@ -438,19 +438,22 @@ class Puppet::Resource
438
438
  end
439
439
 
440
440
  missing_arguments.collect do |param, default|
441
- # Using 'send' since this private method moved from here to type. The caller method is deprecated
442
- # and doesn't really motivate making the callee public
443
- external_value = resource_type.send(:lookup_external_default_for, param, scope)
444
-
445
- if external_value.nil? && default.nil?
446
- next
447
- elsif external_value.nil?
448
- value = default.safeevaluate(scope)
449
- else
450
- value = external_value
441
+ rtype = resource_type
442
+ if rtype.type == :hostclass
443
+ using_bound_value = false
444
+ catch(:no_such_key) do
445
+ bound_value = Puppet::Pops::Lookup.search_and_merge("#{rtype.name}::#{param}", Puppet::Pops::Lookup::Invocation.new(scope), nil)
446
+ # Assign bound value but don't let an undef trump a default expression
447
+ unless bound_value.nil? && !default.nil?
448
+ self[param.to_sym] = bound_value
449
+ using_bound_value = true
450
+ end
451
+ end
452
+ end
453
+ unless using_bound_value
454
+ next if default.nil?
455
+ self[param.to_sym] = default.safeevaluate(scope)
451
456
  end
452
-
453
- self[param.to_sym] = value
454
457
  param
455
458
  end.compact
456
459
  end
@@ -82,7 +82,7 @@ private
82
82
  def unique_sections_in(ini, file, allowed_section_names)
83
83
  ini.section_lines.collect do |section|
84
84
  if !allowed_section_names.empty? && !allowed_section_names.include?(section.name)
85
- raise(Puppet::Error, "Illegal section '#{section.name}' in config file #{file} at line #{section.line_number}. The only valid puppet.conf sections are: [#{allowed_section_names.join(", ")}]. Please use the directory environments feature to specify environments. (See http://docs.puppetlabs.com/puppet/latest/reference/environments.html)")
85
+ raise(Puppet::Error, "Illegal section '#{section.name}' in config file #{file} at line #{section.line_number}. The only valid puppet.conf sections are: [#{allowed_section_names.join(", ")}]. Please use the directory environments feature to specify environments. (See https://docs.puppetlabs.com/puppet/latest/reference/environments.html)")
86
86
  end
87
87
  section.name
88
88
  end.uniq
@@ -3,7 +3,7 @@
3
3
  class Puppet::Settings::EnvironmentConf
4
4
 
5
5
  ENVIRONMENT_CONF_ONLY_SETTINGS = [:modulepath, :manifest, :config_version].freeze
6
- VALID_SETTINGS = (ENVIRONMENT_CONF_ONLY_SETTINGS + [:environment_timeout, :environment_data_provider]).freeze
6
+ VALID_SETTINGS = (ENVIRONMENT_CONF_ONLY_SETTINGS + [:environment_timeout, :environment_data_provider, :static_catalogs]).freeze
7
7
 
8
8
  # Given a path to a directory environment, attempts to load and parse an
9
9
  # environment.conf in ini format, and return an EnvironmentConf instance.
@@ -39,8 +39,8 @@ class Puppet::Settings::EnvironmentConf
39
39
  # Configuration values are exactly those returned by the environment object,
40
40
  # without interpolation. This is a special case for the default configured
41
41
  # environment returned by the Puppet::Environments::StaticPrivate loader.
42
- def self.static_for(environment, environment_timeout = 0)
43
- Static.new(environment, environment_timeout)
42
+ def self.static_for(environment, environment_timeout = 0, static_catalogs = false)
43
+ Static.new(environment, environment_timeout, static_catalogs)
44
44
  end
45
45
 
46
46
  attr_reader :section, :path_to_env, :global_modulepath
@@ -108,6 +108,12 @@ class Puppet::Settings::EnvironmentConf
108
108
  end
109
109
  end
110
110
 
111
+ def static_catalogs
112
+ get_setting(:static_catalogs, Puppet.settings.value(:static_catalogs)) do |value|
113
+ value
114
+ end
115
+ end
116
+
111
117
  def config_version
112
118
  get_setting(:config_version) do |config_version|
113
119
  absolute(config_version)
@@ -141,7 +147,7 @@ class Puppet::Settings::EnvironmentConf
141
147
 
142
148
  def get_setting(setting_name, default = nil)
143
149
  value = raw_setting(setting_name)
144
- value ||= default
150
+ value = default if value.nil?
145
151
  yield value
146
152
  end
147
153
 
@@ -161,10 +167,12 @@ class Puppet::Settings::EnvironmentConf
161
167
  class Static
162
168
  attr_reader :environment_timeout
163
169
  attr_reader :environment_data_provider
170
+ attr_reader :static_catalogs
164
171
 
165
- def initialize(environment, environment_timeout, environment_data_provider = 'none')
172
+ def initialize(environment, environment_timeout, static_catalogs, environment_data_provider = 'none')
166
173
  @environment = environment
167
174
  @environment_timeout = environment_timeout
175
+ @static_catalogs = static_catalogs
168
176
  @environment_data_provider = environment_data_provider
169
177
  end
170
178
 
@@ -1077,7 +1077,7 @@ Generated on #{Time.now}.
1077
1077
  #
1078
1078
  # @api private
1079
1079
  # @todo this code duplicates {Puppet::Util::RunMode#which_dir} as described
1080
- # in {http://projects.puppetlabs.com/issues/16637 #16637}
1080
+ # in {https://projects.puppetlabs.com/issues/16637 #16637}
1081
1081
  def which_configuration_file
1082
1082
  if explicit_config_file? or Puppet.features.root? then
1083
1083
  return main_config_file
@@ -62,7 +62,7 @@ module Puppet::SSL::CertificateFactory
62
62
  # extensions to.
63
63
  # @param csr [OpenSSL::X509::Request] The CSR associated with the given
64
64
  # certificate, which may specify requested extensions for the given cert.
65
- # See http://tools.ietf.org/html/rfc2985 Section 5.4.2 Extension request
65
+ # See https://tools.ietf.org/html/rfc2985 Section 5.4.2 Extension request
66
66
  # @param issuer [OpenSSL::X509::Certificate, OpenSSL::X509::Request] An X509 CSR
67
67
  # if this is a self signed certificate, or the X509 certificate of the CA if
68
68
  # this is a CA signed certificate.
@@ -100,7 +100,7 @@ module Puppet::SSL::CertificateFactory
100
100
  # something went wrong up there. --daniel 2011-10-11
101
101
  defaults = { "nsComment" => "Puppet Ruby/OpenSSL Internal Certificate" }
102
102
 
103
- # See http://www.openssl.org/docs/apps/x509v3_config.html
103
+ # See https://www.openssl.org/docs/apps/x509v3_config.html
104
104
  # for information about the special meanings of 'hash', 'keyid', 'issuer'
105
105
  override = {
106
106
  "subjectKeyIdentifier" => "hash",
@@ -126,7 +126,7 @@ module Puppet::SSL::CertificateFactory
126
126
  # complaint that the issuer keyid can't be fetched, which breaks all
127
127
  # sorts of things in our test suite and, e.g., bootstrapping the CA.
128
128
  #
129
- # http://tools.ietf.org/html/rfc5280#section-4.2.1.1 says that, to be a
129
+ # https://tools.ietf.org/html/rfc5280#section-4.2.1.1 says that, to be a
130
130
  # conforming CA we MAY omit the field if we are self-signed, which I
131
131
  # think gives us a pass in the specific case.
132
132
  #
@@ -23,7 +23,7 @@ require 'puppet/ssl/certificate_signer'
23
23
  #
24
24
  # This behavior is dictated by PKCS#9/RFC 2985 section 5.4.2.
25
25
  #
26
- # @see http://tools.ietf.org/html/rfc2985 "RFC 2985 Section 5.4.2 Extension request"
26
+ # @see https://tools.ietf.org/html/rfc2985 "RFC 2985 Section 5.4.2 Extension request"
27
27
  #
28
28
  class Puppet::SSL::CertificateRequest < Puppet::SSL::Base
29
29
  wraps OpenSSL::X509::Request
@@ -193,7 +193,7 @@ DOC
193
193
  #
194
194
  # The format of CSR attributes is specified in PKCS#10/RFC 2986
195
195
  #
196
- # @see http://tools.ietf.org/html/rfc2986 "RFC 2986 Certification Request Syntax Specification"
196
+ # @see https://tools.ietf.org/html/rfc2986 "RFC 2986 Certification Request Syntax Specification"
197
197
  #
198
198
  # @api public
199
199
  #
@@ -289,8 +289,8 @@ DOC
289
289
  # that in turn holds the elements. This is why we have to unpack an array
290
290
  # every time we unpack a Set/Seq.
291
291
  #
292
- # @see http://tools.ietf.org/html/rfc2985#ref-10 5.4.2 CSR Extension Request structure
293
- # @see http://tools.ietf.org/html/rfc5280 4.1 Certificate Extension structure
292
+ # @see https://tools.ietf.org/html/rfc2985#ref-10 5.4.2 CSR Extension Request structure
293
+ # @see https://tools.ietf.org/html/rfc5280 4.1 Certificate Extension structure
294
294
  #
295
295
  # @api private
296
296
  #
@@ -1,6 +1,6 @@
1
1
  # Take care of signing a certificate in a FIPS 140-2 compliant manner.
2
2
  #
3
- # @see http://projects.puppetlabs.com/issues/17295
3
+ # @see https://projects.puppetlabs.com/issues/17295
4
4
  #
5
5
  # @api private
6
6
  class Puppet::SSL::CertificateSigner
@@ -48,7 +48,7 @@ class Puppet::SSL::Validator::DefaultValidator #< class Puppet::SSL::Validator
48
48
  # chain being verified.
49
49
  #
50
50
  # From the [OpenSSL
51
- # documentation](http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html):
51
+ # documentation](https://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html):
52
52
  # The `verify_callback` function is used to control the behaviour when the
53
53
  # SSL_VERIFY_PEER flag is set. It must be supplied by the application and
54
54
  # receives two arguments: preverify_ok indicates, whether the verification of
@@ -121,7 +121,13 @@ module Puppet::Test
121
121
  end
122
122
 
123
123
  # The process environment is a shared, persistent resource.
124
- $old_env = ENV.to_hash
124
+ # Can't use Puppet.features.microsoft_windows? as it may be mocked out in a test. This can cause test recurring test failures
125
+ if (!!File::ALT_SEPARATOR)
126
+ mode = :windows
127
+ else
128
+ mode = :posix
129
+ end
130
+ $old_env = Puppet::Util.get_environment(mode)
125
131
 
126
132
  # So is the load_path
127
133
  $old_load_path = $LOAD_PATH.dup
@@ -171,13 +177,19 @@ module Puppet::Test
171
177
  end
172
178
  $saved_indirection_state = nil
173
179
 
180
+ # Can't use Puppet.features.microsoft_windows? as it may be mocked out in a test. This can cause test recurring test failures
181
+ if (!!File::ALT_SEPARATOR)
182
+ mode = :windows
183
+ else
184
+ mode = :posix
185
+ end
174
186
  # Restore the global process environment. Can't just assign because this
175
187
  # is a magic variable, sadly, and doesn't do that™. It is sufficiently
176
188
  # faster to use the compare-then-set model to avoid excessive work that it
177
189
  # justifies the complexity. --daniel 2012-03-15
178
- unless ENV.to_hash == $old_env
179
- ENV.clear
180
- $old_env.each {|k, v| ENV[k] = v }
190
+ unless Puppet::Util.get_environment(mode) == $old_env
191
+ Puppet::Util.clear_environment(mode)
192
+ $old_env.each {|k, v| Puppet::Util.set_env(k, v, mode) }
181
193
  end
182
194
 
183
195
  # Restore the load_path late, to avoid messing with stubs from the test.
@@ -22,9 +22,10 @@ class Puppet::Transaction::AdditionalResourceGenerator
22
22
  end
23
23
  return unless generated
24
24
  generated = [generated] unless generated.is_a?(Array)
25
- generated.collect do |res|
25
+ generated.collect! do |res|
26
26
  @catalog.resource(res.ref) || res
27
- end.reverse_each do |res|
27
+ end
28
+ unless resource.depthfirst?
28
29
  # This is reversed becuase PUP-1963 changed how generated
29
30
  # resources were added to the catalog. It exists for backwards
30
31
  # compatibility only, and can probably be removed in Puppet 5
@@ -34,6 +35,9 @@ class Puppet::Transaction::AdditionalResourceGenerator
34
35
  # catalog one by one adjacent to the parent resource. This
35
36
  # causes an implicit reversal of their application order from
36
37
  # the old code. The reverse makes it all work like it did.
38
+ generated.reverse!
39
+ end
40
+ generated.each do |res|
37
41
  add_resource(res, resource)
38
42
 
39
43
  add_generated_directed_dependency(resource, res)
@@ -138,10 +142,10 @@ class Puppet::Transaction::AdditionalResourceGenerator
138
142
  def add_generated_directed_dependency(parent, child, label=nil)
139
143
  if parent.depthfirst?
140
144
  source = child
141
- target = parent.to_resource
145
+ target = parent
142
146
  else
143
147
  source = parent
144
- target = child.to_resource
148
+ target = child
145
149
  end
146
150
 
147
151
  # For each potential relationship metaparam, check if parent or
@@ -170,8 +174,22 @@ class Puppet::Transaction::AdditionalResourceGenerator
170
174
  }
171
175
 
172
176
  if not edge_exists
177
+ # We *cannot* use target.to_resource here!
178
+ #
179
+ # For reasons that are beyond my (and, perhaps, human)
180
+ # comprehension, to_resource will call retrieve. This is
181
+ # problematic if a generated resource needs the system to be
182
+ # changed by a previous resource (think a file on a path
183
+ # controlled by a mount resource).
184
+ #
185
+ # Instead of using to_resource, we just construct a resource as
186
+ # if the arguments to the Type instance had been passed to a
187
+ # Resource instead.
188
+ resource = ::Puppet::Resource.new(target.class, target.title,
189
+ :parameters => target.original_parameters)
190
+
173
191
  source[:before] ||= []
174
- source[:before] << target
192
+ source[:before] << resource
175
193
  end
176
194
  end
177
195
 
@@ -48,6 +48,17 @@ class Puppet::Transaction::Report
48
48
  # @return [String] uuid
49
49
  attr_accessor :transaction_uuid
50
50
 
51
+ # The id of the code input to the compiler.
52
+ attr_accessor :code_id
53
+
54
+ # A master generated catalog uuid, useful for connecting a single catalog to multiple reports.
55
+ attr_accessor :catalog_uuid
56
+
57
+ # Whether a cached catalog was used in the run, and if so, the reason that it was used.
58
+ # @return [String] One of the values: 'not_used', 'explicitly_requested',
59
+ # or 'on_failure'
60
+ attr_accessor :cached_catalog_status
61
+
51
62
  # The host name for which the report is generated
52
63
  # @return [String] the host name
53
64
  attr_accessor :host
@@ -172,10 +183,13 @@ class Puppet::Transaction::Report
172
183
  @host = Puppet[:node_name_value]
173
184
  @time = Time.now
174
185
  @kind = kind
175
- @report_format = 4
186
+ @report_format = 5
176
187
  @puppet_version = Puppet.version
177
188
  @configuration_version = configuration_version
178
189
  @transaction_uuid = transaction_uuid
190
+ @code_id = nil
191
+ @catalog_uuid = nil
192
+ @cached_catalog_status = nil
179
193
  @environment = environment
180
194
  @status = 'failed' # assume failed until the report is finalized
181
195
  end
@@ -190,6 +204,19 @@ class Puppet::Transaction::Report
190
204
  @status = data['status']
191
205
  @host = data['host']
192
206
  @time = data['time']
207
+
208
+ if catalog_uuid = data['catalog_uuid']
209
+ @catalog_uuid = catalog_uuid
210
+ end
211
+
212
+ if code_id = data['code_id']
213
+ @code_id = code_id
214
+ end
215
+
216
+ if cached_catalog_status = data['cached_catalog_status']
217
+ @cached_catalog_status = cached_catalog_status
218
+ end
219
+
193
220
  if @time.is_a? String
194
221
  @time = Time.parse(@time)
195
222
  end
@@ -221,6 +248,9 @@ class Puppet::Transaction::Report
221
248
  'time' => @time.iso8601(9),
222
249
  'configuration_version' => @configuration_version,
223
250
  'transaction_uuid' => @transaction_uuid,
251
+ 'catalog_uuid' => @catalog_uuid,
252
+ 'code_id' => @code_id,
253
+ 'cached_catalog_status' => @cached_catalog_status,
224
254
  'report_format' => @report_format,
225
255
  'puppet_version' => @puppet_version,
226
256
  'kind' => @kind,
@@ -69,8 +69,6 @@ class Puppet::Transaction::ResourceHarness
69
69
  def perform_changes(resource, context)
70
70
  cache(resource, :checked, Time.now)
71
71
 
72
- return [] if ! allow_changes?(resource)
73
-
74
72
  # Record the current state in state.yml.
75
73
  context.audited_params.each do |param|
76
74
  cache(resource, param, context.current_values[param])
@@ -96,29 +94,6 @@ class Puppet::Transaction::ResourceHarness
96
94
  capture_audit_events(resource, context)
97
95
  end
98
96
 
99
- def allow_changes?(resource)
100
- if resource.purging? and resource.deleting? and deps = relationship_graph.dependents(resource) \
101
- and ! deps.empty? and deps.detect { |d| ! d.deleting? }
102
- real_deps = deps.reject { |r| r.class.name == :whit }
103
- if real_deps.empty?
104
- true
105
- else
106
- deplabel = real_deps.collect { |r| r.ref }.join(",")
107
- plurality = real_deps.length > 1 ? "":"s"
108
- resource.warning "#{deplabel} still depend#{plurality} on me -- not purging"
109
- false
110
- end
111
- else
112
- true
113
- end
114
- end
115
-
116
- # allow_changes? is only made public to enable the existing spec tests to run
117
- # under rspec 3 (apparently rspec 2 didn't enforce access controls?). Please do not
118
- # treat this as part of a public API.
119
- # Possible future improvement: rewrite to not require access to private methods.
120
- public :allow_changes?
121
-
122
97
  def sync_if_needed(param, context)
123
98
  historical_value = context.historical_values[param.name]
124
99
  current_value = context.current_values[param.name]
@@ -1,5 +1,6 @@
1
1
  require 'puppet'
2
2
  require 'puppet/util/tagging'
3
+ require 'puppet/util/skip_tags'
3
4
  require 'puppet/application'
4
5
  require 'digest/sha1'
5
6
  require 'set'
@@ -185,6 +186,10 @@ class Puppet::Transaction
185
186
  super
186
187
  end
187
188
 
189
+ def skip_tags
190
+ @skip_tags ||= Puppet::Util::SkipTags.new(Puppet[:skip_tags]).tags
191
+ end
192
+
188
193
  def prefetch_if_necessary(resource)
189
194
  provider_class = resource.provider.class
190
195
  return unless provider_class.respond_to?(:prefetch) and !prefetched_providers[resource.type][provider_class.name]
@@ -339,7 +344,9 @@ class Puppet::Transaction
339
344
 
340
345
  # Should this resource be skipped?
341
346
  def skip?(resource)
342
- if missing_tags?(resource)
347
+ if skip_tags?(resource)
348
+ resource.debug "Skipping with skip tags #{skip_tags.join(", ")}"
349
+ elsif missing_tags?(resource)
343
350
  resource.debug "Not tagged with #{tags.join(", ")}"
344
351
  elsif ! scheduled?(resource)
345
352
  resource.debug "Not scheduled"
@@ -375,6 +382,13 @@ class Puppet::Transaction
375
382
  not resource.tagged?(*tags)
376
383
  end
377
384
 
385
+ def skip_tags?(resource)
386
+ return false if ignore_tags?
387
+ return false if skip_tags.empty?
388
+
389
+ resource.tagged?(*skip_tags)
390
+ end
391
+
378
392
  def split_qualified_tags?
379
393
  false
380
394
  end
@@ -389,4 +403,3 @@ class Puppet::Transaction
389
403
  end
390
404
 
391
405
  require 'puppet/transaction/report'
392
-
@@ -5,7 +5,7 @@
5
5
  # you may not use this file except in compliance with the License.
6
6
  # You may obtain a copy of the License at
7
7
  #
8
- # http://www.apache.org/licenses/LICENSE-2.0
8
+ # https://www.apache.org/licenses/LICENSE-2.0
9
9
  #
10
10
  # Unless required by applicable law or agreed to in writing, software
11
11
  # distributed under the License is distributed on an "AS IS" BASIS,
@@ -18,29 +18,29 @@ Puppet::Type.newtype(:cron) do
18
18
 
19
19
  Example:
20
20
 
21
- cron { logrotate:
22
- command => "/usr/sbin/logrotate",
23
- user => root,
21
+ cron { 'logrotate':
22
+ command => '/usr/sbin/logrotate',
23
+ user => 'root',
24
24
  hour => 2,
25
- minute => 0
25
+ minute => 0,
26
26
  }
27
27
 
28
28
  Note that all periodic attributes can be specified as an array of values:
29
29
 
30
- cron { logrotate:
31
- command => "/usr/sbin/logrotate",
32
- user => root,
33
- hour => [2, 4]
30
+ cron { 'logrotate':
31
+ command => '/usr/sbin/logrotate',
32
+ user => 'root',
33
+ hour => [2, 4],
34
34
  }
35
35
 
36
36
  ...or using ranges or the step syntax `*/2` (although there's no guarantee
37
37
  that your `cron` daemon supports these):
38
38
 
39
- cron { logrotate:
40
- command => "/usr/sbin/logrotate",
41
- user => root,
39
+ cron { 'logrotate':
40
+ command => '/usr/sbin/logrotate',
41
+ user => 'root',
42
42
  hour => ['2-4'],
43
- minute => '*/10'
43
+ minute => '*/10',
44
44
  }
45
45
 
46
46
  An important note: _the Cron type will not reset parameters that are
@@ -0,0 +1,53 @@
1
+ require 'puppet/util/checksums'
2
+ require 'puppet/type/file/data_sync'
3
+
4
+ module Puppet
5
+ Puppet::Type.type(:file).newproperty(:checksum_value) do
6
+ include Puppet::Util::Checksums
7
+ include Puppet::DataSync
8
+
9
+ desc "The checksum of the source contents. Only md5 and sha256 are supported when
10
+ specifying this parameter. If this parameter is set, source_permissions will be
11
+ assumed to be false, and ownership and permissions will not be read from source."
12
+
13
+ def insync?(is)
14
+ # If checksum_value and source are specified, manage the file contents.
15
+ # Otherwise the content property will manage syncing.
16
+ if resource.parameter(:source).nil?
17
+ return true
18
+ end
19
+
20
+ checksum_insync?(resource.parameter(:source), is, true) {|_is| super(_is)}
21
+ end
22
+
23
+ def property_matches?(current, desired)
24
+ return true if super(current, desired)
25
+ return date_matches?(resource.parameter(:checksum).value, current, desired)
26
+ end
27
+
28
+ def retrieve
29
+ # If checksum_value and source are specified, manage the file contents.
30
+ # Otherwise the content property will manage syncing. Don't compute the checksum twice.
31
+ if resource.parameter(:source).nil?
32
+ return nil
33
+ end
34
+
35
+ result = retrieve_checksum(resource)
36
+ # If the returned type matches the util/checksums format (prefixed with the type),
37
+ # strip the checksum type.
38
+ result = sumdata(result) if checksum?(result)
39
+ result
40
+ end
41
+
42
+ def sync
43
+ if resource.parameter(:source).nil?
44
+ devfail "checksum_value#sync should not be called without a source parameter"
45
+ end
46
+
47
+ # insync? only returns false if it expects to manage the file content,
48
+ # so instruct the resource to write its contents.
49
+ contents_sync(resource.parameter(:source))
50
+ end
51
+
52
+ end
53
+ end