puppet 4.4.0 → 4.5.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 (745) hide show
  1. data/CONTRIBUTING.md +5 -5
  2. data/Gemfile +2 -2
  3. data/LICENSE +2 -2
  4. data/README.md +5 -0
  5. data/conf/puppet.conf +1 -1
  6. data/ext/project_data.yaml +2 -0
  7. data/ext/redhat/puppet.spec.erb +0 -9
  8. data/ext/upload_facts.rb +1 -1
  9. data/lib/hiera_puppet.rb +6 -14
  10. data/lib/puppet/application/agent.rb +3 -4
  11. data/lib/puppet/application/apply.rb +1 -1
  12. data/lib/puppet/application/ca.rb +1 -0
  13. data/lib/puppet/application/cert.rb +1 -1
  14. data/lib/puppet/application/filebucket.rb +1 -1
  15. data/lib/puppet/application/inspect.rb +2 -2
  16. data/lib/puppet/application/lookup.rb +8 -20
  17. data/lib/puppet/application/master.rb +1 -1
  18. data/lib/puppet/application/resource.rb +1 -5
  19. data/lib/puppet/data_providers/hiera_config.rb +2 -4
  20. data/lib/puppet/data_providers/hiera_interpolate.rb +12 -105
  21. data/lib/puppet/data_providers/json_data_provider_factory.rb +1 -8
  22. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -8
  23. data/lib/puppet/defaults.rb +104 -25
  24. data/lib/puppet/face/config.rb +1 -1
  25. data/lib/puppet/face/help/man.erb +1 -1
  26. data/lib/puppet/file_system/uniquefile.rb +2 -2
  27. data/lib/puppet/file_system/windows.rb +1 -15
  28. data/lib/puppet/functions/assert_type.rb +1 -1
  29. data/lib/puppet/functions/dig.rb +39 -0
  30. data/lib/puppet/functions/hiera_include.rb +2 -2
  31. data/lib/puppet/functions/inline_epp.rb +1 -1
  32. data/lib/puppet/functions/lest.rb +53 -0
  33. data/lib/puppet/functions/lookup.rb +40 -30
  34. data/lib/puppet/functions/new.rb +502 -0
  35. data/lib/puppet/functions/regsubst.rb +11 -10
  36. data/lib/puppet/functions/then.rb +74 -0
  37. data/lib/puppet/functions/type.rb +4 -4
  38. data/lib/puppet/functions/with.rb +1 -1
  39. data/lib/puppet/functions.rb +69 -0
  40. data/lib/puppet/indirector/catalog/compiler.rb +4 -1
  41. data/lib/puppet/indirector/msgpack.rb +1 -1
  42. data/lib/puppet/indirector/resource_type/parser.rb +5 -0
  43. data/lib/puppet/indirector/rest.rb +5 -1
  44. data/lib/puppet/indirector/terminus.rb +4 -4
  45. data/lib/puppet/loaders.rb +2 -0
  46. data/lib/puppet/metatype/manager.rb +19 -2
  47. data/lib/puppet/module.rb +3 -3
  48. data/lib/puppet/module_tool/applications/application.rb +1 -1
  49. data/lib/puppet/module_tool/applications/builder.rb +2 -2
  50. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +6 -2
  51. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +19 -4
  52. data/lib/puppet/module_tool/skeleton/templates/generator/{tests → examples}/init.pp.erb +1 -1
  53. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +0 -1
  54. data/lib/puppet/network/auth_config_parser.rb +1 -1
  55. data/lib/puppet/network/http/api/indirected_routes.rb +0 -2
  56. data/lib/puppet/network/http/api/master/v3/environment.rb +6 -2
  57. data/lib/puppet/network/http/rack/rest.rb +10 -1
  58. data/lib/puppet/parser/ast/pops_bridge.rb +20 -3
  59. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +24 -2
  60. data/lib/puppet/parser/e4_parser_adapter.rb +13 -12
  61. data/lib/puppet/parser/environment_compiler.rb +2 -2
  62. data/lib/puppet/parser/functions/hiera_include.rb +2 -2
  63. data/lib/puppet/parser/functions/inline_epp.rb +1 -1
  64. data/lib/puppet/parser/functions/lookup.rb +0 -3
  65. data/lib/puppet/parser/resource.rb +14 -5
  66. data/lib/puppet/parser/scope.rb +18 -15
  67. data/lib/puppet/plugins/data_providers/data_provider.rb +19 -8
  68. data/lib/puppet/pops/adapters.rb +5 -1
  69. data/lib/puppet/pops/evaluator/access_operator.rb +77 -15
  70. data/lib/puppet/pops/evaluator/closure.rb +10 -5
  71. data/lib/puppet/pops/evaluator/compare_operator.rb +34 -4
  72. data/lib/puppet/pops/evaluator/evaluator_impl.rb +75 -22
  73. data/lib/puppet/pops/evaluator/literal_evaluator.rb +7 -6
  74. data/lib/puppet/pops/evaluator/runtime3_converter.rb +13 -1
  75. data/lib/puppet/pops/evaluator/runtime3_support.rb +14 -4
  76. data/lib/puppet/pops/functions/dispatcher.rb +1 -1
  77. data/lib/puppet/pops/issues.rb +18 -2
  78. data/lib/puppet/pops/loader/base_loader.rb +48 -7
  79. data/lib/puppet/pops/loader/dependency_loader.rb +27 -2
  80. data/lib/puppet/pops/loader/loader.rb +12 -0
  81. data/lib/puppet/pops/loader/predefined_loader.rb +29 -0
  82. data/lib/puppet/pops/loader/runtime3_type_loader.rb +57 -0
  83. data/lib/puppet/pops/loader/static_loader.rb +92 -5
  84. data/lib/puppet/pops/loader/type_definition_instantiator.rb +25 -3
  85. data/lib/puppet/pops/loaders.rb +84 -14
  86. data/lib/puppet/pops/lookup/explainer.rb +38 -1
  87. data/lib/puppet/pops/lookup/interpolation.rb +115 -0
  88. data/lib/puppet/pops/lookup/sub_lookup.rb +86 -0
  89. data/lib/puppet/pops/merge_strategy.rb +0 -10
  90. data/lib/puppet/pops/model/ast_transformer.rb +8 -1
  91. data/lib/puppet/pops/model/factory.rb +31 -8
  92. data/lib/puppet/pops/model/model.rb +8 -0
  93. data/lib/puppet/pops/model/model_label_provider.rb +1 -0
  94. data/lib/puppet/pops/model/model_meta.rb +7 -1
  95. data/lib/puppet/pops/model/model_tree_dumper.rb +4 -0
  96. data/lib/puppet/pops/parser/egrammar.ra +24 -7
  97. data/lib/puppet/pops/parser/eparser.rb +863 -798
  98. data/lib/puppet/pops/parser/evaluating_parser.rb +4 -0
  99. data/lib/puppet/pops/parser/locator.rb +8 -4
  100. data/lib/puppet/pops/pcore.rb +30 -0
  101. data/lib/puppet/pops/types/class_loader.rb +2 -4
  102. data/lib/puppet/pops/types/implementation_registry.rb +146 -0
  103. data/lib/puppet/pops/types/iterable.rb +4 -4
  104. data/lib/puppet/pops/types/p_object_type.rb +846 -0
  105. data/lib/puppet/pops/types/p_runtime_type.rb +102 -0
  106. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +164 -0
  107. data/lib/puppet/pops/types/p_sem_ver_type.rb +113 -0
  108. data/lib/puppet/pops/types/puppet_object.rb +21 -0
  109. data/lib/puppet/pops/types/recursion_guard.rb +10 -0
  110. data/lib/puppet/pops/types/ruby_generator.rb +258 -0
  111. data/lib/puppet/pops/types/string_converter.rb +922 -0
  112. data/lib/puppet/pops/types/type_asserter.rb +2 -2
  113. data/lib/puppet/pops/types/type_calculator.rb +30 -6
  114. data/lib/puppet/pops/types/type_conversion_error.rb +15 -0
  115. data/lib/puppet/pops/types/type_factory.rb +49 -16
  116. data/lib/puppet/pops/types/type_formatter.rb +341 -106
  117. data/lib/puppet/pops/types/type_mismatch_describer.rb +132 -41
  118. data/lib/puppet/pops/types/type_parser.rb +205 -197
  119. data/lib/puppet/pops/types/types.rb +722 -202
  120. data/lib/puppet/pops/validation/checker4_0.rb +66 -4
  121. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  122. data/lib/puppet/pops/validation.rb +1 -1
  123. data/lib/puppet/pops/visitor.rb +3 -1
  124. data/lib/puppet/pops.rb +6 -0
  125. data/lib/puppet/property.rb +1 -1
  126. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  127. data/lib/puppet/provider/package/pip.rb +64 -20
  128. data/lib/puppet/provider/package/pip3.rb +2 -0
  129. data/lib/puppet/provider/package/puppet_gem.rb +0 -0
  130. data/lib/puppet/provider/package/rpm.rb +112 -0
  131. data/lib/puppet/provider/package/yum.rb +7 -68
  132. data/lib/puppet/provider/service/daemontools.rb +3 -3
  133. data/lib/puppet/provider/service/init.rb +4 -2
  134. data/lib/puppet/provider/service/runit.rb +3 -3
  135. data/lib/puppet/provider/service/smf.rb +6 -3
  136. data/lib/puppet/provider/service/systemd.rb +59 -73
  137. data/lib/puppet/provider/user/user_role_add.rb +3 -1
  138. data/lib/puppet/reference/providers.rb +2 -3
  139. data/lib/puppet/resource/catalog.rb +34 -30
  140. data/lib/puppet/resource/type_collection.rb +23 -8
  141. data/lib/puppet/resource.rb +54 -37
  142. data/lib/puppet/settings/base_setting.rb +9 -3
  143. data/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
  144. data/lib/puppet/settings.rb +5 -3
  145. data/lib/puppet/ssl/oids.rb +24 -2
  146. data/lib/puppet/test/test_helper.rb +0 -1
  147. data/lib/puppet/transaction.rb +0 -24
  148. data/lib/puppet/type/exec.rb +17 -17
  149. data/lib/puppet/type/file/content.rb +8 -8
  150. data/lib/puppet/type/file/ensure.rb +4 -4
  151. data/lib/puppet/type/file/source.rb +4 -4
  152. data/lib/puppet/type/file/target.rb +2 -2
  153. data/lib/puppet/type/file.rb +15 -5
  154. data/lib/puppet/type/filebucket.rb +1 -1
  155. data/lib/puppet/type/mount.rb +18 -1
  156. data/lib/puppet/type/package.rb +3 -3
  157. data/lib/puppet/type/schedule.rb +5 -5
  158. data/lib/puppet/type/service.rb +15 -0
  159. data/lib/puppet/type/sshkey.rb +5 -3
  160. data/lib/puppet/type/stage.rb +1 -1
  161. data/lib/puppet/type/tidy.rb +3 -3
  162. data/lib/puppet/type/zone.rb +5 -5
  163. data/lib/puppet/type.rb +13 -7
  164. data/lib/puppet/util/feature.rb +1 -1
  165. data/lib/puppet/util/monkey_patches.rb +18 -5
  166. data/lib/puppet/util/network_device/cisco/device.rb +16 -6
  167. data/lib/puppet/util/network_device/cisco/interface.rb +5 -6
  168. data/lib/puppet/util/plist.rb +3 -3
  169. data/lib/puppet/util/windows/file.rb +40 -10
  170. data/lib/puppet/util/windows.rb +1 -0
  171. data/lib/puppet/version.rb +1 -1
  172. data/spec/fixtures/unit/application/environments/production/data/common.yaml +13 -0
  173. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/third_utf8.json +3 -0
  174. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/utf8.yaml +3 -0
  175. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +5 -1
  176. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +2 -2
  177. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +2 -1
  178. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/manifests/init.pp +2 -1
  179. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/data/empty_key.json +1 -0
  180. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/hiera.yaml +5 -0
  181. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/manifests/init.pp +2 -0
  182. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/metadata.json +9 -0
  183. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/data/empty_key.yaml +1 -0
  184. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/hiera.yaml +5 -0
  185. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/manifests/init.pp +2 -0
  186. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/metadata.json +9 -0
  187. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  188. data/spec/fixtures/unit/parser/lexer/subclass_name_duplication.pp +0 -0
  189. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/type/usee_type.rb +5 -0
  190. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +6 -0
  191. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +0 -0
  192. data/spec/fixtures/unit/provider/service/smf/svcs.out +4 -3
  193. data/spec/integration/agent/logging_spec.rb +0 -0
  194. data/spec/integration/application/apply_spec.rb +0 -0
  195. data/spec/integration/application/doc_spec.rb +0 -0
  196. data/spec/integration/configurer_spec.rb +0 -0
  197. data/spec/integration/data_binding_spec.rb +0 -34
  198. data/spec/integration/defaults_spec.rb +0 -0
  199. data/spec/integration/faces/ca_spec.rb +0 -0
  200. data/spec/integration/faces/documentation_spec.rb +0 -0
  201. data/spec/integration/file_serving/fileset_spec.rb +0 -0
  202. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -0
  203. data/spec/integration/indirector/catalog/compiler_spec.rb +0 -0
  204. data/spec/integration/indirector/direct_file_server_spec.rb +0 -0
  205. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -0
  206. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -0
  207. data/spec/integration/indirector/node/ldap_spec.rb +0 -0
  208. data/spec/integration/module_tool/tar/mini_spec.rb +27 -27
  209. data/spec/integration/network/formats_spec.rb +0 -0
  210. data/spec/integration/node/environment_spec.rb +0 -0
  211. data/spec/integration/node/facts_spec.rb +0 -0
  212. data/spec/integration/node_spec.rb +0 -0
  213. data/spec/integration/parser/catalog_spec.rb +14 -2
  214. data/spec/integration/parser/collection_spec.rb +0 -0
  215. data/spec/integration/parser/compiler_spec.rb +94 -3
  216. data/spec/integration/parser/functions/require_spec.rb +0 -0
  217. data/spec/integration/parser/parameter_defaults_spec.rb +19 -1
  218. data/spec/integration/parser/resource_expressions_spec.rb +1 -1
  219. data/spec/integration/provider/mailalias/aliases_spec.rb +0 -0
  220. data/spec/integration/provider/mount_spec.rb +0 -0
  221. data/spec/integration/provider/service/init_spec.rb +0 -0
  222. data/spec/integration/provider/ssh_authorized_key_spec.rb +0 -0
  223. data/spec/integration/reference/providers_spec.rb +0 -0
  224. data/spec/integration/reports_spec.rb +0 -0
  225. data/spec/integration/resource/catalog_spec.rb +0 -0
  226. data/spec/integration/resource/type_collection_spec.rb +8 -0
  227. data/spec/integration/ssl/certificate_authority_spec.rb +0 -0
  228. data/spec/integration/ssl/certificate_request_spec.rb +0 -0
  229. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -0
  230. data/spec/integration/ssl/host_spec.rb +0 -0
  231. data/spec/integration/transaction/report_spec.rb +0 -0
  232. data/spec/integration/transaction_spec.rb +0 -0
  233. data/spec/integration/type/exec_spec.rb +0 -0
  234. data/spec/integration/type/file_spec.rb +0 -0
  235. data/spec/integration/type/package_spec.rb +0 -0
  236. data/spec/integration/type/tidy_spec.rb +0 -0
  237. data/spec/integration/type_spec.rb +0 -0
  238. data/spec/integration/util/autoload_spec.rb +0 -0
  239. data/spec/integration/util/rdoc/parser_spec.rb +0 -0
  240. data/spec/integration/util/settings_spec.rb +26 -0
  241. data/spec/integration/util/windows/registry_spec.rb +0 -0
  242. data/spec/integration/util/windows/security_spec.rb +0 -0
  243. data/spec/integration/util/windows/user_spec.rb +0 -0
  244. data/spec/integration/util_spec.rb +0 -0
  245. data/spec/lib/puppet/face/1.0.0/huzzah.rb +0 -0
  246. data/spec/lib/puppet/face/basetest.rb +0 -0
  247. data/spec/lib/puppet/face/huzzah.rb +0 -0
  248. data/spec/lib/puppet_spec/compiler.rb +11 -4
  249. data/spec/lib/puppet_spec/files.rb +0 -0
  250. data/spec/lib/puppet_spec/fixtures.rb +0 -0
  251. data/spec/lib/puppet_spec/verbose.rb +0 -0
  252. data/spec/shared_behaviours/all_parsedfile_providers.rb +0 -0
  253. data/spec/shared_behaviours/file_server_terminus.rb +0 -0
  254. data/spec/shared_behaviours/file_serving.rb +0 -0
  255. data/spec/shared_behaviours/memory_terminus.rb +0 -0
  256. data/spec/shared_behaviours/path_parameters.rb +0 -0
  257. data/spec/shared_behaviours/things_that_declare_options.rb +0 -0
  258. data/spec/shared_contexts/types_setup.rb +4 -0
  259. data/spec/spec_helper.rb +0 -0
  260. data/spec/unit/agent/locker_spec.rb +0 -0
  261. data/spec/unit/agent_spec.rb +0 -0
  262. data/spec/unit/application/agent_spec.rb +0 -0
  263. data/spec/unit/application/apply_spec.rb +0 -0
  264. data/spec/unit/application/cert_spec.rb +0 -0
  265. data/spec/unit/application/certificate_spec.rb +0 -0
  266. data/spec/unit/application/config_spec.rb +0 -0
  267. data/spec/unit/application/describe_spec.rb +0 -0
  268. data/spec/unit/application/device_spec.rb +0 -0
  269. data/spec/unit/application/doc_spec.rb +0 -0
  270. data/spec/unit/application/face_base_spec.rb +0 -0
  271. data/spec/unit/application/facts_spec.rb +0 -0
  272. data/spec/unit/application/filebucket_spec.rb +0 -0
  273. data/spec/unit/application/indirection_base_spec.rb +0 -0
  274. data/spec/unit/application/inspect_spec.rb +19 -8
  275. data/spec/unit/application/lookup_spec.rb +92 -10
  276. data/spec/unit/application/master_spec.rb +0 -0
  277. data/spec/unit/application/resource_spec.rb +0 -0
  278. data/spec/unit/application_spec.rb +0 -0
  279. data/spec/unit/appmgmt_spec.rb +44 -35
  280. data/spec/unit/capability_spec.rb +33 -53
  281. data/spec/unit/configurer/downloader_factory_spec.rb +0 -0
  282. data/spec/unit/configurer/downloader_spec.rb +0 -0
  283. data/spec/unit/configurer/fact_handler_spec.rb +0 -0
  284. data/spec/unit/configurer/plugin_handler_spec.rb +0 -0
  285. data/spec/unit/configurer_spec.rb +0 -0
  286. data/spec/unit/confine/exists_spec.rb +0 -0
  287. data/spec/unit/confine/false_spec.rb +0 -0
  288. data/spec/unit/confine/feature_spec.rb +0 -0
  289. data/spec/unit/confine/true_spec.rb +0 -0
  290. data/spec/unit/confine/variable_spec.rb +0 -0
  291. data/spec/unit/confine_collection_spec.rb +0 -0
  292. data/spec/unit/confine_spec.rb +0 -0
  293. data/spec/unit/confiner_spec.rb +0 -0
  294. data/spec/unit/daemon_spec.rb +0 -0
  295. data/spec/unit/data_providers/function_data_provider_spec.rb +19 -1
  296. data/spec/unit/data_providers/hiera_data_provider_spec.rb +2 -2
  297. data/spec/unit/defaults_spec.rb +18 -0
  298. data/spec/unit/external/pson_spec.rb +0 -0
  299. data/spec/unit/face/catalog_spec.rb +0 -0
  300. data/spec/unit/face/certificate_spec.rb +0 -0
  301. data/spec/unit/face/config_spec.rb +0 -0
  302. data/spec/unit/face/facts_spec.rb +0 -0
  303. data/spec/unit/face/file_spec.rb +0 -0
  304. data/spec/unit/face/help_spec.rb +0 -0
  305. data/spec/unit/face/node_spec.rb +0 -0
  306. data/spec/unit/face/plugin_spec.rb +0 -0
  307. data/spec/unit/face_spec.rb +0 -0
  308. data/spec/unit/file_bucket/dipper_spec.rb +0 -0
  309. data/spec/unit/file_bucket/file_spec.rb +0 -0
  310. data/spec/unit/file_serving/base_spec.rb +0 -0
  311. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -0
  312. data/spec/unit/file_serving/configuration_spec.rb +0 -0
  313. data/spec/unit/file_serving/content_spec.rb +0 -0
  314. data/spec/unit/file_serving/fileset_spec.rb +0 -0
  315. data/spec/unit/file_serving/metadata_spec.rb +0 -0
  316. data/spec/unit/file_serving/mount/file_spec.rb +0 -0
  317. data/spec/unit/file_serving/mount/modules_spec.rb +0 -0
  318. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +0 -0
  319. data/spec/unit/file_serving/mount/plugins_spec.rb +0 -0
  320. data/spec/unit/file_serving/mount_spec.rb +0 -0
  321. data/spec/unit/file_serving/terminus_helper_spec.rb +0 -0
  322. data/spec/unit/file_serving/terminus_selector_spec.rb +0 -0
  323. data/spec/unit/file_system/uniquefile_spec.rb +20 -0
  324. data/spec/unit/file_system_spec.rb +61 -0
  325. data/spec/unit/functions/assert_type_spec.rb +8 -0
  326. data/spec/unit/functions/defined_spec.rb +0 -0
  327. data/spec/unit/functions/dig_spec.rb +58 -0
  328. data/spec/unit/functions/hiera_spec.rb +0 -0
  329. data/spec/unit/functions/lest_spec.rb +34 -0
  330. data/spec/unit/functions/lookup_spec.rb +109 -3
  331. data/spec/unit/functions/new_spec.rb +543 -0
  332. data/spec/unit/functions/regsubst_spec.rb +8 -0
  333. data/spec/unit/functions/split_spec.rb +0 -0
  334. data/spec/unit/functions/then_spec.rb +40 -0
  335. data/spec/unit/functions/versioncmp_spec.rb +0 -0
  336. data/spec/unit/functions4_spec.rb +78 -10
  337. data/spec/unit/graph/relationship_graph_spec.rb +0 -0
  338. data/spec/unit/graph/simple_graph_spec.rb +0 -0
  339. data/spec/unit/hiera_puppet_spec.rb +49 -8
  340. data/spec/unit/indirector/catalog/compiler_spec.rb +7 -0
  341. data/spec/unit/indirector/catalog/json_spec.rb +0 -0
  342. data/spec/unit/indirector/catalog/msgpack_spec.rb +0 -0
  343. data/spec/unit/indirector/catalog/rest_spec.rb +0 -0
  344. data/spec/unit/indirector/catalog/static_compiler_spec.rb +0 -0
  345. data/spec/unit/indirector/catalog/store_configs_spec.rb +0 -0
  346. data/spec/unit/indirector/catalog/yaml_spec.rb +0 -0
  347. data/spec/unit/indirector/certificate/ca_spec.rb +0 -0
  348. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -0
  349. data/spec/unit/indirector/certificate/file_spec.rb +0 -0
  350. data/spec/unit/indirector/certificate/rest_spec.rb +0 -0
  351. data/spec/unit/indirector/certificate_request/ca_spec.rb +0 -0
  352. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -0
  353. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -0
  354. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -0
  355. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +0 -0
  356. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -0
  357. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +0 -0
  358. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +0 -0
  359. data/spec/unit/indirector/certificate_status/file_spec.rb +0 -0
  360. data/spec/unit/indirector/certificate_status/rest_spec.rb +0 -0
  361. data/spec/unit/indirector/code_spec.rb +0 -0
  362. data/spec/unit/indirector/direct_file_server_spec.rb +0 -0
  363. data/spec/unit/indirector/envelope_spec.rb +0 -0
  364. data/spec/unit/indirector/exec_spec.rb +0 -0
  365. data/spec/unit/indirector/face_spec.rb +0 -0
  366. data/spec/unit/indirector/facts/facter_spec.rb +0 -0
  367. data/spec/unit/indirector/facts/network_device_spec.rb +0 -0
  368. data/spec/unit/indirector/facts/store_configs_spec.rb +0 -0
  369. data/spec/unit/indirector/facts/yaml_spec.rb +0 -0
  370. data/spec/unit/indirector/file_bucket_file/file_spec.rb +0 -0
  371. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +0 -0
  372. data/spec/unit/indirector/file_content/file_server_spec.rb +0 -0
  373. data/spec/unit/indirector/file_content/file_spec.rb +0 -0
  374. data/spec/unit/indirector/file_content/rest_spec.rb +0 -0
  375. data/spec/unit/indirector/file_metadata/file_server_spec.rb +0 -0
  376. data/spec/unit/indirector/file_metadata/file_spec.rb +0 -0
  377. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -0
  378. data/spec/unit/indirector/file_server_spec.rb +0 -0
  379. data/spec/unit/indirector/indirection_spec.rb +0 -0
  380. data/spec/unit/indirector/json_spec.rb +0 -0
  381. data/spec/unit/indirector/key/ca_spec.rb +0 -0
  382. data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -0
  383. data/spec/unit/indirector/key/file_spec.rb +0 -0
  384. data/spec/unit/indirector/ldap_spec.rb +0 -0
  385. data/spec/unit/indirector/memory_spec.rb +0 -0
  386. data/spec/unit/indirector/msgpack_spec.rb +11 -1
  387. data/spec/unit/indirector/node/exec_spec.rb +0 -0
  388. data/spec/unit/indirector/node/ldap_spec.rb +0 -0
  389. data/spec/unit/indirector/node/memory_spec.rb +0 -0
  390. data/spec/unit/indirector/node/msgpack_spec.rb +0 -0
  391. data/spec/unit/indirector/node/plain_spec.rb +0 -0
  392. data/spec/unit/indirector/node/rest_spec.rb +0 -0
  393. data/spec/unit/indirector/node/store_configs_spec.rb +0 -0
  394. data/spec/unit/indirector/node/yaml_spec.rb +0 -0
  395. data/spec/unit/indirector/plain_spec.rb +0 -0
  396. data/spec/unit/indirector/report/msgpack_spec.rb +0 -0
  397. data/spec/unit/indirector/report/processor_spec.rb +0 -0
  398. data/spec/unit/indirector/report/rest_spec.rb +0 -0
  399. data/spec/unit/indirector/report/yaml_spec.rb +0 -0
  400. data/spec/unit/indirector/request_spec.rb +0 -0
  401. data/spec/unit/indirector/resource/ral_spec.rb +0 -0
  402. data/spec/unit/indirector/resource/store_configs_spec.rb +0 -0
  403. data/spec/unit/indirector/resource_type/parser_spec.rb +5 -0
  404. data/spec/unit/indirector/resource_type/rest_spec.rb +0 -0
  405. data/spec/unit/indirector/rest_spec.rb +12 -0
  406. data/spec/unit/indirector/ssl_file_spec.rb +0 -0
  407. data/spec/unit/indirector/status/rest_spec.rb +0 -0
  408. data/spec/unit/indirector/store_configs_spec.rb +0 -0
  409. data/spec/unit/indirector/terminus_spec.rb +0 -0
  410. data/spec/unit/indirector/yaml_spec.rb +0 -0
  411. data/spec/unit/indirector_spec.rb +0 -0
  412. data/spec/unit/interface/action_builder_spec.rb +0 -0
  413. data/spec/unit/interface/action_manager_spec.rb +0 -0
  414. data/spec/unit/interface/action_spec.rb +0 -0
  415. data/spec/unit/interface/documentation_spec.rb +0 -0
  416. data/spec/unit/interface/face_collection_spec.rb +0 -0
  417. data/spec/unit/interface/option_builder_spec.rb +0 -0
  418. data/spec/unit/interface/option_spec.rb +0 -0
  419. data/spec/unit/interface_spec.rb +0 -0
  420. data/spec/unit/man_spec.rb +0 -0
  421. data/spec/unit/module_spec.rb +30 -6
  422. data/spec/unit/module_tool/applications/builder_spec.rb +23 -3
  423. data/spec/unit/module_tool_spec.rb +0 -0
  424. data/spec/unit/network/auth_config_parser_spec.rb +16 -0
  425. data/spec/unit/network/authconfig_spec.rb +0 -0
  426. data/spec/unit/network/authstore_spec.rb +0 -0
  427. data/spec/unit/network/format_handler_spec.rb +0 -0
  428. data/spec/unit/network/format_spec.rb +0 -0
  429. data/spec/unit/network/formats_spec.rb +0 -0
  430. data/spec/unit/network/http/api/indirected_routes_spec.rb +21 -13
  431. data/spec/unit/network/http/api/master/v3/environment_spec.rb +60 -0
  432. data/spec/unit/network/http/api/master/v3_spec.rb +0 -0
  433. data/spec/unit/network/http/compression_spec.rb +0 -0
  434. data/spec/unit/network/http/connection_spec.rb +0 -0
  435. data/spec/unit/network/http/factory_spec.rb +0 -0
  436. data/spec/unit/network/http/handler_spec.rb +0 -0
  437. data/spec/unit/network/http/nocache_pool_spec.rb +0 -0
  438. data/spec/unit/network/http/pool_spec.rb +0 -0
  439. data/spec/unit/network/http/rack/rest_spec.rb +7 -0
  440. data/spec/unit/network/http/rack_spec.rb +0 -0
  441. data/spec/unit/network/http/session_spec.rb +0 -0
  442. data/spec/unit/network/http/site_spec.rb +0 -0
  443. data/spec/unit/network/http/webrick/rest_spec.rb +0 -0
  444. data/spec/unit/network/http/webrick_spec.rb +0 -0
  445. data/spec/unit/network/http_pool_spec.rb +0 -0
  446. data/spec/unit/network/http_spec.rb +0 -0
  447. data/spec/unit/network/resolver_spec.rb +0 -0
  448. data/spec/unit/network/rights_spec.rb +0 -0
  449. data/spec/unit/network/server_spec.rb +0 -0
  450. data/spec/unit/node/environment_spec.rb +10 -0
  451. data/spec/unit/node/facts_spec.rb +0 -0
  452. data/spec/unit/node_spec.rb +0 -0
  453. data/spec/unit/other/selinux_spec.rb +0 -0
  454. data/spec/unit/parameter/path_spec.rb +0 -0
  455. data/spec/unit/parameter/value_collection_spec.rb +0 -0
  456. data/spec/unit/parameter/value_spec.rb +0 -0
  457. data/spec/unit/parameter_spec.rb +0 -0
  458. data/spec/unit/parser/ast/leaf_spec.rb +0 -0
  459. data/spec/unit/parser/compiler_spec.rb +20 -1
  460. data/spec/unit/parser/files_spec.rb +0 -0
  461. data/spec/unit/parser/functions/create_resources_spec.rb +2 -2
  462. data/spec/unit/parser/functions/defined_spec.rb +0 -0
  463. data/spec/unit/parser/functions/digest_spec.rb +0 -0
  464. data/spec/unit/parser/functions/fail_spec.rb +0 -0
  465. data/spec/unit/parser/functions/file_spec.rb +0 -0
  466. data/spec/unit/parser/functions/fqdn_rand_spec.rb +0 -0
  467. data/spec/unit/parser/functions/generate_spec.rb +0 -0
  468. data/spec/unit/parser/functions/hiera_spec.rb +0 -0
  469. data/spec/unit/parser/functions/include_spec.rb +0 -0
  470. data/spec/unit/parser/functions/inline_template_spec.rb +0 -0
  471. data/spec/unit/parser/functions/realize_spec.rb +0 -0
  472. data/spec/unit/parser/functions/regsubst_spec.rb +0 -0
  473. data/spec/unit/parser/functions/require_spec.rb +0 -0
  474. data/spec/unit/parser/functions/scanf_spec.rb +0 -0
  475. data/spec/unit/parser/functions/shared.rb +1 -1
  476. data/spec/unit/parser/functions/shellquote_spec.rb +0 -0
  477. data/spec/unit/parser/functions/split_spec.rb +0 -0
  478. data/spec/unit/parser/functions/sprintf_spec.rb +0 -0
  479. data/spec/unit/parser/functions/tag_spec.rb +0 -0
  480. data/spec/unit/parser/functions/template_spec.rb +0 -0
  481. data/spec/unit/parser/functions/versioncmp_spec.rb +0 -0
  482. data/spec/unit/parser/functions_spec.rb +0 -0
  483. data/spec/unit/parser/relationship_spec.rb +0 -0
  484. data/spec/unit/parser/resource/param_spec.rb +0 -0
  485. data/spec/unit/parser/resource_spec.rb +8 -1
  486. data/spec/unit/parser/scope_spec.rb +45 -0
  487. data/spec/unit/parser/templatewrapper_spec.rb +0 -0
  488. data/spec/unit/parser/type_loader_spec.rb +0 -0
  489. data/spec/unit/pops/evaluator/access_ops_spec.rb +14 -0
  490. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +13 -5
  491. data/spec/unit/pops/loaders/loaders_spec.rb +8 -8
  492. data/spec/unit/pops/loaders/static_loader_spec.rb +92 -1
  493. data/spec/unit/pops/lookup/interpolation_spec.rb +313 -0
  494. data/spec/unit/pops/parser/lexer2_spec.rb +2 -9
  495. data/spec/unit/pops/parser/parse_application_spec.rb +3 -8
  496. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +19 -0
  497. data/spec/unit/pops/parser/parse_capabilities_spec.rb +3 -10
  498. data/spec/unit/pops/parser/parse_site_spec.rb +19 -10
  499. data/spec/unit/pops/parser/parser_rspec_helper.rb +0 -4
  500. data/spec/unit/pops/types/enumeration_spec.rb +13 -12
  501. data/spec/unit/pops/types/iterable_spec.rb +2 -2
  502. data/spec/unit/pops/types/p_object_type_spec.rb +1060 -0
  503. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +285 -0
  504. data/spec/unit/pops/types/recursion_guard_spec.rb +19 -17
  505. data/spec/unit/pops/types/ruby_generator_spec.rb +261 -0
  506. data/spec/unit/pops/types/string_converter_spec.rb +904 -0
  507. data/spec/unit/pops/types/type_asserter_spec.rb +3 -3
  508. data/spec/unit/pops/types/type_calculator_spec.rb +462 -412
  509. data/spec/unit/pops/types/type_factory_spec.rb +129 -88
  510. data/spec/unit/pops/types/type_formatter_spec.rb +80 -8
  511. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +27 -2
  512. data/spec/unit/pops/types/type_parser_spec.rb +55 -16
  513. data/spec/unit/pops/types/types_spec.rb +320 -0
  514. data/spec/unit/pops/validator/validator_spec.rb +84 -10
  515. data/spec/unit/property/ensure_spec.rb +0 -0
  516. data/spec/unit/property/keyvalue_spec.rb +0 -0
  517. data/spec/unit/property/list_spec.rb +0 -0
  518. data/spec/unit/property/ordered_list_spec.rb +0 -0
  519. data/spec/unit/property_spec.rb +0 -0
  520. data/spec/unit/provider/augeas/augeas_spec.rb +0 -0
  521. data/spec/unit/provider/cisco_spec.rb +0 -0
  522. data/spec/unit/provider/command_spec.rb +0 -0
  523. data/spec/unit/provider/cron/crontab_spec.rb +0 -0
  524. data/spec/unit/provider/exec/posix_spec.rb +0 -0
  525. data/spec/unit/provider/exec/shell_spec.rb +0 -0
  526. data/spec/unit/provider/exec/windows_spec.rb +0 -0
  527. data/spec/unit/provider/exec_spec.rb +0 -0
  528. data/spec/unit/provider/file/posix_spec.rb +0 -0
  529. data/spec/unit/provider/file/windows_spec.rb +0 -0
  530. data/spec/unit/provider/group/groupadd_spec.rb +0 -0
  531. data/spec/unit/provider/group/ldap_spec.rb +0 -0
  532. data/spec/unit/provider/group/pw_spec.rb +0 -0
  533. data/spec/unit/provider/group/windows_adsi_spec.rb +0 -0
  534. data/spec/unit/provider/host/parsed_spec.rb +0 -0
  535. data/spec/unit/provider/interface/cisco_spec.rb +0 -0
  536. data/spec/unit/provider/ldap_spec.rb +0 -0
  537. data/spec/unit/provider/macauthorization_spec.rb +0 -0
  538. data/spec/unit/provider/mcx/mcxcontent_spec.rb +0 -0
  539. data/spec/unit/provider/mount/parsed_spec.rb +0 -0
  540. data/spec/unit/provider/mount_spec.rb +0 -0
  541. data/spec/unit/provider/naginator_spec.rb +0 -0
  542. data/spec/unit/provider/nameservice/directoryservice_spec.rb +0 -0
  543. data/spec/unit/provider/nameservice_spec.rb +0 -0
  544. data/spec/unit/provider/network_device_spec.rb +0 -0
  545. data/spec/unit/provider/package/aix_spec.rb +0 -0
  546. data/spec/unit/provider/package/appdmg_spec.rb +0 -0
  547. data/spec/unit/provider/package/apt_spec.rb +0 -0
  548. data/spec/unit/provider/package/aptitude_spec.rb +0 -0
  549. data/spec/unit/provider/package/aptrpm_spec.rb +0 -0
  550. data/spec/unit/provider/package/dpkg_spec.rb +0 -0
  551. data/spec/unit/provider/package/freebsd_spec.rb +0 -0
  552. data/spec/unit/provider/package/gem_spec.rb +0 -0
  553. data/spec/unit/provider/package/hpux_spec.rb +0 -0
  554. data/spec/unit/provider/package/macports_spec.rb +0 -0
  555. data/spec/unit/provider/package/nim_spec.rb +0 -0
  556. data/spec/unit/provider/package/openbsd_spec.rb +0 -0
  557. data/spec/unit/provider/package/opkg_spec.rb +0 -0
  558. data/spec/unit/provider/package/pacman_spec.rb +0 -0
  559. data/spec/unit/provider/package/pip3_spec.rb +9 -262
  560. data/spec/unit/provider/package/pip_spec.rb +85 -22
  561. data/spec/unit/provider/package/pkg_spec.rb +0 -0
  562. data/spec/unit/provider/package/pkgutil_spec.rb +0 -0
  563. data/spec/unit/provider/package/puppet_gem_spec.rb +0 -0
  564. data/spec/unit/provider/package/rpm_spec.rb +160 -3
  565. data/spec/unit/provider/package/sun_spec.rb +0 -0
  566. data/spec/unit/provider/package/windows/package_spec.rb +0 -0
  567. data/spec/unit/provider/package/windows_spec.rb +0 -0
  568. data/spec/unit/provider/package/yum_spec.rb +23 -134
  569. data/spec/unit/provider/package/zypper_spec.rb +0 -0
  570. data/spec/unit/provider/parsedfile_spec.rb +0 -0
  571. data/spec/unit/provider/selboolean_spec.rb +0 -0
  572. data/spec/unit/provider/selmodule_spec.rb +0 -0
  573. data/spec/unit/provider/service/base_spec.rb +0 -0
  574. data/spec/unit/provider/service/bsd_spec.rb +0 -0
  575. data/spec/unit/provider/service/daemontools_spec.rb +0 -0
  576. data/spec/unit/provider/service/debian_spec.rb +0 -0
  577. data/spec/unit/provider/service/freebsd_spec.rb +0 -0
  578. data/spec/unit/provider/service/gentoo_spec.rb +0 -0
  579. data/spec/unit/provider/service/init_spec.rb +0 -0
  580. data/spec/unit/provider/service/launchd_spec.rb +0 -0
  581. data/spec/unit/provider/service/openbsd_spec.rb +0 -0
  582. data/spec/unit/provider/service/openrc_spec.rb +0 -0
  583. data/spec/unit/provider/service/openwrt_spec.rb +0 -0
  584. data/spec/unit/provider/service/rcng_spec.rb +0 -0
  585. data/spec/unit/provider/service/redhat_spec.rb +0 -0
  586. data/spec/unit/provider/service/runit_spec.rb +0 -0
  587. data/spec/unit/provider/service/smf_spec.rb +14 -2
  588. data/spec/unit/provider/service/src_spec.rb +0 -0
  589. data/spec/unit/provider/service/systemd_spec.rb +34 -42
  590. data/spec/unit/provider/service/upstart_spec.rb +0 -0
  591. data/spec/unit/provider/service/windows_spec.rb +0 -0
  592. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +0 -0
  593. data/spec/unit/provider/sshkey/parsed_spec.rb +0 -0
  594. data/spec/unit/provider/user/directoryservice_spec.rb +0 -0
  595. data/spec/unit/provider/user/hpux_spec.rb +0 -0
  596. data/spec/unit/provider/user/ldap_spec.rb +0 -0
  597. data/spec/unit/provider/user/openbsd_spec.rb +0 -0
  598. data/spec/unit/provider/user/pw_spec.rb +0 -0
  599. data/spec/unit/provider/user/user_role_add_spec.rb +0 -0
  600. data/spec/unit/provider/user/useradd_spec.rb +0 -0
  601. data/spec/unit/provider/user/windows_adsi_spec.rb +0 -0
  602. data/spec/unit/provider/vlan/cisco_spec.rb +0 -0
  603. data/spec/unit/provider/zfs/zfs_spec.rb +0 -0
  604. data/spec/unit/provider/zone/solaris_spec.rb +0 -0
  605. data/spec/unit/provider/zpool/zpool_spec.rb +0 -0
  606. data/spec/unit/provider_spec.rb +0 -0
  607. data/spec/unit/puppet_spec.rb +0 -0
  608. data/spec/unit/relationship_spec.rb +0 -0
  609. data/spec/unit/reports/http_spec.rb +0 -0
  610. data/spec/unit/reports/store_spec.rb +0 -0
  611. data/spec/unit/reports_spec.rb +0 -0
  612. data/spec/unit/resource/capability_finder_spec.rb +10 -2
  613. data/spec/unit/resource/catalog_spec.rb +27 -0
  614. data/spec/unit/resource/status_spec.rb +0 -0
  615. data/spec/unit/resource/type_collection_helper_spec.rb +0 -0
  616. data/spec/unit/resource/type_collection_spec.rb +0 -0
  617. data/spec/unit/resource/type_spec.rb +0 -0
  618. data/spec/unit/resource_spec.rb +0 -0
  619. data/spec/unit/settings/directory_setting_spec.rb +0 -0
  620. data/spec/unit/settings/duration_setting_spec.rb +0 -0
  621. data/spec/unit/settings/file_setting_spec.rb +6 -0
  622. data/spec/unit/settings/path_setting_spec.rb +0 -0
  623. data/spec/unit/settings/priority_setting_spec.rb +0 -0
  624. data/spec/unit/settings_spec.rb +1 -1
  625. data/spec/unit/ssl/base_spec.rb +0 -0
  626. data/spec/unit/ssl/certificate_authority/interface_spec.rb +0 -0
  627. data/spec/unit/ssl/certificate_authority_spec.rb +0 -0
  628. data/spec/unit/ssl/certificate_factory_spec.rb +0 -0
  629. data/spec/unit/ssl/certificate_request_spec.rb +0 -0
  630. data/spec/unit/ssl/certificate_revocation_list_spec.rb +0 -0
  631. data/spec/unit/ssl/certificate_spec.rb +0 -0
  632. data/spec/unit/ssl/configuration_spec.rb +0 -0
  633. data/spec/unit/ssl/host_spec.rb +0 -0
  634. data/spec/unit/ssl/inventory_spec.rb +0 -0
  635. data/spec/unit/ssl/key_spec.rb +0 -0
  636. data/spec/unit/status_spec.rb +0 -0
  637. data/spec/unit/transaction/additional_resource_generator_spec.rb +80 -65
  638. data/spec/unit/transaction/event_manager_spec.rb +0 -0
  639. data/spec/unit/transaction/event_spec.rb +0 -0
  640. data/spec/unit/transaction/report_spec.rb +0 -0
  641. data/spec/unit/transaction/resource_harness_spec.rb +0 -0
  642. data/spec/unit/transaction_spec.rb +0 -0
  643. data/spec/unit/type/augeas_spec.rb +0 -0
  644. data/spec/unit/type/component_spec.rb +0 -0
  645. data/spec/unit/type/computer_spec.rb +0 -0
  646. data/spec/unit/type/cron_spec.rb +0 -0
  647. data/spec/unit/type/exec_spec.rb +0 -0
  648. data/spec/unit/type/file/checksum_spec.rb +0 -0
  649. data/spec/unit/type/file/checksum_value_spec.rb +0 -0
  650. data/spec/unit/type/file/content_spec.rb +0 -0
  651. data/spec/unit/type/file/ctime_spec.rb +0 -0
  652. data/spec/unit/type/file/ensure_spec.rb +0 -0
  653. data/spec/unit/type/file/group_spec.rb +0 -0
  654. data/spec/unit/type/file/mode_spec.rb +0 -0
  655. data/spec/unit/type/file/mtime_spec.rb +0 -0
  656. data/spec/unit/type/file/owner_spec.rb +0 -0
  657. data/spec/unit/type/file/selinux_spec.rb +0 -0
  658. data/spec/unit/type/file/source_spec.rb +0 -0
  659. data/spec/unit/type/file/type_spec.rb +0 -0
  660. data/spec/unit/type/file_spec.rb +0 -0
  661. data/spec/unit/type/filebucket_spec.rb +0 -0
  662. data/spec/unit/type/group_spec.rb +0 -0
  663. data/spec/unit/type/host_spec.rb +0 -0
  664. data/spec/unit/type/interface_spec.rb +0 -0
  665. data/spec/unit/type/k5login_spec.rb +0 -0
  666. data/spec/unit/type/macauthorization_spec.rb +0 -0
  667. data/spec/unit/type/mailalias_spec.rb +0 -0
  668. data/spec/unit/type/maillist_spec.rb +0 -0
  669. data/spec/unit/type/mcx_spec.rb +0 -0
  670. data/spec/unit/type/mount_spec.rb +51 -10
  671. data/spec/unit/type/nagios_spec.rb +0 -0
  672. data/spec/unit/type/noop_metaparam_spec.rb +0 -0
  673. data/spec/unit/type/package/package_settings_spec.rb +0 -0
  674. data/spec/unit/type/package_spec.rb +0 -0
  675. data/spec/unit/type/resources_spec.rb +0 -0
  676. data/spec/unit/type/schedule_spec.rb +0 -0
  677. data/spec/unit/type/selboolean_spec.rb +0 -0
  678. data/spec/unit/type/selmodule_spec.rb +0 -0
  679. data/spec/unit/type/service_spec.rb +16 -0
  680. data/spec/unit/type/ssh_authorized_key_spec.rb +0 -0
  681. data/spec/unit/type/sshkey_spec.rb +0 -0
  682. data/spec/unit/type/stage_spec.rb +0 -0
  683. data/spec/unit/type/tidy_spec.rb +0 -0
  684. data/spec/unit/type/user_spec.rb +0 -0
  685. data/spec/unit/type/vlan_spec.rb +0 -0
  686. data/spec/unit/type/whit_spec.rb +0 -0
  687. data/spec/unit/type/yumrepo_spec.rb +0 -0
  688. data/spec/unit/type/zfs_spec.rb +0 -0
  689. data/spec/unit/type/zone_spec.rb +0 -0
  690. data/spec/unit/type/zpool_spec.rb +0 -0
  691. data/spec/unit/type_spec.rb +14 -0
  692. data/spec/unit/util/autoload_spec.rb +0 -0
  693. data/spec/unit/util/backups_spec.rb +0 -0
  694. data/spec/unit/util/checksums_spec.rb +0 -0
  695. data/spec/unit/util/colors_spec.rb +0 -0
  696. data/spec/unit/util/command_line_spec.rb +0 -0
  697. data/spec/unit/util/constant_inflector_spec.rb +0 -0
  698. data/spec/unit/util/diff_spec.rb +0 -0
  699. data/spec/unit/util/errors_spec.rb +0 -0
  700. data/spec/unit/util/execution_spec.rb +0 -0
  701. data/spec/unit/util/execution_stub_spec.rb +0 -0
  702. data/spec/unit/util/feature_spec.rb +1 -1
  703. data/spec/unit/util/filetype_spec.rb +0 -0
  704. data/spec/unit/util/ldap/connection_spec.rb +0 -0
  705. data/spec/unit/util/ldap/generator_spec.rb +0 -0
  706. data/spec/unit/util/ldap/manager_spec.rb +0 -0
  707. data/spec/unit/util/log/destinations_spec.rb +0 -0
  708. data/spec/unit/util/log_spec.rb +0 -0
  709. data/spec/unit/util/logging_spec.rb +0 -0
  710. data/spec/unit/util/metric_spec.rb +0 -0
  711. data/spec/unit/util/monkey_patches_spec.rb +79 -3
  712. data/spec/unit/util/nagios_maker_spec.rb +0 -0
  713. data/spec/unit/util/network_device/cisco/device_spec.rb +1 -1
  714. data/spec/unit/util/network_device/cisco/facts_spec.rb +0 -0
  715. data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -0
  716. data/spec/unit/util/network_device/config_spec.rb +0 -0
  717. data/spec/unit/util/network_device/ipcalc_spec.rb +0 -0
  718. data/spec/unit/util/network_device/transport/base_spec.rb +0 -0
  719. data/spec/unit/util/network_device/transport/ssh_spec.rb +0 -0
  720. data/spec/unit/util/network_device/transport/telnet_spec.rb +0 -0
  721. data/spec/unit/util/package_spec.rb +0 -0
  722. data/spec/unit/util/posix_spec.rb +0 -0
  723. data/spec/unit/util/rdoc_spec.rb +0 -0
  724. data/spec/unit/util/resource_template_spec.rb +0 -0
  725. data/spec/unit/util/retry_action_spec.rb +0 -0
  726. data/spec/unit/util/run_mode_spec.rb +0 -0
  727. data/spec/unit/util/selinux_spec.rb +0 -0
  728. data/spec/unit/util/storage_spec.rb +0 -0
  729. data/spec/unit/util/suidmanager_spec.rb +0 -0
  730. data/spec/unit/util/symbolic_file_mode_spec.rb +0 -0
  731. data/spec/unit/util/tagging_spec.rb +0 -0
  732. data/spec/unit/util/user_attr_spec.rb +0 -0
  733. data/spec/unit/util/warnings_spec.rb +0 -0
  734. data/spec/unit/util/windows/adsi_spec.rb +0 -0
  735. data/spec/unit/util/windows/file_spec.rb +34 -0
  736. data/spec/unit/util/windows/root_certs_spec.rb +0 -0
  737. data/spec/unit/util/windows/sid_spec.rb +0 -0
  738. data/spec/unit/util_spec.rb +0 -0
  739. data/spec/watchr.rb +0 -0
  740. metadata +3402 -3337
  741. checksums.yaml +0 -7
  742. data/ext/puppet-nm-dispatcher +0 -13
  743. data/lib/puppet/pops/types/types_meta.rb +0 -0
  744. data/spec/integration/provider/package_spec.rb +0 -35
  745. data/spec/unit/data_providers/hiera_interpolation_spec.rb +0 -57
