puppet 4.5.3-x86-mingw32 → 4.6.1-x86-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 (422) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +10 -1
  3. data/ext/debian/control +2 -4
  4. data/ext/project_data.yaml +4 -4
  5. data/install.rb +6 -2
  6. data/lib/puppet.rb +3 -1
  7. data/lib/puppet/agent/locker.rb +1 -1
  8. data/lib/puppet/application.rb +6 -4
  9. data/lib/puppet/application/agent.rb +2 -1
  10. data/lib/puppet/application/cert.rb +35 -2
  11. data/lib/puppet/application/device.rb +1 -1
  12. data/lib/puppet/application/generate.rb +5 -0
  13. data/lib/puppet/application/lookup.rb +3 -3
  14. data/lib/puppet/application_support.rb +1 -1
  15. data/lib/puppet/compilable_resource_type.rb +15 -0
  16. data/lib/puppet/configurer.rb +67 -10
  17. data/lib/puppet/configurer/plugin_handler.rb +2 -4
  18. data/lib/puppet/data_providers/hiera_config.rb +1 -1
  19. data/lib/puppet/defaults.rb +34 -7
  20. data/lib/puppet/environments.rb +4 -2
  21. data/lib/puppet/error.rb +1 -1
  22. data/lib/puppet/external/dot.rb +1 -1
  23. data/lib/puppet/face/ca.rb +4 -1
  24. data/lib/puppet/face/certificate.rb +7 -1
  25. data/lib/puppet/face/epp.rb +5 -5
  26. data/lib/puppet/face/generate.rb +64 -0
  27. data/lib/puppet/face/help.rb +19 -13
  28. data/lib/puppet/face/man.rb +1 -1
  29. data/lib/puppet/feature/external_facts.rb +1 -1
  30. data/lib/puppet/file_system.rb +16 -0
  31. data/lib/puppet/file_system/file_impl.rb +5 -0
  32. data/lib/puppet/file_system/memory_impl.rb +4 -0
  33. data/lib/puppet/file_system/path_pattern.rb +1 -0
  34. data/lib/puppet/file_system/windows.rb +19 -0
  35. data/lib/puppet/functions.rb +3 -5
  36. data/lib/puppet/functions/assert_type.rb +1 -1
  37. data/lib/puppet/functions/defined.rb +7 -5
  38. data/lib/puppet/functions/dig.rb +2 -18
  39. data/lib/puppet/functions/hiera.rb +1 -1
  40. data/lib/puppet/functions/lest.rb +1 -37
  41. data/lib/puppet/functions/new.rb +2 -473
  42. data/lib/puppet/functions/reverse_each.rb +2 -59
  43. data/lib/puppet/functions/scanf.rb +4 -4
  44. data/lib/puppet/functions/step.rb +1 -63
  45. data/lib/puppet/functions/then.rb +1 -61
  46. data/lib/puppet/functions/type.rb +1 -40
  47. data/lib/puppet/functions/unwrap.rb +40 -0
  48. data/lib/puppet/generate/models/type/property.rb +70 -0
  49. data/lib/puppet/generate/models/type/type.rb +57 -0
  50. data/lib/puppet/generate/templates/type/pcore.erb +41 -0
  51. data/lib/puppet/generate/type.rb +239 -0
  52. data/lib/puppet/graph/simple_graph.rb +2 -6
  53. data/lib/puppet/indirector/catalog/static_compiler.rb +5 -2
  54. data/lib/puppet/indirector/facts/facter.rb +1 -1
  55. data/lib/puppet/indirector/key/ca.rb +2 -2
  56. data/lib/puppet/indirector/request.rb +25 -4
  57. data/lib/puppet/indirector/rest.rb +73 -3
  58. data/lib/puppet/info_service/class_information_service.rb +1 -2
  59. data/lib/puppet/interface/documentation.rb +1 -1
  60. data/lib/puppet/loaders.rb +2 -0
  61. data/lib/puppet/metatype/manager.rb +6 -6
  62. data/lib/puppet/module.rb +8 -1
  63. data/lib/puppet/module_tool.rb +2 -2
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +2 -2
  66. data/lib/puppet/module_tool/metadata.rb +1 -1
  67. data/lib/puppet/network/http/api/indirected_routes.rb +23 -32
  68. data/lib/puppet/network/http/rack/rest.rb +15 -1
  69. data/lib/puppet/network/rights.rb +1 -11
  70. data/lib/puppet/node/environment.rb +7 -3
  71. data/lib/puppet/node/facts.rb +1 -1
  72. data/lib/puppet/parameter.rb +23 -3
  73. data/lib/puppet/parameter/boolean.rb +1 -1
  74. data/lib/puppet/parameter/value.rb +1 -1
  75. data/lib/puppet/parser.rb +0 -1
  76. data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
  77. data/lib/puppet/parser/ast/resource.rb +5 -0
  78. data/lib/puppet/parser/ast/resource_instance.rb +5 -1
  79. data/lib/puppet/parser/ast/resourceparam.rb +5 -0
  80. data/lib/puppet/parser/compiler.rb +14 -17
  81. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +1 -1
  82. data/lib/puppet/parser/environment_compiler.rb +10 -0
  83. data/lib/puppet/parser/functions/create_resources.rb +39 -24
  84. data/lib/puppet/parser/functions/defined.rb +2 -26
  85. data/lib/puppet/parser/functions/dig.rb +29 -0
  86. data/lib/puppet/parser/functions/lest.rb +49 -0
  87. data/lib/puppet/parser/functions/new.rb +530 -0
  88. data/lib/puppet/parser/functions/require.rb +1 -1
  89. data/lib/puppet/parser/functions/reverse_each.rb +83 -0
  90. data/lib/puppet/parser/functions/scanf.rb +4 -4
  91. data/lib/puppet/parser/functions/step.rb +84 -0
  92. data/lib/puppet/parser/functions/then.rb +73 -0
  93. data/lib/puppet/parser/functions/type.rb +53 -0
  94. data/lib/puppet/parser/resource.rb +16 -7
  95. data/lib/puppet/parser/scope.rb +36 -28
  96. data/lib/puppet/parser/type_loader.rb +1 -1
  97. data/lib/puppet/plugins/data_providers/data_provider.rb +1 -1
  98. data/lib/puppet/pops.rb +13 -0
  99. data/lib/puppet/pops/adapters.rb +49 -49
  100. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +1 -1
  101. data/lib/puppet/pops/evaluator/access_operator.rb +39 -2
  102. data/lib/puppet/pops/evaluator/closure.rb +39 -13
  103. data/lib/puppet/pops/evaluator/collector_transformer.rb +10 -1
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +16 -11
  105. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  106. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -1
  107. data/lib/puppet/pops/evaluator/literal_evaluator.rb +0 -1
  108. data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -2
  109. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  110. data/lib/puppet/pops/evaluator/runtime3_support.rb +19 -45
  111. data/lib/puppet/pops/functions/function.rb +5 -0
  112. data/lib/puppet/pops/issues.rb +1 -1
  113. data/lib/puppet/pops/label_provider.rb +2 -2
  114. data/lib/puppet/pops/loader/base_loader.rb +12 -15
  115. data/lib/puppet/pops/loader/loader.rb +15 -50
  116. data/lib/puppet/pops/loader/loader_paths.rb +28 -2
  117. data/lib/puppet/pops/loader/module_loaders.rb +16 -1
  118. data/lib/puppet/pops/loader/null_loader.rb +17 -1
  119. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +12 -11
  120. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
  121. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +2 -3
  122. data/lib/puppet/pops/loader/runtime3_type_loader.rb +52 -13
  123. data/lib/puppet/pops/loader/static_loader.rb +55 -0
  124. data/lib/puppet/pops/loader/type_definition_instantiator.rb +30 -14
  125. data/lib/puppet/pops/loader/typed_name.rb +50 -0
  126. data/lib/puppet/pops/loaders.rb +64 -19
  127. data/lib/puppet/pops/merge_strategy.rb +7 -7
  128. data/lib/puppet/pops/migration/migration_checker.rb +4 -0
  129. data/lib/puppet/pops/model/model_label_provider.rb +2 -0
  130. data/lib/puppet/pops/parser/egrammar.ra +8 -5
  131. data/lib/puppet/pops/parser/eparser.rb +1550 -1498
  132. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  133. data/lib/puppet/pops/parser/interpolation_support.rb +7 -0
  134. data/lib/puppet/pops/parser/lexer2.rb +14 -1
  135. data/lib/puppet/pops/parser/locator.rb +30 -1
  136. data/lib/puppet/pops/parser/parser_support.rb +0 -3
  137. data/lib/puppet/pops/parser/slurp_support.rb +3 -3
  138. data/lib/puppet/pops/patterns.rb +9 -1
  139. data/lib/puppet/pops/pcore.rb +67 -11
  140. data/lib/puppet/pops/puppet_stack.rb +43 -0
  141. data/lib/puppet/pops/resource/param.rb +51 -0
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +301 -0
  143. data/lib/puppet/pops/resource/resource_type_set.pcore +21 -0
  144. data/lib/puppet/pops/serialization.rb +17 -0
  145. data/lib/puppet/pops/serialization/abstract_reader.rb +149 -0
  146. data/lib/puppet/pops/serialization/abstract_writer.rb +179 -0
  147. data/lib/puppet/pops/serialization/deserializer.rb +60 -0
  148. data/lib/puppet/pops/serialization/extension.rb +126 -0
  149. data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  150. data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  151. data/lib/puppet/pops/serialization/json.rb +247 -0
  152. data/lib/puppet/pops/serialization/object.rb +63 -0
  153. data/lib/puppet/pops/serialization/rgen.rb +151 -0
  154. data/lib/puppet/pops/serialization/serializer.rb +91 -0
  155. data/lib/puppet/pops/serialization/time_factory.rb +66 -0
  156. data/lib/puppet/pops/types/annotatable.rb +36 -0
  157. data/lib/puppet/pops/types/implementation_registry.rb +3 -8
  158. data/lib/puppet/pops/types/p_meta_type.rb +83 -0
  159. data/lib/puppet/pops/types/p_object_type.rb +110 -117
  160. data/lib/puppet/pops/types/p_runtime_type.rb +13 -0
  161. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +23 -0
  162. data/lib/puppet/pops/types/p_sem_ver_type.rb +30 -2
  163. data/lib/puppet/pops/types/p_sensitive_type.rb +69 -0
  164. data/lib/puppet/pops/types/p_type_set_type.rb +361 -0
  165. data/lib/puppet/pops/types/puppet_object.rb +0 -5
  166. data/lib/puppet/pops/types/ruby_generator.rb +9 -2
  167. data/lib/puppet/pops/types/type_calculator.rb +6 -1
  168. data/lib/puppet/pops/types/type_factory.rb +14 -12
  169. data/lib/puppet/pops/types/type_formatter.rb +78 -33
  170. data/lib/puppet/pops/types/type_mismatch_describer.rb +0 -2
  171. data/lib/puppet/pops/types/type_parser.rb +27 -2
  172. data/lib/puppet/pops/types/type_set_reference.rb +59 -0
  173. data/lib/puppet/pops/types/types.rb +366 -13
  174. data/lib/puppet/pops/validation.rb +4 -4
  175. data/lib/puppet/pops/validation/checker4_0.rb +5 -2
  176. data/lib/puppet/pops/visitor.rb +2 -2
  177. data/lib/puppet/property.rb +64 -5
  178. data/lib/puppet/provider.rb +1 -1
  179. data/lib/puppet/provider/aixobject.rb +3 -3
  180. data/lib/puppet/provider/group/aix.rb +4 -4
  181. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  182. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  183. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -2
  184. data/lib/puppet/provider/mount/parsed.rb +1 -1
  185. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
  186. data/lib/puppet/provider/package/appdmg.rb +3 -3
  187. data/lib/puppet/provider/package/apple.rb +1 -1
  188. data/lib/puppet/provider/package/dnf.rb +5 -0
  189. data/lib/puppet/provider/package/nim.rb +1 -1
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pip.rb +5 -3
  192. data/lib/puppet/provider/package/pip3.rb +1 -1
  193. data/lib/puppet/provider/package/pkg.rb +5 -5
  194. data/lib/puppet/provider/package/pkgdmg.rb +4 -4
  195. data/lib/puppet/provider/package/pkgin.rb +1 -1
  196. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  197. data/lib/puppet/provider/package/portage.rb +48 -8
  198. data/lib/puppet/provider/package/sun.rb +1 -1
  199. data/lib/puppet/provider/package/tdnf.rb +28 -0
  200. data/lib/puppet/provider/package/yum.rb +22 -4
  201. data/lib/puppet/provider/parsedfile.rb +2 -2
  202. data/lib/puppet/provider/service/base.rb +1 -1
  203. data/lib/puppet/provider/service/bsd.rb +1 -1
  204. data/lib/puppet/provider/service/daemontools.rb +2 -2
  205. data/lib/puppet/provider/service/debian.rb +3 -3
  206. data/lib/puppet/provider/service/init.rb +5 -3
  207. data/lib/puppet/provider/service/launchd.rb +16 -2
  208. data/lib/puppet/provider/service/runit.rb +1 -1
  209. data/lib/puppet/provider/service/smf.rb +8 -1
  210. data/lib/puppet/provider/service/systemd.rb +39 -6
  211. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +3 -2
  213. data/lib/puppet/provider/user/directoryservice.rb +4 -3
  214. data/lib/puppet/provider/user/hpux.rb +1 -1
  215. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  216. data/lib/puppet/provider/user/windows_adsi.rb +3 -0
  217. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  218. data/lib/puppet/reference/type.rb +1 -1
  219. data/lib/puppet/resource.rb +33 -7
  220. data/lib/puppet/resource/capability_finder.rb +74 -54
  221. data/lib/puppet/resource/status.rb +11 -2
  222. data/lib/puppet/settings.rb +17 -6
  223. data/lib/puppet/settings/environment_conf.rb +1 -1
  224. data/lib/puppet/settings/server_list_setting.rb +20 -0
  225. data/lib/puppet/ssl/certificate_authority.rb +32 -9
  226. data/lib/puppet/ssl/certificate_authority/interface.rb +164 -24
  227. data/lib/puppet/ssl/host.rb +3 -3
  228. data/lib/puppet/ssl/oids.rb +10 -0
  229. data/lib/puppet/ssl/validator/default_validator.rb +2 -2
  230. data/lib/puppet/test/test_helper.rb +2 -2
  231. data/lib/puppet/transaction.rb +12 -0
  232. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  233. data/lib/puppet/transaction/event.rb +29 -2
  234. data/lib/puppet/transaction/event_manager.rb +1 -1
  235. data/lib/puppet/transaction/persistence.rb +84 -0
  236. data/lib/puppet/transaction/report.rb +49 -2
  237. data/lib/puppet/transaction/resource_harness.rb +98 -18
  238. data/lib/puppet/type.rb +63 -21
  239. data/lib/puppet/type/augeas.rb +3 -3
  240. data/lib/puppet/type/cron.rb +1 -1
  241. data/lib/puppet/type/file.rb +39 -2
  242. data/lib/puppet/type/file/data_sync.rb +13 -5
  243. data/lib/puppet/type/host.rb +1 -1
  244. data/lib/puppet/type/mount.rb +2 -6
  245. data/lib/puppet/type/notify.rb +1 -1
  246. data/lib/puppet/type/package.rb +1 -1
  247. data/lib/puppet/type/resources.rb +1 -1
  248. data/lib/puppet/type/scheduled_task.rb +1 -1
  249. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  250. data/lib/puppet/type/tidy.rb +1 -1
  251. data/lib/puppet/type/yumrepo.rb +3 -3
  252. data/lib/puppet/type/zone.rb +1 -1
  253. data/lib/puppet/util.rb +2 -2
  254. data/lib/puppet/util/classgen.rb +1 -1
  255. data/lib/puppet/util/command_line.rb +6 -2
  256. data/lib/puppet/util/command_line/trollop.rb +1 -1
  257. data/lib/puppet/util/execution.rb +2 -2
  258. data/lib/puppet/util/http_proxy.rb +1 -1
  259. data/lib/puppet/util/inifile.rb +1 -1
  260. data/lib/puppet/util/instance_loader.rb +1 -1
  261. data/lib/puppet/util/logging.rb +1 -1
  262. data/lib/puppet/util/multi_match.rb +1 -1
  263. data/lib/puppet/util/plist.rb +15 -5
  264. data/lib/puppet/util/profiler.rb +1 -1
  265. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  266. data/lib/puppet/util/psych_support.rb +1 -1
  267. data/lib/puppet/util/rdoc.rb +2 -2
  268. data/lib/puppet/util/rubygems.rb +1 -1
  269. data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
  270. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  271. data/lib/puppet/util/windows/adsi.rb +30 -8
  272. data/lib/puppet/util/windows/api_types.rb +1 -1
  273. data/lib/puppet/util/windows/file.rb +59 -0
  274. data/lib/puppet/util/windows/process.rb +10 -0
  275. data/lib/puppet/util/windows/security.rb +1 -1
  276. data/lib/puppet/util/windows/user.rb +22 -4
  277. data/lib/puppet/util/yaml.rb +15 -3
  278. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
  279. data/lib/puppet/vendor/rgen_patch.rb +1 -1
  280. data/lib/puppet/version.rb +2 -2
  281. data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
  282. data/spec/integration/agent/logging_spec.rb +15 -14
  283. data/spec/integration/application/apply_spec.rb +1 -0
  284. data/spec/integration/directory_environments_spec.rb +16 -0
  285. data/spec/integration/environments/settings_spec.rb +32 -4
  286. data/spec/integration/faces/documentation_spec.rb +1 -1
  287. data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
  288. data/spec/integration/node/environment_spec.rb +21 -0
  289. data/spec/integration/parser/collection_spec.rb +10 -0
  290. data/spec/integration/parser/compiler_spec.rb +76 -840
  291. data/spec/integration/parser/functions/require_spec.rb +3 -3
  292. data/spec/integration/parser/parameter_defaults_spec.rb +6 -2
  293. data/spec/integration/parser/pcore_resource_spec.rb +208 -0
  294. data/spec/integration/parser/resource_expressions_spec.rb +4 -2
  295. data/spec/integration/provider/yumrepo_spec.rb +4 -1
  296. data/spec/integration/transaction/report_spec.rb +666 -0
  297. data/spec/integration/type/file_spec.rb +11 -12
  298. data/spec/integration/util/windows/adsi_spec.rb +99 -0
  299. data/spec/integration/util/windows/principal_spec.rb +109 -60
  300. data/spec/integration/util/windows/process_spec.rb +4 -2
  301. data/spec/integration/util/windows/security_spec.rb +34 -8
  302. data/spec/integration/util/windows/user_spec.rb +26 -4
  303. data/spec/lib/puppet_spec/files.rb +2 -2
  304. data/spec/lib/puppet_spec/network.rb +12 -8
  305. data/spec/shared_examples/rhel_package_provider.rb +341 -0
  306. data/spec/spec_helper.rb +8 -2
  307. data/spec/unit/application/cert_spec.rb +20 -0
  308. data/spec/unit/configurer/plugin_handler_spec.rb +0 -26
  309. data/spec/unit/configurer_spec.rb +46 -0
  310. data/spec/unit/defaults_spec.rb +14 -0
  311. data/spec/unit/face/generate_spec.rb +230 -0
  312. data/spec/unit/face/help_spec.rb +53 -0
  313. data/spec/unit/face/parser_spec.rb +6 -0
  314. data/spec/unit/face/plugin_spec.rb +0 -4
  315. data/spec/unit/file_system_spec.rb +85 -0
  316. data/spec/unit/functions/lookup_spec.rb +4 -4
  317. data/spec/unit/functions/match_spec.rb +2 -2
  318. data/spec/unit/functions/regsubst_spec.rb +1 -1
  319. data/spec/unit/functions/split_spec.rb +1 -1
  320. data/spec/unit/functions/unwrap_spec.rb +29 -0
  321. data/spec/unit/functions/versioncmp_spec.rb +1 -1
  322. data/spec/unit/functions4_spec.rb +8 -8
  323. data/spec/unit/indirector/facts/facter_spec.rb +1 -9
  324. data/spec/unit/indirector/rest_spec.rb +95 -9
  325. data/spec/unit/module_spec.rb +43 -7
  326. data/spec/unit/module_tool/applications/installer_spec.rb +10 -1
  327. data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
  328. data/spec/unit/module_tool/applications/upgrader_spec.rb +8 -0
  329. data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
  330. data/spec/unit/network/http/api/indirected_routes_spec.rb +49 -58
  331. data/spec/unit/network/http/api/master/v3_spec.rb +7 -4
  332. data/spec/unit/network/rights_spec.rb +1 -1
  333. data/spec/unit/parameter_spec.rb +11 -0
  334. data/spec/unit/parser/compiler_spec.rb +19 -33
  335. data/spec/unit/{appmgmt_spec.rb → parser/environment_compiler_spec.rb} +12 -1
  336. data/spec/unit/parser/functions/create_resources_spec.rb +76 -4
  337. data/spec/unit/parser/functions/require_spec.rb +2 -2
  338. data/spec/unit/parser/resource_spec.rb +21 -11
  339. data/spec/unit/parser/scope_spec.rb +1 -5
  340. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1 -1
  341. data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
  342. data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
  343. data/spec/unit/pops/loaders/loaders_spec.rb +63 -5
  344. data/spec/unit/pops/loaders/module_loaders_spec.rb +2 -2
  345. data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
  346. data/spec/unit/pops/parser/lexer2_spec.rb +27 -3
  347. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +8 -0
  348. data/spec/unit/pops/parser/parse_calls_spec.rb +9 -0
  349. data/spec/unit/pops/puppet_stack_spec.rb +79 -0
  350. data/spec/unit/pops/resource/resource_type_impl_spec.rb +37 -0
  351. data/spec/unit/pops/serialization/packer_spec.rb +153 -0
  352. data/spec/unit/pops/serialization/rgen_spec.rb +88 -0
  353. data/spec/unit/pops/serialization/serialization_spec.rb +228 -0
  354. data/spec/unit/pops/types/p_object_type_spec.rb +44 -2
  355. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +42 -0
  356. data/spec/unit/pops/types/p_sensitive_type_spec.rb +139 -0
  357. data/spec/unit/pops/types/p_type_set_type_spec.rb +424 -0
  358. data/spec/unit/pops/types/ruby_generator_spec.rb +497 -181
  359. data/spec/unit/pops/types/type_calculator_spec.rb +10 -4
  360. data/spec/unit/pops/types/type_formatter_spec.rb +1 -1
  361. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +2 -2
  362. data/spec/unit/pops/types/type_parser_spec.rb +1 -1
  363. data/spec/unit/pops/types/types_spec.rb +1 -1
  364. data/spec/unit/pops/validator/validator_spec.rb +18 -1
  365. data/spec/unit/property_spec.rb +48 -11
  366. data/spec/unit/provider/group/windows_adsi_spec.rb +11 -1
  367. data/spec/unit/provider/package/dnf_spec.rb +1 -99
  368. data/spec/unit/provider/package/pacman_spec.rb +4 -4
  369. data/spec/unit/provider/package/pip_spec.rb +14 -0
  370. data/spec/unit/provider/package/pkg_spec.rb +6 -0
  371. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -3
  372. data/spec/unit/provider/package/portage_spec.rb +64 -8
  373. data/spec/unit/provider/package/tdnf_spec.rb +18 -0
  374. data/spec/unit/provider/package/windows/package_spec.rb +4 -1
  375. data/spec/unit/provider/package/windows_spec.rb +8 -2
  376. data/spec/unit/provider/package/yum_spec.rb +6 -377
  377. data/spec/unit/provider/service/base_spec.rb +6 -0
  378. data/spec/unit/provider/service/debian_spec.rb +16 -7
  379. data/spec/unit/provider/service/gentoo_spec.rb +6 -0
  380. data/spec/unit/provider/service/init_spec.rb +7 -0
  381. data/spec/unit/provider/service/launchd_spec.rb +35 -4
  382. data/spec/unit/provider/service/openrc_spec.rb +6 -0
  383. data/spec/unit/provider/service/smf_spec.rb +31 -6
  384. data/spec/unit/provider/service/src_spec.rb +6 -0
  385. data/spec/unit/provider/service/systemd_spec.rb +70 -20
  386. data/spec/unit/provider/service/upstart_spec.rb +6 -0
  387. data/spec/unit/provider/user/aix_spec.rb +7 -0
  388. data/spec/unit/provider/user/directoryservice_spec.rb +30 -1
  389. data/spec/unit/provider/user/windows_adsi_spec.rb +19 -0
  390. data/spec/unit/resource/capability_finder_spec.rb +51 -3
  391. data/spec/unit/resource/catalog_spec.rb +5 -0
  392. data/spec/unit/resource/type_spec.rb +2 -2
  393. data/spec/unit/resource_spec.rb +19 -0
  394. data/spec/unit/settings_spec.rb +13 -0
  395. data/spec/unit/ssl/certificate_authority/interface_spec.rb +176 -10
  396. data/spec/unit/ssl/certificate_authority_spec.rb +63 -22
  397. data/spec/unit/ssl/host_spec.rb +1 -1
  398. data/spec/unit/ssl/oids_spec.rb +24 -21
  399. data/spec/unit/transaction/event_spec.rb +3 -1
  400. data/spec/unit/transaction/persistence_spec.rb +173 -0
  401. data/spec/unit/transaction/report_spec.rb +64 -1
  402. data/spec/unit/transaction/resource_harness_spec.rb +91 -0
  403. data/spec/unit/type/file/content_spec.rb +47 -15
  404. data/spec/unit/type/file_spec.rb +28 -0
  405. data/spec/unit/type/mount_spec.rb +5 -12
  406. data/spec/unit/type/yumrepo_spec.rb +1 -5
  407. data/spec/unit/type_spec.rb +32 -0
  408. data/spec/unit/util/command_line_spec.rb +11 -0
  409. data/spec/unit/util/execution_spec.rb +1 -1
  410. data/spec/unit/util/plist_spec.rb +16 -3
  411. data/spec/unit/util/storage_spec.rb +4 -1
  412. data/spec/unit/util/windows/adsi_spec.rb +23 -2
  413. data/spec/unit/util/windows/file_spec.rb +56 -1
  414. data/spec/unit/util/windows/sid_spec.rb +31 -7
  415. data/spec/unit/util/yaml_spec.rb +12 -0
  416. data/spec/unit/util_spec.rb +87 -20
  417. metadata +91 -48
  418. data/ext/puppetlisten/puppetlisten.rb +0 -77
  419. data/ext/puppetlisten/puppetrun.rb +0 -38
  420. data/lib/puppet/resource/type_collection_helper.rb +0 -7
  421. data/spec/unit/parser/functions/defined_spec.rb +0 -120
  422. data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
