puppet 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/debian/README.source +1 -1
  10. data/ext/debian/control +1 -1
  11. data/ext/debian/copyright +4 -4
  12. data/ext/debian/puppetmaster.README.debian +11 -9
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/ext/envpuppet +2 -2
  15. data/ext/ips/puppetagent.xml +1 -1
  16. data/ext/ips/puppetmaster.xml +1 -1
  17. data/ext/project_data.yaml +8 -0
  18. data/ext/puppet-test +3 -3
  19. data/ext/rack/example-passenger-vhost.conf +1 -1
  20. data/ext/redhat/puppet.spec.erb +2 -2
  21. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  22. data/ext/solaris/pkginfo +1 -1
  23. data/ext/solaris/smf/puppet.xml +1 -1
  24. data/ext/suse/puppet.spec +2 -2
  25. data/ext/upload_facts.rb +1 -1
  26. data/ext/windows/puppet_interactive.bat +6 -0
  27. data/ext/windows/puppet_shell.bat +9 -0
  28. data/ext/windows/run_puppet_interactive.bat +9 -0
  29. data/ext/yaml_nodes.rb +1 -1
  30. data/install.rb +30 -20
  31. data/lib/hiera/scope.rb +1 -1
  32. data/lib/puppet/agent.rb +1 -1
  33. data/lib/puppet/application/agent.rb +4 -2
  34. data/lib/puppet/application/apply.rb +7 -4
  35. data/lib/puppet/application/cert.rb +1 -1
  36. data/lib/puppet/application/device.rb +1 -1
  37. data/lib/puppet/application/filebucket.rb +1 -1
  38. data/lib/puppet/application/inspect.rb +1 -1
  39. data/lib/puppet/application/lookup.rb +45 -47
  40. data/lib/puppet/application/master.rb +2 -2
  41. data/lib/puppet/application/resource.rb +1 -1
  42. data/lib/puppet/configurer.rb +100 -22
  43. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  44. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  45. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  46. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  47. data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
  48. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  49. data/lib/puppet/defaults.rb +69 -22
  50. data/lib/puppet/environments.rb +3 -1
  51. data/lib/puppet/face/config.rb +1 -1
  52. data/lib/puppet/face/epp.rb +1 -1
  53. data/lib/puppet/face/help/man.erb +1 -1
  54. data/lib/puppet/face/module/install.rb +6 -6
  55. data/lib/puppet/face/parser.rb +12 -9
  56. data/lib/puppet/face/status.rb +2 -1
  57. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  58. data/lib/puppet/feature/telnet.rb +9 -0
  59. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  60. data/lib/puppet/file_serving/metadata.rb +18 -2
  61. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  62. data/lib/puppet/file_system/file_impl.rb +2 -2
  63. data/lib/puppet/file_system/memory_impl.rb +1 -1
  64. data/lib/puppet/file_system/uniquefile.rb +1 -1
  65. data/lib/puppet/file_system.rb +2 -2
  66. data/lib/puppet/forge/repository.rb +1 -31
  67. data/lib/puppet/forge.rb +1 -1
  68. data/lib/puppet/functions/assert_type.rb +9 -9
  69. data/lib/puppet/functions/each.rb +5 -13
  70. data/lib/puppet/functions/filter.rb +5 -14
  71. data/lib/puppet/functions/lookup.rb +126 -150
  72. data/lib/puppet/functions/map.rb +6 -14
  73. data/lib/puppet/functions/match.rb +1 -0
  74. data/lib/puppet/functions/reduce.rb +5 -13
  75. data/lib/puppet/functions/reverse_each.rb +82 -0
  76. data/lib/puppet/functions/scanf.rb +15 -18
  77. data/lib/puppet/functions/slice.rb +22 -36
  78. data/lib/puppet/functions/split.rb +2 -2
  79. data/lib/puppet/functions/step.rb +88 -0
  80. data/lib/puppet/functions/type.rb +70 -0
  81. data/lib/puppet/functions.rb +45 -6
  82. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  83. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  84. data/lib/puppet/indirector/facts/facter.rb +2 -13
  85. data/lib/puppet/indirector/file_content/http.rb +15 -0
  86. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  87. data/lib/puppet/indirector/generic_http.rb +16 -0
  88. data/lib/puppet/indirector/hiera.rb +3 -1
  89. data/lib/puppet/indirector/indirection.rb +6 -2
  90. data/lib/puppet/indirector/json.rb +2 -2
  91. data/lib/puppet/indirector/node/exec.rb +1 -1
  92. data/lib/puppet/indirector/node/ldap.rb +1 -1
  93. data/lib/puppet/indirector/rest.rb +2 -1
  94. data/lib/puppet/info_service/class_information_service.rb +13 -12
  95. data/lib/puppet/loaders.rb +1 -0
  96. data/lib/puppet/module.rb +6 -2
  97. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  98. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  99. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  100. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  101. data/lib/puppet/network/http/pool.rb +9 -0
  102. data/lib/puppet/node/environment.rb +11 -2
  103. data/lib/puppet/node.rb +11 -2
  104. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  105. data/lib/puppet/parser/compiler.rb +4 -11
  106. data/lib/puppet/parser/environment_compiler.rb +0 -1
  107. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  108. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  109. data/lib/puppet/parser/functions/lookup.rb +128 -149
  110. data/lib/puppet/parser/functions/map.rb +1 -1
  111. data/lib/puppet/parser/functions/match.rb +1 -0
  112. data/lib/puppet/parser/functions/scanf.rb +15 -26
  113. data/lib/puppet/parser/functions/slice.rb +17 -24
  114. data/lib/puppet/parser/functions/split.rb +1 -1
  115. data/lib/puppet/parser/functions.rb +28 -16
  116. data/lib/puppet/parser/resource.rb +19 -17
  117. data/lib/puppet/parser/scope.rb +176 -5
  118. data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
  119. data/lib/puppet/pops/adaptable.rb +4 -1
  120. data/lib/puppet/pops/adapters.rb +80 -12
  121. data/lib/puppet/pops/binder/binder.rb +21 -17
  122. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  123. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  124. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  125. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  126. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  127. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  128. data/lib/puppet/pops/binder/injector.rb +53 -48
  129. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  130. data/lib/puppet/pops/binder/producers.rb +67 -62
  131. data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
  132. data/lib/puppet/pops/evaluator/closure.rb +122 -106
  133. data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
  134. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  135. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  136. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  137. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  138. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  139. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  140. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  141. data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
  142. data/lib/puppet/pops/functions/function.rb +6 -2
  143. data/lib/puppet/pops/issue_reporter.rb +6 -4
  144. data/lib/puppet/pops/issues.rb +50 -11
  145. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  146. data/lib/puppet/pops/loader/loader.rb +1 -1
  147. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  148. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  149. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
  150. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  151. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  152. data/lib/puppet/pops/loaders.rb +51 -9
  153. data/lib/puppet/pops/lookup/explainer.rb +73 -3
  154. data/lib/puppet/pops/lookup/invocation.rb +21 -19
  155. data/lib/puppet/pops/lookup.rb +17 -12
  156. data/lib/puppet/pops/merge_strategy.rb +16 -19
  157. data/lib/puppet/pops/model/factory.rb +179 -157
  158. data/lib/puppet/pops/model/model.rb +17 -8
  159. data/lib/puppet/pops/model/model_label_provider.rb +14 -7
  160. data/lib/puppet/pops/model/model_meta.rb +17 -0
  161. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  162. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  163. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  164. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  165. data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
  166. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  167. data/lib/puppet/pops/parser/lexer2.rb +428 -403
  168. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  169. data/lib/puppet/pops/parser/locator.rb +21 -0
  170. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  171. data/lib/puppet/pops/parser/slurp_support.rb +16 -8
  172. data/lib/puppet/pops/types/class_loader.rb +23 -19
  173. data/lib/puppet/pops/types/enumeration.rb +9 -26
  174. data/lib/puppet/pops/types/iterable.rb +308 -0
  175. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  176. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  177. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  178. data/lib/puppet/pops/types/type_calculator.rb +140 -387
  179. data/lib/puppet/pops/types/type_factory.rb +91 -57
  180. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  181. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  182. data/lib/puppet/pops/types/type_parser.rb +159 -112
  183. data/lib/puppet/pops/types/types.rb +2057 -1253
  184. data/lib/puppet/pops/utils.rb +11 -10
  185. data/lib/puppet/pops/validation/checker4_0.rb +115 -63
  186. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  187. data/lib/puppet/pops/validation.rb +11 -9
  188. data/lib/puppet/pops.rb +0 -8
  189. data/lib/puppet/provider/aixobject.rb +1 -1
  190. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  191. data/lib/puppet/provider/cron/crontab.rb +1 -1
  192. data/lib/puppet/provider/exec/windows.rb +1 -1
  193. data/lib/puppet/provider/group/windows_adsi.rb +2 -2
  194. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  195. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  196. data/lib/puppet/provider/package/appdmg.rb +3 -2
  197. data/lib/puppet/provider/package/dnf.rb +1 -1
  198. data/lib/puppet/provider/package/pip.rb +16 -9
  199. data/lib/puppet/provider/package/pip3.rb +1 -1
  200. data/lib/puppet/provider/package/pkg.rb +1 -1
  201. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  202. data/lib/puppet/provider/package/pkgng.rb +13 -4
  203. data/lib/puppet/provider/package/rpm.rb +0 -1
  204. data/lib/puppet/provider/package/windows.rb +1 -1
  205. data/lib/puppet/provider/package/yum.rb +2 -2
  206. data/lib/puppet/provider/package/zypper.rb +19 -0
  207. data/lib/puppet/provider/service/debian.rb +7 -20
  208. data/lib/puppet/provider/service/init.rb +7 -0
  209. data/lib/puppet/provider/service/launchd.rb +6 -12
  210. data/lib/puppet/provider/service/systemd.rb +9 -2
  211. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +1 -1
  213. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  214. data/lib/puppet/provider/user/windows_adsi.rb +2 -2
  215. data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
  216. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  217. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  218. data/lib/puppet/reference/configuration.rb +1 -1
  219. data/lib/puppet/reference/providers.rb +1 -1
  220. data/lib/puppet/resource/capability_finder.rb +20 -13
  221. data/lib/puppet/resource/catalog.rb +60 -3
  222. data/lib/puppet/resource/status.rb +11 -2
  223. data/lib/puppet/resource/type.rb +33 -42
  224. data/lib/puppet/resource.rb +15 -12
  225. data/lib/puppet/settings/config_file.rb +1 -1
  226. data/lib/puppet/settings/environment_conf.rb +13 -5
  227. data/lib/puppet/settings.rb +1 -1
  228. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  229. data/lib/puppet/ssl/certificate_request.rb +4 -4
  230. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  231. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  232. data/lib/puppet/test/test_helper.rb +16 -4
  233. data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
  234. data/lib/puppet/transaction/report.rb +31 -1
  235. data/lib/puppet/transaction/resource_harness.rb +0 -25
  236. data/lib/puppet/transaction.rb +15 -2
  237. data/lib/puppet/type/augeas.rb +1 -1
  238. data/lib/puppet/type/cron.rb +12 -12
  239. data/lib/puppet/type/file/checksum_value.rb +53 -0
  240. data/lib/puppet/type/file/content.rb +26 -111
  241. data/lib/puppet/type/file/data_sync.rb +84 -0
  242. data/lib/puppet/type/file/ensure.rb +17 -14
  243. data/lib/puppet/type/file/selcontext.rb +1 -1
  244. data/lib/puppet/type/file/source.rb +103 -18
  245. data/lib/puppet/type/file.rb +91 -39
  246. data/lib/puppet/type/filebucket.rb +1 -1
  247. data/lib/puppet/type/group.rb +6 -2
  248. data/lib/puppet/type/interface.rb +8 -3
  249. data/lib/puppet/type/macauthorization.rb +1 -1
  250. data/lib/puppet/type/package.rb +6 -0
  251. data/lib/puppet/type/schedule.rb +1 -1
  252. data/lib/puppet/type/stage.rb +1 -1
  253. data/lib/puppet/type/user.rb +19 -17
  254. data/lib/puppet/type/yumrepo.rb +20 -0
  255. data/lib/puppet/type.rb +11 -11
  256. data/lib/puppet/util/autoload.rb +16 -11
  257. data/lib/puppet/util/checksums.rb +74 -31
  258. data/lib/puppet/util/execution.rb +1 -1
  259. data/lib/puppet/util/http_proxy.rb +72 -0
  260. data/lib/puppet/util/log.rb +2 -0
  261. data/lib/puppet/util/logging.rb +43 -1
  262. data/lib/puppet/util/monkey_patches.rb +2 -2
  263. data/lib/puppet/util/multi_match.rb +51 -0
  264. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  265. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  266. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  267. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  268. data/lib/puppet/util/plist.rb +130 -0
  269. data/lib/puppet/util/resource_template.rb +1 -1
  270. data/lib/puppet/util/run_mode.rb +2 -2
  271. data/lib/puppet/util/skip_tags.rb +9 -0
  272. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  273. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  274. data/lib/puppet/util/windows/adsi.rb +65 -28
  275. data/lib/puppet/util/windows/api_types.rb +24 -18
  276. data/lib/puppet/util/windows/com.rb +3 -3
  277. data/lib/puppet/util/windows/error.rb +1 -1
  278. data/lib/puppet/util/windows/file.rb +8 -8
  279. data/lib/puppet/util/windows/principal.rb +190 -0
  280. data/lib/puppet/util/windows/process.rb +78 -11
  281. data/lib/puppet/util/windows/registry.rb +22 -16
  282. data/lib/puppet/util/windows/root_certs.rb +5 -5
  283. data/lib/puppet/util/windows/security.rb +33 -35
  284. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  285. data/lib/puppet/util/windows/sid.rb +84 -15
  286. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  287. data/lib/puppet/util/windows/user.rb +10 -10
  288. data/lib/puppet/util/windows.rb +4 -0
  289. data/lib/puppet/util.rb +109 -22
  290. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  291. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  292. data/lib/puppet/vendor/pathspec/README.md +1 -1
  293. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  294. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  295. data/lib/puppet/version.rb +1 -1
  296. data/lib/puppet.rb +17 -0
  297. data/lib/semver.rb +17 -1
  298. data/man/man5/puppet.conf.5 +12 -12
  299. data/man/man8/extlookup2hiera.8 +1 -1
  300. data/man/man8/puppet-agent.8 +2 -2
  301. data/man/man8/puppet-apply.8 +2 -2
  302. data/man/man8/puppet-ca.8 +2 -2
  303. data/man/man8/puppet-catalog.8 +2 -2
  304. data/man/man8/puppet-cert.8 +2 -2
  305. data/man/man8/puppet-certificate.8 +2 -2
  306. data/man/man8/puppet-certificate_request.8 +2 -2
  307. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  308. data/man/man8/puppet-config.8 +3 -3
  309. data/man/man8/puppet-describe.8 +1 -1
  310. data/man/man8/puppet-device.8 +1 -1
  311. data/man/man8/puppet-doc.8 +1 -1
  312. data/man/man8/puppet-epp.8 +2 -2
  313. data/man/man8/puppet-facts.8 +2 -2
  314. data/man/man8/puppet-file.8 +2 -2
  315. data/man/man8/puppet-filebucket.8 +2 -2
  316. data/man/man8/puppet-help.8 +2 -2
  317. data/man/man8/puppet-inspect.8 +2 -2
  318. data/man/man8/puppet-key.8 +2 -2
  319. data/man/man8/puppet-man.8 +2 -2
  320. data/man/man8/puppet-master.8 +2 -2
  321. data/man/man8/puppet-module.8 +9 -9
  322. data/man/man8/puppet-node.8 +2 -2
  323. data/man/man8/puppet-parser.8 +2 -2
  324. data/man/man8/puppet-plugin.8 +2 -2
  325. data/man/man8/puppet-report.8 +2 -2
  326. data/man/man8/puppet-resource.8 +2 -2
  327. data/man/man8/puppet-resource_type.8 +2 -2
  328. data/man/man8/puppet-status.8 +3 -3
  329. data/man/man8/puppet.8 +1 -1
  330. data/spec/fixtures/module.tar.gz +0 -0
  331. data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
  332. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  333. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  334. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
  335. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  336. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  337. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  338. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  339. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  340. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  341. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  342. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  343. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  344. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  345. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  346. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  347. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  348. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  349. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  350. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  351. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  352. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  353. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  354. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  355. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  356. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  357. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  358. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  359. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  360. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  361. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  362. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  363. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  364. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  365. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  366. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  367. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  368. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  369. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  370. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  371. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  372. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  373. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  374. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  375. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  376. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
  377. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  378. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  379. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  380. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  381. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  382. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  383. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  384. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  385. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  386. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  387. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  388. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  389. data/spec/integration/defaults_spec.rb +14 -2
  390. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  391. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  392. data/spec/integration/node/environment_spec.rb +13 -0
  393. data/spec/integration/parser/collection_spec.rb +8 -0
  394. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  395. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  396. data/spec/integration/parser/undef_param_spec.rb +8 -0
  397. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  398. data/spec/integration/test/test_helper_spec.rb +28 -0
  399. data/spec/integration/transaction/report_spec.rb +16 -0
  400. data/spec/integration/transaction_spec.rb +11 -0
  401. data/spec/integration/type/file_spec.rb +194 -4
  402. data/spec/integration/type/package_spec.rb +5 -1
  403. data/spec/integration/type/tidy_spec.rb +21 -9
  404. data/spec/integration/util/execution_spec.rb +22 -0
  405. data/spec/integration/util/windows/principal_spec.rb +201 -0
  406. data/spec/integration/util/windows/process_spec.rb +31 -0
  407. data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
  408. data/spec/integration/util/windows/security_spec.rb +8 -8
  409. data/spec/integration/util/windows/user_spec.rb +1 -1
  410. data/spec/integration/util_spec.rb +49 -27
  411. data/spec/lib/puppet_spec/compiler.rb +17 -0
  412. data/spec/lib/puppet_spec/files.rb +2 -2
  413. data/spec/lib/puppet_spec/pops.rb +13 -0
  414. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  415. data/spec/shared_contexts/types_setup.rb +96 -0
  416. data/spec/unit/agent_spec.rb +1 -0
  417. data/spec/unit/application/agent_spec.rb +10 -0
  418. data/spec/unit/application/apply_spec.rb +9 -0
  419. data/spec/unit/application/lookup_spec.rb +138 -28
  420. data/spec/unit/configurer/downloader_spec.rb +5 -5
  421. data/spec/unit/configurer_spec.rb +271 -39
  422. data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
  423. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  424. data/spec/unit/defaults_spec.rb +15 -0
  425. data/spec/unit/environments_spec.rb +24 -4
  426. data/spec/unit/face/epp_face_spec.rb +2 -2
  427. data/spec/unit/face/parser_spec.rb +43 -2
  428. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  429. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  430. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  431. data/spec/unit/file_system_spec.rb +26 -0
  432. data/spec/unit/functions/assert_type_spec.rb +36 -2
  433. data/spec/unit/functions/defined_spec.rb +2 -2
  434. data/spec/unit/functions/epp_spec.rb +17 -9
  435. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  436. data/spec/unit/functions/lookup_spec.rb +88 -16
  437. data/spec/unit/functions/regsubst_spec.rb +1 -1
  438. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  439. data/spec/unit/functions/step_spec.rb +113 -0
  440. data/spec/unit/functions/type_spec.rb +35 -0
  441. data/spec/unit/functions4_spec.rb +62 -6
  442. data/spec/unit/hiera/scope_spec.rb +5 -2
  443. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  444. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  445. data/spec/unit/indirector/indirection_spec.rb +1 -1
  446. data/spec/unit/indirector/json_spec.rb +1 -1
  447. data/spec/unit/info_service_spec.rb +94 -32
  448. data/spec/unit/module_spec.rb +14 -0
  449. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  450. data/spec/unit/network/authstore_spec.rb +1 -1
  451. data/spec/unit/network/http/connection_spec.rb +1 -0
  452. data/spec/unit/network/http/pool_spec.rb +30 -0
  453. data/spec/unit/node_spec.rb +8 -0
  454. data/spec/unit/parser/compiler_spec.rb +16 -18
  455. data/spec/unit/parser/scope_spec.rb +28 -11
  456. data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
  457. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  458. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
  459. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  460. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  461. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  462. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  463. data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
  464. data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
  465. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  466. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  467. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  468. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  469. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  470. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  471. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  473. data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
  474. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  475. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  476. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  477. data/spec/unit/pops/types/types_spec.rb +241 -0
  478. data/spec/unit/pops/validator/validator_spec.rb +159 -15
  479. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  480. data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
  481. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  482. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  483. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  484. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  485. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  486. data/spec/unit/provider/package/pip_spec.rb +88 -47
  487. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  488. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  489. data/spec/unit/provider/package/rpm_spec.rb +2 -25
  490. data/spec/unit/provider/package/yum_spec.rb +12 -1
  491. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  492. data/spec/unit/provider/service/debian_spec.rb +6 -24
  493. data/spec/unit/provider/service/init_spec.rb +11 -1
  494. data/spec/unit/provider/service/launchd_spec.rb +18 -25
  495. data/spec/unit/provider/service/systemd_spec.rb +25 -12
  496. data/spec/unit/provider/service/upstart_spec.rb +57 -0
  497. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  498. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  499. data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
  500. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  501. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  502. data/spec/unit/resource/catalog_spec.rb +33 -1
  503. data/spec/unit/resource/type_spec.rb +149 -7
  504. data/spec/unit/resource_spec.rb +99 -50
  505. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  506. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  507. data/spec/unit/transaction/report_spec.rb +27 -0
  508. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  509. data/spec/unit/transaction_spec.rb +5 -0
  510. data/spec/unit/type/file/checksum_spec.rb +6 -0
  511. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  512. data/spec/unit/type/file/content_spec.rb +12 -193
  513. data/spec/unit/type/file/source_spec.rb +211 -119
  514. data/spec/unit/type/file_spec.rb +133 -34
  515. data/spec/unit/type/interface_spec.rb +32 -0
  516. data/spec/unit/type/macauthorization_spec.rb +4 -1
  517. data/spec/unit/type/yumrepo_spec.rb +2 -2
  518. data/spec/unit/util/filetype_spec.rb +1 -1
  519. data/spec/unit/util/http_proxy_spec.rb +2 -2
  520. data/spec/unit/util/log/destinations_spec.rb +0 -2
  521. data/spec/unit/util/logging_spec.rb +69 -0
  522. data/spec/unit/util/multi_match_spec.rb +39 -0
  523. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  524. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  525. data/spec/unit/util/plist_spec.rb +110 -0
  526. data/spec/unit/util/resource_template_spec.rb +2 -2
  527. data/spec/unit/util/run_mode_spec.rb +27 -3
  528. data/spec/unit/util/windows/adsi_spec.rb +46 -38
  529. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  530. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  531. data/spec/unit/util/windows/sid_spec.rb +48 -11
  532. data/spec/unit/util_spec.rb +123 -13
  533. data/tasks/cfpropertylist.rake +15 -0
  534. metadata +3342 -3195
  535. data/lib/puppet/vendor/load_plist.rb +0 -1
  536. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  537. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  538. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  539. data/lib/puppet/vendor/plist/README +0 -36
  540. data/lib/puppet/vendor/plist/Rakefile +0 -144
  541. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  542. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  543. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  544. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  545. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  546. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  547. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  548. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  549. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  550. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  551. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  552. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  553. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  554. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  555. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  556. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  557. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  558. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  559. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  560. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -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