@@ -290,6 +290,45 @@ module Puppet::Functions
290
290
  dispatch(meth_name, &block)
291
291
  end
292
292
  end
293
+
294
+ # Allows types local to the function to be defined to ease the use of complex types
295
+ # in a 4.x function. Within the given block, calls to `type` can be made with a string
296
+ # 'AliasType = ExistingType` can be made to define aliases. The defined aliases are
297
+ # available for further aliases, and in all dispatchers.
298
+ #
299
+ # @since 4.5.0
300
+ # @api public
301
+ #
302
+ def self.local_types(&block)
303
+ if loader.nil?
304
+ raise ArgumentError, "No loader present. Call create_loaded_function(:myname, loader,...), instead of 'create_function' if running tests"
305
+ end
306
+ aliases = LocalTypeAliasesBuilder.new(loader, name)
307
+ aliases.instance_eval(&block)
308
+ # Add the loaded types to the builder
309
+ aliases.local_types.each do |type_alias_expr|
310
+ # Bind the type alias to the local_loader using the alias
311
+ t = Puppet::Pops::Loader::TypeDefinitionInstantiator.create_from_model(type_alias_expr, aliases.loader)
312
+
313
+ # Also define a method for convenient access to the defined type alias.
314
+ # Since initial capital letter in Ruby means a Constant these names use a prefix of
315
+ # `type`. As an example, the type 'MyType' is accessed by calling `type_MyType`.
316
+ define_method("type_#{t.name}") { t }
317
+ end
318
+ # Store the loader in the class
319
+ @loader = aliases.loader
320
+ end
321
+
322
+ # Creates a new function instance in the given closure scope (visibility to variables), and a loader
323
+ # (visibility to other definitions). The created function will either use the `given_loader` or
324
+ # (if it has local type aliases) a loader that was constructed from the loader used when loading
325
+ # the function's class.
326
+ #
327
+ # TODO: It would be of value to get rid of the second parameter here, but that would break API.
328
+ #
329
+ def self.new(closure_scope, given_loader)
330
+ super(closure_scope, @loader || given_loader)
331
+ end
293
332
  end