@@ -19,10 +19,18 @@
19
19
  #
20
20
  # @api public
21
21
  #
22
- class Puppet::Pops::Loader::Loader
22
+ module Puppet::Pops
23
+ module Loader
24
+ class Loader
25
+ attr_reader :loader_name
23
26
 
24
27
  # Describes the kinds of things that loaders can load
25
- LOADABLE_KINDS = [:func_4x, :func_4xpp, :type_pp].freeze
28
+ LOADABLE_KINDS = [:func_4x, :func_4xpp, :type_pp, :resource_type_pp].freeze
29
+
30
+ # @param [String] name the name of the loader. Must be unique among all loaders maintained by a {Loader} instance
31
+ def initialize(loader_name)
32
+ @loader_name = loader_name.freeze
33
+ end
26
34
 
27
35
  # Produces the value associated with the given name if already loaded, or available for loading
28
36
  # by this loader, one of its parents, or other loaders visible to this loader.
@@ -52,7 +60,7 @@ class Puppet::Pops::Loader::Loader
52
60
  # @api public
53
61
  #
54
62
  def load_typed(typed_name)
55
- raise NotImplementedError.new
63
+ raise NotImplementedError, "Class #{self.class.name} must implement method #load_typed"
56
64
  end
57
65
 
58
66
  # Returns an already loaded entry if one exists, or nil. This does not trigger loading