@@ -248,7 +249,9 @@ module Puppet::Pops::Evaluator::Runtime3Support
248
249
  # this is done from the perspective of the environment.
249
250
  loader = loaders.private_environment_loader
250
251
  if loader && func = loader.load(:function, name)
251
- return func.call(scope, *args, &block)
252
+ Puppet::Util::Profiler.profile(name, [:functions, name]) do
253
+ return func.call(scope, *args, &block)
254
+ end
252
255
  end
253
256
 
254
257
  # Call via 3x API if function exists there
@@ -256,28 +259,25 @@ module Puppet::Pops::Evaluator::Runtime3Support
256
259
 
257
260
  # Arguments must be mapped since functions are unaware of the new and magical creatures in 4x.
258
261
  # NOTE: Passing an empty string last converts nil/:undef to empty string
259
- mapped_args = Puppet::Pops::Evaluator::Runtime3Converter.map_args(args, scope, '')
262
+ mapped_args = Runtime3Converter.map_args(args, scope, '')
260
263
  result = scope.send("function_#{name}", mapped_args, &block)
261
264
  # Prevent non r-value functions from leaking their result (they are not written to care about this)
262
265
  Puppet::Parser::Functions.rvalue?(name) ? result : nil
263
266
  end
264
267
 
265
268
  def call_function(name, args, o, scope, &block)