294
333
 
295
334
  # Base class for all functions implemented in the puppet language
@@ -497,6 +536,36 @@ module Puppet::Functions
497
536
  end
498
537
  end
499
538
 
539
+ # The LocalTypeAliasBuilder is used by the 'local_types' method to collect the individual
540
+ # type aliases given by the function's author.
541
+ #
542
+ class LocalTypeAliasesBuilder
543
+ attr_reader :local_types, :parser, :loader
544
+
545
+ def initialize(loader, name)
546
+ @loader = Puppet::Pops::Loader::PredefinedLoader.new(loader, :"local_function_#{name}")
547
+ @local_types = []
548
+ # get the shared parser used by puppet's compiler
549
+ @parser = Puppet::Pops::Parser::EvaluatingParser.singleton()
550
+ end
551
+
552
+ # Defines a local type alias, the given string should be a Puppet Language type alias expression
553
+ # in string form without the leading 'type' keyword.
554
+ # Calls to local_type must be made before the first parameter definition or an error will
555
+ # be raised.
556
+ #
557
+ # @param assignment_string [String] a string on the form 'AliasType = ExistingType'
558
+ # @api public
559
+ #
560
+ def type(assignment_string)
561
+ result = parser.parse_string("type #{assignment_string}", nil) # no file source :-(
562
+ unless result.body.kind_of?(Puppet::Pops::Model::TypeAlias)
563
+ raise ArgumentError, "Expected a type alias assignment on the form 'AliasType = T', got '#{assignment_string}'"
564
+ end
565
+ @local_types << result.body
566
+ end
567
+ end
568
+
500
569
  private
