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,85 @@
1
+ require 'rgen/ecore/ecore'
2
+
3
+ # Literal values for
4
+ #
5
+ # * String
6
+ # * Numbers
7
+ # * Booleans
8
+ # * Undef (produces nil)
9
+ # * Array
10
+ # * Hash where keys must be Strings
11
+ # * QualifiedName
12
+ #
13
+ # Not considered literal:
14
+ #
15
+ # * QualifiedReference # i.e. File, FooBar
16
+ # * Default is not accepted as being literal
17
+ # * Regular Expression is not accepted as being literal
18
+ # * Hash with non String keys
19
+ # * String with interpolatin
20
+ #
21
+ class Puppet::Pops::Evaluator::JsonStrictLiteralEvaluator
22
+ #include Puppet::Pops::Utils
23
+
24
+ EMPTY_STRING = ''.freeze
25
+ COMMA_SEPARATOR = ', '.freeze
26
+
27
+ def initialize
28
+ @@literal_visitor ||= Puppet::Pops::Visitor.new(self, "literal", 0, 0)
29
+ end
30
+
31
+ def literal(ast)
32
+ @@literal_visitor.visit_this_0(self, ast)
33
+ end
34
+
35
+ def literal_Object(o)
36
+ throw :not_literal
37
+ end
38
+
39
+ def literal_Factory(o)
40
+ literal(o.model)
41
+ end
42
+
43
+ def literal_Program(o)
44
+ literal(o.body)
45
+ end
46
+
47
+ def literal_LiteralString(o)
48
+ o.value
49
+ end
50
+
51
+ def literal_QualifiedName(o)
52
+ o.value
53
+ end
54
+
55
+ def literal_LiteralNumber(o)
56
+ o.value
57
+ end
58
+
59
+ def literal_LiteralBoolean(o)
60
+ o.value
61
+ end
62
+
63
+ def literal_LiteralUndef(o)
64
+ nil
65
+ end
66
+
67
+ def literal_ConcatenatedString(o)
68
+ # use double quoted string value if there is no interpolation
69
+ throw :not_literal unless o.segments.size == 1 && o.segments[0].is_a?(Puppet::Pops::Model::LiteralString)
70
+ o.segments[0].value
71
+ end
72
+
73
+ def literal_LiteralList(o)
74
+ o.values.map {|v| literal(v) }
75
+ end
76
+
77
+ def literal_LiteralHash(o)
78
+ o.entries.reduce({}) do |result, entry|
79
+ key = literal(entry.key)
80
+ throw :not_literal unless key.is_a?(String)
81
+ result[key] = literal(entry.value)
82
+ result
83
+ end
84
+ end
85
+ end
@@ -1,3 +1,5 @@
1
+ module Puppet::Pops
2
+ module Evaluator
1
3
  # The RelationshipOperator implements the semantics of the -> <- ~> <~ operators creating relationships or notification
2
4
  # relationships between the left and right hand side's references to resources.
3
5
  #
@@ -6,14 +8,12 @@
6
8
  # This is done to separate the concerns of the new evaluator from the 3x runtime; messy logic goes into the runtime support
7
9
  # module. Later when more is cleaned up this can be simplified further.
8
10
  #
9
- class Puppet::Pops::Evaluator::RelationshipOperator
11
+ class RelationshipOperator
10
12
 
11
13
  # Provides access to the Puppet 3.x runtime (scope, etc.)
12
14
  # This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
13
15
  #
14
- include Puppet::Pops::Evaluator::Runtime3Support
15
-
16
- Issues = Puppet::Pops::Issues
16
+ include Runtime3Support
17
17
 
18
18
  class IllegalRelationshipOperandError < RuntimeError
19
19
  attr_reader :operand
@@ -30,11 +30,11 @@ class Puppet::Pops::Evaluator::RelationshipOperator
30
30
  end
31
31
 
32
32
  def initialize
