puppet 6.0.10-universal-darwin → 6.1.0-universal-darwin

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 (748) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +31 -27
  4. data/Guardfile.example +76 -0
  5. data/LICENSE +189 -4
  6. data/MAINTAINERS +47 -0
  7. data/README.md +3 -3
  8. data/lib/hiera/scope.rb +0 -7
  9. data/lib/puppet.rb +6 -5
  10. data/lib/puppet/application.rb +3 -3
  11. data/lib/puppet/application/cert.rb +2 -2
  12. data/lib/puppet/application/device.rb +83 -109
  13. data/lib/puppet/application/filebucket.rb +1 -10
  14. data/lib/puppet/application/ssl.rb +0 -2
  15. data/lib/puppet/configurer.rb +9 -10
  16. data/lib/puppet/confine/false.rb +1 -7
  17. data/lib/puppet/confine/true.rb +1 -7
  18. data/lib/puppet/defaults.rb +39 -51
  19. data/lib/puppet/forge.rb +1 -4
  20. data/lib/puppet/functions/abs.rb +1 -1
  21. data/lib/puppet/functions/call.rb +1 -2
  22. data/lib/puppet/functions/new.rb +1 -1
  23. data/lib/puppet/indirector/request.rb +15 -26
  24. data/lib/puppet/network/http/connection.rb +12 -32
  25. data/lib/puppet/network/http/factory.rb +0 -5
  26. data/lib/puppet/pal/catalog_compiler.rb +96 -0
  27. data/lib/puppet/pal/compiler.rb +221 -0
  28. data/lib/puppet/pal/function_signature.rb +52 -0
  29. data/lib/puppet/pal/json_catalog_encoder.rb +67 -0
  30. data/lib/puppet/pal/pal_api.rb +15 -0
  31. data/lib/puppet/pal/pal_impl.rb +523 -0
  32. data/lib/puppet/pal/plan_signature.rb +71 -0
  33. data/lib/puppet/pal/script_compiler.rb +71 -0
  34. data/lib/puppet/pal/task_signature.rb +58 -0
  35. data/lib/puppet/parser/functions/generate.rb +7 -6
  36. data/lib/puppet/plugins/configuration.rb +5 -1
  37. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -1
  38. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -3
  39. data/lib/puppet/pops/issues.rb +0 -4
  40. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +4 -60
  41. data/lib/puppet/pops/model/factory.rb +4 -38
  42. data/lib/puppet/pops/model/pn_transformer.rb +0 -5
  43. data/lib/puppet/pops/parser/egrammar.ra +2 -2
  44. data/lib/puppet/pops/parser/heredoc_support.rb +7 -17
  45. data/lib/puppet/pops/parser/lexer2.rb +1 -6
  46. data/lib/puppet/pops/parser/locator.rb +86 -106
  47. data/lib/puppet/pops/parser/parser_support.rb +2 -11
  48. data/lib/puppet/pops/types/string_converter.rb +7 -2
  49. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  50. data/lib/puppet/pops/types/types.rb +3 -5
  51. data/lib/puppet/pops/validation/checker4_0.rb +13 -0
  52. data/lib/puppet/provider.rb +2 -1
  53. data/lib/puppet/provider/exec.rb +6 -1
  54. data/lib/puppet/provider/file/windows.rb +1 -49
  55. data/lib/puppet/provider/group/windows_adsi.rb +1 -4
  56. data/lib/puppet/provider/package.rb +0 -2
  57. data/lib/puppet/provider/package/dpkg.rb +2 -15
  58. data/lib/puppet/provider/package/gem.rb +42 -102
  59. data/lib/puppet/provider/package/pip.rb +111 -135
  60. data/lib/puppet/provider/package/pip3.rb +1 -1
  61. data/lib/puppet/provider/package/pkgng.rb +37 -21
  62. data/lib/puppet/provider/package/puppet_gem.rb +1 -1
  63. data/lib/puppet/provider/package/rpm.rb +16 -27
  64. data/lib/puppet/provider/package/windows.rb +1 -5
  65. data/lib/puppet/provider/package/yum.rb +1 -2
  66. data/lib/puppet/provider/service/systemd.rb +17 -0
  67. data/lib/puppet/provider/service/upstart.rb +5 -17
  68. data/lib/puppet/provider/service/windows.rb +8 -3
  69. data/lib/puppet/provider/user/directoryservice.rb +4 -16
  70. data/lib/puppet/provider/user/useradd.rb +13 -16
  71. data/lib/puppet/resource.rb +3 -1
  72. data/lib/puppet/rest/client.rb +83 -0
  73. data/lib/puppet/rest/route.rb +1 -1
  74. data/lib/puppet/settings.rb +5 -10
  75. data/lib/puppet/settings/server_list_setting.rb +0 -9
  76. data/lib/puppet/ssl/host.rb +11 -0
  77. data/lib/puppet/ssl/validator/default_validator.rb +0 -31
  78. data/lib/puppet/syntax_checkers/epp.rb +34 -0
  79. data/lib/puppet/syntax_checkers/pp.rb +34 -0
  80. data/lib/puppet/transaction.rb +7 -12
  81. data/lib/puppet/transaction/event_manager.rb +5 -1
  82. data/lib/puppet/transaction/resource_harness.rb +0 -1
  83. data/lib/puppet/type.rb +6 -0
  84. data/lib/puppet/type/exec.rb +5 -27
  85. data/lib/puppet/type/file/mode.rb +1 -6
  86. data/lib/puppet/type/file/source.rb +1 -0
  87. data/lib/puppet/type/filebucket.rb +8 -12
  88. data/lib/puppet/type/package.rb +11 -44
  89. data/lib/puppet/type/schedule.rb +0 -4
  90. data/lib/puppet/type/service.rb +12 -0
  91. data/lib/puppet/type/user.rb +1 -1
  92. data/lib/puppet/util/command_line.rb +1 -5
  93. data/lib/puppet/util/connection.rb +6 -15
  94. data/lib/puppet/util/http_proxy.rb +2 -3
  95. data/lib/puppet/util/log.rb +2 -7
  96. data/lib/puppet/util/pidlock.rb +1 -15
  97. data/lib/puppet/util/windows/process.rb +5 -73
  98. data/lib/puppet/util/windows/registry.rb +1 -7
  99. data/lib/puppet/util/windows/security.rb +8 -29
  100. data/lib/puppet/util/windows/service.rb +33 -27
  101. data/lib/puppet/util/windows/user.rb +4 -14
  102. data/lib/puppet/version.rb +1 -1
  103. data/lib/puppet_pal.rb +5 -1132
  104. data/locales/ja/puppet.po +297 -363
  105. data/locales/puppet.pot +445 -517
  106. data/man/man5/puppet.conf.5 +12 -20
  107. data/man/man8/puppet-agent.8 +1 -1
  108. data/man/man8/puppet-apply.8 +1 -1
  109. data/man/man8/puppet-catalog.8 +1 -1
  110. data/man/man8/puppet-config.8 +1 -1
  111. data/man/man8/puppet-describe.8 +1 -1
  112. data/man/man8/puppet-device.8 +1 -1
  113. data/man/man8/puppet-doc.8 +1 -1
  114. data/man/man8/puppet-epp.8 +1 -1
  115. data/man/man8/puppet-facts.8 +1 -1
  116. data/man/man8/puppet-filebucket.8 +2 -6
  117. data/man/man8/puppet-generate.8 +1 -1
  118. data/man/man8/puppet-help.8 +1 -1
  119. data/man/man8/puppet-key.8 +1 -1
  120. data/man/man8/puppet-lookup.8 +1 -1
  121. data/man/man8/puppet-man.8 +1 -1
  122. data/man/man8/puppet-module.8 +1 -1
  123. data/man/man8/puppet-node.8 +1 -1
  124. data/man/man8/puppet-parser.8 +1 -1
  125. data/man/man8/puppet-plugin.8 +1 -1
  126. data/man/man8/puppet-report.8 +1 -1
  127. data/man/man8/puppet-resource.8 +1 -1
  128. data/man/man8/puppet-script.8 +1 -1
  129. data/man/man8/puppet-ssl.8 +1 -1
  130. data/man/man8/puppet-status.8 +1 -1
  131. data/man/man8/puppet.8 +2 -2
  132. data/spec/fixtures/unit/provider/package/pkgng/pkg.query +7 -1
  133. data/spec/fixtures/unit/provider/package/pkgng/pkg.query.zsh +1 -0
  134. data/spec/integration/agent/logging_spec.rb +7 -5
  135. data/spec/integration/application/apply_spec.rb +16 -18
  136. data/spec/integration/application/doc_spec.rb +2 -1
  137. data/spec/integration/application/lookup_spec.rb +5 -5
  138. data/spec/integration/configurer_spec.rb +6 -5
  139. data/spec/integration/defaults_spec.rb +6 -5
  140. data/spec/integration/directory_environments_spec.rb +1 -1
  141. data/spec/integration/faces/config_spec.rb +4 -3
  142. data/spec/integration/faces/documentation_spec.rb +1 -0
  143. data/spec/integration/faces/plugin_spec.rb +1 -1
  144. data/spec/integration/file_bucket/file_spec.rb +4 -2
  145. data/spec/integration/file_serving/content_spec.rb +1 -0
  146. data/spec/integration/file_serving/fileset_spec.rb +1 -0
  147. data/spec/integration/file_serving/metadata_spec.rb +1 -0
  148. data/spec/integration/file_serving/terminus_helper_spec.rb +1 -0
  149. data/spec/integration/indirector/catalog/compiler_spec.rb +11 -10
  150. data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
  151. data/spec/integration/indirector/facts/facter_spec.rb +5 -4
  152. data/spec/integration/indirector/file_content/file_server_spec.rb +8 -7
  153. data/spec/integration/indirector/file_metadata/file_server_spec.rb +8 -7
  154. data/spec/integration/network/authconfig_spec.rb +24 -23
  155. data/spec/integration/network/formats_spec.rb +1 -0
  156. data/spec/integration/node/environment_spec.rb +1 -0
  157. data/spec/integration/node/facts_spec.rb +10 -9
  158. data/spec/integration/node_spec.rb +7 -6
  159. data/spec/integration/parser/catalog_spec.rb +5 -1
  160. data/spec/integration/parser/collection_spec.rb +2 -1
  161. data/spec/integration/parser/compiler_spec.rb +6 -6
  162. data/spec/integration/parser/scope_spec.rb +1 -1
  163. data/spec/integration/parser/undef_param_spec.rb +1 -1
  164. data/spec/integration/provider/service/init_spec.rb +5 -4
  165. data/spec/integration/provider/service/systemd_spec.rb +2 -0
  166. data/spec/integration/provider/service/windows_spec.rb +2 -1
  167. data/spec/integration/reference/providers_spec.rb +2 -1
  168. data/spec/integration/reports_spec.rb +2 -1
  169. data/spec/integration/resource/catalog_spec.rb +17 -14
  170. data/spec/integration/resource/type_collection_spec.rb +5 -4
  171. data/spec/integration/ssl/certificate_request_spec.rb +1 -0
  172. data/spec/integration/ssl/host_spec.rb +2 -1
  173. data/spec/integration/ssl/key_spec.rb +1 -0
  174. data/spec/integration/test/test_helper_spec.rb +1 -0
  175. data/spec/integration/transaction/report_spec.rb +11 -6
  176. data/spec/integration/transaction_spec.rb +19 -18
  177. data/spec/integration/type/exec_spec.rb +1 -0
  178. data/spec/integration/type/file_spec.rb +33 -13
  179. data/spec/integration/type/package_spec.rb +24 -20
  180. data/spec/integration/type/tidy_spec.rb +2 -1
  181. data/spec/integration/type_spec.rb +1 -0
  182. data/spec/integration/util/autoload_spec.rb +2 -1
  183. data/spec/integration/util/rdoc/parser_spec.rb +1 -0
  184. data/spec/integration/util/settings_spec.rb +1 -0
  185. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  186. data/spec/integration/util/windows/principal_spec.rb +1 -0
  187. data/spec/integration/util/windows/process_spec.rb +6 -4
  188. data/spec/integration/util/windows/registry_spec.rb +51 -93
  189. data/spec/integration/util/windows/security_spec.rb +4 -2
  190. data/spec/integration/util/windows/user_spec.rb +20 -37
  191. data/spec/integration/util_spec.rb +7 -4
  192. data/spec/lib/puppet_spec/compiler.rb +1 -1
  193. data/spec/lib/puppet_spec/files.rb +1 -0
  194. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +1 -1
  195. data/spec/lib/puppet_spec/scope.rb +2 -1
  196. data/spec/shared_behaviours/all_parsedfile_providers.rb +1 -1
  197. data/spec/shared_behaviours/file_server_terminus.rb +9 -8
  198. data/spec/shared_behaviours/file_serving.rb +8 -6
  199. data/spec/shared_behaviours/file_serving_model.rb +5 -3
  200. data/spec/shared_behaviours/hiera_indirections.rb +4 -3
  201. data/spec/shared_behaviours/iterative_functions.rb +1 -0
  202. data/spec/shared_behaviours/memory_terminus.rb +2 -2
  203. data/spec/shared_examples/rhel_package_provider.rb +70 -112
  204. data/spec/spec_helper.rb +2 -11
  205. data/spec/unit/agent/disabler_spec.rb +5 -4
  206. data/spec/unit/agent/locker_spec.rb +13 -12
  207. data/spec/unit/agent_spec.rb +85 -80
  208. data/spec/unit/application/agent_spec.rb +93 -88
  209. data/spec/unit/application/apply_spec.rb +83 -82
  210. data/spec/unit/application/config_spec.rb +1 -0
  211. data/spec/unit/application/describe_spec.rb +7 -6
  212. data/spec/unit/application/device_spec.rb +419 -395
  213. data/spec/unit/application/doc_spec.rb +46 -44
  214. data/spec/unit/application/face_base_spec.rb +62 -61
  215. data/spec/unit/application/facts_spec.rb +4 -3
  216. data/spec/unit/application/filebucket_spec.rb +74 -66
  217. data/spec/unit/application/indirection_base_spec.rb +6 -8
  218. data/spec/unit/application/lookup_spec.rb +26 -26
  219. data/spec/unit/application/resource_spec.rb +48 -42
  220. data/spec/unit/application/ssl_spec.rb +3 -8
  221. data/spec/unit/application_spec.rb +98 -86
  222. data/spec/unit/capability_spec.rb +6 -6
  223. data/spec/unit/certificate_factory_spec.rb +5 -3
  224. data/spec/unit/configurer/downloader_spec.rb +21 -20
  225. data/spec/unit/configurer/fact_handler_spec.rb +3 -2
  226. data/spec/unit/configurer/plugin_handler_spec.rb +8 -41
  227. data/spec/unit/configurer_spec.rb +198 -194
  228. data/spec/unit/confine/exists_spec.rb +15 -17
  229. data/spec/unit/confine/false_spec.rb +6 -32
  230. data/spec/unit/confine/feature_spec.rb +5 -7
  231. data/spec/unit/confine/true_spec.rb +6 -32
  232. data/spec/unit/confine/variable_spec.rb +15 -14
  233. data/spec/unit/confine_collection_spec.rb +29 -28
  234. data/spec/unit/confine_spec.rb +14 -13
  235. data/spec/unit/confiner_spec.rb +11 -10
  236. data/spec/unit/context/trusted_information_spec.rb +1 -1
  237. data/spec/unit/daemon_spec.rb +36 -35
  238. data/spec/unit/data_providers/function_data_provider_spec.rb +1 -0
  239. data/spec/unit/data_providers/hiera_data_provider_spec.rb +1 -0
  240. data/spec/unit/datatypes_spec.rb +4 -3
  241. data/spec/unit/defaults_spec.rb +27 -18
  242. data/spec/unit/environments_spec.rb +7 -7
  243. data/spec/unit/etc_spec.rb +32 -30
  244. data/spec/unit/external/pson_spec.rb +1 -0
  245. data/spec/unit/face/catalog_spec.rb +1 -0
  246. data/spec/unit/face/config_spec.rb +35 -31
  247. data/spec/unit/face/epp_face_spec.rb +4 -3
  248. data/spec/unit/face/facts_spec.rb +6 -5
  249. data/spec/unit/face/generate_spec.rb +5 -4
  250. data/spec/unit/face/help_spec.rb +8 -7
  251. data/spec/unit/face/key_spec.rb +1 -0
  252. data/spec/unit/face/man_spec.rb +2 -1
  253. data/spec/unit/face/module/install_spec.rb +5 -3
  254. data/spec/unit/face/module/list_spec.rb +12 -2
  255. data/spec/unit/face/module/search_spec.rb +9 -11
  256. data/spec/unit/face/module/uninstall_spec.rb +8 -4
  257. data/spec/unit/face/node_spec.rb +24 -23
  258. data/spec/unit/face/parser_spec.rb +18 -3
  259. data/spec/unit/face/plugin_spec.rb +9 -36
  260. data/spec/unit/face/status_spec.rb +1 -0
  261. data/spec/unit/file_bucket/dipper_spec.rb +20 -24
  262. data/spec/unit/file_bucket/file_spec.rb +2 -0
  263. data/spec/unit/file_serving/base_spec.rb +15 -14
  264. data/spec/unit/file_serving/configuration/parser_spec.rb +28 -27
  265. data/spec/unit/file_serving/configuration_spec.rb +66 -63
  266. data/spec/unit/file_serving/content_spec.rb +11 -10
  267. data/spec/unit/file_serving/fileset_spec.rb +58 -63
  268. data/spec/unit/file_serving/http_metadata_spec.rb +7 -8
  269. data/spec/unit/file_serving/metadata_spec.rb +36 -36
  270. data/spec/unit/file_serving/mount/file_spec.rb +32 -31
  271. data/spec/unit/file_serving/mount/locales_spec.rb +24 -23
  272. data/spec/unit/file_serving/mount/modules_spec.rb +15 -14
  273. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +24 -23
  274. data/spec/unit/file_serving/mount/plugins_spec.rb +24 -23
  275. data/spec/unit/file_serving/mount/tasks_spec.rb +15 -14
  276. data/spec/unit/file_serving/mount_spec.rb +1 -0
  277. data/spec/unit/file_serving/terminus_helper_spec.rb +42 -37
  278. data/spec/unit/file_serving/terminus_selector_spec.rb +13 -12
  279. data/spec/unit/file_system/uniquefile_spec.rb +4 -4
  280. data/spec/unit/file_system_spec.rb +2 -2
  281. data/spec/unit/forge/errors_spec.rb +1 -1
  282. data/spec/unit/forge/forge_spec.rb +16 -17
  283. data/spec/unit/forge/module_release_spec.rb +18 -18
  284. data/spec/unit/forge/repository_spec.rb +30 -29
  285. data/spec/unit/forge_spec.rb +11 -15
  286. data/spec/unit/functions/binary_file_spec.rb +3 -3
  287. data/spec/unit/functions/contain_spec.rb +2 -0
  288. data/spec/unit/functions/defined_spec.rb +1 -0
  289. data/spec/unit/functions/epp_spec.rb +2 -2
  290. data/spec/unit/functions/find_file_spec.rb +7 -7
  291. data/spec/unit/functions/include_spec.rb +4 -0
  292. data/spec/unit/functions/lookup_fixture_spec.rb +1 -0
  293. data/spec/unit/functions/lookup_spec.rb +2 -1
  294. data/spec/unit/functions/module_directory_spec.rb +12 -12
  295. data/spec/unit/functions/new_spec.rb +0 -15
  296. data/spec/unit/functions/require_spec.rb +3 -0
  297. data/spec/unit/functions/shared.rb +8 -5
  298. data/spec/unit/functions/versioncmp_spec.rb +2 -1
  299. data/spec/unit/functions4_spec.rb +10 -9
  300. data/spec/unit/gettext/config_spec.rb +4 -4
  301. data/spec/unit/gettext/module_loading_spec.rb +7 -7
  302. data/spec/unit/graph/rb_tree_map_spec.rb +2 -0
  303. data/spec/unit/graph/relationship_graph_spec.rb +2 -1
  304. data/spec/unit/graph/simple_graph_spec.rb +10 -9
  305. data/spec/unit/hiera/scope_spec.rb +0 -7
  306. data/spec/unit/hiera_puppet_spec.rb +20 -20
  307. data/spec/unit/indirector/catalog/compiler_spec.rb +149 -147
  308. data/spec/unit/indirector/catalog/json_spec.rb +2 -1
  309. data/spec/unit/indirector/catalog/msgpack_spec.rb +1 -0
  310. data/spec/unit/indirector/catalog/rest_spec.rb +1 -0
  311. data/spec/unit/indirector/catalog/store_configs_spec.rb +1 -0
  312. data/spec/unit/indirector/catalog/yaml_spec.rb +1 -0
  313. data/spec/unit/indirector/certificate/file_spec.rb +1 -0
  314. data/spec/unit/indirector/certificate/rest_spec.rb +10 -8
  315. data/spec/unit/indirector/certificate_request/file_spec.rb +1 -0
  316. data/spec/unit/indirector/certificate_request/rest_spec.rb +1 -0
  317. data/spec/unit/indirector/direct_file_server_spec.rb +18 -17
  318. data/spec/unit/indirector/envelope_spec.rb +2 -1
  319. data/spec/unit/indirector/exec_spec.rb +5 -4
  320. data/spec/unit/indirector/face_spec.rb +9 -9
  321. data/spec/unit/indirector/facts/facter_spec.rb +43 -37
  322. data/spec/unit/indirector/facts/network_device_spec.rb +9 -8
  323. data/spec/unit/indirector/facts/rest_spec.rb +8 -7
  324. data/spec/unit/indirector/facts/store_configs_spec.rb +1 -0
  325. data/spec/unit/indirector/facts/yaml_spec.rb +1 -0
  326. data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -3
  327. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +1 -0
  328. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +5 -4
  329. data/spec/unit/indirector/file_content/file_server_spec.rb +1 -0
  330. data/spec/unit/indirector/file_content/file_spec.rb +1 -0
  331. data/spec/unit/indirector/file_content/rest_spec.rb +1 -0
  332. data/spec/unit/indirector/file_content/selector_spec.rb +1 -0
  333. data/spec/unit/indirector/file_metadata/file_server_spec.rb +1 -0
  334. data/spec/unit/indirector/file_metadata/file_spec.rb +13 -12
  335. data/spec/unit/indirector/file_metadata/rest_spec.rb +1 -0
  336. data/spec/unit/indirector/file_metadata/selector_spec.rb +1 -0
  337. data/spec/unit/indirector/file_server_spec.rb +87 -87
  338. data/spec/unit/indirector/indirection_spec.rb +226 -242
  339. data/spec/unit/indirector/json_spec.rb +9 -7
  340. data/spec/unit/indirector/key/file_spec.rb +22 -21
  341. data/spec/unit/indirector/memory_spec.rb +7 -6
  342. data/spec/unit/indirector/msgpack_spec.rb +9 -7
  343. data/spec/unit/indirector/node/exec_spec.rb +3 -2
  344. data/spec/unit/indirector/node/memory_spec.rb +4 -2
  345. data/spec/unit/indirector/node/msgpack_spec.rb +1 -0
  346. data/spec/unit/indirector/node/plain_spec.rb +4 -2
  347. data/spec/unit/indirector/node/rest_spec.rb +1 -0
  348. data/spec/unit/indirector/node/store_configs_spec.rb +1 -0
  349. data/spec/unit/indirector/node/yaml_spec.rb +1 -0
  350. data/spec/unit/indirector/none_spec.rb +5 -5
  351. data/spec/unit/indirector/plain_spec.rb +8 -7
  352. data/spec/unit/indirector/report/msgpack_spec.rb +1 -0
  353. data/spec/unit/indirector/report/processor_spec.rb +22 -21
  354. data/spec/unit/indirector/report/rest_spec.rb +12 -11
  355. data/spec/unit/indirector/report/yaml_spec.rb +1 -0
  356. data/spec/unit/indirector/request_spec.rb +12 -11
  357. data/spec/unit/indirector/resource/ral_spec.rb +54 -47
  358. data/spec/unit/indirector/resource/store_configs_spec.rb +1 -0
  359. data/spec/unit/indirector/rest_spec.rb +110 -113
  360. data/spec/unit/indirector/ssl_file_spec.rb +65 -64
  361. data/spec/unit/indirector/status/local_spec.rb +1 -0
  362. data/spec/unit/indirector/status/rest_spec.rb +1 -0
  363. data/spec/unit/indirector/store_configs_spec.rb +1 -0
  364. data/spec/unit/indirector/terminus_spec.rb +27 -27
  365. data/spec/unit/indirector/yaml_spec.rb +6 -5
  366. data/spec/unit/indirector_spec.rb +2 -1
  367. data/spec/unit/info_service_spec.rb +1 -1
  368. data/spec/unit/interface/action_builder_spec.rb +1 -0
  369. data/spec/unit/interface/action_manager_spec.rb +1 -0
  370. data/spec/unit/interface/action_spec.rb +3 -2
  371. data/spec/unit/interface/documentation_spec.rb +1 -0
  372. data/spec/unit/interface/face_collection_spec.rb +12 -19
  373. data/spec/unit/interface_spec.rb +3 -3
  374. data/spec/unit/man_spec.rb +4 -3
  375. data/spec/unit/module_spec.rb +51 -46
  376. data/spec/unit/module_tool/applications/installer_spec.rb +11 -10
  377. data/spec/unit/module_tool/applications/searcher_spec.rb +3 -3
  378. data/spec/unit/module_tool/applications/uninstaller_spec.rb +2 -1
  379. data/spec/unit/module_tool/applications/unpacker_spec.rb +13 -13
  380. data/spec/unit/module_tool/applications/upgrader_spec.rb +5 -5
  381. data/spec/unit/module_tool/install_directory_spec.rb +8 -8
  382. data/spec/unit/module_tool/installed_modules_spec.rb +3 -3
  383. data/spec/unit/module_tool/tar/gnu_spec.rb +6 -6
  384. data/spec/unit/module_tool/tar/mini_spec.rb +12 -12
  385. data/spec/unit/module_tool/tar_spec.rb +13 -12
  386. data/spec/unit/module_tool_spec.rb +12 -7
  387. data/spec/unit/network/auth_config_parser_spec.rb +13 -11
  388. data/spec/unit/network/authconfig_spec.rb +18 -17
  389. data/spec/unit/network/authorization_spec.rb +5 -4
  390. data/spec/unit/network/authstore_spec.rb +1 -0
  391. data/spec/unit/network/format_handler_spec.rb +1 -0
  392. data/spec/unit/network/format_spec.rb +10 -9
  393. data/spec/unit/network/format_support_spec.rb +29 -28
  394. data/spec/unit/network/formats_spec.rb +5 -4
  395. data/spec/unit/network/http/api/indirected_routes_spec.rb +29 -24
  396. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +2 -2
  397. data/spec/unit/network/http/api/master/v3/environment_spec.rb +1 -1
  398. data/spec/unit/network/http/api/master/v3/environments_spec.rb +7 -6
  399. data/spec/unit/network/http/api_spec.rb +2 -0
  400. data/spec/unit/network/http/compression_spec.rb +22 -21
  401. data/spec/unit/network/http/connection_spec.rb +121 -30
  402. data/spec/unit/network/http/factory_spec.rb +6 -11
  403. data/spec/unit/network/http/handler_spec.rb +18 -9
  404. data/spec/unit/network/http/nocache_pool_spec.rb +7 -6
  405. data/spec/unit/network/http/pool_spec.rb +29 -28
  406. data/spec/unit/network/http/request_spec.rb +2 -0
  407. data/spec/unit/network/http/response_spec.rb +13 -11
  408. data/spec/unit/network/http/route_spec.rb +1 -0
  409. data/spec/unit/network/http/session_spec.rb +2 -1
  410. data/spec/unit/network/http/site_spec.rb +1 -0
  411. data/spec/unit/network/http_pool_spec.rb +9 -18
  412. data/spec/unit/network/http_spec.rb +1 -0
  413. data/spec/unit/network/resolver_spec.rb +26 -25
  414. data/spec/unit/network/rights_spec.rb +53 -52
  415. data/spec/unit/node/environment_spec.rb +15 -14
  416. data/spec/unit/node/facts_spec.rb +7 -5
  417. data/spec/unit/node_spec.rb +10 -4
  418. data/spec/unit/other/selinux_spec.rb +1 -0
  419. data/spec/unit/parameter/boolean_spec.rb +2 -1
  420. data/spec/unit/parameter/package_options_spec.rb +2 -1
  421. data/spec/unit/parameter/path_spec.rb +1 -0
  422. data/spec/unit/parameter/value_collection_spec.rb +1 -0
  423. data/spec/unit/parameter/value_spec.rb +1 -0
  424. data/spec/unit/parameter_spec.rb +9 -9
  425. data/spec/unit/parser/ast/block_expression_spec.rb +8 -6
  426. data/spec/unit/parser/ast/leaf_spec.rb +21 -20
  427. data/spec/unit/parser/compiler_spec.rb +96 -84
  428. data/spec/unit/parser/environment_compiler_spec.rb +8 -7
  429. data/spec/unit/parser/files_spec.rb +1 -0
  430. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  431. data/spec/unit/parser/functions/digest_spec.rb +1 -0
  432. data/spec/unit/parser/functions/fail_spec.rb +2 -1
  433. data/spec/unit/parser/functions/file_spec.rb +14 -13
  434. data/spec/unit/parser/functions/fqdn_rand_spec.rb +6 -5
  435. data/spec/unit/parser/functions/generate_spec.rb +8 -7
  436. data/spec/unit/parser/functions/inline_template_spec.rb +1 -0
  437. data/spec/unit/parser/functions/regsubst_spec.rb +1 -0
  438. data/spec/unit/parser/functions/scanf_spec.rb +1 -0
  439. data/spec/unit/parser/functions/shellquote_spec.rb +1 -0
  440. data/spec/unit/parser/functions/split_spec.rb +1 -0
  441. data/spec/unit/parser/functions/sprintf_spec.rb +1 -0
  442. data/spec/unit/parser/functions/tag_spec.rb +2 -1
  443. data/spec/unit/parser/functions/tagged_spec.rb +3 -2
  444. data/spec/unit/parser/functions/template_spec.rb +13 -13
  445. data/spec/unit/parser/functions/versioncmp_spec.rb +2 -1
  446. data/spec/unit/parser/functions_spec.rb +7 -6
  447. data/spec/unit/parser/relationship_spec.rb +1 -0
  448. data/spec/unit/parser/resource_spec.rb +42 -42
  449. data/spec/unit/parser/scope_spec.rb +35 -39
  450. data/spec/unit/parser/templatewrapper_spec.rb +12 -11
  451. data/spec/unit/parser/type_loader_spec.rb +19 -17
  452. data/spec/unit/pops/adaptable_spec.rb +1 -0
  453. data/spec/unit/pops/benchmark_spec.rb +1 -0
  454. data/spec/unit/pops/evaluator/access_ops_spec.rb +1 -0
  455. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +1 -0
  456. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -0
  457. data/spec/unit/pops/evaluator/collections_ops_spec.rb +1 -0
  458. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +1 -0
  459. data/spec/unit/pops/evaluator/conditionals_spec.rb +1 -0
  460. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +47 -10
  461. data/spec/unit/pops/evaluator/logical_ops_spec.rb +1 -0
  462. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +1 -0
  463. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +1 -0
  464. data/spec/unit/pops/evaluator/variables_spec.rb +1 -0
  465. data/spec/unit/pops/factory_spec.rb +4 -3
  466. data/spec/unit/pops/issues_spec.rb +20 -19
  467. data/spec/unit/pops/loaders/loader_spec.rb +4 -8
  468. data/spec/unit/pops/loaders/loaders_spec.rb +31 -101
  469. data/spec/unit/pops/lookup/context_spec.rb +1 -0
  470. data/spec/unit/pops/lookup/interpolation_spec.rb +3 -2
  471. data/spec/unit/pops/merge_strategy_spec.rb +1 -0
  472. data/spec/unit/pops/migration_spec.rb +5 -3
  473. data/spec/unit/pops/model/model_spec.rb +1 -0
  474. data/spec/unit/pops/model/pn_transformer_spec.rb +1 -4
  475. data/spec/unit/pops/parser/locator_spec.rb +6 -48
  476. data/spec/unit/pops/parser/parse_application_spec.rb +1 -0
  477. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +1 -0
  478. data/spec/unit/pops/parser/parse_calls_spec.rb +1 -0
  479. data/spec/unit/pops/parser/parse_capabilities_spec.rb +1 -0
  480. data/spec/unit/pops/parser/parse_conditionals_spec.rb +1 -0
  481. data/spec/unit/pops/parser/parse_containers_spec.rb +1 -0
  482. data/spec/unit/pops/parser/parse_heredoc_spec.rb +15 -111
  483. data/spec/unit/pops/parser/parse_plan_spec.rb +1 -0
  484. data/spec/unit/pops/parser/parse_resource_spec.rb +1 -0
  485. data/spec/unit/pops/parser/parse_site_spec.rb +1 -0
  486. data/spec/unit/pops/parser/pn_parser_spec.rb +1 -0
  487. data/spec/unit/pops/pn_spec.rb +1 -0
  488. data/spec/unit/pops/resource/resource_type_impl_spec.rb +1 -0
  489. data/spec/unit/pops/serialization/serialization_spec.rb +1 -1
  490. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  491. data/spec/unit/pops/types/recursion_guard_spec.rb +10 -10
  492. data/spec/unit/pops/types/ruby_generator_spec.rb +2 -2
  493. data/spec/unit/pops/types/string_converter_spec.rb +5 -1
  494. data/spec/unit/pops/types/type_asserter_spec.rb +2 -2
  495. data/spec/unit/pops/types/type_calculator_spec.rb +30 -30
  496. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +0 -9
  497. data/spec/unit/pops/types/type_parser_spec.rb +13 -13
  498. data/spec/unit/pops/validator/validator_spec.rb +2 -1
  499. data/spec/unit/pops/visitor_spec.rb +1 -0
  500. data/spec/unit/property/boolean_spec.rb +1 -1
  501. data/spec/unit/property/ensure_spec.rb +1 -0
  502. data/spec/unit/property/keyvalue_spec.rb +34 -32
  503. data/spec/unit/property/list_spec.rb +27 -26
  504. data/spec/unit/property/ordered_list_spec.rb +14 -10
  505. data/spec/unit/property_spec.rb +43 -42
  506. data/spec/unit/provider/aix_object_spec.rb +45 -47
  507. data/spec/unit/provider/command_spec.rb +9 -9
  508. data/spec/unit/provider/exec/posix_spec.rb +31 -6
  509. data/spec/unit/provider/exec/shell_spec.rb +1 -0
  510. data/spec/unit/provider/exec/windows_spec.rb +4 -2
  511. data/spec/unit/provider/exec_spec.rb +1 -0
  512. data/spec/unit/provider/file/posix_spec.rb +24 -22
  513. data/spec/unit/provider/file/windows_spec.rb +17 -15
  514. data/spec/unit/provider/group/aix_spec.rb +2 -3
  515. data/spec/unit/provider/group/groupadd_spec.rb +26 -30
  516. data/spec/unit/provider/group/ldap_spec.rb +18 -18
  517. data/spec/unit/provider/group/pw_spec.rb +11 -11
  518. data/spec/unit/provider/group/windows_adsi_spec.rb +53 -59
  519. data/spec/unit/provider/ldap_spec.rb +62 -61
  520. data/spec/unit/provider/nameservice/directoryservice_spec.rb +36 -35
  521. data/spec/unit/provider/nameservice_spec.rb +40 -38
  522. data/spec/unit/provider/package/aix_spec.rb +15 -15
  523. data/spec/unit/provider/package/appdmg_spec.rb +13 -13
  524. data/spec/unit/provider/package/apt_spec.rb +27 -44
  525. data/spec/unit/provider/package/aptitude_spec.rb +7 -6
  526. data/spec/unit/provider/package/aptrpm_spec.rb +12 -7
  527. data/spec/unit/provider/package/base_spec.rb +4 -4
  528. data/spec/unit/provider/package/dnf_spec.rb +20 -18
  529. data/spec/unit/provider/package/dpkg_spec.rb +53 -70
  530. data/spec/unit/provider/package/freebsd_spec.rb +11 -11
  531. data/spec/unit/provider/package/gem_spec.rb +55 -132
  532. data/spec/unit/provider/package/hpux_spec.rb +8 -8
  533. data/spec/unit/provider/package/macports_spec.rb +42 -46
  534. data/spec/unit/provider/package/nim_spec.rb +39 -30
  535. data/spec/unit/provider/package/openbsd_spec.rb +39 -36
  536. data/spec/unit/provider/package/opkg_spec.rb +26 -23
  537. data/spec/unit/provider/package/pacman_spec.rb +118 -97
  538. data/spec/unit/provider/package/pip3_spec.rb +0 -17
  539. data/spec/unit/provider/package/pip_spec.rb +106 -95
  540. data/spec/unit/provider/package/pkg_spec.rb +109 -109
  541. data/spec/unit/provider/package/pkgdmg_spec.rb +63 -65
  542. data/spec/unit/provider/package/pkgin_spec.rb +8 -10
  543. data/spec/unit/provider/package/pkgng_spec.rb +31 -22
  544. data/spec/unit/provider/package/pkgutil_spec.rb +49 -45
  545. data/spec/unit/provider/package/portage_spec.rb +74 -70
  546. data/spec/unit/provider/package/puppet_gem_spec.rb +13 -37
  547. data/spec/unit/provider/package/rpm_spec.rb +76 -154
  548. data/spec/unit/provider/package/sun_spec.rb +18 -16
  549. data/spec/unit/provider/package/tdnf_spec.rb +2 -2
  550. data/spec/unit/provider/package/up2date_spec.rb +4 -2
  551. data/spec/unit/provider/package/urpmi_spec.rb +17 -15
  552. data/spec/unit/provider/package/windows/exe_package_spec.rb +15 -12
  553. data/spec/unit/provider/package/windows/msi_package_spec.rb +22 -19
  554. data/spec/unit/provider/package/windows/package_spec.rb +42 -37
  555. data/spec/unit/provider/package/windows_spec.rb +32 -47
  556. data/spec/unit/provider/package/yum_spec.rb +7 -7
  557. data/spec/unit/provider/package/zypper_spec.rb +87 -87
  558. data/spec/unit/provider/parsedfile_spec.rb +45 -44
  559. data/spec/unit/provider/service/base_spec.rb +5 -4
  560. data/spec/unit/provider/service/bsd_spec.rb +29 -27
  561. data/spec/unit/provider/service/daemontools_spec.rb +35 -35
  562. data/spec/unit/provider/service/debian_spec.rb +38 -38
  563. data/spec/unit/provider/service/freebsd_spec.rb +18 -18
  564. data/spec/unit/provider/service/gentoo_spec.rb +55 -50
  565. data/spec/unit/provider/service/init_spec.rb +52 -53
  566. data/spec/unit/provider/service/launchd_spec.rb +116 -138
  567. data/spec/unit/provider/service/openbsd_spec.rb +50 -50
  568. data/spec/unit/provider/service/openrc_spec.rb +45 -43
  569. data/spec/unit/provider/service/openwrt_spec.rb +31 -26
  570. data/spec/unit/provider/service/rcng_spec.rb +14 -14
  571. data/spec/unit/provider/service/redhat_spec.rb +43 -45
  572. data/spec/unit/provider/service/runit_spec.rb +27 -29
  573. data/spec/unit/provider/service/smf_spec.rb +66 -74
  574. data/spec/unit/provider/service/src_spec.rb +47 -46
  575. data/spec/unit/provider/service/systemd_spec.rb +136 -109
  576. data/spec/unit/provider/service/upstart_spec.rb +93 -77
  577. data/spec/unit/provider/service/windows_spec.rb +41 -33
  578. data/spec/unit/provider/user/aix_spec.rb +31 -31
  579. data/spec/unit/provider/user/directoryservice_spec.rb +114 -146
  580. data/spec/unit/provider/user/hpux_spec.rb +16 -16
  581. data/spec/unit/provider/user/ldap_spec.rb +57 -57
  582. data/spec/unit/provider/user/openbsd_spec.rb +12 -10
  583. data/spec/unit/provider/user/pw_spec.rb +35 -37
  584. data/spec/unit/provider/user/user_role_add_spec.rb +93 -93
  585. data/spec/unit/provider/user/useradd_spec.rb +92 -93
  586. data/spec/unit/provider/user/windows_adsi_spec.rb +60 -59
  587. data/spec/unit/provider_spec.rb +35 -35
  588. data/spec/unit/puppet_pal_2pec.rb +5 -4
  589. data/spec/unit/puppet_pal_spec.rb +1 -0
  590. data/spec/unit/puppet_spec.rb +7 -6
  591. data/spec/unit/relationship_spec.rb +1 -0
  592. data/spec/unit/reports/http_spec.rb +23 -21
  593. data/spec/unit/reports/store_spec.rb +4 -3
  594. data/spec/unit/reports_spec.rb +14 -12
  595. data/spec/unit/resource/capability_finder_spec.rb +17 -15
  596. data/spec/unit/resource/catalog_spec.rb +68 -72
  597. data/spec/unit/resource/status_spec.rb +8 -6
  598. data/spec/unit/resource/type_collection_spec.rb +18 -17
  599. data/spec/unit/resource/type_spec.rb +35 -34
  600. data/spec/unit/resource_spec.rb +63 -36
  601. data/spec/unit/rest/client_spec.rb +135 -0
  602. data/spec/unit/rest/route_spec.rb +6 -6
  603. data/spec/unit/scheduler/job_spec.rb +1 -0
  604. data/spec/unit/scheduler/scheduler_spec.rb +1 -0
  605. data/spec/unit/scheduler/splay_job_spec.rb +2 -1
  606. data/spec/unit/settings/array_setting_spec.rb +1 -1
  607. data/spec/unit/settings/autosign_setting_spec.rb +9 -9
  608. data/spec/unit/settings/certificate_revocation_setting_spec.rb +1 -1
  609. data/spec/unit/settings/config_file_spec.rb +1 -0
  610. data/spec/unit/settings/directory_setting_spec.rb +7 -2
  611. data/spec/unit/settings/duration_setting_spec.rb +2 -1
  612. data/spec/unit/settings/enum_setting_spec.rb +1 -1
  613. data/spec/unit/settings/environment_conf_spec.rb +6 -4
  614. data/spec/unit/settings/file_setting_spec.rb +46 -44
  615. data/spec/unit/settings/path_setting_spec.rb +2 -1
  616. data/spec/unit/settings/priority_setting_spec.rb +2 -1
  617. data/spec/unit/settings/string_setting_spec.rb +15 -14
  618. data/spec/unit/settings/terminus_setting_spec.rb +2 -1
  619. data/spec/unit/settings/value_translator_spec.rb +1 -0
  620. data/spec/unit/settings_spec.rb +224 -253
  621. data/spec/unit/ssl/base_spec.rb +15 -14
  622. data/spec/unit/ssl/certificate_request_spec.rb +58 -62
  623. data/spec/unit/ssl/certificate_spec.rb +25 -23
  624. data/spec/unit/ssl/digest_spec.rb +1 -0
  625. data/spec/unit/ssl/host_spec.rb +149 -166
  626. data/spec/unit/ssl/key_spec.rb +31 -30
  627. data/spec/unit/ssl/validator_spec.rb +39 -40
  628. data/spec/unit/task_spec.rb +45 -44
  629. data/spec/unit/transaction/additional_resource_generator_spec.rb +5 -3
  630. data/spec/unit/transaction/event_manager_spec.rb +88 -87
  631. data/spec/unit/transaction/event_spec.rb +15 -16
  632. data/spec/unit/transaction/persistence_spec.rb +17 -16
  633. data/spec/unit/transaction/report_spec.rb +12 -11
  634. data/spec/unit/transaction/resource_harness_spec.rb +31 -52
  635. data/spec/unit/transaction_spec.rb +87 -140
  636. data/spec/unit/type/component_spec.rb +1 -0
  637. data/spec/unit/type/exec_spec.rb +50 -101
  638. data/spec/unit/type/file/checksum_spec.rb +10 -9
  639. data/spec/unit/type/file/checksum_value_spec.rb +32 -31
  640. data/spec/unit/type/file/content_spec.rb +61 -58
  641. data/spec/unit/type/file/ctime_spec.rb +1 -0
  642. data/spec/unit/type/file/ensure_spec.rb +13 -12
  643. data/spec/unit/type/file/group_spec.rb +7 -5
  644. data/spec/unit/type/file/mode_spec.rb +6 -4
  645. data/spec/unit/type/file/mtime_spec.rb +1 -0
  646. data/spec/unit/type/file/owner_spec.rb +8 -6
  647. data/spec/unit/type/file/selinux_spec.rb +19 -17
  648. data/spec/unit/type/file/source_spec.rb +101 -104
  649. data/spec/unit/type/file/type_spec.rb +1 -0
  650. data/spec/unit/type/file_spec.rb +185 -195
  651. data/spec/unit/type/filebucket_spec.rb +10 -11
  652. data/spec/unit/type/group_spec.rb +8 -6
  653. data/spec/unit/type/noop_metaparam_spec.rb +2 -1
  654. data/spec/unit/type/package/package_settings_spec.rb +23 -44
  655. data/spec/unit/type/package_spec.rb +57 -56
  656. data/spec/unit/type/resources_spec.rb +74 -72
  657. data/spec/unit/type/schedule_spec.rb +26 -24
  658. data/spec/unit/type/service_spec.rb +75 -49
  659. data/spec/unit/type/stage_spec.rb +1 -0
  660. data/spec/unit/type/tidy_spec.rb +62 -61
  661. data/spec/unit/type/user_spec.rb +25 -24
  662. data/spec/unit/type/whit_spec.rb +1 -0
  663. data/spec/unit/type_spec.rb +54 -55
  664. data/spec/unit/util/at_fork_spec.rb +19 -18
  665. data/spec/unit/util/autoload_spec.rb +56 -55
  666. data/spec/unit/util/backups_spec.rb +35 -34
  667. data/spec/unit/util/character_encoding_spec.rb +5 -5
  668. data/spec/unit/util/checksums_spec.rb +39 -38
  669. data/spec/unit/util/colors_spec.rb +2 -1
  670. data/spec/unit/util/command_line_spec.rb +20 -40
  671. data/spec/unit/util/constant_inflector_spec.rb +1 -0
  672. data/spec/unit/util/diff_spec.rb +8 -7
  673. data/spec/unit/util/errors_spec.rb +1 -0
  674. data/spec/unit/util/execution_spec.rb +163 -187
  675. data/spec/unit/util/execution_stub_spec.rb +1 -0
  676. data/spec/unit/util/feature_spec.rb +14 -21
  677. data/spec/unit/util/filetype_spec.rb +49 -49
  678. data/spec/unit/util/http_proxy_spec.rb +12 -12
  679. data/spec/unit/util/inifile_spec.rb +31 -26
  680. data/spec/unit/util/json_lockfile_spec.rb +5 -3
  681. data/spec/unit/util/ldap/connection_spec.rb +25 -26
  682. data/spec/unit/util/ldap/generator_spec.rb +1 -0
  683. data/spec/unit/util/ldap/manager_spec.rb +101 -102
  684. data/spec/unit/util/lockfile_spec.rb +1 -0
  685. data/spec/unit/util/log/destinations_spec.rb +33 -30
  686. data/spec/unit/util/log_spec.rb +34 -48
  687. data/spec/unit/util/logging_spec.rb +72 -58
  688. data/spec/unit/util/metric_spec.rb +1 -0
  689. data/spec/unit/util/monkey_patches_spec.rb +9 -7
  690. data/spec/unit/util/multi_match_spec.rb +1 -0
  691. data/spec/unit/util/network_device/config_spec.rb +1 -0
  692. data/spec/unit/util/network_device/transport/base_spec.rb +6 -5
  693. data/spec/unit/util/network_device_spec.rb +9 -7
  694. data/spec/unit/util/package_spec.rb +1 -0
  695. data/spec/unit/util/pidlock_spec.rb +15 -60
  696. data/spec/unit/util/plist_spec.rb +33 -40
  697. data/spec/unit/util/posix_spec.rb +51 -54
  698. data/spec/unit/util/rdoc_spec.rb +10 -9
  699. data/spec/unit/util/reference_spec.rb +1 -0
  700. data/spec/unit/util/resource_template_spec.rb +20 -20
  701. data/spec/unit/util/retry_action_spec.rb +8 -7
  702. data/spec/unit/util/rubygems_spec.rb +8 -7
  703. data/spec/unit/util/run_mode_spec.rb +4 -3
  704. data/spec/unit/util/selinux_spec.rb +72 -79
  705. data/spec/unit/util/splayer_spec.rb +9 -8
  706. data/spec/unit/util/ssl_spec.rb +1 -0
  707. data/spec/unit/util/storage_spec.rb +23 -22
  708. data/spec/unit/util/suidmanager_spec.rb +54 -45
  709. data/spec/unit/util/symbolic_file_mode_spec.rb +1 -0
  710. data/spec/unit/util/tag_set_spec.rb +1 -0
  711. data/spec/unit/util/tagging_spec.rb +1 -0
  712. data/spec/unit/util/terminal_spec.rb +10 -9
  713. data/spec/unit/util/user_attr_spec.rb +2 -1
  714. data/spec/unit/util/warnings_spec.rb +4 -3
  715. data/spec/unit/util/watcher/periodic_watcher_spec.rb +2 -2
  716. data/spec/unit/util/watcher_spec.rb +21 -51
  717. data/spec/unit/util/windows/access_control_entry_spec.rb +1 -0
  718. data/spec/unit/util/windows/access_control_list_spec.rb +1 -0
  719. data/spec/unit/util/windows/adsi_spec.rb +138 -136
  720. data/spec/unit/util/windows/api_types_spec.rb +1 -0
  721. data/spec/unit/util/windows/eventlog_spec.rb +12 -9
  722. data/spec/unit/util/windows/file_spec.rb +1 -0
  723. data/spec/unit/util/windows/root_certs_spec.rb +1 -0
  724. data/spec/unit/util/windows/security_descriptor_spec.rb +2 -0
  725. data/spec/unit/util/windows/service_spec.rb +103 -100
  726. data/spec/unit/util/windows/sid_spec.rb +13 -11
  727. data/spec/unit/util/windows/string_spec.rb +1 -0
  728. data/spec/unit/util_spec.rb +57 -55
  729. data/spec/unit/version_spec.rb +6 -6
  730. metadata +20 -32
  731. data/CODEOWNERS +0 -30
  732. data/ext/autotest/Rakefile +0 -8
  733. data/ext/autotest/config +0 -43
  734. data/ext/autotest/readme.rst +0 -16
  735. data/lib/puppet/confine/boolean.rb +0 -45
  736. data/lib/puppet/provider/package_targetable.rb +0 -68
  737. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load2.rb +0 -11
  738. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load3.rb +0 -11
  739. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load4.rb +0 -11
  740. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load5.rb +0 -12
  741. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/good_func_load.rb +0 -9
  742. data/spec/fixtures/unit/provider/package/pkgng/pkg.info +0 -7
  743. data/spec/fixtures/unit/provider/package/pkgng/pkg.query_absent +0 -1
  744. data/spec/integration/network/http_pool_spec.rb +0 -120
  745. data/spec/integration/provider/file/windows_spec.rb +0 -162
  746. data/spec/lib/puppet_spec/https.rb +0 -166
  747. data/spec/unit/settings/server_list_setting_spec.rb +0 -21
  748. data/spec/watchr.rb +0 -137