501
570
 
502
571
  # @note WARNING: This style of creating functions is not public. It is a system
@@ -254,7 +254,8 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
254
254
  raise Puppet::Error, "Unable to find a common checksum type between agent '#{options[:checksum_type]}' and master '#{known_checksum_types}'." unless checksum_type
255
255
  end
256
256
 
257
- str = "Compiled %s for #{node.name}" % [checksum_type ? 'static catalog' : 'catalog']
257
+ str = "Compiled %s for " % [checksum_type ? 'static catalog' : 'catalog']
258
+ str += node.name
258
259
  str += " in environment #{node.environment}" if node.environment
259
260
  config = nil
260
261
 
@@ -266,6 +267,8 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
266
267
  rescue Puppet::Error => detail
267
268
  Puppet.err(detail.to_s) if networked?
268
269
  raise
270
+ ensure
271
+ Puppet::Type.clear_misses unless Puppet[:always_retry_plugins]
269
272
  end
270
273
 
271
274
  if checksum_type && config.is_a?(model)
@@ -58,7 +58,7 @@ class Puppet::Indirector::Msgpack < Puppet::Indirector::Terminus
58
58
  msgpack = nil
59
59
 
60
60
  begin
61
- msgpack = File.read(file)
61
+ msgpack = Puppet::FileSystem.read(file, :encoding => 'utf-8')
62
62
  rescue Errno::ENOENT