33
- @type_transformer_visitor = Puppet::Pops::Visitor.new(self, "transform", 1, 1)
34
- @type_calculator = Puppet::Pops::Types::TypeCalculator.new()
35
- @type_parser = Puppet::Pops::Types::TypeParser.new()
33
+ @type_transformer_visitor = Visitor.new(self, "transform", 1, 1)
34
+ @type_calculator = Types::TypeCalculator.new()
35
+ @type_parser = Types::TypeParser.new()
36
36
 
37
- tf = Puppet::Pops::Types::TypeFactory
37
+ tf = Types::TypeFactory
38
38
  @catalog_type = tf.variant(tf.catalog_entry, tf.type_type(tf.catalog_entry))
39
39
  end
40
40
 
@@ -51,19 +51,19 @@ class Puppet::Pops::Evaluator::RelationshipOperator
51
51
  # A Resource is by definition a Catalog type, but of 3.x type
52
52
  # @api private
53
53
  def transform_Resource(o, scope)
54
- Puppet::Pops::Types::TypeFactory.resource(o.type, o.title)
54
+ Types::TypeFactory.resource(o.type, o.title)
55
55
  end
56
56
 
57
57
  # A string must be a type reference in string format
58
58
  # @api private
59
59
  def transform_String(o, scope)
60
- assert_catalog_type(@type_parser.parse(o), scope)
60
+ assert_catalog_type(@type_parser.parse(o, scope), scope)
61
61
  end
62
62
 
63
63
  # A qualified name is short hand for a class with this name
64
64
  # @api private
65
65
  def transform_QualifiedName(o, scope)
66
- Puppet::Pops::Types::TypeFactory.host_class(o.value)
66
+ Types::TypeFactory.host_class(o.value)
67
67
  end
68
68
 
69
69
  # Types are what they are, just check the type
@@ -165,3 +165,5 @@ class Puppet::Pops::Evaluator::RelationshipOperator
165
165
  REVERSE_OPERATORS.include?(o.operator)
166
166
  end
167
167
  end
168
+ end
169
+ end
@@ -88,6 +88,11 @@ class Runtime3Converter
88
88
  end
89
89
  alias :convert2_Hash :convert_Hash
90
90
 
91
+ def convert_Iterator(o, scope, undef_value)
92
+ raise Puppet::Error, 'Use of an Iterator is not supported here'
93
+ end
94
+ alias :convert2_Iterator :convert_Iterator
95
+
91
96
  def convert_Regexp(o, scope, undef_value)
92
97
  # Puppet 3x cannot handle parameter values that are reqular expressions. Turn into regexp string in
93
98
  # source form
@@ -1,16 +1,18 @@
1
+ module Puppet::Pops
2
+ module Evaluator
1
3
  # A module with bindings between the new evaluator and the 3x runtime.
2
4
  # The intention is to separate all calls into scope, compiler, resource, etc. in this module
3
5
  # to make it easier to later refactor the evaluator for better implementations of the 3x classes.
4
6
  #
5
7
  # @api private
6
- module Puppet::Pops::Evaluator::Runtime3Support
8
+ module Runtime3Support
7
9
 
8
10
  NAME_SPACE_SEPARATOR = '::'.freeze
9
11
 
10
12
  # Fails the evaluation of _semantic_ with a given issue.
11
13
  #
12
- # @param issue [Puppet::Pops::Issue] the issue to report
13
- # @param semantic [Puppet::Pops::ModelPopsObject] the object for which evaluation failed in some way. Used to determine origin.
14
+ # @param issue [Issue] the issue to report
15
+ # @param semantic [ModelPopsObject] the object for which evaluation failed in some way. Used to determine origin.
14
16
  # @param options [Hash] hash of optional named data elements for the given issue
15
17
  # @return [!] this method does not return
16
18
  # @raise [Puppet::ParseError] an evaluation error initialized from the arguments (TODO: Change to EvaluationError?)
@@ -24,8 +26,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
24
26
  # Optionally (based on severity) Fails the evaluation of _semantic_ with a given issue
25
27
  # If the given issue is configured to be of severity < :error it is only reported, and the function returns.
26
28
  #