@@ -64,7 +72,7 @@ class Puppet::Pops::Loader::Loader
64
72
  # @api public
65
73
  #
66
74
  def loaded_entry(typed_name, check_dependencies = false)
67
- raise NotImplementedError.new(self.class)
75
+ raise NotImplementedError, "Class #{self.class.name} must implement method #loaded_entry"
68
76
  end
69
77
 
70
78
  # Produces the value associated with the given name if defined **in this loader**, or nil if not defined.
@@ -94,7 +102,7 @@ class Puppet::Pops::Loader::Loader
94
102
  # @api private
95
103
  #
96
104
  def find(typed_name)
97
- raise NotImplementedError.new
105
+ raise NotImplementedError, "Class #{self.class.name} must implement method #find"
98
106
  end
99
107
 
100
108
  # Returns the parent of the loader, or nil, if this is the top most loader. This implementation returns nil.
@@ -156,49 +164,6 @@ class Puppet::Pops::Loader::Loader
156
164
  freeze()
157
165
  end
158
166
  end
159
-
160
- # A name/type combination that can be used as a compound hash key
161
- #
162
- class TypedName
163
- DOUBLE_COLON = '::'
164
-
165
- attr_reader :hash
166
- attr_reader :type
167
- attr_reader :name
168
- attr_reader :name_parts
169
- attr_reader :compound_name
170
-
171
- def initialize(type, name)
172
- @type = type
173
- # relativize the name (get rid of leading ::), and make the split string available
174
- parts = name.to_s.split(DOUBLE_COLON)
175
- if parts[0].empty?
176
- parts.shift
177
- @name = name[2..-1]
178
- else
179
- @name = name
180
- end
181
- @name_parts = parts
182
-
183
- # Use a frozen compound key for the hash and comparison
184
- @compound_name = "#{type}/#{name}".freeze
185
- @hash = @compound_name.hash
186
- freeze
187
- end
188
-
189
- def ==(o)
190
- o.class == self.class && o.compound_name == @compound_name
191
- end
192
-
193
- alias eql? ==
194
-
195
- def qualified?
196
- @name_parts.size > 1
197
- end
198
-
199
- def to_s
200
- @compound_name
201
- end
202
- end
203
167
  end
