puppet 4.3.2 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (487) hide show
  1. checksums.yaml +4 -4
  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/debian/README.source +1 -1
  9. data/ext/debian/control +1 -1
  10. data/ext/debian/copyright +4 -4
  11. data/ext/debian/puppetmaster.README.debian +11 -9
  12. data/ext/emacs/puppet-mode.el +1 -1
  13. data/ext/envpuppet +2 -2
  14. data/ext/ips/puppetagent.xml +1 -1
  15. data/ext/ips/puppetmaster.xml +1 -1
  16. data/ext/project_data.yaml +8 -0
  17. data/ext/puppet-test +3 -3
  18. data/ext/rack/example-passenger-vhost.conf +1 -1
  19. data/ext/redhat/puppet.spec.erb +2 -2
  20. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  21. data/ext/solaris/pkginfo +1 -1
  22. data/ext/solaris/smf/puppet.xml +1 -1
  23. data/ext/suse/puppet.spec +2 -2
  24. data/ext/upload_facts.rb +1 -1
  25. data/ext/windows/puppet_interactive.bat +6 -0
  26. data/ext/windows/puppet_shell.bat +9 -0
  27. data/ext/windows/run_puppet_interactive.bat +9 -0
  28. data/ext/yaml_nodes.rb +1 -1
  29. data/install.rb +30 -20
  30. data/lib/puppet/agent.rb +1 -1
  31. data/lib/puppet/application/agent.rb +4 -2
  32. data/lib/puppet/application/apply.rb +7 -4
  33. data/lib/puppet/application/cert.rb +1 -1
  34. data/lib/puppet/application/device.rb +1 -1
  35. data/lib/puppet/application/filebucket.rb +1 -1
  36. data/lib/puppet/application/inspect.rb +1 -1
  37. data/lib/puppet/application/lookup.rb +4 -4
  38. data/lib/puppet/application/master.rb +2 -2
  39. data/lib/puppet/application/resource.rb +1 -1
  40. data/lib/puppet/configurer.rb +100 -22
  41. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  42. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  43. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  44. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  45. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  46. data/lib/puppet/defaults.rb +65 -19
  47. data/lib/puppet/environments.rb +3 -1
  48. data/lib/puppet/face/config.rb +1 -1
  49. data/lib/puppet/face/epp.rb +1 -1
  50. data/lib/puppet/face/help/man.erb +1 -1
  51. data/lib/puppet/face/module/install.rb +6 -6
  52. data/lib/puppet/face/parser.rb +12 -9
  53. data/lib/puppet/face/status.rb +2 -1
  54. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  55. data/lib/puppet/feature/telnet.rb +9 -0
  56. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  57. data/lib/puppet/file_serving/metadata.rb +18 -2
  58. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  59. data/lib/puppet/file_system.rb +2 -2
  60. data/lib/puppet/file_system/file_impl.rb +2 -2
  61. data/lib/puppet/file_system/memory_impl.rb +1 -1
  62. data/lib/puppet/file_system/uniquefile.rb +1 -1
  63. data/lib/puppet/forge.rb +1 -1
  64. data/lib/puppet/forge/repository.rb +1 -31
  65. data/lib/puppet/functions.rb +45 -6
  66. data/lib/puppet/functions/assert_type.rb +9 -9
  67. data/lib/puppet/functions/each.rb +5 -13
  68. data/lib/puppet/functions/filter.rb +5 -14
  69. data/lib/puppet/functions/map.rb +6 -14
  70. data/lib/puppet/functions/reduce.rb +5 -13
  71. data/lib/puppet/functions/reverse_each.rb +82 -0
  72. data/lib/puppet/functions/scanf.rb +15 -18
  73. data/lib/puppet/functions/slice.rb +22 -36
  74. data/lib/puppet/functions/split.rb +2 -2
  75. data/lib/puppet/functions/step.rb +88 -0
  76. data/lib/puppet/functions/type.rb +70 -0
  77. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  78. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  79. data/lib/puppet/indirector/file_content/http.rb +15 -0
  80. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  81. data/lib/puppet/indirector/generic_http.rb +16 -0
  82. data/lib/puppet/indirector/node/exec.rb +1 -1
  83. data/lib/puppet/indirector/node/ldap.rb +1 -1
  84. data/lib/puppet/indirector/rest.rb +2 -1
  85. data/lib/puppet/info_service/class_information_service.rb +13 -12
  86. data/lib/puppet/loaders.rb +1 -0
  87. data/lib/puppet/module.rb +3 -0
  88. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  89. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  90. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  91. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  92. data/lib/puppet/network/http/pool.rb +9 -0
  93. data/lib/puppet/node.rb +1 -1
  94. data/lib/puppet/node/environment.rb +11 -2
  95. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  96. data/lib/puppet/parser/compiler.rb +3 -3
  97. data/lib/puppet/parser/environment_compiler.rb +0 -1
  98. data/lib/puppet/parser/functions.rb +28 -16
  99. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  100. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  101. data/lib/puppet/parser/functions/map.rb +1 -1
  102. data/lib/puppet/parser/functions/scanf.rb +15 -26
  103. data/lib/puppet/parser/functions/slice.rb +17 -24
  104. data/lib/puppet/parser/functions/split.rb +1 -1
  105. data/lib/puppet/parser/resource.rb +19 -17
  106. data/lib/puppet/parser/scope.rb +176 -5
  107. data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
  108. data/lib/puppet/pops.rb +0 -8
  109. data/lib/puppet/pops/adaptable.rb +4 -1
  110. data/lib/puppet/pops/adapters.rb +38 -13
  111. data/lib/puppet/pops/binder/binder.rb +21 -17
  112. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  113. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  114. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  115. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  116. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  117. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  118. data/lib/puppet/pops/binder/injector.rb +53 -48
  119. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  120. data/lib/puppet/pops/binder/producers.rb +67 -62
  121. data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
  122. data/lib/puppet/pops/evaluator/closure.rb +84 -68
  123. data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
  124. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  125. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  126. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  127. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  128. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  129. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  130. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  131. data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
  132. data/lib/puppet/pops/issue_reporter.rb +6 -4
  133. data/lib/puppet/pops/issues.rb +34 -11
  134. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  135. data/lib/puppet/pops/loader/loader.rb +1 -1
  136. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  137. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  138. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
  139. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  140. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  141. data/lib/puppet/pops/loaders.rb +51 -9
  142. data/lib/puppet/pops/lookup.rb +14 -12
  143. data/lib/puppet/pops/merge_strategy.rb +16 -19
  144. data/lib/puppet/pops/model/factory.rb +26 -2
  145. data/lib/puppet/pops/model/model.rb +8 -8
  146. data/lib/puppet/pops/model/model_label_provider.rb +13 -7
  147. data/lib/puppet/pops/model/model_meta.rb +17 -0
  148. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  149. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  150. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  151. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  152. data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
  153. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  154. data/lib/puppet/pops/parser/lexer2.rb +26 -19
  155. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  156. data/lib/puppet/pops/parser/locator.rb +21 -0
  157. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  158. data/lib/puppet/pops/parser/slurp_support.rb +11 -7
  159. data/lib/puppet/pops/types/class_loader.rb +23 -19
  160. data/lib/puppet/pops/types/enumeration.rb +9 -26
  161. data/lib/puppet/pops/types/iterable.rb +308 -0
  162. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  163. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  164. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  165. data/lib/puppet/pops/types/type_calculator.rb +138 -381
  166. data/lib/puppet/pops/types/type_factory.rb +91 -57
  167. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  168. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  169. data/lib/puppet/pops/types/type_parser.rb +159 -112
  170. data/lib/puppet/pops/types/types.rb +2057 -1247
  171. data/lib/puppet/pops/utils.rb +11 -10
  172. data/lib/puppet/pops/validation.rb +11 -9
  173. data/lib/puppet/pops/validation/checker4_0.rb +83 -55
  174. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  175. data/lib/puppet/provider/aixobject.rb +1 -1
  176. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  177. data/lib/puppet/provider/cron/crontab.rb +1 -1
  178. data/lib/puppet/provider/exec/windows.rb +1 -1
  179. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  180. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  181. data/lib/puppet/provider/package/appdmg.rb +3 -2
  182. data/lib/puppet/provider/package/dnf.rb +1 -1
  183. data/lib/puppet/provider/package/pip.rb +5 -8
  184. data/lib/puppet/provider/package/pip3.rb +1 -1
  185. data/lib/puppet/provider/package/pkg.rb +1 -1
  186. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  187. data/lib/puppet/provider/package/pkgng.rb +13 -4
  188. data/lib/puppet/provider/package/windows.rb +1 -1
  189. data/lib/puppet/provider/package/yum.rb +1 -1
  190. data/lib/puppet/provider/package/zypper.rb +19 -0
  191. data/lib/puppet/provider/service/debian.rb +2 -2
  192. data/lib/puppet/provider/service/launchd.rb +6 -18
  193. data/lib/puppet/provider/service/systemd.rb +9 -2
  194. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  195. data/lib/puppet/provider/user/aix.rb +1 -1
  196. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  197. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  198. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  199. data/lib/puppet/reference/configuration.rb +1 -1
  200. data/lib/puppet/reference/providers.rb +1 -1
  201. data/lib/puppet/resource.rb +15 -12
  202. data/lib/puppet/resource/capability_finder.rb +20 -13
  203. data/lib/puppet/resource/catalog.rb +60 -3
  204. data/lib/puppet/resource/status.rb +11 -2
  205. data/lib/puppet/resource/type.rb +28 -38
  206. data/lib/puppet/settings.rb +1 -1
  207. data/lib/puppet/settings/config_file.rb +1 -1
  208. data/lib/puppet/settings/environment_conf.rb +13 -5
  209. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  210. data/lib/puppet/ssl/certificate_request.rb +4 -4
  211. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  212. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  213. data/lib/puppet/test/test_helper.rb +16 -4
  214. data/lib/puppet/transaction.rb +15 -2
  215. data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
  216. data/lib/puppet/transaction/report.rb +31 -1
  217. data/lib/puppet/transaction/resource_harness.rb +0 -25
  218. data/lib/puppet/type.rb +11 -11
  219. data/lib/puppet/type/augeas.rb +1 -1
  220. data/lib/puppet/type/cron.rb +12 -12
  221. data/lib/puppet/type/file.rb +91 -39
  222. data/lib/puppet/type/file/checksum_value.rb +53 -0
  223. data/lib/puppet/type/file/content.rb +26 -111
  224. data/lib/puppet/type/file/data_sync.rb +84 -0
  225. data/lib/puppet/type/file/ensure.rb +17 -14
  226. data/lib/puppet/type/file/selcontext.rb +1 -1
  227. data/lib/puppet/type/file/source.rb +103 -18
  228. data/lib/puppet/type/filebucket.rb +1 -1
  229. data/lib/puppet/type/interface.rb +8 -3
  230. data/lib/puppet/type/macauthorization.rb +1 -1
  231. data/lib/puppet/type/package.rb +6 -0
  232. data/lib/puppet/type/schedule.rb +1 -1
  233. data/lib/puppet/type/stage.rb +1 -1
  234. data/lib/puppet/type/user.rb +19 -17
  235. data/lib/puppet/type/yumrepo.rb +20 -0
  236. data/lib/puppet/util.rb +109 -22
  237. data/lib/puppet/util/autoload.rb +16 -11
  238. data/lib/puppet/util/checksums.rb +74 -31
  239. data/lib/puppet/util/execution.rb +1 -1
  240. data/lib/puppet/util/http_proxy.rb +72 -0
  241. data/lib/puppet/util/log.rb +2 -0
  242. data/lib/puppet/util/logging.rb +43 -1
  243. data/lib/puppet/util/monkey_patches.rb +2 -2
  244. data/lib/puppet/util/multi_match.rb +51 -0
  245. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  246. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  247. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  248. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  249. data/lib/puppet/util/plist.rb +130 -0
  250. data/lib/puppet/util/resource_template.rb +1 -1
  251. data/lib/puppet/util/run_mode.rb +2 -2
  252. data/lib/puppet/util/skip_tags.rb +9 -0
  253. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  254. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  255. data/lib/puppet/util/windows/adsi.rb +4 -4
  256. data/lib/puppet/util/windows/api_types.rb +24 -18
  257. data/lib/puppet/util/windows/com.rb +3 -3
  258. data/lib/puppet/util/windows/error.rb +1 -1
  259. data/lib/puppet/util/windows/file.rb +8 -8
  260. data/lib/puppet/util/windows/principal.rb +23 -14
  261. data/lib/puppet/util/windows/process.rb +78 -11
  262. data/lib/puppet/util/windows/registry.rb +1 -1
  263. data/lib/puppet/util/windows/root_certs.rb +5 -5
  264. data/lib/puppet/util/windows/security.rb +33 -35
  265. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  266. data/lib/puppet/util/windows/sid.rb +42 -4
  267. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  268. data/lib/puppet/util/windows/user.rb +10 -10
  269. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  270. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  271. data/lib/puppet/vendor/pathspec/README.md +1 -1
  272. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  273. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  274. data/lib/puppet/version.rb +1 -1
  275. data/lib/semver.rb +17 -1
  276. data/man/man5/puppet.conf.5 +12 -12
  277. data/man/man8/extlookup2hiera.8 +1 -1
  278. data/man/man8/puppet-agent.8 +2 -2
  279. data/man/man8/puppet-apply.8 +2 -2
  280. data/man/man8/puppet-ca.8 +2 -2
  281. data/man/man8/puppet-catalog.8 +2 -2
  282. data/man/man8/puppet-cert.8 +2 -2
  283. data/man/man8/puppet-certificate.8 +2 -2
  284. data/man/man8/puppet-certificate_request.8 +2 -2
  285. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  286. data/man/man8/puppet-config.8 +3 -3
  287. data/man/man8/puppet-describe.8 +1 -1
  288. data/man/man8/puppet-device.8 +1 -1
  289. data/man/man8/puppet-doc.8 +1 -1
  290. data/man/man8/puppet-epp.8 +2 -2
  291. data/man/man8/puppet-facts.8 +2 -2
  292. data/man/man8/puppet-file.8 +2 -2
  293. data/man/man8/puppet-filebucket.8 +2 -2
  294. data/man/man8/puppet-help.8 +2 -2
  295. data/man/man8/puppet-inspect.8 +2 -2
  296. data/man/man8/puppet-key.8 +2 -2
  297. data/man/man8/puppet-man.8 +2 -2
  298. data/man/man8/puppet-master.8 +2 -2
  299. data/man/man8/puppet-module.8 +9 -9
  300. data/man/man8/puppet-node.8 +2 -2
  301. data/man/man8/puppet-parser.8 +2 -2
  302. data/man/man8/puppet-plugin.8 +2 -2
  303. data/man/man8/puppet-report.8 +2 -2
  304. data/man/man8/puppet-resource.8 +2 -2
  305. data/man/man8/puppet-resource_type.8 +2 -2
  306. data/man/man8/puppet-status.8 +3 -3
  307. data/man/man8/puppet.8 +1 -1
  308. data/spec/fixtures/module.tar.gz +0 -0
  309. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  310. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  311. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  312. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  313. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  314. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  315. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  316. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  317. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  318. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  319. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  320. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  321. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
  322. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  323. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  324. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  325. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  326. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  327. 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
  328. 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
  329. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  330. 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
  331. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  332. 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
  333. 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
  334. data/spec/integration/defaults_spec.rb +14 -2
  335. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  336. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  337. data/spec/integration/node/environment_spec.rb +13 -0
  338. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  339. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  340. data/spec/integration/parser/undef_param_spec.rb +8 -0
  341. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  342. data/spec/integration/test/test_helper_spec.rb +28 -0
  343. data/spec/integration/transaction/report_spec.rb +16 -0
  344. data/spec/integration/transaction_spec.rb +11 -0
  345. data/spec/integration/type/file_spec.rb +194 -4
  346. data/spec/integration/type/package_spec.rb +5 -1
  347. data/spec/integration/type/tidy_spec.rb +21 -9
  348. data/spec/integration/util/execution_spec.rb +22 -0
  349. data/spec/integration/util/windows/principal_spec.rb +90 -4
  350. data/spec/integration/util/windows/process_spec.rb +31 -0
  351. data/spec/integration/util/windows/security_spec.rb +6 -6
  352. data/spec/integration/util/windows/user_spec.rb +1 -1
  353. data/spec/integration/util_spec.rb +49 -27
  354. data/spec/lib/puppet_spec/compiler.rb +17 -0
  355. data/spec/lib/puppet_spec/files.rb +2 -2
  356. data/spec/lib/puppet_spec/pops.rb +13 -0
  357. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  358. data/spec/shared_contexts/types_setup.rb +96 -0
  359. data/spec/unit/agent_spec.rb +1 -0
  360. data/spec/unit/application/agent_spec.rb +10 -0
  361. data/spec/unit/application/apply_spec.rb +9 -0
  362. data/spec/unit/configurer/downloader_spec.rb +5 -5
  363. data/spec/unit/configurer_spec.rb +271 -39
  364. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  365. data/spec/unit/defaults_spec.rb +15 -0
  366. data/spec/unit/environments_spec.rb +24 -4
  367. data/spec/unit/face/parser_spec.rb +43 -2
  368. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  369. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  370. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  371. data/spec/unit/file_system_spec.rb +26 -0
  372. data/spec/unit/functions/assert_type_spec.rb +36 -2
  373. data/spec/unit/functions/defined_spec.rb +2 -2
  374. data/spec/unit/functions/epp_spec.rb +11 -3
  375. data/spec/unit/functions/lookup_spec.rb +58 -13
  376. data/spec/unit/functions/regsubst_spec.rb +1 -1
  377. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  378. data/spec/unit/functions/step_spec.rb +113 -0
  379. data/spec/unit/functions/type_spec.rb +35 -0
  380. data/spec/unit/functions4_spec.rb +61 -5
  381. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  382. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  383. data/spec/unit/indirector/indirection_spec.rb +1 -1
  384. data/spec/unit/info_service_spec.rb +94 -32
  385. data/spec/unit/module_spec.rb +14 -0
  386. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  387. data/spec/unit/network/authstore_spec.rb +1 -1
  388. data/spec/unit/network/http/connection_spec.rb +1 -0
  389. data/spec/unit/network/http/pool_spec.rb +30 -0
  390. data/spec/unit/node_spec.rb +1 -1
  391. data/spec/unit/parser/compiler_spec.rb +16 -0
  392. data/spec/unit/parser/scope_spec.rb +28 -11
  393. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  394. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  395. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
  396. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  397. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  398. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  399. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  400. data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
  401. data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
  402. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  403. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  404. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  405. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  406. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  407. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  408. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  409. data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
  410. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  411. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  412. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  413. data/spec/unit/pops/types/types_spec.rb +241 -0
  414. data/spec/unit/pops/validator/validator_spec.rb +100 -43
  415. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  416. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  417. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  418. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  419. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  420. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  421. data/spec/unit/provider/package/pip_spec.rb +47 -34
  422. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  423. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  424. data/spec/unit/provider/package/yum_spec.rb +11 -0
  425. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  426. data/spec/unit/provider/service/launchd_spec.rb +17 -35
  427. data/spec/unit/provider/service/systemd_spec.rb +7 -0
  428. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  429. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  430. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  431. data/spec/unit/resource/catalog_spec.rb +33 -1
  432. data/spec/unit/resource/type_spec.rb +149 -7
  433. data/spec/unit/resource_spec.rb +96 -57
  434. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  435. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  436. data/spec/unit/transaction/report_spec.rb +27 -0
  437. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  438. data/spec/unit/transaction_spec.rb +5 -0
  439. data/spec/unit/type/file/checksum_spec.rb +6 -0
  440. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  441. data/spec/unit/type/file/content_spec.rb +12 -193
  442. data/spec/unit/type/file/source_spec.rb +211 -119
  443. data/spec/unit/type/file_spec.rb +133 -34
  444. data/spec/unit/type/interface_spec.rb +32 -0
  445. data/spec/unit/type/macauthorization_spec.rb +4 -1
  446. data/spec/unit/type/yumrepo_spec.rb +2 -2
  447. data/spec/unit/util/filetype_spec.rb +1 -1
  448. data/spec/unit/util/http_proxy_spec.rb +2 -2
  449. data/spec/unit/util/log/destinations_spec.rb +0 -2
  450. data/spec/unit/util/logging_spec.rb +69 -0
  451. data/spec/unit/util/multi_match_spec.rb +39 -0
  452. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  453. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  454. data/spec/unit/util/plist_spec.rb +110 -0
  455. data/spec/unit/util/resource_template_spec.rb +2 -2
  456. data/spec/unit/util/run_mode_spec.rb +27 -3
  457. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  458. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  459. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  460. data/spec/unit/util/windows/sid_spec.rb +1 -1
  461. data/spec/unit/util_spec.rb +123 -13
  462. data/tasks/cfpropertylist.rake +15 -0
  463. metadata +114 -26
  464. data/lib/puppet/vendor/load_plist.rb +0 -1
  465. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  466. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  467. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  468. data/lib/puppet/vendor/plist/README +0 -36
  469. data/lib/puppet/vendor/plist/Rakefile +0 -144
  470. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  471. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  472. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  473. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  474. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  475. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  476. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  477. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  478. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  479. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  480. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  481. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  482. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  483. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  484. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  485. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  486. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  487. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -0,0 +1,15 @@