27
- # @param issue [Puppet::Pops::Issue] the issue to report
28
- # @param semantic [Puppet::Pops::ModelPopsObject] the object for which evaluation failed in some way. Used to determine origin.
29
+ # @param issue [Issue] the issue to report
30
+ # @param semantic [ModelPopsObject] the object for which evaluation failed in some way. Used to determine origin.
29
31
  # @param options [Hash] hash of optional named data elements for the given issue
30
32
  # @return [!] this method does not return
31
33
  # @raise [Puppet::ParseError] an evaluation error initialized from the arguments (TODO: Change to EvaluationError?)
@@ -59,11 +61,11 @@ module Puppet::Pops::Evaluator::Runtime3Support
59
61
  #
60
62
  if scope.bound?(name)
61
63
  if Puppet::Parser::Scope::RESERVED_VARIABLE_NAMES.include?(name)
62
- fail(Puppet::Pops::Issues::ILLEGAL_RESERVED_ASSIGNMENT, o, {:name => name} )
64
+ fail(Issues::ILLEGAL_RESERVED_ASSIGNMENT, o, {:name => name} )
63
65
  elsif name == "server_facts" && Puppet[:trusted_server_facts]
64
- fail(Puppet::Pops::Issues::ILLEGAL_RESERVED_ASSIGNMENT, o, {:name => name} )
66
+ fail(Issues::ILLEGAL_RESERVED_ASSIGNMENT, o, {:name => name} )
65
67
  else
66
- fail(Puppet::Pops::Issues::ILLEGAL_REASSIGNMENT, o, {:name => name} )
68
+ fail(Issues::ILLEGAL_REASSIGNMENT, o, {:name => name} )
67
69
  end
68
70
  end
69
71
  scope.setvar(name, value)
@@ -86,8 +88,9 @@ module Puppet::Pops::Evaluator::Runtime3Support
86
88
  # if not set by a match expression.
87
89
  #
88
90
  unless name =~ Puppet::Pops::Patterns::NUMERIC_VAR_NAME
89
- fail(Puppet::Pops::Issues::UNKNOWN_VARIABLE, o, {:name => name})
91
+ optionally_fail(Puppet::Pops::Issues::UNKNOWN_VARIABLE, o, {:name => name})
90
92
  end
93
+ nil # in case unknown variable is configured as a warning
91
94
  end
92
95
 
93
96
  # Returns true if the variable of the given name is set in the given most nested scope. True is returned even if
@@ -136,10 +139,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
136
139
  end
137
140
 
138
141
  def set_scope_nesting_level(scope, level)
139
- # Yup, 3x uses this method to reset the level, it also supports passing :all to destroy all
140
- # ephemeral/local scopes - which is a sure way to create havoc.
141
- #
142
- scope.unset_ephemeral_var(level)
142
+ # 3x uses this method to reset the level,
143
+ scope.pop_ephemerals(level)
143
144
  end
144
145
 
145
146
  # Adds a relationship between the given `source` and `target` of the given `relationship_type`
@@ -196,20 +197,20 @@ module Puppet::Pops::Evaluator::Runtime3Support
196
197
  # And if that is not enough, a source/target may be a Collector (a baked query that will be evaluated by the
197
198
  # compiler - it is simply passed through here for processing by the compiler at the right time).
198
199
  #
199
- if source.is_a?(Puppet::Pops::Evaluator::Collectors::AbstractCollector)
200
+ if source.is_a?(Collectors::AbstractCollector)
200
201
  # use verbatim - behavior defined by 3x
201
202
  source_resource = source
202
203
  else
203
204
  # transform into the wonderful String representation in 3x
204
- type, title = Puppet::Pops::Evaluator::Runtime3Converter.instance.catalog_type_to_split_type_title(source)
205
+ type, title = Runtime3Converter.instance.catalog_type_to_split_type_title(source)
205
206
  source_resource = Puppet::Resource.new(type, title)
206
207
  end