204
-
168
+ end
169
+ end
@@ -25,6 +25,8 @@ module Puppet::Pops::Loader::LoaderPaths
25
25
  # When wanted also add FunctionPath3x to load 3x functions
26
26
  when :type
27
27
  result << TypePathPP.new(loader) if loader.loadables.include?(:type_pp)
28
+ when :resource_type_pp
29
+ result << ResourceTypeImplPP.new(loader) if loader.loadables.include?(:resource_type_pp)
28
30
  else
29
31
  # unknown types, simply produce an empty result; no paths to check, nothing to find... move along...
30
32
  []
@@ -100,7 +102,6 @@ module Puppet::Pops::Loader::LoaderPaths
100
102
  end
101
103
 
102
104
  def root_path
103
- # Drop the lib part (it may not exist and cannot be navigated to in a relative way)
104
105
  Puppet::FileSystem.dir_string(@loader.path)
105
106
  end
106
107
 
@@ -150,7 +151,6 @@ module Puppet::Pops::Loader::LoaderPaths
150
151
  end
151
152
 
152
153
  class TypePathPP < PuppetSmartPath
153
- # Navigate to directory where 'lib' is, then down again
154
154
  TYPE_PATH_PP = File.join('types')
155
155
 
156
156
  def relative_path
@@ -162,6 +162,32 @@ module Puppet::Pops::Loader::LoaderPaths
162
162
  end