266
- # Call via 4x API if the function exists there
267
- loaders = scope.compiler.loaders
268
- # find the loader that loaded the code, or use the private_environment_loader (sees env + all modules)
269
- adapter = Puppet::Pops::Utils.find_adapter(o, Puppet::Pops::Adapters::LoaderAdapter)
270
- loader = adapter.nil? ? loaders.private_environment_loader : adapter.loader
269
+ loader = Adapters::LoaderAdapter.loader_for_model_object(o, scope)
271
270
  if loader && func = loader.load(:function, name)
272
- return func.call(scope, *args, &block)
271
+ Puppet::Util::Profiler.profile(name, [:functions, name]) do
272
+ return func.call(scope, *args, &block)
273
+ end
273
274
  end
274
-
275
275
  # Call via 3x API if function exists there
276
- 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)
277
277
 
278
278
  # Arguments must be mapped since functions are unaware of the new and magical creatures in 4x.
279
279
  # NOTE: Passing an empty string last converts nil/:undef to empty string
280
- mapped_args = Puppet::Pops::Evaluator::Runtime3Converter.map_args(args, scope, '')
280
+ mapped_args = Runtime3Converter.map_args(args, scope, '')
281
281
  result = scope.send("function_#{name}", mapped_args, &block)
282
282
  # Prevent non r-value functions from leaking their result (they are not written to care about this)