63
63
  return nil
64
64
  rescue => detail
@@ -100,4 +100,9 @@ class Puppet::Indirector::ResourceType::Parser < Puppet::Indirector::Code
100
100
  environment.check_for_reparse
101
101
  environment.known_resource_types
102
102
  end
103
+
104
+ def allow_remote_requests?
105
+ Puppet.deprecation_warning("The resource_type endpoint is deprecated in favor of the environment_classes endpoint. See https://docs.puppet.com/puppetserver/latest/puppet-api/v3/environment_classes.html")
106
+ super
107
+ end
103
108
  end
@@ -43,8 +43,12 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
43
43
 
44
44
  # Provide appropriate headers.
45
45
  def headers
46
+ # yaml is not allowed on the network
47
+ network_formats = model.supported_formats.reject do |format|
48
+ [:yaml, :b64_zlib_yaml].include?(format)
49
+ end
46
50
  common_headers = {
47
- "Accept" => model.supported_formats.join(", "),
51
+ "Accept" => network_formats.join(", "),
48
52
  Puppet::Network::HTTP::HEADER_PUPPET_VERSION => Puppet.version
49
53
  }
50
54
 
@@ -66,18 +66,18 @@ class Puppet::Indirector::Terminus
66
66
  # Yay, class/instance confusion.