163
163
  end
164
164
 
165
+ class ResourceTypeImplPP < PuppetSmartPath
166
+ RESOURCE_TYPES_PATH_PP = File.join('.resource_types')
167
+
168
+ def relative_path
169
+ RESOURCE_TYPES_PATH_PP
170
+ end
171
+
172
+ def root_path
173
+ @loader.path
174
+ end
175
+
176
+ def instantiator()
177
+ Puppet::Pops::Loader::PuppetResourceTypeImplInstantiator
178
+ end
179
+
180
+ # The effect paths for resource type impl is the full name
181
+ # since resource types are not name spaced.
182
+ # This overrides the default PuppetSmartPath.
183
+ #
184
+ def effective_path(typed_name, start_index_in_name)
185
+ # Resource type to name does not skip the name-space
186
+ # i.e. <module>/mymodule/resource_types/foo.pp is the reource type foo
187
+ "#{File.join(generic_path, typed_name.name_parts)}.pp"
188
+ end
189
+ end
190
+
165
191
  # SmartPaths
166
192
  # ===
167
193
  # Holds effective SmartPath instances per type
@@ -46,6 +46,15 @@ module ModuleLoaders
46
46
  )
47
47
  end
48
48
 
49
+ def self.pcore_resource_type_loader_from(parent_loader, loaders, environment_path)
50
+ ModuleLoaders::FileBased.new(parent_loader,
51
+ loaders,
52
+ nil,
53
+ environment_path,
54
+ 'pcore_resource_types'
55
+ )
56
+ end
57
+
49
58
  class AbstractPathBasedModuleLoader < BaseLoader