207
- if target.is_a?(Puppet::Pops::Evaluator::Collectors::AbstractCollector)
208
+ if target.is_a?(Collectors::AbstractCollector)
208
209
  # use verbatim - behavior defined by 3x
209
210
  target_resource = target
210
211
  else
211
212
  # transform into the wonderful String representation in 3x
212
- type, title = Puppet::Pops::Evaluator::Runtime3Converter.instance.catalog_type_to_split_type_title(target)
213
+ type, title = Runtime3Converter.instance.catalog_type_to_split_type_title(target)
213
214
  target_resource = Puppet::Resource.new(type, title)
214
215
  end
215
216
  # Add the relationship to the compiler for later evaluation.
@@ -225,8 +226,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
225
226
  # @return [Numeric] value `v` converted to Numeric.
226
227
  #
227
228
  def coerce_numeric(v, o, scope)
228
- unless n = Puppet::Pops::Utils.to_n(v)
229
- fail(Puppet::Pops::Issues::NOT_NUMERIC, o, {:value => v})
229
+ unless n = Utils.to_n(v)
230
+ fail(Issues::NOT_NUMERIC, o, {:value => v})
230
231
  end
231
232
  n
232
233
  end
@@ -258,35 +259,25 @@ module Puppet::Pops::Evaluator::Runtime3Support
258
259
 
259
260
  # Arguments must be mapped since functions are unaware of the new and magical creatures in 4x.
260
261
  # NOTE: Passing an empty string last converts nil/:undef to empty string
261
- mapped_args = Puppet::Pops::Evaluator::Runtime3Converter.map_args(args, scope, '')
262
+ mapped_args = Runtime3Converter.map_args(args, scope, '')
262
263
  result = scope.send("function_#{name}", mapped_args, &block)
263
264
  # Prevent non r-value functions from leaking their result (they are not written to care about this)
264
265
  Puppet::Parser::Functions.rvalue?(name) ? result : nil
265
266
  end
266
267
 
267
268
  def call_function(name, args, o, scope, &block)
268
- # Call via 4x API if the function exists there
269
- loaders = scope.compiler.loaders
270
- # find the loader that loaded the code, or use the private_environment_loader (sees env + all modules)
271
- adapter = Puppet::Pops::Utils.find_adapter(o, Puppet::Pops::Adapters::LoaderAdapter)
272
-
273
- # Use source location to determine calling module, or use the private_environment_loader (sees env + all modules)
274
- # This is necessary since not all .pp files are loaded by a Puppet::Pops::Loader (see PUP-1833)
275
- adapter ||= Puppet::Pops::Adapters::LoaderAdapter.adapt_by_source(scope, o)
276
-
277
- loader = adapter.nil? ? loaders.private_environment_loader : adapter.loader
269
+ loader = Adapters::LoaderAdapter.loader_for_model_object(o, scope)
278
270
  if loader && func = loader.load(:function, name)
279
271
  Puppet::Util::Profiler.profile(name, [:functions, name]) do
280
272
  return func.call(scope, *args, &block)
281
273
  end
282
274
  end
283
-
284
275
  # Call via 3x API if function exists there
285
- fail(Puppet::Pops::Issues::UNKNOWN_FUNCTION, o, {:name => name}) unless Puppet::Parser::Functions.function(name)
276
+ fail(Issues::UNKNOWN_FUNCTION, o, {:name => name}) unless Puppet::Parser::Functions.function(name)
286
277
 
287
278
  # Arguments must be mapped since functions are unaware of the new and magical creatures in 4x.
288
279
  # NOTE: Passing an empty string last converts nil/:undef to empty string
289
- mapped_args = Puppet::Pops::Evaluator::Runtime3Converter.map_args(args, scope, '')
280
+ mapped_args = Runtime3Converter.map_args(args, scope, '')
290
281
  result = scope.send("function_#{name}", mapped_args, &block)
291
282
  # Prevent non r-value functions from leaking their result (they are not written to care about this)
292
283
  Puppet::Parser::Functions.rvalue?(name) ? result : nil
@@ -304,7 +295,7 @@ module Puppet::Pops::Evaluator::Runtime3Support
304
295
  end