1
+ require 'puppet/file_serving/metadata'
2
+ require 'puppet/indirector/generic_http'
3
+
4
+ class Puppet::Indirector::FileContent::Http < Puppet::Indirector::GenericHttp
5
+ desc "Retrieve file contents from a remote HTTP server."
6
+
7
+ include Puppet::FileServing::TerminusHelper
8
+
9
+ @http_method = :get
10
+
11
+ def find(request)
12
+ response = super
13
+ model.from_binary(response.body)
14
+ end
15
+ end
@@ -0,0 +1,27 @@
1
+ require 'puppet/file_serving/http_metadata'
2
+ require 'puppet/indirector/generic_http'
3
+ require 'puppet/indirector/file_metadata'
4
+ require 'net/http'
5
+
6
+ class Puppet::Indirector::FileMetadata::Http < Puppet::Indirector::GenericHttp
7
+ desc "Retrieve file metadata from a remote HTTP server."
8
+
9
+ include Puppet::FileServing::TerminusHelper
10
+
11
+ @http_method = :head
12
+
13
+ def find(request)
14
+ head = super
15
+
16
+ if head.is_a?(Net::HTTPSuccess)
17
+ metadata = Puppet::FileServing::HttpMetadata.new(head)
18
+ metadata.checksum_type = request.options[:checksum_type] if request.options[:checksum_type]
19
+ metadata.collect
20
+ metadata
21
+ end
22
+ end
23
+
24
+ def search(request)
25
+ raise Puppet::Error, "cannot lookup multiple files"
26
+ end
27
+ end
@@ -0,0 +1,16 @@
1
+ require 'puppet/file_serving/terminus_helper'
2
+ require 'puppet/util/http_proxy'
3
+
4
+ class Puppet::Indirector::GenericHttp < Puppet::Indirector::Terminus
5
+ desc "Retrieve data from a remote HTTP server."
6
+
7
+ class <<self
8
+ attr_accessor :http_method
9
+ end
10
+
11
+ def find(request)
12
+ uri = URI(request.uri)
13
+ method = self.class.http_method
14
+ Puppet::Util::HttpProxy.request_with_redirects(uri,method)
15
+ end
16
+ end
@@ -3,7 +3,7 @@ require 'puppet/indirector/exec'
3
3
 