50
59
 
51
60
  # The name of the module, or nil, if this is a global "component"
@@ -66,6 +75,7 @@ module ModuleLoaders
66
75
 
67
76
  # Initialize a kind of ModuleLoader for one module
68
77
  # @param parent_loader [Loader] loader with higher priority
78
+ # @param loaders [Loaders] the container for this loader
69
79
  # @param module_name [String] the name of the module (non qualified name), may be nil for a global "component"
70
80
  # @param path [String] the path to the root of the module (semantics defined by subclass)
71
81
  # @param loader_name [String] a name that is used for human identification (useful when module_name is nil)
@@ -81,6 +91,7 @@ module ModuleLoaders
81
91
  unless (loadables - LOADABLE_KINDS).empty?
82
92
  raise ArgumentError, 'given loadables are not of supported loadable kind'
83
93
  end
94
+ loaders.add_loader_by_name(self)
84
95
  end
85
96
 
86
97
  def loadables
@@ -92,6 +103,9 @@ module ModuleLoaders
92
103
  # @return [Loader::NamedEntry, nil found/created entry, or nil if not found
93
104
  #
94
105
  def find(typed_name)
106
+ # This loader is tailored to only find entries in the current runtime
107
+ return nil unless typed_name.name_authority == Pcore::RUNTIME_NAME_AUTHORITY
108
+
95
109
  # Assume it is a global name, and that all parts of the name should be used when looking up
96
110
  name_part_index = 0
97
111
  name_parts = typed_name.name_parts
@@ -116,6 +130,7 @@ module ModuleLoaders
116
130
  case typed_name.type
117
131
  when :function
118
132
  when :resource_type
133
+ when :resource_type_pp
119
134
  when :type
120
135
  else
121
136
  # anything else cannot possibly be in this module
@@ -190,7 +205,7 @@ module ModuleLoaders
190
205
  def private_loader
191
206
  # The system loader has a nil module_name and it does not have a private_loader as there are no functions
192
207
  # that can only by called by puppet runtime - if so, it acts as the private loader directly.
193
- @private_loader ||= ((module_name.nil? && self) || @loaders.private_loader_for_module(module_name))
208
+ @private_loader ||= (module_name.nil? || module_name == 'environment' ? self : @loaders.private_loader_for_module(module_name))
194
209
  end
195
210
  end
196
211
 
@@ -6,7 +6,7 @@ class Puppet::Pops::Loader::NullLoader < Puppet::Pops::Loader::Loader
6
6
  # Construct a NullLoader, optionally with a parent loader
7
7
  #
8
8
  def initialize(parent_loader=nil, loader_name = "null-loader")
9
- @loader_name = loader_name
9
+ super(loader_name)
10
10
  @parent = parent_loader
11
11
  end
12
12
 
@@ -15,6 +15,14 @@ class Puppet::Pops::Loader::NullLoader < Puppet::Pops::Loader::Loader
15
15
  @parent
16
16
  end
17
17
 
18
+ def find(typed_name)
19
+ if @parent.nil?
20
+ nil
21
+ else
22
+ @parent.find(typed_name)
23
+ end
24
+ end
25
+
18
26
  def load_typed(typed_name)