@@ -0,0 +1,52 @@
1
+ module Puppet
2
+ module Pal
3
+ # A FunctionSignature is returned from `function_signature`. Its purpose is to answer questions about the function's parameters
4
+ # and if it can be called with a set of parameters.
5
+ #
6
+ # It is also possible to get an array of puppet Callable data type where each callable describes one possible way
7
+ # the function can be called.
8
+ #
9
+ # @api public
10
+ #
11
+ class FunctionSignature
12
+ # @api private
13
+ def initialize(function_class)
14
+ @func = function_class
15
+ end
16
+
17
+ # Returns true if the function can be called with the given arguments and false otherwise.
18
+ # If the function is not callable, and a code block is given, it is given a formatted error message that describes
19
+ # the type mismatch. That error message can be quite complex if the function has multiple dispatch depending on
20
+ # given types.
21
+ #
22
+ # @param args [Array] The arguments as given to the function call
23
+ # @param callable [Proc, nil] An optional ruby Proc or puppet lambda given to the function
24
+ # @yield [String] a formatted error message describing a type mismatch if the function is not callable with given args + block
25
+ # @return [Boolean] true if the function can be called with given args + block, and false otherwise
26
+ # @api public
27
+ #
28
+ def callable_with?(args, callable=nil)
29
+ signatures = @func.dispatcher.to_type
30
+ callables = signatures.is_a?(Puppet::Pops::Types::PVariantType) ? signatures.types : [signatures]
31
+
32
+ return true if callables.any? {|t| t.callable_with?(args) }
33
+ return false unless block_given?
34
+ args_type = Puppet::Pops::Types::TypeCalculator.singleton.infer_set(callable.nil? ? args : args + [callable])
35
+ error_message = Puppet::Pops::Types::TypeMismatchDescriber.describe_signatures(@func.name, @func.signatures, args_type)
36
+ yield error_message
37
+ false
38
+ end
39
+
40
+ # Returns an array of Callable puppet data type
41
+ # @return [Array<Puppet::Pops::Types::PCallableType] one callable per way the function can be called
42
+ #
43
+ # @api public
44
+ #
45
+ def callables
46
+ signatures = @func.dispatcher.to_type
47
+ signatures.is_a?(Puppet::Pops::Types::PVariantType) ? signatures.types : [signatures]
48
+ end
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,67 @@
1
+ # The JsonCatalogEncoder is a wrapper around a catalog produced by the Pal::CatalogCompiler.with_json_encoding
2
+ # method.
3
+ # It allows encoding the entire catalog or an individual resource as Rich Data Json.
4
+ #
5
+ # @api public
6
+ #
7
+ class JsonCatalogEncoder
8
+ # Is the resulting Json pretty printed or not.
9
+ attr_reader :pretty
10
+
11
+ # Should unrealized virtual resources be included in the result or not.
12
+ attr_reader :exclude_virtual
13
+
14
+ # The internal catalog being build - what this class wraps with a public API.
15
+ attr_reader :catalog
16
+ private :catalog
17
+
18
+ # Do not instantiate this class directly! Use the `Pal::CatalogCompiler#with_json_encoding` method
19
+ # instead.
20
+ #
21
+ # @param catalog [Puppet::Resource::Catalog] the internal catalog that this class wraps
22
+ # @param pretty [Boolean] (true), if the resulting JSON should be pretty printed or not
23
+ # @param exclude_virtual [Boolean] (true), if the resulting catalog should contain unrealzed virtual resources or not
24
+ #
25
+ # @api private
26
+ #
27
+ def initialize(catalog, pretty: true, exclude_virtual: true)
28
+ @catalog = catalog
29
+ @pretty = pretty
30
+ @exclude_virtual = exclude_virtual
31
+ end
32
+
33
+ # Encodes the entire catalog as a rich-data Json catalog.
34
+ # @return String The catalog in Json format using rich data format
35
+ # @api public
36
+ #
37
+ def encode
38
+ possibly_filtered_catalog.to_json(:pretty => pretty)
39
+ end
40
+
41
+ # Returns one particular resource as a Json string, or returns nil if resource was not found.
42
+ # @param type [String] the name of the puppet type (case independent)
43
+ # @param title [String] the title of the wanted resource
44
+ # @return [String] the resulting Json text
45
+ # @api public
46
+ #
47
+ def encode_resource(type, title)
48
+ # Ensure that both type and title are given since the underlying API will do mysterious things
49
+ # if 'title' is nil. (Other assertions are made by the catalog when looking up the resource).
50
+ #
51
+ # TRANSLATORS 'type' and 'title' are internal parameter names - do not translate
52
+ raise ArgumentError, _("Both type and title must be given") if type.nil? or title.nil?
53
+ r = possibly_filtered_catalog.resource(type, title)
54
+ return nil if r.nil?
55
+ r.to_data_hash.to_json(:pretty => pretty)
56
+ end
57
+
58
+ # Applies a filter for virtual resources and returns filtered catalog
59
+ # or the catalog itself if filtering was not needed.
60
+ # The result is cached.
61
+ # @api private
62
+ #
63
+ def possibly_filtered_catalog
64
+ @filtered ||= (exclude_virtual ? catalog.filter { |r| r.virtual? } : catalog)
65
+ end
66
+ private :possibly_filtered_catalog
67
+ end
@@ -0,0 +1,15 @@
1
+ module Puppet
2
+ require 'puppet/parser/script_compiler'
3
+ require 'puppet/parser/catalog_compiler'
4
+
5
+ module Pal
6
+ require 'puppet/pal/json_catalog_encoder'
7
+ require 'puppet/pal/function_signature'
8
+ require 'puppet/pal/task_signature'
9
+ require 'puppet/pal/plan_signature'
10
+ require 'puppet/pal/compiler'
11
+ require 'puppet/pal/script_compiler'
12
+ require 'puppet/pal/catalog_compiler'
13
+ require 'puppet/pal/pal_impl'
14
+ end
15
+ end
@@ -0,0 +1,523 @@
1
+ # Puppet as a Library "PAL"
2
+
3
+ # Yes, this requires all of puppet for now because 'settings' and many other things...
4
+ require 'puppet'
5
+ require 'puppet/parser/script_compiler'
6
+ require 'puppet/parser/catalog_compiler'
7
+
8
+ # This is the main entry point for "Puppet As a Library" PAL.
9
+ # This file should be required instead of "puppet"
10
+ # Initially, this will require ALL of puppet - over time this will change as the monolithical "puppet" is broken up
11
+ # into smaller components.
12
+ #
13
+ # @example Running a snippet of Puppet Language code
14
+ # require 'puppet_pal'
15
+ # result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: ['/tmp/testmodules']) do |pal|
16
+ # pal.evaluate_script_string('1+2+3')
17
+ # end
18
+ # # The result is the value 6
19
+ #
20
+ # @example Calling a function
21
+ # require 'puppet_pal'
22
+ # result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: ['/tmp/testmodules']) do |pal|
23
+ # pal.call_function('mymodule::myfunction', 10, 20)
24
+ # end
25
+ # # The result is what 'mymodule::myfunction' returns
26
+ #
27
+ module Puppet
28
+ module Pal
29
+
30
+ # Defines a context in which multiple operations in an env with a script compiler can be performed in a given block.
31
+ # The calls that takes place to PAL inside of the given block are all with the same instance of the compiler.
32
+ # The parameter `configured_by_env` makes it possible to either use the configuration in the environment, or specify
33
+ # `manifest_file` or `code_string` manually. If neither is given, an empty `code_string` is used.
34
+ #
35
+ # @example define a script compiler without any initial logic
36
+ # pal.with_script_compiler do | compiler |
37
+ # # do things with compiler
38
+ # end
39
+ #
40
+ # @example define a script compiler with a code_string containing initial logic
41
+ # pal.with_script_compiler(code_string: '$myglobal_var = 42') do | compiler |
42
+ # # do things with compiler
43
+ # end
44
+ #
45
+ # @param configured_by_env [Boolean] when true the environment's settings are used, otherwise the given `manifest_file` or `code_string`
46
+ # @param manifest_file [String] a Puppet Language file to load and evaluate before calling the given block, mutually exclusive with `code_string`
47
+ # @param code_string [String] a Puppet Language source string to load and evaluate before calling the given block, mutually exclusive with `manifest_file`
48
+ # @param facts [Hash] optional map of fact name to fact value - if not given will initialize the facts (which is a slow operation)
49
+ # If given at the environment level, the facts given here are merged with higher priority.
50
+ # @param variables [Hash] optional map of fully qualified variable name to value. If given at the environment level, the variables
51
+ # given here are merged with higher priority.
52
+ # @param block [Proc] the block performing operations on compiler
53
+ # @return [Object] what the block returns
54
+ # @yieldparam [Puppet::Pal::ScriptCompiler] compiler, a ScriptCompiler to perform operations on.
55
+ #
56
+ def self.with_script_compiler(
57
+ configured_by_env: false,
58
+ manifest_file: nil,
59
+ code_string: nil,
60
+ facts: nil,
61
+ variables: nil,
62
+ &block
63
+ )
64
+ # TRANSLATORS: do not translate variable name strings in these assertions
65
+ assert_mutually_exclusive(manifest_file, code_string, 'manifest_file', 'code_string')
66
+ assert_non_empty_string(manifest_file, 'manifest_file', true)
67
+ assert_non_empty_string(code_string, 'code_string', true)
68
+ assert_type(T_BOOLEAN, configured_by_env, "configured_by_env", false)
69
+
70
+ if configured_by_env
71
+ unless manifest_file.nil? && code_string.nil?
72
+ # TRANSLATORS: do not translate the variable names in this error message
73
+ raise ArgumentError, _("manifest_file or code_string cannot be given when configured_by_env is true")
74
+ end
75
+ # Use the manifest setting
76
+ manifest_file = Puppet[:manifest]
77
+ else
78
+ # An "undef" code_string is the only way to override Puppet[:manifest] & Puppet[:code] settings since an
79
+ # empty string is taken as Puppet[:code] not being set.
80
+ #
81
+ if manifest_file.nil? && code_string.nil?
82
+ code_string = 'undef'
83
+ end
84
+ end
85
+
86
+ Puppet[:tasks] = true
87
+ # After the assertions, if code_string is non nil - it has the highest precedence
88
+ Puppet[:code] = code_string unless code_string.nil?
89
+
90
+ # If manifest_file is nil, the #main method will use the env configured manifest
91
+ # to do things in the block while a Script Compiler is in effect
92
+ main(manifest_file, facts, variables, :script, &block)
93
+ end
94
+
95
+ # Evaluates a Puppet Language script string.
96
+ # @param code_string [String] a snippet of Puppet Language source code
97
+ # @return [Object] what the Puppet Language code_string evaluates to
98
+ # @deprecated Use {#with_script_compiler} and then evaluate_string on the given compiler - to be removed in 1.0 version
99
+ #
100
+ def self.evaluate_script_string(code_string)
101
+ # prevent the default loading of Puppet[:manifest] which is the environment's manifest-dir by default settings
102
+ # by setting code_string to 'undef'
103
+ with_script_compiler do |compiler|
104
+ compiler.evaluate_string(code_string)
105
+ end
106
+ end
107
+
108
+ # Evaluates a Puppet Language script (.pp) file.
109
+ # @param manifest_file [String] a file with Puppet Language source code
110
+ # @return [Object] what the Puppet Language manifest_file contents evaluates to
111
+ # @deprecated Use {#with_script_compiler} and then evaluate_file on the given compiler - to be removed in 1.0 version
112
+ #
113
+ def self.evaluate_script_manifest(manifest_file)
114
+ with_script_compiler do |compiler|
115
+ compiler.evaluate_file(manifest_file)
116
+ end
117
+ end
118
+
119
+ # Defines a context in which multiple operations in an env with a catalog producing compiler can be performed
120
+ # in a given block.
121
+ # The calls that takes place to PAL inside of the given block are all with the same instance of the compiler.
122
+ # The parameter `configured_by_env` makes it possible to either use the configuration in the environment, or specify
123
+ # `manifest_file` or `code_string` manually. If neither is given, an empty `code_string` is used.
124
+ #
125
+ # @example define a catalog compiler without any initial logic
126
+ # pal.with_catalog_compiler do | compiler |
127
+ # # do things with compiler
128
+ # end
129
+ #
130
+ # @example define a catalog compiler with a code_string containing initial logic
131
+ # pal.with_catalog_compiler(code_string: '$myglobal_var = 42') do | compiler |
132
+ # # do things with compiler
133
+ # end
134
+ #
135
+ # @param configured_by_env [Boolean] when true the environment's settings are used, otherwise the
136
+ # given `manifest_file` or `code_string`
137
+ # @param manifest_file [String] a Puppet Language file to load and evaluate before calling the given block, mutually exclusive
138
+ # with `code_string`
139
+ # @param code_string [String] a Puppet Language source string to load and evaluate before calling the given block, mutually
140
+ # exclusive with `manifest_file`
141
+ # @param facts [Hash] optional map of fact name to fact value - if not given will initialize the facts (which is a slow operation)
142
+ # If given at the environment level, the facts given here are merged with higher priority.
143
+ # @param variables [Hash] optional map of fully qualified variable name to value. If given at the environment level, the variables
144
+ # given here are merged with higher priority.
145
+ # @param block [Proc] the block performing operations on compiler
146
+ # @return [Object] what the block returns
147
+ # @yieldparam [Puppet::Pal::CatalogCompiler] compiler, a CatalogCompiler to perform operations on.
148
+ #
149
+ def self.with_catalog_compiler(
150
+ configured_by_env: false,
151
+ manifest_file: nil,
152
+ code_string: nil,
153
+ facts: nil,
154
+ variables: nil,
155
+ &block
156
+ )
157
+ # TRANSLATORS: do not translate variable name strings in these assertions
158
+ assert_mutually_exclusive(manifest_file, code_string, 'manifest_file', 'code_string')
159
+ assert_non_empty_string(manifest_file, 'manifest_file', true)
160
+ assert_non_empty_string(code_string, 'code_string', true)
161
+ assert_type(T_BOOLEAN, configured_by_env, "configured_by_env", false)
162
+
163
+ if configured_by_env
164
+ unless manifest_file.nil? && code_string.nil?
165
+ # TRANSLATORS: do not translate the variable names in this error message
166
+ raise ArgumentError, _("manifest_file or code_string cannot be given when configured_by_env is true")
167
+ end
168
+ # Use the manifest setting
169
+ manifest_file = Puppet[:manifest]
170
+ else
171
+ # An "undef" code_string is the only way to override Puppet[:manifest] & Puppet[:code] settings since an
172
+ # empty string is taken as Puppet[:code] not being set.
173
+ #
174
+ if manifest_file.nil? && code_string.nil?
175
+ code_string = 'undef'
176
+ end
177
+ end
178
+
179
+ Puppet[:tasks] = false
180
+ # After the assertions, if code_string is non nil - it has the highest precedence
181
+ Puppet[:code] = code_string unless code_string.nil?
182
+
183
+ # If manifest_file is nil, the #main method will use the env configured manifest
184
+ # to do things in the block while a Script Compiler is in effect
185
+ main(manifest_file, facts, variables, :catalog, &block)
186
+ end
187
+
188
+ # Defines the context in which to perform puppet operations (evaluation, etc)
189
+ # The code to evaluate in this context is given in a block.
190
+ #
191
+ # @param env_name [String] a name to use for the temporary environment - this only shows up in errors
192
+ # @param modulepath [Array<String>] an array of directory paths containing Puppet modules, may be empty, defaults to empty array
193
+ # @param settings_hash [Hash] a hash of settings - currently not used for anything, defaults to empty hash
194
+ # @param facts [Hash] optional map of fact name to fact value - if not given will initialize the facts (which is a slow operation)
195
+ # @param variables [Hash] optional map of fully qualified variable name to value
196
+ # @return [Object] returns what the given block returns
197
+ # @yieldparam [Puppet::Pal] context, a context that responds to Puppet::Pal methods
198
+ #
199
+ def self.in_tmp_environment(env_name,
200
+ modulepath: [],
201
+ settings_hash: {},
202
+ facts: nil,
203
+ variables: {},
204
+ &block
205
+ )
206
+ assert_non_empty_string(env_name, _("temporary environment name"))
207
+ # TRANSLATORS: do not translate variable name string in these assertions
208
+ assert_optionally_empty_array(modulepath, 'modulepath')
209
+
210
+ unless block_given?
211
+ raise ArgumentError, _("A block must be given to 'in_tmp_environment'") # TRANSLATORS 'in_tmp_environment' is a name, do not translate
212
+ end
213
+
214
+ env = Puppet::Node::Environment.create(env_name, modulepath)
215
+
216
+ in_environment_context(
217
+ Puppet::Environments::Static.new(env), # The tmp env is the only known env
218
+ env, facts, variables, &block
219
+ )
220
+ end
221
+
222
+ # Defines the context in which to perform puppet operations (evaluation, etc)
223
+ # The code to evaluate in this context is given in a block.
224
+ #
225
+ # The name of an environment (env_name) is always given. The location of that environment on disk
226
+ # is then either constructed by:
227
+ # * searching a given envpath where name is a child of a directory on that path, or
228
+ # * it is the directory given in env_dir (which must exist).
229
+ #
230
+ # The env_dir and envpath options are mutually exclusive.
231
+ #
232
+ # @param env_name [String] the name of an existing environment
233
+ # @param modulepath [Array<String>] an array of directory paths containing Puppet modules, overrides the modulepath of an existing env.
234
+ # Defaults to `{env_dir}/modules` if `env_dir` is given,
235
+ # @param pre_modulepath [Array<String>] like modulepath, but is prepended to the modulepath
236
+ # @param post_modulepath [Array<String>] like modulepath, but is appended to the modulepath
237
+ # @param settings_hash [Hash] a hash of settings - currently not used for anything, defaults to empty hash
238
+ # @param env_dir [String] a reference to a directory being the named environment (mutually exclusive with `envpath`)
239
+ # @param envpath [String] a path of directories in which there are environments to search for `env_name` (mutually exclusive with `env_dir`).
240
+ # Should be a single directory, or several directories separated with platform specific `File::PATH_SEPARATOR` character.
241
+ # @param facts [Hash] optional map of fact name to fact value - if not given will initialize the facts (which is a slow operation)
242
+ # @param variables [Hash] optional map of fully qualified variable name to value
243
+ # @return [Object] returns what the given block returns
244
+ # @yieldparam [Puppet::Pal] context, a context that responds to Puppet::Pal methods
245
+ #
246
+ def self.in_environment(env_name,
247
+ modulepath: nil,
248
+ pre_modulepath: [],
249
+ post_modulepath: [],
250
+ settings_hash: {},
251
+ env_dir: nil,
252
+ envpath: nil,
253
+ facts: nil,
254
+ variables: {},
255
+ &block
256
+ )
257
+ # TRANSLATORS terms in the assertions below are names of terms in code
258
+ assert_non_empty_string(env_name, 'env_name')
259
+ assert_optionally_empty_array(modulepath, 'modulepath', true)
260
+ assert_optionally_empty_array(pre_modulepath, 'pre_modulepath', false)
261
+ assert_optionally_empty_array(post_modulepath, 'post_modulepath', false)
262
+ assert_mutually_exclusive(env_dir, envpath, 'env_dir', 'envpath')
263
+
264
+ unless block_given?
265
+ raise ArgumentError, _("A block must be given to 'in_environment'") # TRANSLATORS 'in_environment' is a name, do not translate
266
+ end
267
+
268
+ if env_dir
269
+ unless Puppet::FileSystem.exist?(env_dir)
270
+ raise ArgumentError, _("The environment directory '%{env_dir}' does not exist") % { env_dir: env_dir }
271
+ end
272
+
273
+ # a nil modulepath for env_dir means it should use its ./modules directory
274
+ mid_modulepath = modulepath.nil? ? [Puppet::FileSystem.expand_path(File.join(env_dir, 'modules'))] : modulepath
275
+
276
+ env = Puppet::Node::Environment.create(env_name, pre_modulepath + mid_modulepath + post_modulepath)
277
+ environments = Puppet::Environments::StaticDirectory.new(env_name, env_dir, env) # The env being used is the only one...
278
+ else
279
+ assert_non_empty_string(envpath, 'envpath')
280
+
281
+ # The environment is resolved against the envpath. This is setup without a basemodulepath
282
+ # The modulepath defaults to the 'modulepath' in the found env when "Directories" is used
283
+ #
284
+ if envpath.is_a?(String) && envpath.include?(File::PATH_SEPARATOR)
285
+ # potentially more than one directory to search
286
+ env_loaders = Puppet::Environments::Directories.from_path(envpath, [])
287
+ environments = Puppet::Environments::Combined.new(*env_loaders)
288
+ else
289
+ environments = Puppet::Environments::Directories.new(envpath, [])
290
+ end
291
+ env = environments.get(env_name)
292
+ if env.nil?
293
+ raise ArgumentError, _("No directory found for the environment '%{env_name}' on the path '%{envpath}'") % { env_name: env_name, envpath: envpath }
294
+ end
295
+ # A given modulepath should override the default
296
+ mid_modulepath = modulepath.nil? ? env.modulepath : modulepath
297
+ env_path = env.configuration.path_to_env
298
+ env = env.override_with(:modulepath => pre_modulepath + mid_modulepath + post_modulepath)
299
+ # must configure this in case logic looks up the env by name again (otherwise the looked up env does
300
+ # not have the same effective modulepath).
301
+ environments = Puppet::Environments::StaticDirectory.new(env_name, env_path, env) # The env being used is the only one...
302
+ end
303
+ in_environment_context(environments, env, facts, variables, &block)
304
+ end
305
+
306
+ # Prepares the puppet context with pal information - and delegates to the block
307
+ # No set up is performed at this step - it is delayed until it is known what the
308
+ # operation is going to be (for example - using a ScriptCompiler).
309
+ #
310
+ def self.in_environment_context(environments, env, facts, variables, &block)
311
+ # Create a default node to use (may be overridden later)
312
+ node = Puppet::Node.new(Puppet[:node_name_value], :environment => env)
313
+
314
+ Puppet.override(
315
+ environments: environments, # The env being used is the only one...
316
+ pal_env: env, # provide as convenience
317
+ pal_current_node: node, # to allow it to be picked up instead of created
318
+ pal_variables: variables, # common set of variables across several inner contexts
319
+ pal_facts: facts # common set of facts across several inner contexts (or nil)
320
+ ) do
321
+ # DELAY: prepare_node_facts(node, facts)
322
+ return block.call(self)
323
+ end
324
+ end
325
+ private_class_method :in_environment_context
326
+
327
+ # Prepares the node for use by giving it node_facts (if given)
328
+ # If a hash of facts values is given, then the operation of creating a node with facts is much
329
+ # speeded up (as getting a fresh set of facts is avoided in a later step).
330
+ #
331
+ def self.prepare_node_facts(node, facts)
332
+ # Prepare the node with facts if it does not already have them
333
+ if node.facts.nil?
334
+ node_facts = facts.nil? ? nil : Puppet::Node::Facts.new(Puppet[:node_name_value], facts)
335
+ node.fact_merge(node_facts)
336
+ # Add server facts so $server_facts[environment] exists when doing a puppet script
337
+ # SCRIPT TODO: May be needed when running scripts under orchestrator. Leave it for now.
338
+ #
339
+ node.add_server_facts({})
340
+ end
341
+ end
342
+ private_class_method :prepare_node_facts
343
+
344
+ def self.add_variables(scope, variables)
345
+ return if variables.nil?
346
+ unless variables.is_a?(Hash)
347
+ raise ArgumentError, _("Given variables must be a hash, got %{type}") % { type: variables.class }
348
+ end
349
+
350
+ rich_data_t = Puppet::Pops::Types::TypeFactory.rich_data
351
+ variables.each_pair do |k,v|
352
+ unless k =~ Puppet::Pops::Patterns::VAR_NAME
353
+ raise ArgumentError, _("Given variable '%{varname}' has illegal name") % { varname: k }
354
+ end
355
+
356
+ unless rich_data_t.instance?(v)
357
+ raise ArgumentError, _("Given value for '%{varname}' has illegal type - got: %{type}") % { varname: k, type: v.class }
358
+ end
359
+
360
+ scope.setvar(k, v)
361
+ end
362
+ end
363
+ private_class_method :add_variables
364
+
365
+ # The main routine for script compiler
366
+ # Picks up information from the puppet context and configures a script compiler which is given to
367
+ # the provided block
368
+ #
369
+ def self.main(manifest, facts, variables, internal_compiler_class)
370
+ # Configure the load path
371
+ env = Puppet.lookup(:pal_env)
372
+ env.each_plugin_directory do |dir|
373
+ $LOAD_PATH << dir unless $LOAD_PATH.include?(dir)
374
+ end
375
+
376
+ # Puppet requires Facter, which initializes its lookup paths. Reset Facter to
377
+ # pickup the new $LOAD_PATH.
378
+ Facter.reset
379
+
380
+ node = Puppet.lookup(:pal_current_node)
381
+ pal_facts = Puppet.lookup(:pal_facts)
382
+ pal_variables = Puppet.lookup(:pal_variables)
383
+
384
+ overrides = {}
385
+ unless facts.nil? || facts.empty?
386
+ pal_facts = pal_facts.merge(facts)
387
+ overrides[:pal_facts] = pal_facts
388
+ end
389
+ unless variables.nil? || variables.empty?
390
+ pal_variables = pal_variables.merge(variables)
391
+ overrides[:pal_variables] = pal_variables
392
+ end
393
+
394
+ prepare_node_facts(node, pal_facts)
395
+
396
+ configured_environment = node.environment || Puppet.lookup(:current_environment)
397
+
398
+ apply_environment = manifest ?
399
+ configured_environment.override_with(:manifest => manifest) :
400
+ configured_environment
401
+
402
+ # Modify the node descriptor to use the special apply_environment.
403
+ # It is based on the actual environment from the node, or the locally
404
+ # configured environment if the node does not specify one.
405
+ # If a manifest file is passed on the command line, it overrides
406
+ # the :manifest setting of the apply_environment.
407
+ node.environment = apply_environment
408
+
409
+ # TRANSLATORS, the string "For puppet PAL" is not user facing
410
+ Puppet.override({:current_environment => apply_environment}, "For puppet PAL") do
411
+ begin
412
+ # support the following features when evaluating puppet code
413
+ # * $facts with facts from host running the script
414
+ # * $settings with 'settings::*' namespace populated, and '$settings::all_local' hash
415
+ # * $trusted as setup when using puppet apply
416
+ # * an environment
417
+ #
418
+
419
+ # fixup trusted information
420
+ node.sanitize()
421
+
422
+ compiler = create_internal_compiler(internal_compiler_class, node)
423
+ # compiler = Puppet::Parser::ScriptCompiler.new(node.environment, node.name)
424
+ topscope = compiler.topscope
425
+
426
+ # When scripting the trusted data are always local, but set them anyway
427
+ # When compiling for a catalog, the catalog compiler does this
428
+ unless internal_compiler_class == :catalog
429
+ topscope.set_trusted(node.trusted_data)
430
+
431
+ # Server facts are always about the local node's version etc.
432
+ topscope.set_server_facts(node.server_facts)
433
+
434
+ # Set $facts for the node running the script
435
+ facts_hash = node.facts.nil? ? {} : node.facts.values
436
+ topscope.set_facts(facts_hash)
437
+
438
+ # create the $settings:: variables
439
+ topscope.merge_settings(node.environment.name, false)
440
+ end
441
+
442
+ add_variables(topscope, pal_variables)
443
+
444
+ case internal_compiler_class
445
+ when :script
446
+ pal_compiler = ScriptCompiler.new(compiler)
447
+ overrides[:pal_script_compiler] = overrides[:pal_compiler] = pal_compiler
448
+ when :catalog
449
+ pal_compiler = CatalogCompiler.new(compiler)
450
+ overrides[:pal_catalog_compiler] = overrides[:pal_compiler] = pal_compiler
451
+ end
452
+
453
+ # Make compiler available to Puppet#lookup and injection in functions
454
+ # TODO: The compiler instances should be available under non PAL use as well!
455
+ # TRANSLATORS: Do not translate, symbolic name
456
+ Puppet.override(overrides, "PAL::with_#{internal_compiler_class}_compiler") do
457
+ compiler.compile do | compiler_yield |
458
+ # wrap the internal compiler to prevent it from leaking in the PAL API
459
+ if block_given?
460
+ yield(pal_compiler)
461
+ end
462
+ end
463
+ end
464
+
465
+ rescue Puppet::ParseErrorWithIssue, Puppet::Error
466
+ # already logged and handled by the compiler for these two cases
467
+ raise
468
+
469
+ rescue => detail
470
+ Puppet.log_exception(detail)
471
+ raise
472
+ end
473
+ end
474
+ end
475
+ private_class_method :main
476
+
477
+ def self.create_internal_compiler(compiler_class_reference, node)
478
+ case compiler_class_reference
479
+ when :script
480
+ Puppet::Parser::ScriptCompiler.new(node.environment, node.name)
481
+ when :catalog
482
+ Puppet::Parser::CatalogCompiler.new(node)
483
+ else
484
+ raise ArgumentError, "Internal Error: Invalid compiler type requested."
485
+ end
486
+ end
487
+
488
+ T_STRING = Puppet::Pops::Types::PStringType::NON_EMPTY
489
+ T_STRING_ARRAY = Puppet::Pops::Types::TypeFactory.array_of(T_STRING)
490
+ T_ANY_ARRAY = Puppet::Pops::Types::TypeFactory.array_of_any
491
+ T_BOOLEAN = Puppet::Pops::Types::PBooleanType::DEFAULT
492
+
493
+ T_GENERIC_TASK_HASH = Puppet::Pops::Types::TypeFactory.hash_kv(
494
+ Puppet::Pops::Types::TypeFactory.pattern(/\A[a-z][a-z0-9_]*\z/), Puppet::Pops::Types::TypeFactory.data)
495
+
496
+ def self.assert_type(type, value, what, allow_nil=false)
497
+ Puppet::Pops::Types::TypeAsserter.assert_instance_of(nil, type, value, allow_nil) { _('Puppet Pal: %{what}') % {what: what} }
498
+ end
499
+
500
+ def self.assert_non_empty_string(s, what, allow_nil=false)
501
+ assert_type(T_STRING, s, what, allow_nil)
502
+ end
503
+
504
+ def self.assert_optionally_empty_array(a, what, allow_nil=false)
505
+ assert_type(T_STRING_ARRAY, a, what, allow_nil)
506
+ end
507
+ private_class_method :assert_optionally_empty_array
508
+
509
+ def self.assert_mutually_exclusive(a, b, a_term, b_term)
510
+ if a && b
511
+ raise ArgumentError, _("Cannot use '%{a_term}' and '%{b_term}' at the same time") % { a_term: a_term, b_term: b_term }
512
+ end
513
+ end
514
+ private_class_method :assert_mutually_exclusive
515
+
516
+ def self.assert_block_given(block)
517
+ if block.nil?
518
+ raise ArgumentError, _("A block must be given")
519
+ end
520
+ end
521
+ private_class_method :assert_block_given
522
+ end
523
+ end