283
283
  Puppet::Parser::Functions.rvalue?(name) ? result : nil
@@ -295,7 +295,7 @@ module Puppet::Pops::Evaluator::Runtime3Support
295
295
  end
296
296
 
297
297
  def convert(value, scope, undef_value)
298
- Puppet::Pops::Evaluator::Runtime3Converter.convert(value, scope, undef_value)
298
+ Runtime3Converter.convert(value, scope, undef_value)
299
299
  end
300
300
 
301
301
  CLASS_STRING = 'class'.freeze
@@ -306,6 +306,7 @@ module Puppet::Pops::Evaluator::Runtime3Support
306
306
  # a proper Issue. Now the result is "Error while evaluating a Resource Statement" with the message
307
307
  # from the raised exception. (It may be good enough).
308
308
 
309
+
309
310
  # resolve in scope.
310
311
  fully_qualified_type, resource_titles = scope.resolve_type_and_titles(type_name, resource_titles)
311
312
 
@@ -371,8 +372,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
371
372
  # A *=> results in an array of arrays
372
373
  evaluated_parameters = evaluated_parameters.flatten
373
374
  evaluated_resources.each do |r|
374
- unless r.is_a?(Puppet::Pops::Types::PResourceType) && r.type_name != 'class'
375
- 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} )
376
377
  end
