puppet 4.3.2-x64-mingw32 → 4.4.0-x64-mingw32

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

Potentially problematic release.


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

Files changed (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
@@ -1,5 +1,6 @@
1
1
  # Provides utility methods
2
- module Puppet::Pops::Utils
2
+ module Puppet::Pops
3
+ module Utils
3
4
  # Can the given o be converted to numeric? (or is numeric already)
4
5
  # Accepts a leading '::'
5
6
  # Returns a boolean if the value is numeric
@@ -10,11 +11,11 @@ module Puppet::Pops::Utils
10
11
  when Numeric
11
12
  true
12
13
  else
13
- !!Puppet::Pops::Patterns::NUMERIC.match(relativize_name(o.to_s))
14
+ !!Patterns::NUMERIC.match(relativize_name(o.to_s))
14
15
  end
15
16
  end
16
17
 
17
- # Convert a match from Puppet::Pops::Patterns::NUMERIC to floating point value if
18
+ # Convert a match from Patterns::NUMERIC to floating point value if
18
19
  # possible
19
20
  def self.match_to_fp(match)
20
21
  if match[5].to_s.length > 0
@@ -45,7 +46,7 @@ module Puppet::Pops::Utils
45
46
  begin
46
47
  case o
47
48
  when String
48
- match = Puppet::Pops::Patterns::NUMERIC.match(relativize_name(o))
49
+ match = Patterns::NUMERIC.match(relativize_name(o))
49
50
  if !match
50
51
  nil
51
52
  elsif match[5].to_s.length > 0
@@ -84,7 +85,7 @@ module Puppet::Pops::Utils
84
85
  begin
85
86
  case o
86
87
  when String
87
- match = Puppet::Pops::Patterns::NUMERIC.match(relativize_name(o))
88
+ match = Patterns::NUMERIC.match(relativize_name(o))
88
89
  if !match
89
90
  nil
90
91
  elsif match[5].to_s.length > 0
@@ -129,14 +130,14 @@ module Puppet::Pops::Utils
129
130
  return find_adapter(o.eContainer, adapter)
130
131
  end
131
132
 
132
- # Finds the closest positioned Puppet::Pops::Model::Positioned object, or object decorated with
133
+ # Finds the closest positioned Model::Positioned object, or object decorated with
133
134
  # a SourcePosAdapter, and returns
134
135
  # a SourcePosAdapter for the first found, or nil if not found.
135
136
  #
136
137
  def self.find_closest_positioned(o)
137
- return nil if o.nil? || o.is_a?(Puppet::Pops::Model::Program) || (o.is_a?(Array) && o.empty?)
138
- return find_adapter(o, Puppet::Pops::Adapters::SourcePosAdapter) unless o.is_a?(Puppet::Pops::Model::Positioned)
139
- o.offset.nil? ? find_closest_positioned(o.eContainer) : Puppet::Pops::Adapters::SourcePosAdapter.adapt(o)
138
+ return nil if o.nil? || o.is_a?(Model::Program) || (o.is_a?(Array) && o.empty?)
139
+ return find_adapter(o, Adapters::SourcePosAdapter) unless o.is_a?(Model::Positioned)
140
+ o.offset.nil? ? find_closest_positioned(o.eContainer) : Adapters::SourcePosAdapter.adapt(o)
140
141
  end
141
-
142
+ end
142
143
  end
@@ -1,3 +1,4 @@
1
+ module Puppet::Pops
1
2
  # A module with base functionality for validation of a model.
2
3
  #
3
4
  # * **Factory** - an abstract factory implementation that makes it easier to create a new validation factory.
@@ -6,7 +7,7 @@
6
7
  # * **Acceptor** - the receiver/sink/collector of computed diagnostics
7
8
  # * **DiagnosticFormatter** - produces human readable output for a Diagnostic
8
9
  #
9
- module Puppet::Pops::Validation
10
+ module Validation
10
11
 
11
12
  # This class is an abstract base implementation of a _model validation factory_ that creates a validator instance
12
13
  # and associates it with a fully configured DiagnosticProducer.
@@ -45,7 +46,7 @@ module Puppet::Pops::Validation
45
46
  # @api public
46
47
  #
47
48
  def diagnostic_producer(acceptor)
48
- Puppet::Pops::Validation::DiagnosticProducer.new(acceptor, severity_producer(), label_provider())
49
+ DiagnosticProducer.new(acceptor, severity_producer(), label_provider())
49
50
  end
50
51
 
51
52
  # Produces the SeverityProducer to use
@@ -56,7 +57,7 @@ module Puppet::Pops::Validation
56
57
  # @api public
57
58
  #
58
59
  def severity_producer
59
- Puppet::Pops::Validation::SeverityProducer.new
60
+ SeverityProducer.new
60
61
  end
61
62
 
62
63
  # Produces the checker to use.
@@ -119,12 +120,12 @@ module Puppet::Pops::Validation
119
120
 
120
121
  # Override a default severity with the given severity level.
121
122
  #
122
- # @param issue [Puppet::Pops::Issues::Issue] the issue for which to set severity
123
+ # @param issue [Issues::Issue] the issue for which to set severity
123
124
  # @param level [Symbol] the severity level (:error, :warning, or :ignore).
124
125
  # @api public
125
126
  #
126
127
  def []=(issue, level)
127
- raise Puppet::DevError.new("Attempt to set validation severity for something that is not an Issue. (Got #{issue.class})") unless issue.is_a? Puppet::Pops::Issues::Issue
128
+ raise Puppet::DevError.new("Attempt to set validation severity for something that is not an Issue. (Got #{issue.class})") unless issue.is_a? Issues::Issue
128
129
  raise Puppet::DevError.new("Illegal severity level: #{option}") unless @@severity_hash[level]
129
130
  raise Puppet::DevError.new("Attempt to demote the hard issue '#{issue.issue_code}' to #{level}") unless issue.demotable? || level == :error
130
131
  @severities[issue] = level
@@ -144,7 +145,7 @@ module Puppet::Pops::Validation
144
145
  # @api private
145
146
  #
146
147
  def assert_issue issue
147
- raise Puppet::DevError.new("Attempt to get validation severity for something that is not an Issue. (Got #{issue.class})") unless issue.is_a? Puppet::Pops::Issues::Issue
148
+ raise Puppet::DevError.new("Attempt to get validation severity for something that is not an Issue. (Got #{issue.class})") unless issue.is_a? Issues::Issue
148
149
  end
149
150
 
150
151
  # Checks if the given severity level is valid.
@@ -203,7 +204,7 @@ module Puppet::Pops::Validation
203
204
  source_pos = semantic
204
205
  file = semantic.file
205
206
  else
206
- source_pos = Puppet::Pops::Utils.find_closest_positioned(semantic)
207
+ source_pos = Utils.find_closest_positioned(semantic)
207
208
  file = source_pos ? source_pos.locator.file : nil
208
209
  end
209
210
 
@@ -404,7 +405,7 @@ module Puppet::Pops::Validation
404
405
  end
405
406
 
406
407
  # Add a diagnostic, or all diagnostics from another acceptor to the set of diagnostics
407
- # @param diagnostic [Puppet::Pops::Validation::Diagnostic, Puppet::Pops::Validation::Acceptor] diagnostic(s) that should be accepted
408
+ # @param diagnostic [Diagnostic, Acceptor] diagnostic(s) that should be accepted
408
409
  def accept(diagnostic)
409
410
  if diagnostic.is_a?(Acceptor)
410
411
  diagnostic.diagnostics.each {|d| self.send(d.severity, d)}
@@ -415,7 +416,7 @@ module Puppet::Pops::Validation
415
416
 
416
417
  # Prunes the contain diagnostics by removing those for which the given block returns true.
417
418
  # The internal statistics is updated as a consequence of removing.
418
- # @return [Array<Puppet::Pops::Validation::Diagnostic, nil] the removed set of diagnostics or nil if nothing was removed
419
+ # @return [Array<Diagnostic, nil] the removed set of diagnostics or nil if nothing was removed
419
420
  #
420
421
  def prune(&block)
421
422
  removed = []
@@ -458,3 +459,4 @@ module Puppet::Pops::Validation
458
459
  end
459
460
  end
460
461
  end
462
+ end
@@ -1,3 +1,5 @@
1
+ module Puppet::Pops
2
+ module Validation
1
3
  # A Validator validates a model.
2
4
  #
3
5
  # Validation is performed on each model element in isolation. Each method should validate the model element's state
@@ -9,10 +11,7 @@
9
11
  # Model objects via their metamodel. (I.e an extra call to multiplicity check in polymorph check).
10
12
  # This is however mostly valuable when validating model to model transformations, and is therefore T.B.D
11
13
  #
12
- class Puppet::Pops::Validation::Checker4_0
13
- Issues = Puppet::Pops::Issues
14
- Model = Puppet::Pops::Model
15
-
14
+ class Checker4_0
16
15
  attr_reader :acceptor
17
16
  attr_reader :migration_checker
18
17
 
@@ -20,19 +19,19 @@ class Puppet::Pops::Validation::Checker4_0
20
19
  # `:will_accept?` and `:accept`.
21
20
  #
22
21
  def initialize(diagnostics_producer)
23
- @@check_visitor ||= Puppet::Pops::Visitor.new(nil, "check", 0, 0)
24
- @@rvalue_visitor ||= Puppet::Pops::Visitor.new(nil, "rvalue", 0, 0)
25
- @@hostname_visitor ||= Puppet::Pops::Visitor.new(nil, "hostname", 1, 2)
26
- @@assignment_visitor ||= Puppet::Pops::Visitor.new(nil, "assign", 0, 1)
27
- @@query_visitor ||= Puppet::Pops::Visitor.new(nil, "query", 0, 0)
28
- @@top_visitor ||= Puppet::Pops::Visitor.new(nil, "top", 1, 1)
29
- @@relation_visitor ||= Puppet::Pops::Visitor.new(nil, "relation", 0, 0)
30
- @@idem_visitor ||= Puppet::Pops::Visitor.new(self, "idem", 0, 0)
22
+ @@check_visitor ||= Visitor.new(nil, "check", 0, 0)
23
+ @@rvalue_visitor ||= Visitor.new(nil, "rvalue", 0, 0)
24
+ @@hostname_visitor ||= Visitor.new(nil, "hostname", 1, 2)
25
+ @@assignment_visitor ||= Visitor.new(nil, "assign", 0, 1)
26
+ @@query_visitor ||= Visitor.new(nil, "query", 0, 0)
27
+ @@top_visitor ||= Visitor.new(nil, "top", 1, 1)
28
+ @@relation_visitor ||= Visitor.new(nil, "relation", 0, 0)
29
+ @@idem_visitor ||= Visitor.new(self, "idem", 0, 0)
31
30
 
32
31
  @acceptor = diagnostics_producer
33
32
 
34
33
  # Use null migration checker unless given in context
35
- @migration_checker = (Puppet.lookup(:migration_checker) { Puppet::Pops::Migration::MigrationChecker.new() })
34
+ @migration_checker = (Puppet.lookup(:migration_checker) { Migration::MigrationChecker.new() })
36
35
  end
37
36
 
38
37
  # Validates the entire model by visiting each model element and calling `check`.
@@ -94,7 +93,7 @@ class Puppet::Pops::Validation::Checker4_0
94
93
 
95
94
  # Returns the last expression in a block, or the expression, if that expression is idem
96
95
  def ends_with_idem(o)
97
- if o.is_a?(Puppet::Pops::Model::BlockExpression)
96
+ if o.is_a?(Model::BlockExpression)
98
97
  last = o.statements[-1]
99
98
  idem(last) ? last : nil
100
99
  else
@@ -106,7 +105,7 @@ class Puppet::Pops::Validation::Checker4_0
106
105
 
107
106
  def assign_VariableExpression(o, via_index)
108
107
  varname_string = varname_to_s(o.expr)
109
- if varname_string =~ Puppet::Pops::Patterns::NUMERIC_VAR_NAME
108
+ if varname_string =~ Patterns::NUMERIC_VAR_NAME
110
109
  acceptor.accept(Issues::ILLEGAL_NUMERIC_ASSIGNMENT, o, :varname => varname_string)
111
110
  end
112
111
  # Can not assign to something in another namespace (i.e. a '::' in the name is not legal)
@@ -214,9 +213,9 @@ class Puppet::Pops::Validation::Checker4_0
214
213
  end
215
214
 
216
215
  def resource_without_title?(o)
217
- if o.instance_of?(Puppet::Pops::Model::BlockExpression)
216
+ if o.instance_of?(Model::BlockExpression)
218
217
  statements = o.statements
219
- statements.length == 2 && statements[0].instance_of?(Puppet::Pops::Model::QualifiedName) && statements[1].instance_of?(Puppet::Pops::Model::LiteralHash)
218
+ statements.length == 2 && statements[0].instance_of?(Model::QualifiedName) && statements[1].instance_of?(Model::LiteralHash)
220
219
  else
221
220
  false
222
221
  end
@@ -237,10 +236,10 @@ class Puppet::Pops::Validation::Checker4_0
237
236
 
238
237
  def check_CallNamedFunctionExpression(o)
239
238
  case o.functor_expr
240
- when Puppet::Pops::Model::QualifiedName
239
+ when Model::QualifiedName
241
240
  # ok
242
241
  nil
243
- when Puppet::Pops::Model::RenderStringExpression
242
+ when Model::RenderStringExpression
244
243
  # helpful to point out this easy to make Epp error
245
244
  acceptor.accept(Issues::ILLEGAL_EPP_PARAMETERS, o)
246
245
  else
@@ -251,16 +250,16 @@ class Puppet::Pops::Validation::Checker4_0
251
250
  def check_CapabilityMapping(o)
252
251
  ok =
253
252
  case o.component
254
- when Puppet::Pops::Model::QualifiedName
253
+ when Model::QualifiedName
255
254
  name = o.component.value
256
- acceptor.accept(Issues::ILLEGAL_CLASSREF, o.component, {:name=>name}) unless name =~ Puppet::Pops::Patterns::CLASSREF_EXT
255
+ acceptor.accept(Issues::ILLEGAL_CLASSREF, o.component, {:name=>name}) unless name =~ Patterns::CLASSREF_EXT
257
256
  true
258
- when Puppet::Pops::Model::AccessExpression
257
+ when Model::AccessExpression
259
258
  keys = o.component.keys
260
259
  expr = o.component.left_expr
261
- if expr.is_a?(Puppet::Pops::Model::QualifiedReference) && keys.size == 1
260
+ if expr.is_a?(Model::QualifiedReference) && keys.size == 1
262
261
  key = keys[0]
263
- key.is_a?(Puppet::Pops::Model::LiteralString) || key.is_a?(Puppet::Pops::Model::QualifiedName) || key.is_a?(Puppet::Pops::Model::QualifiedReference)
262
+ key.is_a?(Model::LiteralString) || key.is_a?(Model::QualifiedName) || key.is_a?(Model::QualifiedReference)
264
263
  else
265
264
  false
266
265
  end
@@ -269,13 +268,13 @@ class Puppet::Pops::Validation::Checker4_0
269
268
  end
270
269
  acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.component, :feature=>'capability mapping', :container => o) unless ok