19
27
  if @parent.nil?
20
28
  nil
@@ -23,6 +31,14 @@ class Puppet::Pops::Loader::NullLoader < Puppet::Pops::Loader::Loader
23
31
  end
24
32
  end
25
33
 
34
+ def loaded_entry(typed_name, check_dependencies = false)
35
+ if @parent.nil?
36
+ nil
37
+ else
38
+ @parent.loaded_entry(typed_name, check_dependencies)
39
+ end
40
+ end
41
+
26
42
  # Has no entries on its own - always nil
27
43
  def get_entry(typed_name)
28
44
  nil
@@ -46,12 +46,13 @@ class PuppetFunctionInstantiator
46
46
  # loader to use when making calls to the new function API. Such logic have a hard time finding the closure (where
47
47
  # the loader is known - hence this mechanism
48
48
  private_loader = loader.private_loader
49
- Adapters::LoaderAdapter.adapt(the_function_definition).loader = private_loader
49
+ Adapters::LoaderAdapter.adapt(the_function_definition).loader_name = private_loader.loader_name
50
50
 
51
- # TODO: Cheating wrt. scope - assuming it is found in the context
52
- closure_scope = Puppet.lookup(:global_scope) { {} }
51
+ # Cannot bind loaded functions to global scope, that must be done without binding that scope as
52
+ # loaders survive a compilation.
53
+ closure_scope = nil # Puppet.lookup(:global_scope) { {} }
53
54
 
54
- created = create_function_class(the_function_definition, closure_scope)
55
+ created = create_function_class(the_function_definition)
55
56
  # create the function instance - it needs closure (scope), and loader (i.e. where it should start searching for things
56
57
  # when calling functions etc.
57
58
  # It should be bound to global scope
@@ -60,22 +61,22 @@ class PuppetFunctionInstantiator
60
61
  end
61
62
 
62
63
  # Creates Function class and instantiates it based on a FunctionDefinition model
63
- # @return [Array<Loader::TypedName, Functions.Function>] - array of
64
+ # @return [Array<TypedName, Functions.Function>] - array of
64
65
  # typed name, and an instantiated function with global scope closure associated with the given loader
65
66
  #
66
67
  def self.create_from_model(function_definition, loader)
67
- closure_scope = Puppet.lookup(:global_scope) { {} }
68
- created = create_function_class(function_definition, closure_scope)
69
- typed_name = Loader::TypedName.new(:function, function_definition.name)
70
- [typed_name, created.new(closure_scope, loader)]
68
+ created = create_function_class(function_definition)
69
+ typed_name = TypedName.new(:function, function_definition.name)
70
+ [typed_name, created.new(nil, loader)]
71
71
  end
72
72
 
73
- def self.create_function_class(function_definition, closure_scope)
73
+ def self.create_function_class(function_definition)
74
74
  # Create a 4x function wrapper around a named closure
75
75
  Puppet::Functions.create_function(function_definition.name, Puppet::Functions::PuppetFunction) do
76
+ # TODO: should not create a new evaluator per function
76
77
  init_dispatch(Evaluator::Closure::Named.new(
77
78
  function_definition.name,
78
- Evaluator::EvaluatorImpl.new(), function_definition, closure_scope))
79
+ Evaluator::EvaluatorImpl.new(), function_definition))
79
80
  end
80
81
  end
81
82
  end
@@ -0,0 +1,80 @@
1
+ module Puppet::Pops
2
+ module Loader
3
+ # The PuppetResourceTypeImplInstantiator instantiates a Puppet::Pops::ResourceTypeImpl object.
4
+ # given a Puppet Programming language source that when called evaluates the Puppet logic it contains.
5
+ #
6
+ class PuppetResourceTypeImplInstantiator
7
+ # Produces an instance of Puppet::Pops::ResourceTypeImpl, or fails with an error if the
8
+ # given puppet source does not produce such an instance when evaluated.
9
+ #
10
+ # @param loader [Loader] The loader the function is associated with
11
+ # @param typed_name [TypedName] the type / name of the resoure type impl to load
12
+ # @param source_ref [URI, String] a reference to the source / origin of the puppet code to evaluate
13
+ # @param pp_code_string [String] puppet code in a string
14
+ #
15
+ # @return [Puppet::Pops::ResourceTypeImpl] - an instantiated ResourceTypeImpl
16
+ #
17
+ def self.create(loader, typed_name, source_ref, pp_code_string)
18
+ parser = Parser::EvaluatingParser.new()
19
+
20
+ # parse and validate
21
+ result = parser.parse_string(pp_code_string, source_ref)
22
+ model = result.model
23
+ statements = if model.is_a?(Model::Program)
24
+ if model.body.is_a?(Model::BlockExpression)
25
+ statements = model.body.statements
26
+ else
27
+ statements = [model.body]
28
+ end
29
+ else
30
+ statements = EMPTY_ARRAY
31
+ end
32
+ statements = statements.reject { |s| s.is_a?(Model::Nop) }
33
+ if statements.empty?
34
+ raise ArgumentError, "The code loaded from #{source_ref} does not create the resource type '#{typed_name.name}' - it is empty"
35
+ end
36
+
37
+ rname = Resource::ResourceTypeImpl._ptype.name
38
+ unless statements.find do |s|
39
+ if s.is_a?(Model::CallMethodExpression)
40
+ functor_expr = s.functor_expr
41
+ functor_expr.is_a?(Model::NamedAccessExpression) &&
42
+ functor_expr.left_expr.is_a?(Model::QualifiedReference) &&
43
+ functor_expr.left_expr.cased_value == rname &&
44
+ functor_expr.right_expr.is_a?(Model::QualifiedName) &&
45
+ functor_expr.right_expr.value == 'new'
46
+ else
47
+ false
48
+ end
49
+ end
50
+ raise ArgumentError, "The code loaded from #{source_ref} does not create the resource type '#{typed_name.name}' - no call to #{rname}.new found."
51
+ end
52
+
53
+ unless statements.size == 1
54
+ raise ArgumentError, "The code loaded from #{source_ref} must contain only the creation of resource type '#{typed_name.name}' - it has additional logic."
55
+ end
56
+
57
+ closure_scope = Puppet.lookup(:global_scope) { {} }
58
+ resource_type_impl = parser.evaluate(closure_scope, result)
59
+
60
+ unless resource_type_impl.is_a?(Puppet::Pops::Resource::ResourceTypeImpl)
61
+ got = resource_type.class
62
+ raise ArgumentError, "The code loaded from #{source_ref} does not define the resource type '#{typed_name.name}' - got '#{got}'."
63
+ end
64
+
65
+ unless resource_type_impl.name == typed_name.name
66
+ expected = typed_name.name
67
+ actual = resource_type_impl.name
68
+ raise ArgumentError, "The code loaded from #{source_ref} produced resource type with the wrong name, expected '#{expected}', actual '#{actual}'"
69
+ end
70
+
71
+ # Adapt the resource type definition with loader - this is used from logic contained in it body to find the
72
+ # loader to use when making calls to the new function API. Such logic have a hard time finding the closure (where
73
+ # the loader is known - hence this mechanism
74
+ Adapters::LoaderAdapter.adapt(resource_type_impl).loader_name = loader.loader_name
75
+ resource_type_impl
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -30,10 +30,9 @@ class Puppet::Pops::Loader::RubyFunctionInstantiator
30
30
  # when calling functions etc.