67
67
  subclass.terminus_type = self.name
68
68
 
69
- # Our subclass is specifically associated with an indirection.
69
+ # This subclass is specifically associated with an indirection.
70
70
  raise("Invalid name #{longname}") unless names.length > 0
71
- indirection_name = names.pop.sub(/^[A-Z]/) { |i| i.downcase }.gsub(/[A-Z]/) { |i| "_#{i.downcase}" }.intern
71
+ processed_name = names.pop.sub(/^[A-Z]/) { |i| i.downcase }.gsub(/[A-Z]/) { |i| "_#{i.downcase}" }
72
72
 
73
- if indirection_name == "" or indirection_name.nil?
73
+ if processed_name.empty?
74
74
  raise Puppet::DevError, "Could not discern indirection model from class constant"
75
75
  end
76
76
 
77
77
  # This will throw an exception if the indirection instance cannot be found.
78
78
  # Do this last, because it also registers the terminus type with the indirection,
79
79
  # which needs the above information.
80
- subclass.indirection = indirection_name
80
+ subclass.indirection = processed_name.intern
81
81
 
82
82
  # And add this instance to the instance hash.
83
83
  Puppet::Indirector::Terminus.register_terminus_class(subclass)
@@ -10,11 +10,13 @@ module Puppet
10
10
  require 'puppet/pops/loader/dependency_loader'
11
11
  require 'puppet/pops/loader/null_loader'
12
12
  require 'puppet/pops/loader/static_loader'
13
+ require 'puppet/pops/loader/runtime3_type_loader'
13
14
  require 'puppet/pops/loader/ruby_function_instantiator'
14
15
  require 'puppet/pops/loader/puppet_function_instantiator'
15
16
  require 'puppet/pops/loader/type_definition_instantiator'
16
17
  require 'puppet/pops/loader/loader_paths'
17
18
  require 'puppet/pops/loader/simple_environment_loader'
19
+ require 'puppet/pops/loader/predefined_loader'
18
20
  end
19
21
  end
20
22
 
@@ -20,6 +20,16 @@ module Manager
20
20
  }
21
21
  end
22
22
 
23
+ # Clears any types that were used but absent when types were last loaded.
24
+ # @note Used after each catalog compile when always_retry_plugins is false
25
+ # @api private
26
+ #
27
+ def clear_misses
28
+ unless @types.nil?
29
+ @types.delete_if {|_, v| v.nil? }
30
+ end
31
+ end
32
+
23
33
  # Iterates over all already loaded Type subclasses.
24
34
  # @yield [t] a block receiving each type
25
35
  # @yieldparam t [Puppet::Type] each defined type
@@ -116,6 +126,10 @@ module Manager
116
126
  klass.providerloader.loadall Puppet.lookup(:current_environment)
117
127
  klass.providify unless klass.providers.empty?
118
128
 
129
+ loc = block_given? ? block.source_location : nil
130
+ uri = loc.nil? ? nil : URI("#{Puppet::Util.path_to_uri(loc[0])}?line=#{loc[1]}")
131
+ Puppet::Pops::Loaders.register_runtime3_type(name, uri)
132
+
119
133
  klass
120
134
  end
121
135
 
@@ -146,16 +160,19 @@ module Manager
146
160
  # We are overwhelmingly symbols here, which usually match, so it is worth
147
161
  # having this special-case to return quickly. Like, 25K symbols vs. 300
148
162
  # strings in this method. --daniel 2012-07-17
149
- return @types[name] if @types[name]
163
+ return @types[name] if @types.include? name
150
164
 
151
165
  # Try mangling the name, if it is a string.
152
166
  if name.is_a? String
153
167
  name = name.downcase.intern
154
- return @types[name] if @types[name]
168
+ return @types[name] if @types.include? name
155
169
  end
156
170
  # Try loading the type.
157
171
  if typeloader.load(name, Puppet.lookup(:current_environment))
158
172
  Puppet.warning "Loaded puppet/type/#{name} but no class was created" unless @types.include? name
173
+ elsif !Puppet[:always_retry_plugins]
174
+ # PUP-5482 - Only look for a type once if plugin retry is disabled
175
+ @types[name] = nil
159
176
  end