271
270
 
272
- if o.capability !~ Puppet::Pops::Patterns::CLASSREF_EXT
271
+ if o.capability !~ Patterns::CLASSREF_EXT
273
272
  acceptor.accept(Issues::ILLEGAL_CLASSREF, o, {:name=>o.capability})
274
273
  end
275
274
  end
276
275
 
277
276
  def check_EppExpression(o)
278
- if o.eContainer.is_a?(Puppet::Pops::Model::LambdaExpression)
277
+ if o.eContainer.is_a?(Model::LambdaExpression)
279
278
  internal_check_no_capture(o.eContainer, o)
280
279
  internal_check_parameter_name_uniqueness(o.eContainer)
281
280
  end
@@ -301,13 +300,6 @@ class Puppet::Pops::Validation::Checker4_0
301
300
  unless o.type_expr.is_a? Model::QualifiedReference
302
301
  acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.type_expr, :feature=> 'type name', :container => o)
303
302
  end
304
-
305
- # If a collect expression tries to collect exported resources and storeconfigs is not on
306
- # then it will not work... This was checked in the parser previously. This is a runtime checking
307
- # thing as opposed to a language thing.
308
- if acceptor.will_accept?(Issues::RT_NO_STORECONFIGS) && o.query.is_a?(Model::ExportedQuery)
309
- acceptor.accept(Issues::RT_NO_STORECONFIGS, o)
310
- end
311
303
  end