31
31
  # It should be bound to global scope
32
32
 
33
- # Cheating wrt. scope - assuming it is found in the context (else an empty hash is used).
34
- closure_scope = Puppet.lookup(:global_scope) { {} }
33
+ # Sets closure scope to nil, to let it be picked up at runtime from Puppet.lookup(:global_scope)
35
34
  # If function definition used the loader from the binding to create a new loader, that loader wins
36
- created.new(closure_scope, loader_for_function)
35
+ created.new(nil, loader_for_function)
37
36
  end
38
37
 
39
38
  private
@@ -7,9 +7,10 @@ module Loader
7
7
  #
8
8
  # @api private
9
9
  class Runtime3TypeLoader < BaseLoader
10
- def initialize(parent_loader, environment)
10
+ def initialize(parent_loader, loaders, environment, env_path)
11
11
  super(parent_loader, environment.name)
12
12
  @environment = environment
13
+ @resource_3x_loader = env_path.nil? ? nil : ModuleLoaders.pcore_resource_type_loader_from(parent_loader, loaders, env_path)
13
14
  end
14
15
 
15
16
  def to_s()
@@ -21,28 +22,66 @@ class Runtime3TypeLoader < BaseLoader
21
22
  # @return [Loader::NamedEntry, nil found/created entry, or nil if not found
22
23
  #
23
24
  def find(typed_name)
24
- return nil unless typed_name.type == :type
25
+ return nil unless typed_name.name_authority == Pcore::RUNTIME_NAME_AUTHORITY
26
+ case typed_name.type
27
+ when :type
28
+ value = nil
29
+ name = typed_name.name
30
+ if @resource_3x_loader.nil?
31
+ value = Puppet::Type.type(name) unless typed_name.qualified?
32
+ if value.nil?
33
+ # Look for a user defined type
34
+ value = @environment.known_resource_types.find_definition(name)
35
+ end
36
+ else
37
+ impl_te = find_impl(TypedName.new(:resource_type_pp, name, typed_name.name_authority))
38
+ value = impl_te.value unless impl_te.nil?
39
+ end
25
40
 
26
- name = typed_name.name
27
- value = @environment.known_resource_types.find_definition(name)
28
- if value.nil?
29
- # Look for Puppet::Type
30
- value = Puppet::Type.type(name)
31
41
  if value.nil?
32
42
  # Cache the fact that it wasn't found
33
43
  set_entry(typed_name, nil)
34
44
  return nil
35
45
  end
46
+
47
+ # Loaded types doesn't have the same life cycle as this loader, so we must start by
48
+ # checking if the type was created. If it was, an entry will already be stored in
49
+ # this loader. If not, then it was created before this loader was instantiated and
50
+ # we must therefore add it.
51
+ te = get_entry(typed_name)
52
+ te = set_entry(typed_name, Types::TypeFactory.resource(value.name.to_s)) if te.nil? || te.value.nil?
53
+ te
54
+ when :resource_type_pp
55
+ @resource_3x_loader.nil? ? nil : find_impl(typed_name)
56
+ else
57
+ nil
36
58
  end
59
+ end
37
60
 
38
- # Loaded types doesn't have the same life cycle as this loader, so we must start by
39
- # checking if the type was created. If it was, an entry will already be stored in
40
- # this loader. If not, then it was created before this loader was instantiated and
41
- # we must therefore add it.
42
- te = get_entry(typed_name)
43
- te = set_entry(typed_name, Types::TypeFactory.resource(value.name.to_s)) if te.nil? || te.value.nil?
61
+ # Find the implementation for the resource type by first consulting the internal loader for pp defined 'Puppet::Resource::ResourceType3'
62
+ # instances, then check for a Puppet::Type and lastly check for a defined type.
63
+ #
64
+ def find_impl(typed_name)
65
+ name = typed_name.name
66
+ te = StaticLoader::BUILTIN_TYPE_NAMES_LC.include?(name) ? nil : @resource_3x_loader.find(typed_name)
67
+ if te.nil? || te.value.nil?
68
+ # Look for Puppet::Type
69
+ value = Puppet::Type.type(name) unless typed_name.qualified?
70
+ if value.nil?
71
+ # Look for a user defined type
72
+ value = @environment.known_resource_types.find_definition(name)
73
+ if value.nil?
74
+ # Cache the fact that it wasn't found
75
+ @resource_3x_loader.set_entry(typed_name, nil)
76
+ return nil
77
+ end
78
+ end
79
+ te = @resource_3x_loader.get_entry(typed_name)
80
+ te = @resource_3x_loader.set_entry(typed_name, value) if te.nil? || te.value.nil?
81
+ end
44
82
  te
45
83
  end
84
+ private :find_impl
46
85
 
47
86
  # Allows shadowing since this loader is populalted with all loaded resource types at time
48
87
  # of loading. This loading will, for built in types override the aliases configured in the static