305
296
 
306
297
  def convert(value, scope, undef_value)
307
- Puppet::Pops::Evaluator::Runtime3Converter.convert(value, scope, undef_value)
298
+ Runtime3Converter.convert(value, scope, undef_value)
308
299
  end
309
300
 
310
301
  CLASS_STRING = 'class'.freeze
@@ -315,6 +306,7 @@ module Puppet::Pops::Evaluator::Runtime3Support
315
306
  # a proper Issue. Now the result is "Error while evaluating a Resource Statement" with the message
316
307
  # from the raised exception. (It may be good enough).
317
308
 
309
+
318
310
  # resolve in scope.
319
311
  fully_qualified_type, resource_titles = scope.resolve_type_and_titles(type_name, resource_titles)
320
312
 
@@ -380,8 +372,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
380
372
  # A *=> results in an array of arrays
381
373
  evaluated_parameters = evaluated_parameters.flatten
382
374
  evaluated_resources.each do |r|
383
- unless r.is_a?(Puppet::Pops::Types::PResourceType) && r.type_name != 'class'
384
- fail(Puppet::Pops::Issues::ILLEGAL_OVERRIDEN_TYPE, o, {:actual => r} )
375
+ unless r.is_a?(Types::PResourceType) && r.type_name != 'class'
376
+ fail(Issues::ILLEGAL_OVERRIDEN_TYPE, o, {:actual => r} )
385
377
  end