312
304
 
313
305
  # Only used for function names, grammar should not be able to produce something faulty, but
@@ -350,23 +342,29 @@ class Puppet::Pops::Validation::Checker4_0
350
342
  # for 'class', 'define', and function
351
343
  def check_NamedDefinition(o)
352
344
  top(o.eContainer, o)
353
- if o.name !~ Puppet::Pops::Patterns::CLASSREF
345
+ if o.name !~ Patterns::CLASSREF
354
346
  acceptor.accept(Issues::ILLEGAL_DEFINITION_NAME, o, {:name=>o.name})
355
347
  end
348
+ internal_check_reserved_type_name(o, o.name)
349
+ internal_check_future_reserved_word(o, o.name)
350
+ end
356
351
 
357
- if RESERVED_TYPE_NAMES[o.name()]
358
- acceptor.accept(Issues::RESERVED_TYPE_NAME, o, {:name => o.name})
359
- end
352
+ def check_TypeAlias(o)
353
+ top(o.eContainer, o)
354
+ internal_check_reserved_type_name(o, o.name)
355
+ internal_check_type_ref(o, o.type_expr)
356
+ end
360
357
 
361
- # This is perhaps not ideal but it's very difficult to pass a ReservedWord through
362
- # the mechanism that creates qualified names (namestack, namepop etc.)
363
- if FUTURE_RESERVED_WORDS[o.name]
364
- acceptor.accept(Issues::FUTURE_RESERVED_WORD, o, {:word => o.name})
365
- end
358
+ def check_TypeDefinition(o)
359
+ top(o.eContainer, o)
360
+ internal_check_reserved_type_name(o, o.name)
361
+ # TODO: Check TypeDefinition body. For now, just error out
362
+ acceptor.accept(Issues::UNSUPPORTED_EXPRESSION, o)
366
363
  end