160
177
 
161
178
  # ...and I guess that is that, eh.
data/lib/puppet/module.rb CHANGED
@@ -48,7 +48,7 @@ class Puppet::Module
48
48
 
49
49
  def self.is_module_namespaced_name?(name)
50
50
  # it must match the full module name according to forge validator
51
- return true if name =~ /^[a-zA-Z0-9]+[-][a-z][a-z0-9_]*$/
51
+ return true if name =~ /^[a-zA-Z0-9]+[-][a-z][a-z0-9_]*$/
52
52
  return false
53
53
  end
54
54
 
@@ -90,7 +90,7 @@ class Puppet::Module
90
90
  return false unless Puppet::FileSystem.exist?(metadata_file)
91
91
 
92
92
  begin
93
- metadata = JSON.parse(File.read(metadata_file))
93
+ metadata = JSON.parse(File.read(metadata_file, :encoding => 'utf-8'))
94
94
  rescue JSON::JSONError => e
95
95
  Puppet.debug("#{name} has an invalid and unparsable metadata.json file. The parse error: #{e.message}")
96
96
  return false
@@ -145,7 +145,7 @@ class Puppet::Module
145
145
  end
146
146
 
147
147
  def load_metadata
148
- @metadata = data = JSON.parse(File.read(metadata_file))
148
+ @metadata = data = JSON.parse(File.read(metadata_file, :encoding => 'utf-8'))
149
149
  @forge_name = data['name'].gsub('-', '/') if data['name']
150
150
 
151
151
  [:source, :author, :version, :license, :dependencies].each do |attr|
@@ -41,7 +41,7 @@ module Puppet::ModuleTool
41
41
  end
42
42
 
43
43
  if require_metadata && !Puppet::ModuleTool.is_module_root?(@path)
44
- raise ArgumentError, "Unable to find metadata.json in module root at #{@path} See https://docs.puppetlabs.com/puppet/latest/reference/modules_publishing.html for required file format."
44
+ raise ArgumentError, "Unable to find metadata.json in module root at #{@path} See https://docs.puppet.com/puppet/latest/reference/modules_publishing.html for required file format."
45
45
  end
46
46
 
47
47
  metadata_path = File.join(@path, 'metadata.json')
@@ -65,9 +65,9 @@ module Puppet::ModuleTool
65
65
  gitignore = File.join(@path, '.gitignore')
66
66
 
67
67
  if File.file? pmtignore
68
- @ignored_files = PathSpec.new File.read(pmtignore)
68
+ @ignored_files = PathSpec.new Puppet::FileSystem.read(pmtignore, :encoding => 'utf-8')
69
69
  elsif File.file? gitignore
70
- @ignored_files = PathSpec.new File.read(gitignore)
70
+ @ignored_files = PathSpec.new Puppet::FileSystem.read(gitignore, :encoding => 'utf-8')
71
71
  else
72
72
  @ignored_files = PathSpec.new
73
73
  end
@@ -1,6 +1,6 @@
1
1
  source ENV['GEM_SOURCE'] || 'https://rubygems.org'
2
2
 
3
- puppetversion = ENV.key?('PUPPET_VERSION') ? "#{ENV['PUPPET_VERSION']}" : ['>= 3.3']
3
+ puppetversion = ENV.key?('PUPPET_VERSION') ? ENV['PUPPET_VERSION'] : ['>= 3.3']
4
4
  gem 'metadata-json-lint'
5
5
  gem 'puppet', puppetversion
6
6
  gem 'puppetlabs_spec_helper', '>= 1.0.0'
@@ -9,6 +9,10 @@ gem 'facter', '>= 1.7.0'
9
9
  gem 'rspec-puppet'
10
10
 
11
11
  # rspec must be v2 for ruby 1.8.7
12
- if RUBY_VERSION >= '1.8.7' and RUBY_VERSION < '1.9'
12
+ if RUBY_VERSION >= '1.8.7' && RUBY_VERSION < '1.9'
13
13
  gem 'rspec', '~> 2.0'
14
+ gem 'rake', '~> 10.0'
15
+ else
16
+ # rubocop requires ruby >= 1.9
17
+ gem 'rubocop'
14
18
  end
@@ -1,17 +1,32 @@
1
1
  require 'puppetlabs_spec_helper/rake_tasks'
2
2
  require 'puppet-lint/tasks/puppet-lint'
3
+ require 'metadata-json-lint/rake_task'
4
+
5
+ if RUBY_VERSION >= '1.9'
6
+ require 'rubocop/rake_task'
7
+ RuboCop::RakeTask.new
8
+ end
9
+
3
10
  PuppetLint.configuration.send('disable_80chars')
4
- PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp"]
11
+ PuppetLint.configuration.relative = true
12
+ PuppetLint.configuration.ignore_paths = ['spec/**/*.pp', 'pkg/**/*.pp']
5
13
 
6
- desc "Validate manifests, templates, and ruby files"
14
+ desc 'Validate manifests, templates, and ruby files'
7
15
  task :validate do
8
16
  Dir['manifests/**/*.pp'].each do |manifest|
9
17
  sh "puppet parser validate --noop #{manifest}"
10
18
  end
11
- Dir['spec/**/*.rb','lib/**/*.rb'].each do |ruby_file|
12
- sh "ruby -c #{ruby_file}" unless ruby_file =~ /spec\/fixtures/
19
+ Dir['spec/**/*.rb', 'lib/**/*.rb'].each do |ruby_file|
20
+ sh "ruby -c #{ruby_file}" unless ruby_file =~ %r{spec/fixtures}
13
21
  end
14
22
  Dir['templates/**/*.erb'].each do |template|
15
23
  sh "erb -P -x -T '-' #{template} | ruby -c"
16
24
  end
17
25
  end
26
+
27
+ desc 'Run metadata_lint, lint, validate, and spec tests.'
28
+ task :test do
29
+ [:metadata_lint, :lint, :validate, :spec].each do |test|
30
+ Rake::Task[test].invoke
31
+ end
32
+ end
@@ -7,6 +7,6 @@
7
7
  # environment (to compare the resulting system state to the desired state).
8
8
  #
9
9
  # Learn more about module testing here:
10
- # https://docs.puppetlabs.com/guides/tests_smoke.html
10
+ # https://docs.puppet.com/guides/tests_smoke.html
11
11
  #
12
12
  include ::<%= metadata.name %>
@@ -1,6 +1,5 @@
1
1
  require 'spec_helper'
2
2
  describe '<%= metadata.name %>' do
3
-
4
3
  context 'with default values for all parameters' do
5
4
  it { should contain_class('<%= metadata.name %>') }
6
5
  end
@@ -4,7 +4,7 @@ module Puppet::Network
4
4
  class AuthConfigParser
5
5
 
6
6
  def self.new_from_file(file)
7
- self.new(File.read(file))
7
+ self.new(Puppet::FileSystem.read(file, :encoding => 'utf-8'))
8
8
  end
9
9
 
10
10
  def initialize(string)
@@ -104,8 +104,6 @@ class Puppet::Network::HTTP::API::IndirectedRoutes
104
104
  raise ArgumentError, "No request key specified in #{uri}"
105
105
  end
106
106
 
107
- key = URI.unescape(key)
108
-
109
107
  [indirection, method, key, params]
110
108
  end
111
109
 
@@ -5,14 +5,18 @@ class Puppet::Network::HTTP::API::Master::V3::Environment
5
5
  def call(request, response)
6
6
  env_name = request.routing_path.split('/').last
7
7
  env = Puppet.lookup(:environments).get(env_name)
8
+ code_id = request.params[:code_id]
8
9
 
9
10
  if env.nil?
10
11
  raise Puppet::Network::HTTP::Error::HTTPNotFoundError.new("#{env_name} is not a known environment", Puppet::Network::HTTP::Issues::RESOURCE_NOT_FOUND)
11
12
  end
12
13
 
13
- catalog = Puppet::Parser::EnvironmentCompiler.compile(env).to_resource
14
+ catalog = Puppet::Parser::EnvironmentCompiler.compile(env, code_id).to_resource
14
15
 
15
- env_graph = {:environment => env.name, :applications => {}}
16
+ # This reads code_id off the catalog rather than using the one from the
17
+ # request. There shouldn't really be a case where the two differ, but if
18
+ # they do, the one from the catalog itself is authoritative.
19
+ env_graph = {:environment => env.name, :applications => {}, :code_id => catalog.code_id}
16
20
  applications = catalog.resources.select do |res|
17
21
  type = res.resource_type
18
22
  type.is_a?(Puppet::Resource::Type) && type.application?
@@ -2,6 +2,7 @@ require 'openssl'
2
2
  require 'cgi'
3
3
  require 'puppet/network/http/handler'
4
4
  require 'puppet/util/ssl'
5
+ require 'uri'
5
6
 
6
7
  class Puppet::Network::HTTP::RackREST
7
8
  include Puppet::Network::HTTP::Handler
@@ -79,7 +80,15 @@ class Puppet::Network::HTTP::RackREST
79
80
 
80
81
  # what path was requested? (this is, without any query parameters)
81
82
  def path(request)
82
- request.path
83
+ # The value that Passenger provides for 'path' is escaped
84
+ # (URL percent-encoded), see
85
+ # https://github.com/phusion/passenger/blob/release-5.0.26/src/apache2_module/Hooks.cpp#L885
86
+ # for the implementation as hooked up to an Apache web server. Code
87
+ # in the indirector / HTTP layer which consumes this path, however, assumes
88
+ # that it has already been unescaped, so it is unescaped here.
89
+ if request.path
90
+ URI.unescape(request.path)
91
+ end
83
92
  end
84
93
 
85
94
  # return the request body
@@ -102,6 +102,10 @@ class Puppet::Parser::AST::PopsBridge
102
102
  # The 3x logic calling this will not know what to do with the result, it is compacted away at the end
103
103
  instantiate_TypeAlias(d, modname)
104
104
  next
105
+ when Puppet::Pops::Model::TypeMapping
106
+ # The 3x logic calling this will not know what to do with the result, it is compacted away at the end
107
+ instantiate_TypeMapping(d, modname)
108
+ next
105
109
  when Puppet::Pops::Model::Application
106
110
  instantiate_ApplicationDefinition(d, modname)
107
111
  else
@@ -189,7 +193,9 @@ class Puppet::Parser::AST::PopsBridge
189
193
  end