377
378
  resource = Puppet::Parser::Resource.new(
378
379
  r.type_name, r.title,
@@ -464,27 +465,27 @@ module Puppet::Pops::Evaluator::Runtime3Support
464
465
  end
465
466
 
466
467
  def extract_file_line(o)
467
- source_pos = Puppet::Pops::Utils.find_closest_positioned(o)
468
+ source_pos = Utils.find_closest_positioned(o)
468
469
  return [nil, -1] unless source_pos
469
470
  [source_pos.locator.file, source_pos.line]
470
471
  end
471
472
 
472
473
  def find_closest_positioned(o)
473
- return nil if o.nil? || o.is_a?(Puppet::Pops::Model::Program)
474
- 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)
475
476
  end
476
477
 
477
478
  # Creates a diagnostic producer
478
479
  def diagnostic_producer
479
- Puppet::Pops::Validation::DiagnosticProducer.new(
480
+ Validation::DiagnosticProducer.new(
480
481
  ExceptionRaisingAcceptor.new(), # Raises exception on all issues
481
482
  SeverityProducer.new(), # All issues are errors
482
- Puppet::Pops::Model::ModelLabelProvider.new())
483
+ Model::ModelLabelProvider.new())
483
484
  end
484
485
 
485
486
  # Configure the severity of failures