367
364
 
368
365
  def check_FunctionDefinition(o)
369
366
  check_NamedDefinition(o)
367
+ internal_check_parameter_name_uniqueness(o)
370
368
  end
371
369
 
372
370
  def check_HostClassDefinition(o)
@@ -385,6 +383,15 @@ class Puppet::Pops::Validation::Checker4_0
385
383
  internal_check_no_idem_last(o)
386
384
  end
387
385
 
386
+ def internal_check_type_ref(o, r)
387
+ n = r.is_a?(Model::AccessExpression) ? r.left_expr : r
388
+ if n.is_a? Model::QualifiedReference
389
+ internal_check_future_reserved_word(r, n.value)
390
+ else
391
+ acceptor.accept(Issues::ILLEGAL_EXPRESSION, r, :feature => 'a type reference', :container => o)
392
+ end
393
+ end
394
+
388
395
  def internal_check_no_idem_last(o)
389
396
  if violator = ends_with_idem(o.body)
390
397
  acceptor.accept(Issues::IDEM_NOT_ALLOWED_LAST, violator, {:container => o}) unless resource_without_title?(violator)
@@ -408,6 +415,19 @@ class Puppet::Pops::Validation::Checker4_0
408
415
  end
409
416
  end
410
417
 
418
+ def internal_check_reserved_type_name(o, name)
419
+ if RESERVED_TYPE_NAMES[name]
420
+ acceptor.accept(Issues::RESERVED_TYPE_NAME, o, {:name => name})
421
+ end
422
+ end
423
+
424
+ def internal_check_future_reserved_word(o, name)
425
+ if FUTURE_RESERVED_WORDS[name]
426
+ acceptor.accept(Issues::FUTURE_RESERVED_WORD, o, {:word => name})
427
+ end
428
+ end
429
+
430
+
411
431
  RESERVED_PARAMETERS = {
412
432
  'name' => true,
413
433
  'title' => true,
@@ -471,7 +491,7 @@ class Puppet::Pops::Validation::Checker4_0
471
491
  # DOH: QualifiedReferences are created with LOWER CASE NAMES at parse time
472
492
  def check_QualifiedReference(o)
473
493
  # Is this a valid qualified name?
474
- if o.value !~ Puppet::Pops::Patterns::CLASSREF
494
+ if o.value !~ Patterns::CLASSREF
475
495
  acceptor.accept(Issues::ILLEGAL_CLASSREF, o, {:name=>o.value})
476
496
  end
477
497
  end
@@ -493,17 +513,21 @@ class Puppet::Pops::Validation::Checker4_0
493
513
  acceptor.accept(Issues::ILLEGAL_NUMERIC_PARAMETER, o, :name => o.name)
494
514
  end
495
515
 
496
- unless o.name =~ Puppet::Pops::Patterns::PARAM_NAME
516
+ unless o.name =~ Patterns::PARAM_NAME
497
517
  acceptor.accept(Issues::ILLEGAL_PARAM_NAME, o, :name => o.name)
498
518
  end
499
519
  return unless o.value
500
520
 
501
- if o.value.is_a?(Puppet::Pops::Model::AssignmentExpression)
502
- [o.value]
521
+ internal_check_illegal_assignment(o.value)
522
+ end
523
+
524
+ def internal_check_illegal_assignment(o)
525
+ if o.is_a?(Model::AssignmentExpression)
526
+ acceptor.accept(Issues::ILLEGAL_ASSIGNMENT_CONTEXT, o)
503
527
  else
504
- o.value.eAllContents.select {|model| model.is_a? Puppet::Pops::Model::AssignmentExpression }
505
- end.each do |assignment|
506
- acceptor.accept(Issues::ILLEGAL_ASSIGNMENT_CONTEXT, assignment)
528
+ # recursively check all contents unless it's a lambda expression. A lambda may contain
529
+ # local assignments
530
+ o.eContents.each {|model| internal_check_illegal_assignment(model) } unless o.is_a?(Model::LambdaExpression)
507
531
  end
508
532
  end
509
533
 
@@ -531,7 +555,7 @@ class Puppet::Pops::Validation::Checker4_0
531
555
  def check_ResourceBody(o)
532
556
  seenUnfolding = false
533
557
  o.operations.each do |ao|
534
- if ao.is_a?(Puppet::Pops::Model::AttributesOperation)
558
+ if ao.is_a?(Model::AttributesOperation)
535
559
  if seenUnfolding
536
560
  acceptor.accept(Issues::MULTIPLE_ATTRIBUTES_UNFOLD, ao)
537
561
  else
@@ -589,11 +613,11 @@ class Puppet::Pops::Validation::Checker4_0
589
613
  # name must be either a decimal string value, or a valid NAME
590
614
  name = o.expr.value
591
615
  if name[0,1] =~ /[0-9]/
592
- unless name =~ Puppet::Pops::Patterns::NUMERIC_VAR_NAME
616
+ unless name =~ Patterns::NUMERIC_VAR_NAME
593
617
  acceptor.accept(Issues::ILLEGAL_NUMERIC_VAR_NAME, o, :name => name)
594
618
  end
595
619
  else
596
- unless name =~ Puppet::Pops::Patterns::VAR_NAME
620
+ unless name =~ Patterns::VAR_NAME
597
621
  acceptor.accept(Issues::ILLEGAL_VAR_NAME, o, :name => name)
598
622
  end
599
623
  end
@@ -612,7 +636,7 @@ class Puppet::Pops::Validation::Checker4_0
612
636
  # but this allows pathological names like "a..b......c", "----"
613
637
  # TODO: Investigate if more illegal hostnames should be flagged.
614
638
  #
615
- if o =~ Puppet::Pops::Patterns::ILLEGAL_HOSTNAME_CHARS
639
+ if o =~ Patterns::ILLEGAL_HOSTNAME_CHARS
616
640
  acceptor.accept(Issues::ILLEGAL_HOSTNAME_CHARS, semantic, :hostname => o)
617
641
  end
618
642
  end
@@ -719,8 +743,10 @@ class Puppet::Pops::Validation::Checker4_0
719
743
  end
720
744
 
721
745
  def top_BlockExpression(o, definition)
722
- if definition.is_a?(Model::FunctionDefinition) && !o.eContainer.is_a?(Model::Program)
723
- # not ok if the definition is a FunctionDefinition. It can never be nested in a block
746
+ if !o.eContainer.is_a?(Model::Program) &&
747
+ (definition.is_a?(Model::FunctionDefinition) || definition.is_a?(Model::TypeAlias) || definition.is_a?(Model::TypeDefinition))
748
+
749
+ # not ok. These can never be nested in a block
724
750
  acceptor.accept(Issues::NOT_ABSOLUTE_TOP_LEVEL, definition)
725
751
  else
726
752
  # ok, if this is a block representing the body of a class, or is top level
@@ -864,3 +890,5 @@ class Puppet::Pops::Validation::Checker4_0
864
890
  end
865
891
  end
866
892
  end
893
+ end
894
+ end
@@ -1,16 +1,18 @@
1
+ module Puppet::Pops
2
+ module Validation
1
3
  # Configures validation suitable for 4.0
2
4
  #
3
- class Puppet::Pops::Validation::ValidatorFactory_4_0 < Puppet::Pops::Validation::Factory
4
- Issues = Puppet::Pops::Issues
5
+ class ValidatorFactory_4_0 < Factory
6
+ Issues = Issues
5
7
 
6
8
  # Produces the checker to use
7
9
  def checker diagnostic_producer
8
- Puppet::Pops::Validation::Checker4_0.new(diagnostic_producer)
10
+ Checker4_0.new(diagnostic_producer)
9
11
  end
10
12
 
11
13
  # Produces the label provider to use
12
14
  def label_provider
13
- Puppet::Pops::Model::ModelLabelProvider.new()
15
+ Model::ModelLabelProvider.new()
14
16
  end
15
17
 
16
18
  # Produces the severity producer to use
@@ -30,3 +32,5 @@ class Puppet::Pops::Validation::ValidatorFactory_4_0 < Puppet::Pops::Validation:
30
32
  p
31
33
  end
32
34
  end
35
+ end
36
+ end