4
4
  class Puppet::Node::Exec < Puppet::Indirector::Exec
5
5
  desc "Call an external program to get node information. See
6
- the [External Nodes](http://docs.puppetlabs.com/guides/external_nodes.html) page for more information."
6
+ the [External Nodes](https://docs.puppetlabs.com/guides/external_nodes.html) page for more information."
7
7
  include Puppet::Util
8
8
 
9
9
  def command
@@ -3,7 +3,7 @@ require 'puppet/indirector/ldap'
3
3
 
4
4
  class Puppet::Node::Ldap < Puppet::Indirector::Ldap
5
5
  desc "Search in LDAP for node configuration information. See
6
- the [LDAP Nodes](http://docs.puppetlabs.com/guides/ldap_nodes.html) page for more information. This will first
6
+ the [LDAP Nodes](https://docs.puppetlabs.com/guides/ldap_nodes.html) page for more information. This will first
7
7
  search for whatever the certificate name is, then (if that name
8
8
  contains a `.`) for the short name, then `default`."
9
9
 
@@ -96,7 +96,8 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
96
96
  # WEBrick in Ruby 1.9.1 only supports up to 1024 character lines in an HTTP request
97
97
  # http://redmine.ruby-lang.org/issues/show/3991
98
98
  if "GET #{uri_with_query_string} HTTP/1.1\r\n".length > 1024
99
- http_post(req, uri, body, headers)
99
+ uri_with_env = "#{uri}?environment=#{request.environment.name}"
100
+ http_post(req, uri_with_env, body, headers)
100
101
  else
101
102
  http_get(req, uri_with_query_string, headers)
102
103
  end
@@ -1,6 +1,6 @@
1
1
  require 'puppet'
2
2
  require 'puppet/pops'
3
- require 'puppet/pops/evaluator/literal_evaluator'
3
+ require 'puppet/pops/evaluator/json_strict_literal_evaluator'
4
4
 
5
5
  class Puppet::InfoService::ClassInformationService
6
6
 
@@ -41,7 +41,7 @@ class Puppet::InfoService::ClassInformationService
41
41
  end
42
42
 
43
43
  def literal_evaluator
44
- @@literal_evaluator ||= Puppet::Pops::Evaluator::LiteralEvaluator.new
44
+ @@literal_evaluator ||= Puppet::Pops::Evaluator::JsonStrictLiteralEvaluator.new
45
45
  end
46
46
 
47
47
  def result_of(f)
@@ -53,13 +53,17 @@ class Puppet::InfoService::ClassInformationService
53
53
  end
54
54
 
55
55
  def parse_file(f)
56
+ return {:error => "The file #{f} does not exist"} unless Puppet::FileSystem.exist?(f)
57
+
56
58
  begin
57
59
  parse_result = @parser.parse_file(f)
58
- parse_result.definitions.select {|d| d.is_a?(Puppet::Pops::Model::HostClassDefinition)}.map do |d|
59
- {:name => d.name,
60
- :params => params = d.parameters.map {|p| extract_param(p) }
61
- }
62
- end
60
+ {:classes =>
61
+ parse_result.definitions.select {|d| d.is_a?(Puppet::Pops::Model::HostClassDefinition)}.map do |d|
62
+ {:name => d.name,
63
+ :params => params = d.parameters.map {|p| extract_param(p) }
64
+ }
65
+ end
66
+ }
63
67
  rescue StandardError => e
64
68
  {:error => e.message }
65
69
  end
@@ -79,17 +83,14 @@ class Puppet::InfoService::ClassInformationService
79
83
  value_expr = p.value
80
84
  return structure if value_expr.nil?
81
85
  default_value = value_as_literal(value_expr)
82
- if !default_value.nil?
83
- structure[:default_literal] = default_value
84
- return structure
85
- end
86
+ structure[:default_literal] = default_value unless default_value.nil?
86
87
  structure[:default_source] = extract_value_source(value_expr)
87
88
  structure
88
89
  end
89
90
 
90
91
  def typeexpr_to_string(type_expr)
91
92
  begin
92
- type_parser.interpret_any(type_expr).to_s
93
+ type_parser.interpret_any(type_expr, nil).to_s
93
94
  rescue Puppet::ParseError
94
95
  # type is to complex - contains expressions that are not literal
95
96
  nil
@@ -12,6 +12,7 @@ module Puppet
12
12
  require 'puppet/pops/loader/static_loader'
13
13
  require 'puppet/pops/loader/ruby_function_instantiator'
14
14
  require 'puppet/pops/loader/puppet_function_instantiator'
15
+ require 'puppet/pops/loader/type_definition_instantiator'
15
16
  require 'puppet/pops/loader/loader_paths'
16
17
  require 'puppet/pops/loader/simple_environment_loader'
17
18
  end
@@ -154,6 +154,9 @@ class Puppet::Module
154
154
  end
155
155
 
156
156
  if attr == :dependencies
157
+ unless value.is_a?(Array)
158
+ raise MissingMetadata, "The value for the key dependencies in the file metadata.json of the module #{self.name} must be an array, not: '#{value}'"
159
+ end
157
160
  value.each do |dep|
158
161
  name = dep['name']
159
162
  dep['name'] = name.tr('-', '/') unless name.nil?
@@ -1,7 +1,14 @@
1
- source 'https://rubygems.org'
1
+ source ENV['GEM_SOURCE'] || 'https://rubygems.org'
2
2
 
3
3
  puppetversion = ENV.key?('PUPPET_VERSION') ? "#{ENV['PUPPET_VERSION']}" : ['>= 3.3']
4
+ gem 'metadata-json-lint'
4
5
  gem 'puppet', puppetversion
5
- gem 'puppetlabs_spec_helper', '>= 0.8.2'
6
+ gem 'puppetlabs_spec_helper', '>= 1.0.0'
6
7
  gem 'puppet-lint', '>= 1.0.0'
7
8
  gem 'facter', '>= 1.7.0'
9
+ gem 'rspec-puppet'
10
+
11
+ # rspec must be v2 for ruby 1.8.7
12
+ if RUBY_VERSION >= '1.8.7' and RUBY_VERSION < '1.9'
13
+ gem 'rspec', '~> 2.0'
14
+ end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
  describe '<%= metadata.name %>' do
3
3
 
4
- context 'with defaults for all parameters' do
4
+ context 'with default values for all parameters' do
5
5
  it { should contain_class('<%= metadata.name %>') }
6
6
  end
7
7
  end
@@ -7,6 +7,6 @@
7
7
  # environment (to compare the resulting system state to the desired state).
8
8
  #
9
9
  # Learn more about module testing here:
10
- # http://docs.puppetlabs.com/guides/tests_smoke.html
10
+ # https://docs.puppetlabs.com/guides/tests_smoke.html
11
11
  #
12
- include <%= metadata.name %>
12
+ include ::<%= metadata.name %>
@@ -25,13 +25,13 @@ class Puppet::ModuleTool::Tar::Mini
25
25
  #
26
26
  # This check was mainly added to ignore 'x' and 'g' flags from the PAX
27
27
  # standard but will also ignore any other non-standard tar flags.
28
- # tar format info: http://pic.dhe.ibm.com/infocenter/zos/v1r13/index.jsp?topic=%2Fcom.ibm.zos.r13.bpxa500%2Ftaf.htm
29
- # pax format info: http://pic.dhe.ibm.com/infocenter/zos/v1r13/index.jsp?topic=%2Fcom.ibm.zos.r13.bpxa500%2Fpxarchfm.htm
28
+ # tar format info: https://pic.dhe.ibm.com/infocenter/zos/v1r13/index.jsp?topic=%2Fcom.ibm.zos.r13.bpxa500%2Ftaf.htm
29
+ # pax format info: https://pic.dhe.ibm.com/infocenter/zos/v1r13/index.jsp?topic=%2Fcom.ibm.zos.r13.bpxa500%2Fpxarchfm.htm
30
30
  def find_valid_files(tarfile)
31
31
  Archive::Tar::Minitar.open(tarfile).collect do |entry|
32
32
  flag = entry.typeflag
33
33
  if flag.nil? || flag =~ /[[:digit:]]/ && (0..7).include?(flag.to_i)
34
- entry.name
34
+ entry.full_name
35
35
  else
36
36
  Puppet.debug "Invalid tar flag '#{flag}' will not be extracted: #{entry.name}"
37
37
  next
@@ -81,10 +81,19 @@ class Puppet::Network::HTTP::Pool
81
81
 
82
82
  Puppet.debug("Starting connection for #{site}")
83
83
  http.start
84
+ setsockopts(http.instance_variable_get(:@socket))
84
85
  http
85
86
  end
86
87
  end
87
88
 
89
+ # Set useful socket option(s) which lack from default settings in Net:HTTP
90
+ #
91
+ # @api private
92
+ def setsockopts(netio)
93
+ socket = netio.io
94
+ socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true)
95
+ end
96
+
88
97
  # Release a connection back into the pool.
89
98
  #
90
99
  # @api private
@@ -75,7 +75,7 @@ class Puppet::Node
75
75
 
76
76
  # Keep environment_name attribute and parameter in sync if they have been set
77
77
  unless @environment.nil?
78
- @parameters[ENVIRONMENT] = @environment.name if @parameters.include?(ENVIRONMENT)
78
+ @parameters[ENVIRONMENT] = @environment.name.to_s if @parameters.include?(ENVIRONMENT)
79
79
  self.environment_name = @environment.name if instance_variable_defined?(:@environment_name)
80
80
  end
81
81
  @environment
@@ -186,6 +186,15 @@ class Puppet::Node::Environment
186
186
  !original_manifest.nil? && !original_manifest.empty? && original_manifest != Puppet[:default_manifest]
187
187
  end
188
188
 
189
+ # @api private
190
+ def static_catalogs?
191
+ if @static_catalogs.nil?
192
+ environment_conf = Puppet.lookup(:environments).get_conf(name)
193
+ @static_catalogs = (environment_conf.nil? ? Puppet[:static_catalogs] : environment_conf.static_catalogs)
194
+ end
195
+ @static_catalogs
196
+ end
197
+
189
198
  # Return the environment configuration
190
199
  # @return [Puppet::Settings::EnvironmentConf] The configuration
191
200
  #
@@ -449,8 +458,8 @@ class Puppet::Node::Environment
449
458
  private
450
459
 
451
460
  def self.extralibs()
452
- if ENV["PUPPETLIB"]
453
- split_path(ENV["PUPPETLIB"])
461
+ if Puppet::Util.get_env('PUPPETLIB')
462
+ split_path(Puppet::Util.get_env('PUPPETLIB'))
454
463
  else
455
464
  []
456
465
  end
@@ -95,8 +95,12 @@ class Puppet::Parser::AST::PopsBridge
95
95
  when Puppet::Pops::Model::SiteDefinition
96
96
  instantiate_SiteDefinition(d, modname)
97
97
  when Puppet::Pops::Model::FunctionDefinition
98
+ # The 3x logic calling this will not know what to do with the result, it is compacted away at the end
98
99
  instantiate_FunctionDefinition(d, modname)
100
+ next
101
+ when Puppet::Pops::Model::TypeAlias
99
102
  # The 3x logic calling this will not know what to do with the result, it is compacted away at the end
103
+ instantiate_TypeAlias(d, modname)
100
104
  next
101
105
  when Puppet::Pops::Model::Application
102
106
  instantiate_ApplicationDefinition(d, modname)
@@ -242,35 +246,28 @@ class Puppet::Parser::AST::PopsBridge
242
246
  # This is for 4x evaluator/loader
243
247
  #
244
248
  def instantiate_FunctionDefinition(function_definition, modname)
245
- loaders = (Puppet.lookup(:loaders) { nil })
246
- unless loaders
247
- raise Puppet::ParseError, "Internal Error: Puppet Context ':loaders' missing - cannot define any functions"
248
- end
249
- loader =
250
- if modname.nil? || modname == ""
251
- # TODO : Later when functions can be private, a decision is needed regarding what that means.
252
- # A private environment loader could be used for logic outside of modules, then only that logic
253
- # would see the function.
254
- #
255
- # Use the private loader, this function may see the environment's dependencies (currently, all modules)
256
- loaders.private_environment_loader()
257
- else
258
- # TODO : Later check if function is private, and then add it to
259
- # private_loader_for_module
260
- #
261
- loaders.public_loader_for_module(modname)
262
- end
263
- unless loader
264
- raise Puppet::ParseError, "Internal Error: did not find public loader for module: '#{modname}'"
265
- end
249
+ loader = Puppet::Pops::Loaders.find_loader(modname)
266
250
 
267
- # Instantiate Function, and store it in the environment loader
251
+ # Instantiate Function, and store it in the loader
268
252
  typed_name, f = Puppet::Pops::Loader::PuppetFunctionInstantiator.create_from_model(function_definition, loader)
269
253
  loader.set_entry(typed_name, f, Puppet::Pops::Adapters::SourcePosAdapter.adapt(function_definition).to_uri)
270
254
 
271
255
  nil # do not want the function to inadvertently leak into 3x
272
256
  end
273
257
 
258
+ # Propagates a found TypeAlias to the appropriate loader.
259
+ # This is for 4x evaluator/loader
260
+ #
261
+ def instantiate_TypeAlias(type_alias, modname)
262
+ loader = Puppet::Pops::Loaders.find_loader(modname)
263
+
264
+ # Bind the type alias to the loader using the alias
265
+ typed_name, t = Puppet::Pops::Loader::TypeDefinitionInstantiator.create_from_model(type_alias, loader)
266
+ loader.set_entry(typed_name, t, Puppet::Pops::Adapters::SourcePosAdapter.adapt(type_alias).to_uri)
267
+
268
+ nil # do not want the type alias to inadvertently leak into 3x
269
+ end
270
+
274
271
  def code()
275
272
  Expression.new(:value => @value)
276
273
  end
@@ -20,7 +20,6 @@ class Puppet::Parser::Compiler
20
20
  include Puppet::Pops::Evaluator::Runtime3Support
21
21
 
22
22
  def self.compile(node, code_id = nil)
23
- $env_module_directories = nil
24
23
  node.environment.check_for_reparse
25
24
 
26
25
  errors = node.environment.validation_errors
@@ -28,7 +27,7 @@ class Puppet::Parser::Compiler
28
27
  errors.each { |e| Puppet.err(e) } if errors.size > 1
29
28
  errmsg = [
30
29
  "Compilation has been halted because: #{errors.first}",
31
- "For more information, see http://docs.puppetlabs.com/puppet/latest/reference/environments.html",
30
+ "For more information, see https://docs.puppetlabs.com/puppet/latest/reference/environments.html",
32
31
  ]
33
32
  raise(Puppet::Error, errmsg.join(' '))
34
33
  end
@@ -835,7 +834,8 @@ class Puppet::Parser::Compiler
835
834
  # Set the node's parameters into the top-scope as variables.
836
835
  def set_node_parameters
837
836
  node.parameters.each do |param, value|
838
- @topscope[param.to_s] = value
837
+ # Ensure node does not leak Symbol instances in general
838
+ @topscope[param.to_s] = value.is_a?(Symbol) ? value.to_s : value
839
839
  end
840
840
  # These might be nil.
841
841
  catalog.client_version = node.parameters["clientversion"]
@@ -3,7 +3,6 @@ require 'puppet/parser/compiler'
3
3
  class Puppet::Parser::EnvironmentCompiler < Puppet::Parser::Compiler
4
4
  def self.compile(env)
5
5
  begin
6
- $env_module_directories = nil
7
6
  env.check_for_reparse
8
7
 
9
8
  node = Puppet::Node.new(env)
@@ -1,5 +1,6 @@
1
1
  require 'puppet/util/autoload'
2
2
  require 'puppet/parser/scope'
3
+ require 'puppet/pops/adaptable'
3
4
 
4
5
  # A module for managing parser functions. Each specified function
5
6
  # is added to a central module that then gets included into the Scope
@@ -17,12 +18,12 @@ module Puppet::Parser::Functions
17
18
  #
18
19
  # @api private
19
20
  def self.reset
20
- @modules = {}
21
-
22
21
  # Runs a newfunction to create a function for each of the log levels
22
+ root_env = Puppet.lookup(:root_environment)
23
+ AnonymousModuleAdapter.clear(root_env)
23
24
  Puppet::Util::Log.levels.each do |level|
24
25
  newfunction(level,
25
- :environment => Puppet.lookup(:root_environment),
26
+ :environment => root_env,
26
27
  :doc => "Log a message on the server at level #{level.to_s}.") do |vals|
27
28
  send(level, vals.join(" "))
28
29
  end
@@ -36,26 +37,37 @@ module Puppet::Parser::Functions
36
37
  @autoloader ||= Puppet::Util::Autoload.new(self, "puppet/parser/functions")
37
38
  end
38
39
 
40
+ # An adapter that ties the anonymous module that acts as the container for all 3x functions to the environment
41
+ # where the functions are created. This adapter ensures that the life-cycle of those functions doesn't exceed
42
+ # the life-cycle of the environment.
43
+ #
44
+ # @api private
45
+ class AnonymousModuleAdapter < Puppet::Pops::Adaptable::Adapter
46
+ attr_accessor :module
47
+ end
48
+
39
49
  # Get the module that functions are mixed into corresponding to an
40
50
  # environment
41
51
  #
42
52
  # @api private
43
53
  def self.environment_module(env)
44
- @modules[env.name] ||= Module.new do
45
- @metadata = {}
54
+ AnonymousModuleAdapter.adapt(env) do |a|
55
+ a.module ||= Module.new do
56
+ @metadata = {}
46
57
 
47
- def self.all_function_info
48
- @metadata
49
- end
58
+ def self.all_function_info
59
+ @metadata
60
+ end
50
61
 
51
- def self.get_function_info(name)
52
- @metadata[name]
53
- end
62
+ def self.get_function_info(name)
63
+ @metadata[name]
64
+ end
54
65
 
55
- def self.add_function_info(name, info)
56
- @metadata[name] = info
66
+ def self.add_function_info(name, info)
67
+ @metadata[name] = info
68
+ end
57
69
  end
58
- end
70
+ end.module
59
71
  end
60
72
 
61
73
  # Create a new Puppet DSL function.
@@ -70,7 +82,7 @@ module Puppet::Parser::Functions
70
82
  # extend the behavior and functionality of Puppet.
71
83
  #
72
84
  # See also [Docs: Custom
73
- # Functions](http://docs.puppetlabs.com/guides/custom_functions.html)
85
+ # Functions](https://docs.puppetlabs.com/guides/custom_functions.html)
74
86
  #
75
87
  # @example Define a new Puppet DSL Function
76
88
  # >> Puppet::Parser::Functions.newfunction(:double, :arity => 1,
@@ -113,7 +125,7 @@ module Puppet::Parser::Functions
113
125
  # This string will be extracted by documentation generation tools.
114
126
  #
115
127
  # @option options [Integer] :arity (-1) the
116
- # [arity](http://en.wikipedia.org/wiki/Arity) of the function. When
128
+ # [arity](https://en.wikipedia.org/wiki/Arity) of the function. When
117
129
  # specified as a positive integer the function is expected to receive
118
130
  # _exactly_ the specified number of arguments. When specified as a
119
131
  # negative number, the function is expected to receive _at least_ the