486
- class SeverityProducer < Puppet::Pops::Validation::SeverityProducer
487
- Issues = Puppet::Pops::Issues
487
+ class SeverityProducer < Validation::SeverityProducer
488
+ Issues = Issues
488
489
 
489
490
  def initialize
490
491
  super
@@ -496,6 +497,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
496
497
  p[Issues::EMPTY_RESOURCE_SPECIALIZATION] = :ignore
497
498
  end
498
499
 
500
+ p[Issues::UNKNOWN_VARIABLE] = Puppet[:strict_variables] ? :error : :warning
501
+
499
502
  # Store config issues, ignore or warning
500
503
  p[Issues::RT_NO_STORECONFIGS_EXPORT] = Puppet[:storeconfigs] ? :ignore : :warning
501
504
  p[Issues::RT_NO_STORECONFIGS] = Puppet[:storeconfigs] ? :ignore : :warning
@@ -503,10 +506,10 @@ module Puppet::Pops::Evaluator::Runtime3Support
503
506
  end
504
507
 
505
508
  # An acceptor of diagnostics that immediately raises an exception.
506
- class ExceptionRaisingAcceptor < Puppet::Pops::Validation::Acceptor
509
+ class ExceptionRaisingAcceptor < Validation::Acceptor
507
510
  def accept(diagnostic)
508
511
  super