386
378
  resource = Puppet::Parser::Resource.new(
387
379
  r.type_name, r.title,
@@ -473,27 +465,27 @@ module Puppet::Pops::Evaluator::Runtime3Support
473
465
  end
474
466
 
475
467
  def extract_file_line(o)
476
- source_pos = Puppet::Pops::Utils.find_closest_positioned(o)
468
+ source_pos = Utils.find_closest_positioned(o)
477
469
  return [nil, -1] unless source_pos
478
470
  [source_pos.locator.file, source_pos.line]
479
471
  end
480
472
 
481
473
  def find_closest_positioned(o)
482
- return nil if o.nil? || o.is_a?(Puppet::Pops::Model::Program)
483
- o.offset.nil? ? find_closest_positioned(o.eContainer) : Puppet::Pops::Adapters::SourcePosAdapter.adapt(o)
474
+ return nil if o.nil? || o.is_a?(Model::Program)
475
+ o.offset.nil? ? find_closest_positioned(o.eContainer) : Adapters::SourcePosAdapter.adapt(o)
484
476
  end
485
477
 
486
478
  # Creates a diagnostic producer
487
479
  def diagnostic_producer
488
- Puppet::Pops::Validation::DiagnosticProducer.new(
480
+ Validation::DiagnosticProducer.new(
489
481
  ExceptionRaisingAcceptor.new(), # Raises exception on all issues
490
482
  SeverityProducer.new(), # All issues are errors
491
- Puppet::Pops::Model::ModelLabelProvider.new())
483
+ Model::ModelLabelProvider.new())
492
484
  end
493
485
 
494
486
  # Configure the severity of failures
495
- class SeverityProducer < Puppet::Pops::Validation::SeverityProducer
496
- Issues = Puppet::Pops::Issues
487
+ class SeverityProducer < Validation::SeverityProducer
488
+ Issues = Issues
497
489
 
498
490
  def initialize
499
491
  super
@@ -505,6 +497,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
505
497
  p[Issues::EMPTY_RESOURCE_SPECIALIZATION] = :ignore
506
498
  end
507
499
 
500
+ p[Issues::UNKNOWN_VARIABLE] = Puppet[:strict_variables] ? :error : :warning
501
+
508
502
  # Store config issues, ignore or warning
509
503
  p[Issues::RT_NO_STORECONFIGS_EXPORT] = Puppet[:storeconfigs] ? :ignore : :warning
510
504
  p[Issues::RT_NO_STORECONFIGS] = Puppet[:storeconfigs] ? :ignore : :warning
@@ -512,10 +506,10 @@ module Puppet::Pops::Evaluator::Runtime3Support
512
506
  end
513
507
 
514
508
  # An acceptor of diagnostics that immediately raises an exception.
515
- class ExceptionRaisingAcceptor < Puppet::Pops::Validation::Acceptor
509
+ class ExceptionRaisingAcceptor < Validation::Acceptor
516
510
  def accept(diagnostic)
517
511
  super
518
- Puppet::Pops::IssueReporter.assert_and_report(self, {
512
+ IssueReporter.assert_and_report(self, {
519
513
  :message => "Evaluation Error:",
520
514
  :emit_warnings => true, # log warnings
521
515
  :exception_class => Puppet::PreformattedError
@@ -529,3 +523,5 @@ module Puppet::Pops::Evaluator::Runtime3Support
529
523
  class EvaluationError < StandardError
530
524
  end
531
525
  end
526
+ end
527
+ end
@@ -1,6 +1,7 @@
1
- class Puppet::Pops::IssueReporter
1
+ module Puppet::Pops
2
+ class IssueReporter
2
3
 
3
- # @param acceptor [Puppet::Pops::Validation::Acceptor] the acceptor containing reported issues
4
+ # @param acceptor [Validation::Acceptor] the acceptor containing reported issues
4
5
  # @option options [String] :message (nil) A message text to use as prefix in
5
6
  # a single Error message
6
7
  # @option options [Boolean] :emit_warnings (false) whether warnings should be emitted
@@ -23,7 +24,7 @@ class Puppet::Pops::IssueReporter
23
24
  # If there are warnings output them
24
25
  warnings = acceptor.warnings
25
26
  if emit_warnings && warnings.size > 0
26
- formatter = Puppet::Pops::Validation::DiagnosticFormatterPuppetStyle.new
27
+ formatter = Validation::DiagnosticFormatterPuppetStyle.new
27
28
  emitted_w = 0
28
29
  emitted_dw = 0
29
30
  acceptor.warnings.each do |w|
@@ -48,7 +49,7 @@ class Puppet::Pops::IssueReporter
48
49
  unless emit_errors
49
50
  raise emit_exception.new(emit_message)
50
51
  end
51
- formatter = Puppet::Pops::Validation::DiagnosticFormatterPuppetStyle.new
52
+ formatter = Validation::DiagnosticFormatterPuppetStyle.new
52
53
  if errors.size == 1 || max_errors <= 1
53
54
  # raise immediately
54
55
  exception = create_exception(emit_exception, emit_message, formatter, errors[0])
@@ -111,3 +112,4 @@ class Puppet::Pops::IssueReporter
111
112
  end
112
113
  private_class_method :log_message
113
114
  end
115
+ end
@@ -1,7 +1,8 @@
1
1
  # Defines classes to deal with issues, and message formatting and defines constants with Issues.
2
2
  # @api public
3
3
  #
4
- module Puppet::Pops::Issues
4
+ module Puppet::Pops
5
+ module Issues
5
6
  # Describes an issue, and can produce a message for an occurrence of the issue.
6
7
  #
7
8
  class Issue
@@ -48,7 +49,7 @@ module Puppet::Pops::Issues
48
49
  # Evaluate the message block in the msg data's binding
49
50
  msgdata.format(hash, &message_block)
50
51
  rescue StandardError => e
51
- Puppet::Pops::Issues::MessageData
52
+ MessageData
52
53
  raise RuntimeError, "Error while reporting issue: #{issue_code}. #{e.message}", caller
53
54
  end
54
55
  end
@@ -73,19 +74,30 @@ module Puppet::Pops::Issues
73
74
  instance_eval &block
74
75
  end
75
76
 
76
- # Returns the label provider given as a key in the hash passed to #format.
77
- # If given an argument, calls #label on the label provider (caller would otherwise have to
78
- # call label.label(it)
77
+ # Obtains the label provider given as a key `:label` in the hash passed to #format. The label provider is
78
+ # return if no arguments are given. If given an argument, returns the result of calling #label on the label
79
+ # provider.
79
80
  #
80
- def label(it = nil)
81
- raise "Label provider key :label must be set to produce the text of the message!" unless @data[:label]
82
- it.nil? ? @data[:label] : @data[:label].label(it)
81
+ # @param args [Object] one object to obtain a label for or zero arguments to obtain the label provider
82
+ # @return [LabelProvider,String] the label provider or label depending on if an argument is given or not
83
+ # @raise [Puppet::Error] if no label provider is found
84
+ def label(*args)
85
+ args.empty? ? label_provider : label_provider.label(args[0])
86
+ end
87
+
88
+ # Returns the label provider given as key `:label` in the hash passed to #format.
89
+ # @return [LabelProvider] the label provider
90
+ # @raise [Puppet::Error] if no label provider is found
91
+ def label_provider
92
+ label_provider = @data[:label]
93
+ raise Puppet::Error, 'Label provider key :label must be set to produce the text of the message!' unless label_provider
94
+ label_provider
83
95
  end
84
96
 
85
97
  # Returns the label provider given as a key in the hash passed to #format.
86
98
  #
87
99
  def semantic
88
- raise "Label provider key :semantic must be set to produce the text of the message!" unless @data[:semantic]
100
+ raise Puppet::Error, 'Label provider key :semantic must be set to produce the text of the message!' unless @data[:semantic]
89
101
  @data[:semantic]
90
102
  end
91
103
  end
@@ -166,7 +178,7 @@ module Puppet::Pops::Issues
166
178
 
167
179
  # Variables are immutable, cannot reassign in the same assignment scope
168
180
  ILLEGAL_REASSIGNMENT = hard_issue :ILLEGAL_REASSIGNMENT, :name do
169
- if Puppet::Pops::Validation::Checker4_0::RESERVED_PARAMETERS[name]
181
+ if Validation::Checker4_0::RESERVED_PARAMETERS[name]
170
182
  "Cannot reassign built in (or already assigned) variable '$#{name}'"
171
183
  else
172
184
  "Cannot reassign variable '$#{name}'"
@@ -347,6 +359,12 @@ module Puppet::Pops::Issues
347
359
  "Attempt to use unsupported range in #{label.a_an(semantic)}, #{count} values given for max 1"
348
360
  end
349
361
 
362
+ # Issues when expressions that are not implemented or activated in the current version are used.
363
+ #
364
+ UNSUPPORTED_EXPRESSION = issue :UNSUPPORTED_EXPRESSION do
365
+ "Expressions of type #{label.a_an(semantic)} are not supported in this version of Puppet"
366
+ end
367
+
350
368
  ILLEGAL_RELATIONSHIP_OPERAND_TYPE = issue :ILLEGAL_RELATIONSHIP_OPERAND_TYPE, :operand do
351
369
  "Illegal relationship operand, can not form a relationship with #{label.a_an(operand)}. A Catalog type is required."
352
370
  end
@@ -488,7 +506,7 @@ module Puppet::Pops::Issues
488
506
  end
489
507
 
490
508
  DUPLICATE_ATTRIBUTE = issue :DUPLICATE_ATTRIBUE, :attribute do
491
- "The attribute '#{attribute}' has already been set in this resource body"
509
+ "The attribute '#{attribute}' has already been set"
492
510
  end
493
511
 
494
512
  MISSING_TITLE = hard_issue :MISSING_TITLE do
@@ -687,4 +705,9 @@ module Puppet::Pops::Issues
687
705
  HEREDOC_MULTIPLE_AT_ESCAPES = hard_issue :HEREDOC_MULTIPLE_AT_ESCAPES, :escapes do
688
706
  "An escape char for @() may only appear once. Got '#{escapes.join(', ')}'"
689
707
  end
708
+
709
+ ILLEGAL_BOM = hard_issue :ILLEGAL_BOM, :format_name, :bytes do
710
+ "Illegal #{format_name} Byte Order mark at beginning of input: #{bytes} - remove these from the puppet source"
711
+ end
712
+ end
690
713
  end