190
194
 
191
195
  def instantiate_ResourceTypeDefinition(o, modname)
192
- Puppet::Resource::Type.new(:definition, o.name, @context.merge(args_from_definition(o, modname)))
196
+ instance = Puppet::Resource::Type.new(:definition, o.name, @context.merge(args_from_definition(o, modname)))
197
+ Puppet::Pops::Loaders.register_runtime3_type(instance.name, Puppet::Pops::Adapters::SourcePosAdapter.adapt(o).to_uri)
198
+ instance
193
199
  end
194
200
 
195
201
  def instantiate_CapabilityMapping(o, modname)
@@ -262,12 +268,23 @@ class Puppet::Parser::AST::PopsBridge
262
268
  loader = Puppet::Pops::Loaders.find_loader(modname)
263
269
 
264
270
  # Bind the type alias to the loader using the alias
265
- typed_name, t = Puppet::Pops::Loader::TypeDefinitionInstantiator.create_from_model(type_alias, loader)
266
- loader.set_entry(typed_name, t, Puppet::Pops::Adapters::SourcePosAdapter.adapt(type_alias).to_uri)
271
+ Puppet::Pops::Loader::TypeDefinitionInstantiator.create_from_model(type_alias, loader)
267
272
 
268
273
  nil # do not want the type alias to inadvertently leak into 3x
269
274
  end
270
275
 
276
+ # Adds the TypeMapping to the ImplementationRegistry
277
+ # This is for 4x evaluator/loader
278
+ #
279
+ def instantiate_TypeMapping(type_mapping, modname)
280
+ loader = Puppet::Pops::Loaders.find_loader(modname)
281
+ tf = Puppet::Pops::Types::TypeParser.new
282
+ lhs = tf.interpret(type_mapping.type_expr, loader)
283
+ rhs = tf.interpret_any(type_mapping.mapping_expr, loader)
284
+ Puppet::Pops::Loaders.implementation_registry.register_type_mapping(lhs, rhs, loader)
285
+ nil
286
+ end
287
+
271
288
  def code()
272
289
  Expression.new(:value => @value)
273
290
  end
@@ -15,9 +15,31 @@ class Puppet::Parser::Compiler
15
15
 
16
16
  private
17
17
 
18
+ # A hash lookup is 6x avg times faster than find among 3 values.
19
+ CAPABILITY_ACCEPTED_METAPARAMS = {:require => true, :consume => true, :export => true}.freeze
20
+
18
21
  def validate_relationship(param)
19
- unless [:require, :consume, :export].find {|pname| pname == param.name }
20
- raise CatalogValidationError.new("'#{param.name}' is not a valid relationship to a capability", param.file, param.line) if has_capability?(param.value)
22
+ # when relationship is to a capability
23
+ if has_capability?(param.value)
24
+ unless CAPABILITY_ACCEPTED_METAPARAMS[param.name]
25
+ raise CatalogValidationError.new(
26
+ "'#{param.name}' is not a valid relationship to a capability",
27
+ param.file, param.line)
28
+ end
29
+ elsif Puppet[:strict] != :off
30
+ # all other relationships requires the referenced resource to exist when mode is strict
31
+ refs = param.value.is_a?(Array) ? param.value.flatten : [param.value]
32
+ refs.each do |r|
33
+ next if r.nil?
34
+ unless catalog.resource(r.to_s)
35
+ msg = "Could not find resource '#{r.to_s}' in parameter '#{param.name.to_s}'"
36
+ if Puppet[:strict] == :error
37
+ raise CatalogValidationError.new(msg, param.file, param.line)
38
+ else
39
+ Puppet.warn_once(:undefined_resources, r.to_s, msg, param.file, param.line)
40
+ end
41
+ end
42
+ end
21
43
  end
22
44
  end
23
45
 
@@ -1,16 +1,16 @@
1
1
  require 'puppet/pops'
2
2
 
3
- module Puppet; module Parser; end; end;
3
+ module Puppet
4
+ module Parser
4
5
  # Adapts an egrammar/eparser to respond to the public API of the classic parser
5
6
  # and makes use of the new evaluator.
6
7
  #
7
- class Puppet::Parser::E4ParserAdapter
8
+ class E4ParserAdapter
8
9
 
9
10
  def initialize
10
11
  @file = ''
11
12
  @string = ''
12
13
  @use = :unspecified
13
- @@evaluating_parser ||= Puppet::Pops::Parser::EvaluatingParser.new()
14
14
  end
15
15
 
16
16
  def file=(file)
@@ -20,15 +20,15 @@ class Puppet::Parser::E4ParserAdapter
20
20
 
21
21
  def parse(string = nil)
22
22
  self.string= string if string
23
-
23
+ parser = Pops::Parser::EvaluatingParser.singleton
24
24
  parse_result =
25
25
  if @use == :string
26
26
  # Parse with a source_file to set in created AST objects (it was either given, or it may be unknown
27
27
  # if caller did not set a file and the present a string.
28
28
  #
29
- @@evaluating_parser.parse_string(@string, @file || "unknown-source-location")
29
+ parser.parse_string(@string, @file || "unknown-source-location")
30
30
  else
31
- @@evaluating_parser.parse_file(@file)
31
+ parser.parse_file(@file)
32
32
  end
33
33
 
34
34
  # the parse_result may be
@@ -38,19 +38,18 @@ class Puppet::Parser::E4ParserAdapter
38
38
  #
39
39
  model = parse_result.nil? ? nil : parse_result.current
40
40
  args = {}
41
- Puppet::Pops::Model::AstTransformer.new(@file).merge_location(args, model)
41
+ Pops::Model::AstTransformer.new(@file).merge_location(args, model)
42
42
 
43
43
  ast_code =
44
- if model.is_a? Puppet::Pops::Model::Program
45
- Puppet::Parser::AST::PopsBridge::Program.new(model, args)
44
+ if model.is_a? Pops::Model::Program
45
+ AST::PopsBridge::Program.new(model, args)
46
46
  else
47
47
  args[:value] = model
48
- Puppet::Parser::AST::PopsBridge::Expression.new(args)
48
+ AST::PopsBridge::Expression.new(args)
49
49
  end
50
50
 
51
51
  # Create the "main" class for the content - this content will get merged with all other "main" content
52
- Puppet::Parser::AST::Hostclass.new('', :code => ast_code)
53
-
52
+ AST::Hostclass.new('', :code => ast_code)
54
53
  end
55
54
 
56
55
  def string=(string)
@@ -58,3 +57,5 @@ class Puppet::Parser::E4ParserAdapter
58
57
  @use = :string
59
58
  end
60
59
  end
60
+ end
61
+ end
@@ -1,13 +1,13 @@
1
1
  require 'puppet/parser/compiler'
2
2
 
3
3
  class Puppet::Parser::EnvironmentCompiler < Puppet::Parser::Compiler
4
- def self.compile(env)
4
+ def self.compile(env, code_id=nil)
5
5
  begin
6
6
  env.check_for_reparse
7
7
 
8
8
  node = Puppet::Node.new(env)
9
9
  node.environment = env
10
- new(node).compile
10
+ new(node, :code_id => code_id).compile
11
11
  rescue => detail
12
12
  message = "#{detail} in environment #{env.name}"
13
13
  Puppet.log_exception(detail, message)
@@ -6,7 +6,7 @@ module Puppet::Parser::Functions
6
6
  :arity => -2,
7
7
  :doc => <<-DOC
8
8
  Assigns classes to a node using an
9
- [array merge lookup](https://docs.puppetlabs.com/hiera/latest/lookup_types.htmlarray-merge)
9
+ [array merge lookup](https://docs.puppetlabs.com/hiera/latest/lookup_types.html#array-merge)
10
10
  that retrieves the value for a user-specified key from Hiera's data.
11
11
 
12
12
  The `hiera_include` function requires:
@@ -31,7 +31,7 @@ top of the hierarchy. This lets you temporarily modify the hierarchy for a singl
31
31
  searching the rest of the hierarchy.
32
32
 
33
33
  The function uses an
34
- [array merge lookup](https://docs.puppetlabs.com/hiera/latest/lookup_types.htmlarray-merge)
34
+ [array merge lookup](https://docs.puppetlabs.com/hiera/latest/lookup_types.html#array-merge)
35
35
  to retrieve the `classes` array, so every node gets every class from the hierarchy.
36
36
 
37
37
  **Example**: Using `hiera_include`
@@ -29,7 +29,7 @@ parameter tag without default values. Puppet produces an error if the
29
29
  `inline_epp` function fails to pass any required parameter.
30
30
 
31
31
  An inline EPP template should be written as a single-quoted string or
32
- [heredoc](puppet/latest/reference/lang_data_string.html#heredocs).
32
+ [heredoc](/puppet/latest/reference/lang_data_string.html#heredocs).
33
33
  A double-quoted string is subject to expression interpolation before the string
34
34
  is parsed as an EPP template.
35
35
 
@@ -101,9 +101,6 @@ but can adjust the merge with additional options. The available options are:
101
101
  disables this feature.
102
102
  * `'sort_merged_arrays'` (boolean) --- Whether to sort all arrays that are
103
103
  merged together. Defaults to `false`.
104
- * `'unpack_arrays'` (string or undef) --- A delimiter string; Puppet will
105
- join merged arrays with this delimiter, then split them again. Defaults to
106
- `undef`, which disables this feature.
107
104
  * `'merge_hash_arrays'` (boolean) --- Whether to merge hashes within arrays.
108
105
  Defaults to `false`.
109
106
 
@@ -182,11 +182,20 @@ class Puppet::Parser::Resource < Puppet::Resource
182
182
  alias []= set_parameter
183
183
 
184
184
  def to_hash
185
- @parameters.inject({}) do |hash, ary|
186
- param = ary[1]
187
- # Skip "undef" and nil values.
188
- hash[param.name] = param.value if param.value != :undef && !param.value.nil?
189
- hash
185
+ @parameters.reduce({}) do |result, (_, param)|
186
+ value = param.value
187
+ value = (value == :undef) ? nil : value
188
+
189
+ unless value.nil?
190
+ case param.name
191
+ when :before, :subscribe, :notify, :require
192
+ value = value.flatten if value.is_a?(Array)
193
+ result[param.name] = value
194
+ else
195
+ result[param.name] = value
196
+ end
197
+ end
198
+ result
190
199
  end
191
200
  end
192
201