509
- Puppet::Pops::IssueReporter.assert_and_report(self, {
512
+ IssueReporter.assert_and_report(self, {
510
513
  :message => "Evaluation Error:",
511
514
  :emit_warnings => true, # log warnings
512
515
  :exception_class => Puppet::PreformattedError
@@ -520,3 +523,5 @@ module Puppet::Pops::Evaluator::Runtime3Support
520
523
  class EvaluationError < StandardError
521
524
  end
522
525
  end
526
+ end
527
+ end
@@ -89,13 +89,17 @@ class Puppet::Pops::Functions::Function
89
89
  raise ArgumentError, "Function #{self.class.name}(): cannot call function '#{function_name}' - no loader specified" unless the_loader
90
90
 
91
91
  func = the_loader.load(:function, function_name)
92
- return func.call(scope, *args, &block) if func
92
+ if func
93
+ Puppet::Util::Profiler.profile(function_name, [:functions, function_name]) do
94
+ return func.call(scope, *args, &block)
95
+ end
96
+ end
93
97
 
94
98
  # Check if a 3x function is present. Raise a generic error if it's not to allow upper layers to fill in the details
95
99
  # about where in a puppet manifest this error originates. (Such information is not available here).
96
100
  loader_scope = closure_scope
97
101
  func_3x = Puppet::Parser::Functions.function(function_name, loader_scope.environment) if loader_scope.is_a?(Puppet::Parser::Scope)
98
- raise ArgumentError, "Function #{self.class.name}(): cannot call function '#{function_name}' - not found" unless func_3x
102
+ raise ArgumentError, "Function #{self.class.name}(): Unknown function: '#{function_name}'" unless func_3x
99
103
 
100
104
  # Call via 3x API
101
105
  # Arguments must be mapped since functions are unaware of the new and magical creatures in 4x.
@@ -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
@@ -151,6 +163,10 @@ module Puppet::Pops::Issues
151
163
  "Classes, definitions, and nodes may only appear at toplevel or inside other classes"
152
164
  end
153
165
 
166
+ NOT_ABSOLUTE_TOP_LEVEL = hard_issue :NOT_ABSOLUTE_TOP_LEVEL do
167
+ "#{label.a_an_uc(semantic)} may only appear at toplevel"
168
+ end
169
+
154
170
  CROSS_SCOPE_ASSIGNMENT = hard_issue :CROSS_SCOPE_ASSIGNMENT, :name do
155
171
  "Illegal attempt to assign to '#{name}'. Cannot assign to variables in other namespaces"
156
172
  end
@@ -162,7 +178,7 @@ module Puppet::Pops::Issues
162
178
 
163
179
  # Variables are immutable, cannot reassign in the same assignment scope
164
180
  ILLEGAL_REASSIGNMENT = hard_issue :ILLEGAL_REASSIGNMENT, :name do
165
- if Puppet::Pops::Validation::Checker4_0::RESERVED_PARAMETERS[name]
181
+ if Validation::Checker4_0::RESERVED_PARAMETERS[name]
166
182
  "Cannot reassign built in (or already assigned) variable '$#{name}'"
167
183
  else
168
184
  "Cannot reassign variable '$#{name}'"
@@ -343,6 +359,12 @@ module Puppet::Pops::Issues
343
359
  "Attempt to use unsupported range in #{label.a_an(semantic)}, #{count} values given for max 1"
344
360
  end
345
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
+
346
368
  ILLEGAL_RELATIONSHIP_OPERAND_TYPE = issue :ILLEGAL_RELATIONSHIP_OPERAND_TYPE, :operand do
347
369
  "Illegal relationship operand, can not form a relationship with #{label.a_an(operand)}. A Catalog type is required."
348
370
  end
@@ -484,7 +506,7 @@ module Puppet::Pops::Issues
484
506
  end
485
507
 
486
508
  DUPLICATE_ATTRIBUTE = issue :DUPLICATE_ATTRIBUE, :attribute do
487
- "The attribute '#{attribute}' has already been set in this resource body"
509
+ "The attribute '#{attribute}' has already been set"
488
510
  end
489
511
 
490
512
  MISSING_TITLE = hard_issue :MISSING_TITLE do
@@ -536,6 +558,10 @@ module Puppet::Pops::Issues
536
558
  "This #{label.label(semantic)} has no effect. A value was produced and then forgotten (one or more preceding expressions may have the wrong form)"
537
559
  end
538
560
 
561
+ RESOURCE_WITHOUT_TITLE = issue :RESOURCE_WITHOUT_TITLE, :name do
562
+ "This expression is invalid. Did you try declaring a '#{name}' resource without a title?"
563
+ end
564
+
539
565
  IDEM_NOT_ALLOWED_LAST = hard_issue :IDEM_NOT_ALLOWED_LAST, :container do
540
566
  "This #{label.label(semantic)} has no effect. #{label.a_an_uc(container)} can not end with a value-producing expression without other effect"
541
567
  end
@@ -564,6 +590,10 @@ module Puppet::Pops::Issues
564
590
  "Resource Override can only operate on resources, got: #{label.label(actual)}"
565
591
  end
566
592
 
593
+ DUPLICATE_PARAMETER = hard_issue :DUPLICATE_PARAMETER, :param_name do
594
+ "The parameter '#{param_name}' is declared more than once in the parameter list"
595
+ end
596
+
567
597
  RESERVED_PARAMETER = hard_issue :RESERVED_PARAMETER, :container, :param_name do
568
598
  "The parameter $#{param_name} redefines a built in parameter in #{label.the(container)}"
569
599
  end
@@ -632,6 +662,10 @@ module Puppet::Pops::Issues
632
662
  "Unclosed quote after #{after} followed by '#{followed_by}'"
633
663
  end
634
664
 
665
+ UNCLOSED_MLCOMMENT = hard_issue :UNCLOSED_MLCOMMENT do
666
+ 'Unclosed multiline comment'
667
+ end
668
+
635
669
  EPP_INTERNAL_ERROR = hard_issue :EPP_INTERNAL_ERROR, :error do
636
670
  "Internal error: #{error}"
637
671
  end
@@ -671,4 +705,9 @@ module Puppet::Pops::Issues
671
705
  HEREDOC_MULTIPLE_AT_ESCAPES = hard_issue :HEREDOC_MULTIPLE_AT_ESCAPES, :escapes do
672
706
  "An escape char for @() may only appear once. Got '#{escapes.join(', ')}'"
673
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
674
713
  end
@@ -49,7 +49,7 @@ class Puppet::Pops::Loader::BaseLoader < Puppet::Pops::Loader::Loader
49
49
  # @api private
50
50
  #
51
51
  def set_entry(typed_name, value, origin = nil)
52
- if entry = @named_values[typed_name] then fail_redefined(entry); end
52
+ if entry = @named_values[typed_name] then fail_redefine(entry); end
53
53
  @named_values[typed_name] = Puppet::Pops::Loader::Loader::NamedEntry.new(typed_name, value, origin)
54
54
  end
55
55
 
@@ -22,7 +22,7 @@
22
22
  class Puppet::Pops::Loader::Loader
23
23
 
24
24
  # Describes the kinds of things that loaders can load
25
- LOADABLE_KINDS = [:func_4x, :func_4xpp].freeze
25
+ LOADABLE_KINDS = [:func_4x, :func_4xpp, :type_pp].freeze
26
26
 
27
27
  # Produces the value associated with the given name if already loaded, or available for loading
28
28
  # by this loader, one of its parents, or other loaders visible to this loader.
@@ -23,6 +23,8 @@ module Puppet::Pops::Loader::LoaderPaths
23
23
  result << FunctionPathPP.new(loader)
24
24
  end
25
25
  # When wanted also add FunctionPath3x to load 3x functions
26
+ when :type
27
+ result << TypePathPP.new(loader) if loader.loadables.include?(:type_pp)
26
28
  else
27
29
  # unknown types, simply produce an empty result; no paths to check, nothing to find... move along...
28
30
  []
@@ -147,6 +149,19 @@ module Puppet::Pops::Loader::LoaderPaths
147
149
  end
148
150
  end
149
151
 
152
+ class TypePathPP < PuppetSmartPath
153
+ # Navigate to directory where 'lib' is, then down again
154
+ TYPE_PATH_PP = File.join('types')
155
+
156
+ def relative_path
157
+ TYPE_PATH_PP
158
+ end
159
+
160
+ def instantiator()
161
+ Puppet::Pops::Loader::TypeDefinitionInstantiator
162
+ end
163
+ end
164
+
150
165
  # SmartPaths
151
166
  # ===
152
167
  # Holds effective SmartPath instances per type
@@ -1,4 +1,5 @@
1
-
1
+ module Puppet::Pops
2
+ module Loader
2
3
  # =ModuleLoaders
3
4
  # A ModuleLoader loads items from a single module.
4
5
  # The ModuleLoaders (ruby) module contains various such loaders. There is currently one concrete
@@ -14,12 +15,12 @@
14
15
  # internal layout etc.)
15
16
  #
16
17
  # A module loader is also not aware of the mapping of name to relative paths - this is performed by the
17
- # included module Puppet::Pops::Loader::PathBasedInstantatorConfig which knows about the map from type/name to
18
+ # included module PathBasedInstantatorConfig which knows about the map from type/name to
18
19
  # relative path, and the logic that can instantiate what is expected to be found in the content of that path.
19
20
  #
20
21
  # @api private
21
22
  #
22
- module Puppet::Pops::Loader::ModuleLoaders
23
+ module ModuleLoaders
23
24
  def self.system_loader_from(parent_loader, loaders)
24
25
  # Puppet system may be installed in a fixed location via RPM, installed as a Gem, via source etc.
25
26
  # The only way to find this across the different ways puppet can be installed is
@@ -27,7 +28,7 @@ module Puppet::Pops::Loader::ModuleLoaders
27
28
  # puppet.
28
29
  #
29
30
  puppet_lib = File.join(File.dirname(__FILE__), '../../..')
30
- Puppet::Pops::Loader::ModuleLoaders::FileBased.new(parent_loader,
31
+ ModuleLoaders::FileBased.new(parent_loader,
31
32
  loaders,
32
33
  nil,
33
34
  puppet_lib, # may or may not have a 'lib' above 'puppet'
@@ -37,7 +38,7 @@ module Puppet::Pops::Loader::ModuleLoaders
37
38
  end
38
39
 
39
40
  def self.module_loader_from(parent_loader, loaders, module_name, module_path)
40
- Puppet::Pops::Loader::ModuleLoaders::FileBased.new(parent_loader,
41
+ ModuleLoaders::FileBased.new(parent_loader,
41
42
  loaders,
42
43
  module_name,
43
44
  File.join(module_path, 'lib'),
@@ -45,7 +46,7 @@ module Puppet::Pops::Loader::ModuleLoaders
45
46
  )
46
47
  end
47
48
 
48
- class AbstractPathBasedModuleLoader < Puppet::Pops::Loader::BaseLoader
49
+ class AbstractPathBasedModuleLoader < BaseLoader
49
50
 
50
51
  # The name of the module, or nil, if this is a global "component"
51
52
  attr_reader :module_name
@@ -64,7 +65,7 @@ module Puppet::Pops::Loader::ModuleLoaders
64
65
  attr_accessor :private_loader
65
66
 
66
67
  # Initialize a kind of ModuleLoader for one module
67
- # @param parent_loader [Puppet::Pops::Loader] loader with higher priority
68
+ # @param parent_loader [Loader] loader with higher priority
68
69
  # @param module_name [String] the name of the module (non qualified name), may be nil for a global "component"
69
70
  # @param path [String] the path to the root of the module (semantics defined by subclass)
70
71
  # @param loader_name [String] a name that is used for human identification (useful when module_name is nil)
@@ -74,7 +75,7 @@ module Puppet::Pops::Loader::ModuleLoaders
74
75
 
75
76
  @module_name = module_name
76
77
  @path = path
77
- @smart_paths = Puppet::Pops::Loader::LoaderPaths::SmartPaths.new(self)
78
+ @smart_paths = LoaderPaths::SmartPaths.new(self)
78
79
  @loaders = loaders
79
80
  @loadables = loadables
80
81
  unless (loadables - LOADABLE_KINDS).empty?
@@ -87,8 +88,8 @@ module Puppet::Pops::Loader::ModuleLoaders
87
88
  end
88
89
 
89
90
  # Finds typed/named entity in this module
90
- # @param typed_name [Puppet::Pops::Loader::TypedName] the type/name to find
91
- # @return [Puppet::Pops::Loader::Loader::NamedEntry, nil found/created entry, or nil if not found
91
+ # @param typed_name [TypedName] the type/name to find
92
+ # @return [Loader::NamedEntry, nil found/created entry, or nil if not found
92
93
  #
93
94
  def find(typed_name)
94
95
  # Assume it is a global name, and that all parts of the name should be used when looking up
@@ -115,6 +116,7 @@ module Puppet::Pops::Loader::ModuleLoaders
115
116
  case typed_name.type
116
117
  when :function
117
118
  when :resource_type
119
+ when :type
118
120
  else
119
121
  # anything else cannot possibly be in this module
120
122
  # TODO: should not be allowed anyway... may have to revisit this decision
@@ -201,7 +203,7 @@ module Puppet::Pops::Loader::ModuleLoaders
201
203
 
202
204
  # Create a kind of ModuleLoader for one module (Puppet Module, or module like)
203
205
  #
204
- # @param parent_loader [Puppet::Pops::Loader::Loader] typically the loader for the environment or root
206
+ # @param parent_loader [Loader] typically the loader for the environment or root
205
207
  # @param module_name [String] the name of the module (non qualified name), may be nil for "modules" only containing globals
206
208
  # @param path [String] the path to the root of the module (semantics defined by subclass)
207
209
  # @param loader_name [String] a name that identifies the loader
@@ -231,7 +233,7 @@ module Puppet::Pops::Loader::ModuleLoaders
231
233
  end
232
234
 
233
235
  def get_contents(effective_path)
234
- Puppet::FileSystem.read(effective_path)
236
+ Puppet::FileSystem.read(effective_path, :encoding => 'utf-8')
235
237
  end
236
238
  end
237
239
 
@@ -246,7 +248,7 @@ module Puppet::Pops::Loader::ModuleLoaders
246
248
  # @api private
247
249
  #
248
250
  class GemBased < FileBased
249
- include Puppet::Pops::Loader::GemSupport
251
+ include GemSupport
250
252
 
251
253
  attr_reader :gem_ref
252
254
 
@@ -267,3 +269,5 @@ module Puppet::Pops::Loader::ModuleLoaders
267
269
  end
268
270
  end
269
271
  end
272
+ end
273
+ end