puppet 6.21.1-x64-mingw32 → 6.25.0-x64-mingw32

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

Potentially problematic release.


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

Files changed (427) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +5 -5
  3. data/Gemfile +3 -3
  4. data/Gemfile.lock +34 -28
  5. data/README.md +4 -4
  6. data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
  7. data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
  8. data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
  9. data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
  10. data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
  11. data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
  12. data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
  13. data/{ext → examples}/nagios/check_puppet.rb +2 -2
  14. data/ext/README.md +13 -0
  15. data/ext/osx/puppet.plist +2 -0
  16. data/ext/project_data.yaml +3 -2
  17. data/lib/puppet/application/agent.rb +16 -5
  18. data/lib/puppet/application/apply.rb +22 -3
  19. data/lib/puppet/application/device.rb +2 -1
  20. data/lib/puppet/application/filebucket.rb +1 -0
  21. data/lib/puppet/application/resource.rb +32 -16
  22. data/lib/puppet/application/script.rb +2 -1
  23. data/lib/puppet/application/ssl.rb +12 -0
  24. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  25. data/lib/puppet/configurer/downloader.rb +2 -1
  26. data/lib/puppet/configurer.rb +85 -57
  27. data/lib/puppet/confine/variable.rb +1 -1
  28. data/lib/puppet/defaults.rb +63 -35
  29. data/lib/puppet/environments.rb +91 -26
  30. data/lib/puppet/face/facts.rb +129 -31
  31. data/lib/puppet/face/help/action.erb +1 -0
  32. data/lib/puppet/face/help/face.erb +1 -0
  33. data/lib/puppet/face/node/clean.rb +11 -0
  34. data/lib/puppet/facter_impl.rb +96 -0
  35. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  36. data/lib/puppet/file_serving/configuration.rb +3 -0
  37. data/lib/puppet/file_serving/fileset.rb +14 -2
  38. data/lib/puppet/file_serving/mount/file.rb +4 -4
  39. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  40. data/lib/puppet/file_system/file_impl.rb +3 -1
  41. data/lib/puppet/file_system/memory_file.rb +8 -1
  42. data/lib/puppet/file_system/windows.rb +4 -2
  43. data/lib/puppet/forge.rb +4 -4
  44. data/lib/puppet/functions/all.rb +1 -1
  45. data/lib/puppet/functions/camelcase.rb +1 -1
  46. data/lib/puppet/functions/capitalize.rb +2 -2
  47. data/lib/puppet/functions/downcase.rb +2 -2
  48. data/lib/puppet/functions/empty.rb +8 -0
  49. data/lib/puppet/functions/find_template.rb +2 -2
  50. data/lib/puppet/functions/get.rb +5 -5
  51. data/lib/puppet/functions/group_by.rb +13 -5
  52. data/lib/puppet/functions/lest.rb +1 -1
  53. data/lib/puppet/functions/new.rb +100 -100
  54. data/lib/puppet/functions/partition.rb +12 -4
  55. data/lib/puppet/functions/require.rb +5 -5
  56. data/lib/puppet/functions/sort.rb +3 -3
  57. data/lib/puppet/functions/strftime.rb +1 -0
  58. data/lib/puppet/functions/tree_each.rb +7 -9
  59. data/lib/puppet/functions/type.rb +4 -4
  60. data/lib/puppet/functions/unwrap.rb +17 -2
  61. data/lib/puppet/functions/upcase.rb +2 -2
  62. data/lib/puppet/http/resolver/server_list.rb +15 -4
  63. data/lib/puppet/http/service/compiler.rb +75 -1
  64. data/lib/puppet/http/service/file_server.rb +2 -1
  65. data/lib/puppet/indirector/catalog/compiler.rb +25 -6
  66. data/lib/puppet/indirector/catalog/rest.rb +1 -0
  67. data/lib/puppet/indirector/facts/facter.rb +28 -7
  68. data/lib/puppet/indirector/file_metadata/rest.rb +1 -0
  69. data/lib/puppet/indirector/indirection.rb +1 -1
  70. data/lib/puppet/indirector/resource/ral.rb +6 -1
  71. data/lib/puppet/indirector/terminus.rb +4 -0
  72. data/lib/puppet/interface/documentation.rb +1 -0
  73. data/lib/puppet/module/plan.rb +0 -1
  74. data/lib/puppet/module/task.rb +1 -1
  75. data/lib/puppet/module.rb +1 -0
  76. data/lib/puppet/module_tool/applications/installer.rb +12 -4
  77. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  78. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  79. data/lib/puppet/module_tool/errors/shared.rb +17 -0
  80. data/lib/puppet/network/formats.rb +67 -0
  81. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  82. data/lib/puppet/network/http/factory.rb +4 -0
  83. data/lib/puppet/node/environment.rb +10 -11
  84. data/lib/puppet/pal/pal_impl.rb +1 -1
  85. data/lib/puppet/parser/functions/fqdn_rand.rb +14 -6
  86. data/lib/puppet/parser/scope.rb +1 -0
  87. data/lib/puppet/parser/templatewrapper.rb +1 -0
  88. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  89. data/lib/puppet/pops/model/ast.rb +1 -0
  90. data/lib/puppet/pops/model/factory.rb +2 -1
  91. data/lib/puppet/pops/parser/eparser.rb +201 -201
  92. data/lib/puppet/pops/parser/lexer2.rb +92 -91
  93. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  94. data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
  95. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  96. data/lib/puppet/pops/types/p_sem_ver_type.rb +8 -2
  97. data/lib/puppet/pops/types/p_sensitive_type.rb +10 -0
  98. data/lib/puppet/pops/types/type_formatter.rb +4 -3
  99. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  100. data/lib/puppet/pops/types/types.rb +1 -1
  101. data/lib/puppet/provider/aix_object.rb +1 -1
  102. data/lib/puppet/provider/exec/posix.rb +16 -4
  103. data/lib/puppet/provider/group/groupadd.rb +5 -2
  104. data/lib/puppet/provider/package/dnfmodule.rb +1 -1
  105. data/lib/puppet/provider/package/nim.rb +11 -6
  106. data/lib/puppet/provider/package/pip.rb +15 -3
  107. data/lib/puppet/provider/package/pkg.rb +19 -2
  108. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  109. data/lib/puppet/provider/package/yum.rb +1 -1
  110. data/lib/puppet/provider/parsedfile.rb +3 -0
  111. data/lib/puppet/provider/service/base.rb +1 -1
  112. data/lib/puppet/provider/service/init.rb +5 -5
  113. data/lib/puppet/provider/service/launchd.rb +2 -2
  114. data/lib/puppet/provider/service/redhat.rb +1 -1
  115. data/lib/puppet/provider/service/smf.rb +3 -3
  116. data/lib/puppet/provider/service/systemd.rb +16 -6
  117. data/lib/puppet/provider/service/upstart.rb +5 -5
  118. data/lib/puppet/provider/service/windows.rb +38 -0
  119. data/lib/puppet/provider/user/aix.rb +44 -1
  120. data/lib/puppet/provider/user/directoryservice.rb +26 -13
  121. data/lib/puppet/provider/user/useradd.rb +73 -17
  122. data/lib/puppet/provider.rb +1 -1
  123. data/lib/puppet/reference/configuration.rb +1 -1
  124. data/lib/puppet/reference/providers.rb +2 -2
  125. data/lib/puppet/resource/type_collection.rb +1 -0
  126. data/lib/puppet/runtime.rb +11 -1
  127. data/lib/puppet/settings/environment_conf.rb +1 -0
  128. data/lib/puppet/settings.rb +32 -9
  129. data/lib/puppet/test/test_helper.rb +4 -1
  130. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  131. data/lib/puppet/transaction/persistence.rb +11 -1
  132. data/lib/puppet/transaction/report.rb +15 -1
  133. data/lib/puppet/type/exec.rb +35 -5
  134. data/lib/puppet/type/file/mode.rb +6 -0
  135. data/lib/puppet/type/file/selcontext.rb +1 -1
  136. data/lib/puppet/type/file.rb +25 -7
  137. data/lib/puppet/type/filebucket.rb +3 -3
  138. data/lib/puppet/type/group.rb +0 -1
  139. data/lib/puppet/type/resources.rb +1 -1
  140. data/lib/puppet/type/service.rb +26 -41
  141. data/lib/puppet/type/tidy.rb +22 -3
  142. data/lib/puppet/type/user.rb +38 -21
  143. data/lib/puppet/type.rb +1 -1
  144. data/lib/puppet/util/command_line.rb +1 -1
  145. data/lib/puppet/util/fact_dif.rb +36 -17
  146. data/lib/puppet/util/filetype.rb +2 -2
  147. data/lib/puppet/util/json.rb +3 -0
  148. data/lib/puppet/util/log.rb +1 -2
  149. data/lib/puppet/util/logging.rb +1 -25
  150. data/lib/puppet/util/monkey_patches.rb +7 -0
  151. data/lib/puppet/util/pidlock.rb +1 -1
  152. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  153. data/lib/puppet/util/selinux.rb +30 -4
  154. data/lib/puppet/util/suidmanager.rb +1 -2
  155. data/lib/puppet/util/symbolic_file_mode.rb +29 -17
  156. data/lib/puppet/util/tagging.rb +1 -0
  157. data/lib/puppet/util/windows/adsi.rb +46 -0
  158. data/lib/puppet/util/windows/api_types.rb +1 -1
  159. data/lib/puppet/util/windows/principal.rb +9 -2
  160. data/lib/puppet/util/windows/sid.rb +6 -2
  161. data/lib/puppet/util/windows/user.rb +0 -2
  162. data/lib/puppet/util.rb +4 -3
  163. data/lib/puppet/version.rb +1 -1
  164. data/lib/puppet.rb +5 -9
  165. data/locales/puppet.pot +506 -410
  166. data/man/man5/puppet.conf.5 +310 -274
  167. data/man/man8/puppet-agent.8 +4 -1
  168. data/man/man8/puppet-apply.8 +1 -1
  169. data/man/man8/puppet-catalog.8 +9 -9
  170. data/man/man8/puppet-config.8 +1 -1
  171. data/man/man8/puppet-describe.8 +1 -1
  172. data/man/man8/puppet-device.8 +1 -1
  173. data/man/man8/puppet-doc.8 +1 -1
  174. data/man/man8/puppet-epp.8 +1 -1
  175. data/man/man8/puppet-facts.8 +65 -7
  176. data/man/man8/puppet-filebucket.8 +1 -1
  177. data/man/man8/puppet-generate.8 +1 -1
  178. data/man/man8/puppet-help.8 +1 -1
  179. data/man/man8/puppet-key.8 +7 -7
  180. data/man/man8/puppet-lookup.8 +1 -1
  181. data/man/man8/puppet-man.8 +1 -1
  182. data/man/man8/puppet-module.8 +3 -3
  183. data/man/man8/puppet-node.8 +5 -5
  184. data/man/man8/puppet-parser.8 +1 -1
  185. data/man/man8/puppet-plugin.8 +1 -1
  186. data/man/man8/puppet-report.8 +5 -5
  187. data/man/man8/puppet-resource.8 +1 -1
  188. data/man/man8/puppet-script.8 +1 -1
  189. data/man/man8/puppet-ssl.8 +5 -1
  190. data/man/man8/puppet-status.8 +4 -4
  191. data/man/man8/puppet.8 +2 -2
  192. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  193. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  194. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  195. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  196. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  197. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  198. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  199. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  200. data/spec/fixtures/ssl/127.0.0.1-key.pem +107 -57
  201. data/spec/fixtures/ssl/127.0.0.1.pem +52 -31
  202. data/spec/fixtures/ssl/bad-basic-constraints.pem +57 -35
  203. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +57 -35
  204. data/spec/fixtures/ssl/ca.pem +57 -35
  205. data/spec/fixtures/ssl/crl.pem +28 -18
  206. data/spec/fixtures/ssl/ec-key.pem +11 -11
  207. data/spec/fixtures/ssl/ec.pem +33 -24
  208. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  209. data/spec/fixtures/ssl/encrypted-key.pem +108 -58
  210. data/spec/fixtures/ssl/intermediate-agent-crl.pem +28 -19
  211. data/spec/fixtures/ssl/intermediate-agent.pem +57 -36
  212. data/spec/fixtures/ssl/intermediate-crl.pem +31 -21
  213. data/spec/fixtures/ssl/intermediate.pem +57 -36
  214. data/spec/fixtures/ssl/oid-key.pem +117 -0
  215. data/spec/fixtures/ssl/oid.pem +69 -0
  216. data/spec/fixtures/ssl/pluto-key.pem +107 -57
  217. data/spec/fixtures/ssl/pluto.pem +52 -30
  218. data/spec/fixtures/ssl/request-key.pem +107 -57
  219. data/spec/fixtures/ssl/request.pem +47 -26
  220. data/spec/fixtures/ssl/revoked-key.pem +107 -57
  221. data/spec/fixtures/ssl/revoked.pem +52 -30
  222. data/spec/fixtures/ssl/signed-key.pem +107 -57
  223. data/spec/fixtures/ssl/signed.pem +52 -30
  224. data/spec/fixtures/ssl/tampered-cert.pem +52 -30
  225. data/spec/fixtures/ssl/tampered-csr.pem +47 -26
  226. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
  227. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +107 -57
  228. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +50 -29
  229. data/spec/fixtures/ssl/unknown-ca-key.pem +107 -57
  230. data/spec/fixtures/ssl/unknown-ca.pem +55 -33
  231. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +9 -0
  232. data/spec/integration/application/agent_spec.rb +113 -37
  233. data/spec/integration/application/filebucket_spec.rb +16 -0
  234. data/spec/integration/application/module_spec.rb +21 -0
  235. data/spec/integration/application/plugin_spec.rb +1 -1
  236. data/spec/integration/application/resource_spec.rb +64 -0
  237. data/spec/integration/application/ssl_spec.rb +20 -0
  238. data/spec/integration/configurer_spec.rb +18 -2
  239. data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
  240. data/spec/integration/http/client_spec.rb +12 -0
  241. data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
  242. data/spec/integration/indirector/facts/facter_spec.rb +93 -39
  243. data/spec/integration/l10n/compiler_spec.rb +37 -0
  244. data/spec/integration/transaction/report_spec.rb +1 -1
  245. data/spec/integration/type/exec_spec.rb +70 -45
  246. data/spec/integration/type/file_spec.rb +2 -2
  247. data/spec/integration/type/package_spec.rb +6 -6
  248. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  249. data/spec/integration/util/windows/adsi_spec.rb +18 -0
  250. data/spec/integration/util/windows/principal_spec.rb +21 -0
  251. data/spec/integration/util/windows/process_spec.rb +1 -9
  252. data/spec/integration/util/windows/registry_spec.rb +6 -0
  253. data/spec/lib/puppet/test_ca.rb +7 -2
  254. data/spec/lib/puppet_spec/modules.rb +13 -2
  255. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  256. data/spec/lib/puppet_spec/settings.rb +1 -0
  257. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  258. data/spec/shared_contexts/l10n.rb +27 -0
  259. data/spec/spec_helper.rb +12 -11
  260. data/spec/unit/application/agent_spec.rb +7 -2
  261. data/spec/unit/application/apply_spec.rb +76 -56
  262. data/spec/unit/application/facts_spec.rb +482 -3
  263. data/spec/unit/application/resource_spec.rb +29 -0
  264. data/spec/unit/application/ssl_spec.rb +23 -0
  265. data/spec/unit/configurer/downloader_spec.rb +6 -0
  266. data/spec/unit/configurer_spec.rb +194 -56
  267. data/spec/unit/defaults_spec.rb +17 -0
  268. data/spec/unit/environments_spec.rb +348 -88
  269. data/spec/unit/face/facts_spec.rb +4 -0
  270. data/spec/unit/facter_impl_spec.rb +31 -0
  271. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  272. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  273. data/spec/unit/file_serving/configuration_spec.rb +14 -4
  274. data/spec/unit/file_serving/fileset_spec.rb +60 -0
  275. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  276. data/spec/unit/file_system_spec.rb +22 -0
  277. data/spec/unit/functions/assert_type_spec.rb +1 -1
  278. data/spec/unit/functions/empty_spec.rb +10 -0
  279. data/spec/unit/functions/logging_spec.rb +1 -0
  280. data/spec/unit/functions/lookup_spec.rb +64 -0
  281. data/spec/unit/functions/unwrap_spec.rb +8 -0
  282. data/spec/unit/functions4_spec.rb +2 -2
  283. data/spec/unit/gettext/config_spec.rb +12 -0
  284. data/spec/unit/http/service/compiler_spec.rb +131 -0
  285. data/spec/unit/indirector/catalog/compiler_spec.rb +101 -10
  286. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  287. data/spec/unit/indirector/facts/facter_spec.rb +95 -0
  288. data/spec/unit/indirector/indirection_spec.rb +10 -3
  289. data/spec/unit/indirector/resource/ral_spec.rb +40 -75
  290. data/spec/unit/interface/action_spec.rb +0 -9
  291. data/spec/unit/module_spec.rb +15 -1
  292. data/spec/unit/module_tool/applications/installer_spec.rb +51 -12
  293. data/spec/unit/network/authstore_spec.rb +0 -15
  294. data/spec/unit/network/formats_spec.rb +47 -0
  295. data/spec/unit/network/http/factory_spec.rb +19 -0
  296. data/spec/unit/parser/functions/fqdn_rand_spec.rb +15 -1
  297. data/spec/unit/parser/templatewrapper_spec.rb +12 -2
  298. data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
  299. data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
  300. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  301. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +18 -0
  302. data/spec/unit/pops/types/p_sensitive_type_spec.rb +18 -0
  303. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  304. data/spec/unit/provider/package/dnfmodule_spec.rb +10 -1
  305. data/spec/unit/provider/package/gem_spec.rb +1 -1
  306. data/spec/unit/provider/package/nim_spec.rb +42 -0
  307. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  308. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  309. data/spec/unit/provider/package/pip_spec.rb +38 -1
  310. data/spec/unit/provider/package/pkg_spec.rb +29 -4
  311. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  312. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  313. data/spec/unit/provider/parsedfile_spec.rb +10 -0
  314. data/spec/unit/provider/service/init_spec.rb +1 -0
  315. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  316. data/spec/unit/provider/service/openwrt_spec.rb +3 -1
  317. data/spec/unit/provider/service/systemd_spec.rb +54 -9
  318. data/spec/unit/provider/service/windows_spec.rb +202 -0
  319. data/spec/unit/provider/user/aix_spec.rb +100 -0
  320. data/spec/unit/provider/user/directoryservice_spec.rb +68 -36
  321. data/spec/unit/provider/user/useradd_spec.rb +61 -5
  322. data/spec/unit/provider_spec.rb +4 -4
  323. data/spec/unit/puppet_spec.rb +12 -4
  324. data/spec/unit/resource/catalog_spec.rb +1 -1
  325. data/spec/unit/settings_spec.rb +97 -56
  326. data/spec/unit/ssl/certificate_request_spec.rb +8 -14
  327. data/spec/unit/ssl/state_machine_spec.rb +19 -5
  328. data/spec/unit/transaction/additional_resource_generator_spec.rb +0 -2
  329. data/spec/unit/transaction_spec.rb +18 -20
  330. data/spec/unit/type/exec_spec.rb +76 -29
  331. data/spec/unit/type/file/selinux_spec.rb +3 -3
  332. data/spec/unit/type/file/source_spec.rb +4 -4
  333. data/spec/unit/type/service_spec.rb +86 -188
  334. data/spec/unit/type/tidy_spec.rb +24 -7
  335. data/spec/unit/type/user_spec.rb +45 -0
  336. data/spec/unit/type_spec.rb +2 -2
  337. data/spec/unit/util/logging_spec.rb +2 -0
  338. data/spec/unit/util/selinux_spec.rb +87 -16
  339. data/spec/unit/util/windows/sid_spec.rb +41 -0
  340. data/tasks/generate_cert_fixtures.rake +12 -3
  341. data/tasks/parallel.rake +3 -3
  342. metadata +59 -101
  343. data/ext/README.environment +0 -8
  344. data/ext/dbfix.sql +0 -132
  345. data/ext/debian/README.Debian +0 -8
  346. data/ext/debian/README.source +0 -2
  347. data/ext/debian/TODO.Debian +0 -1
  348. data/ext/debian/changelog.erb +0 -1122
  349. data/ext/debian/compat +0 -1
  350. data/ext/debian/control +0 -144
  351. data/ext/debian/copyright +0 -339
  352. data/ext/debian/docs +0 -1
  353. data/ext/debian/fileserver.conf +0 -41
  354. data/ext/debian/puppet-common.dirs +0 -13
  355. data/ext/debian/puppet-common.install +0 -3
  356. data/ext/debian/puppet-common.lintian-overrides +0 -5
  357. data/ext/debian/puppet-common.manpages +0 -28
  358. data/ext/debian/puppet-common.postinst +0 -35
  359. data/ext/debian/puppet-common.postrm +0 -33
  360. data/ext/debian/puppet-el.dirs +0 -1
  361. data/ext/debian/puppet-el.emacsen-install +0 -25
  362. data/ext/debian/puppet-el.emacsen-remove +0 -11
  363. data/ext/debian/puppet-el.emacsen-startup +0 -9
  364. data/ext/debian/puppet-el.install +0 -1
  365. data/ext/debian/puppet-testsuite.install +0 -2
  366. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  367. data/ext/debian/puppet.lintian-overrides +0 -3
  368. data/ext/debian/puppet.logrotate +0 -20
  369. data/ext/debian/puppet.postinst +0 -20
  370. data/ext/debian/puppet.postrm +0 -20
  371. data/ext/debian/puppet.preinst +0 -20
  372. data/ext/debian/puppetmaster-common.install +0 -2
  373. data/ext/debian/puppetmaster-common.manpages +0 -2
  374. data/ext/debian/puppetmaster-common.postinst +0 -6
  375. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  376. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  377. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  378. data/ext/debian/puppetmaster.README.debian +0 -17
  379. data/ext/debian/puppetmaster.default +0 -14
  380. data/ext/debian/puppetmaster.init +0 -137
  381. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  382. data/ext/debian/puppetmaster.postinst +0 -20
  383. data/ext/debian/puppetmaster.postrm +0 -5
  384. data/ext/debian/puppetmaster.preinst +0 -22
  385. data/ext/debian/rules +0 -132
  386. data/ext/debian/source/format +0 -1
  387. data/ext/debian/source/options +0 -1
  388. data/ext/debian/vim-puppet.README.Debian +0 -13
  389. data/ext/debian/vim-puppet.dirs +0 -5
  390. data/ext/debian/vim-puppet.yaml +0 -7
  391. data/ext/debian/watch +0 -2
  392. data/ext/freebsd/puppetd +0 -26
  393. data/ext/freebsd/puppetmasterd +0 -26
  394. data/ext/gentoo/conf.d/puppet +0 -5
  395. data/ext/gentoo/conf.d/puppetmaster +0 -12
  396. data/ext/gentoo/init.d/puppet +0 -38
  397. data/ext/gentoo/init.d/puppetmaster +0 -51
  398. data/ext/gentoo/puppet/fileserver.conf +0 -41
  399. data/ext/ips/puppet-agent +0 -44
  400. data/ext/ips/puppet-master +0 -44
  401. data/ext/ips/puppet.p5m.erb +0 -12
  402. data/ext/ips/puppetagent.xml +0 -42
  403. data/ext/ips/puppetmaster.xml +0 -42
  404. data/ext/ips/rules +0 -19
  405. data/ext/ips/transforms +0 -34
  406. data/ext/ldap/puppet.schema +0 -24
  407. data/ext/logcheck/puppet +0 -23
  408. data/ext/osx/file_mapping.yaml +0 -33
  409. data/ext/osx/postflight.erb +0 -109
  410. data/ext/osx/preflight.erb +0 -52
  411. data/ext/osx/prototype.plist.erb +0 -38
  412. data/ext/redhat/fileserver.conf +0 -41
  413. data/ext/redhat/logrotate +0 -21
  414. data/ext/redhat/puppet.spec.erb +0 -842
  415. data/ext/redhat/server.init +0 -128
  416. data/ext/redhat/server.sysconfig +0 -13
  417. data/ext/solaris/pkginfo +0 -6
  418. data/ext/solaris/smf/puppetd.xml +0 -77
  419. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  420. data/ext/solaris/smf/svc-puppetd +0 -71
  421. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  422. data/ext/suse/puppet.spec +0 -310
  423. data/ext/suse/server.init +0 -173
  424. data/ext/yaml_nodes.rb +0 -105
  425. data/spec/lib/matchers/include.rb +0 -27
  426. data/spec/lib/matchers/include_spec.rb +0 -32
  427. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -4,14 +4,22 @@
4
4
  # the second containing the rest.
5
5
  Puppet::Functions.create_function(:partition) do
6
6
  # @param collection A collection of things to partition.
7
- # @example Partition array of empty strings, results in e.g. [[''], [b, c]]
7
+ # @example Partition array of empty strings, results in e.g. `[[''], [b, c]]`
8
+ # ```puppet
8
9
  # ['', b, c].partition |$s| { $s.empty }
9
- # @example Partition array of strings using index, results in e.g. [['', 'ab'], ['b']]
10
+ # ```
11
+ # @example Partition array of strings using index, results in e.g. `[['', 'ab'], ['b']]`
12
+ # ```puppet
10
13
  # ['', b, ab].partition |$i, $s| { $i == 2 or $s.empty }
11
- # @example Partition hash of strings by key-value pair, results in e.g. [[['b', []]], [['a', [1, 2]]]]
14
+ # ```
15
+ # @example Partition hash of strings by key-value pair, results in e.g. `[[['b', []]], [['a', [1, 2]]]]`
16
+ # ```puppet
12
17
  # { a => [1, 2], b => [] }.partition |$kv| { $kv[1].empty }
13
- # @example Partition hash of strings by key and value, results in e.g. [[['b', []]], [['a', [1, 2]]]]
18
+ # ```
19
+ # @example Partition hash of strings by key and value, results in e.g. `[[['b', []]], [['a', [1, 2]]]]`
20
+ # ```puppet
14
21
  # { a => [1, 2], b => [] }.partition |$k, $v| { $v.empty }
22
+ # ```
15
23
  dispatch :partition_1 do
16
24
  required_param 'Collection', :collection
17
25
  block_param 'Callable[1,1]', :block
@@ -4,13 +4,13 @@
4
4
  # The relationship metaparameters work well for specifying relationships
5
5
  # between individual resources, but they can be clumsy for specifying
6
6
  # relationships between classes. This function is a superset of the
7
- # 'include' function, adding a class relationship so that the requiring
7
+ # `include` function, adding a class relationship so that the requiring
8
8
  # class depends on the required class.
9
9
  #
10
- # Warning: using require in place of include can lead to unwanted dependency cycles.
10
+ # Warning: using `require` in place of `include` can lead to unwanted dependency cycles.
11
11
  #
12
- # For instance the following manifest, with 'require' instead of 'include' would produce a nasty
13
- # dependence cycle, because notify imposes a before between File[/foo] and Service[foo]:
12
+ # For instance, the following manifest, with `require` instead of `include`, would produce a nasty
13
+ # dependence cycle, because `notify` imposes a `before` between `File[/foo]` and `Service[foo]`:
14
14
  #
15
15
  # ```puppet
16
16
  # class myservice {
@@ -32,7 +32,7 @@
32
32
  # resource and relationship expressions.
33
33
  #
34
34
  # - Since 4.0.0 Class and Resource types, absolute names
35
- # - Since 4.7.0 Returns an Array[Type[Class]] with references to the required classes
35
+ # - Since 4.7.0 Returns an `Array[Type[Class]]` with references to the required classes
36
36
  #
37
37
  Puppet::Functions.create_function(:require, Puppet::Functions::InternalFunction) do
38
38
  dispatch :require_impl do
@@ -2,9 +2,9 @@
2
2
  # Please note: This function is based on Ruby String comparison and as such may not be entirely UTF8 compatible.
3
3
  # To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.
4
4
  #
5
- # This function is compatible with the function sort() in stdlib.
5
+ # This function is compatible with the function `sort()` in `stdlib`.
6
6
  # * Comparison of characters in a string always uses a system locale and may not be what is expected for a particular locale
7
- # * Sorting is based on Ruby's <=> operator unless a lambda is given that performs the comparison.
7
+ # * Sorting is based on Ruby's `<=>` operator unless a lambda is given that performs the comparison.
8
8
  # * comparison of strings is case dependent (use lambda with `compare($a,$b)` to ignore case)
9
9
  # * comparison of mixed data types raises an error (if there is the need to sort mixed data types use a lambda)
10
10
  #
@@ -49,7 +49,7 @@
49
49
  # }
50
50
  # })
51
51
  # ```
52
- # Would notice [2,3,'a','b']
52
+ # Would notice `[2,3,'a','b']`
53
53
  #
54
54
  # @since 6.0.0 - supporting a lambda to do compare
55
55
  #
@@ -105,6 +105,7 @@
105
105
  # **Seconds since the Epoch:**
106
106
  #
107
107
  # | Format | Meaning |
108
+ # | ------ | ------- |
108
109
  # | s | Number of seconds since 1970-01-01 00:00:00 UTC. |
109
110
  #
110
111
  # **Literal string:**
@@ -6,13 +6,13 @@
6
6
  #
7
7
  # 1. An `Array`, `Hash`, `Iterator`, or `Object` that the function will iterate over.
8
8
  # 2. An optional hash with the options:
9
- # * `include_containers` => `Optional[Boolean]` # default true - if containers should be given to the lambda
10
- # * `include_values` => `Optional[Boolean]` # default true - if non containers should be given to the lambda
11
- # * `include_root` => `Optional[Boolean]` # default true - if the root container should be given to the lambda
9
+ # * `include_containers` => `Optional[Boolean]` # default `true` - if containers should be given to the lambda
10
+ # * `include_values` => `Optional[Boolean]` # default `true` - if non containers should be given to the lambda
11
+ # * `include_root` => `Optional[Boolean]` # default `true` - if the root container should be given to the lambda
12
12
  # * `container_type` => `Optional[Type[Variant[Array, Hash, Object]]]` # a type that determines what a container is - can only
13
13
  # be set to a type that matches the default `Variant[Array, Hash, Object]`.
14
14
  # * `order` => `Enum[depth_first, breadth_first]` # default ´depth_first`, the order in which elements are visited
15
- # * `include_refs` => Optional[Boolean] # default `false`, if attributes in objects marked as bing of `reference` kind
15
+ # * `include_refs` => `Optional[Boolean]` # default `false`, if attributes in objects marked as bing of `reference` kind
16
16
  # should be included.
17
17
  # 3. An optional lambda, which the function calls for each element in the first argument. It must
18
18
  # accept one or two arguments; either `$path`, and `$value`, or just `$value`.
@@ -46,14 +46,12 @@
46
46
  # [1, [2, 3], 4]
47
47
  # ```
48
48
  #
49
- # Results in:
50
- #
51
- # If containers are skipped:
49
+ # If containers are skipped, results in:
52
50
  #
53
51
  # * `depth_first` order `1`, `2`, `3`, `4`
54
52
  # * `breadth_first` order `1`, `4`,`2`, `3`
55
53
  #
56
- # If containers and root, are included:
54
+ # If containers and root are included, results in:
57
55
  #
58
56
  # * `depth_first` order `[1, [2, 3], 4]`, `1`, `[2, 3]`, `2`, `3`, `4`
59
57
  # * `breadth_first` order `[1, [2, 3], 4]`, `1`, `[2, 3]`, `4`, `2`, `3`
@@ -96,7 +94,7 @@
96
94
  #
97
95
  # Any Puppet Type system data type can be used to filter what is
98
96
  # considered to be a container, but it must be a narrower type than one of
99
- # the default Array, Hash, Object types - for example it is not possible to make a
97
+ # the default `Array`, `Hash`, `Object` types - for example it is not possible to make a
100
98
  # `String` be a container type.
101
99
  #
102
100
  # @example Only `Array` as container type
@@ -35,10 +35,10 @@
35
35
  #
36
36
  # Would notice the four values:
37
37
  #
38
- # 1. 'Array[Numeric]'
39
- # 2. 'Array[Numeric, 2, 2]'
40
- # 3. 'Tuple[Float[3.14], Integer[42,42]]]'
41
- # 4. 'Tuple[Float[3.14], Integer[42,42]]]'
38
+ # 1. `Array[Numeric]`
39
+ # 2. `Array[Numeric, 2, 2]`
40
+ # 3. `Tuple[Float[3.14], Integer[42,42]]]`
41
+ # 4. `Tuple[Float[3.14], Integer[42,42]]]`
42
42
  #
43
43
  # @since 4.4.0
44
44
  #
@@ -1,4 +1,5 @@
1
1
  # Unwraps a Sensitive value and returns the wrapped object.
2
+ # Returns the Value itself, if it is not Sensitive.
2
3
  #
3
4
  # @example Usage of unwrap
4
5
  #
@@ -28,12 +29,17 @@
28
29
  # @since 4.0.0
29
30
  #
30
31
  Puppet::Functions.create_function(:unwrap) do
31
- dispatch :unwrap do
32
+ dispatch :from_sensitive do
32
33
  param 'Sensitive', :arg
33
34
  optional_block_param
34
35
  end
35
36
 
36
- def unwrap(arg)
37
+ dispatch :from_any do
38
+ param 'Any', :arg
39
+ optional_block_param
40
+ end
41
+
42
+ def from_sensitive(arg)
37
43
  unwrapped = arg.unwrap
38
44
  if block_given?
39
45
  yield(unwrapped)
@@ -41,4 +47,13 @@ Puppet::Functions.create_function(:unwrap) do
41
47
  unwrapped
42
48
  end
43
49
  end
50
+
51
+ def from_any(arg)
52
+ unwrapped = arg
53
+ if block_given?
54
+ yield(unwrapped)
55
+ else
56
+ unwrapped
57
+ end
58
+ end
44
59
  end
@@ -22,14 +22,14 @@
22
22
  # 'hello'.upcase()
23
23
  # upcase('hello')
24
24
  # ```
25
- # Would both result in "HELLO"
25
+ # Would both result in `"HELLO"`
26
26
  #
27
27
  # @example Converting an Array to upper case
28
28
  # ```puppet
29
29
  # ['a', 'b'].upcase()
30
30
  # upcase(['a', 'b'])
31
31
  # ```
32
- # Would both result in ['A', 'B']
32
+ # Would both result in `['A', 'B']`
33
33
  #
34
34
  # @example Converting a Hash to upper case
35
35
  # ```puppet
@@ -54,7 +54,7 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
54
54
  end
55
55
 
56
56
  # Return the first simple service status endpoint we can connect to
57
- @server_list_setting.value.each do |server|
57
+ @server_list_setting.value.each_with_index do |server, index|
58
58
  host = server[0]
59
59
  port = server[1] || @default_port
60
60
 
@@ -64,10 +64,21 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
64
64
  @resolved_url = service.url
65
65
  return Puppet::HTTP::Service.create_service(@client, session, name, @resolved_url.host, @resolved_url.port)
66
66
  rescue Puppet::HTTP::ResponseError => detail
67
- Puppet.log_exception(detail, _("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
68
- { host: service.url.host, port: service.url.port, code: detail.response.code, reason: detail.response.reason })
67
+ if index < @server_list_setting.value.length - 1
68
+ Puppet.warning(_("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
69
+ { host: service.url.host, port: service.url.port, code: detail.response.code, reason: detail.response.reason } +
70
+ ' ' + _("Trying with next server from server_list."))
71
+ else
72
+ Puppet.log_exception(detail, _("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
73
+ { host: service.url.host, port: service.url.port, code: detail.response.code, reason: detail.response.reason })
74
+ end
69
75
  rescue Puppet::HTTP::HTTPError => detail
70
- Puppet.log_exception(detail, _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail})
76
+ if index < @server_list_setting.value.length - 1
77
+ Puppet.warning(_("Unable to connect to server from server_list setting: %{detail}") % {detail: detail} +
78
+ ' ' + _("Trying with next server from server_list."))
79
+ else
80
+ Puppet.log_exception(detail, _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail})
81
+ end
71
82
  end
72
83
  end
73
84
 
@@ -69,6 +69,10 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
69
69
  # @param [String] environment The name of the environment we are operating in
70
70
  # @param [String] configured_environment Optional, the name of the configured
71
71
  # environment. If unset, `environment` is used.
72
+ # @param [Boolean] check_environment If true, request that the server check if
73
+ # our `environment` matches the server-specified environment. If they do not
74
+ # match, then the server may return an empty catalog in the server-specified
75
+ # environment.
72
76
  # @param [String] transaction_uuid An agent generated transaction uuid, used
73
77
  # for connecting catalogs and reports.
74
78
  # @param [String] job_uuid A unique job identifier defined when the orchestrator
@@ -85,7 +89,7 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
85
89
  # containing the request response and the deserialized catalog returned by
86
90
  # the server
87
91
  #
88
- def post_catalog(name, facts:, environment:, configured_environment: nil, transaction_uuid: nil, job_uuid: nil, static_catalog: true, checksum_type: Puppet[:supported_checksum_types])
92
+ def post_catalog(name, facts:, environment:, configured_environment: nil, check_environment: false, transaction_uuid: nil, job_uuid: nil, static_catalog: true, checksum_type: Puppet[:supported_checksum_types])
89
93
  if Puppet[:preferred_serialization_format] == "pson"
90
94
  formatter = Puppet::Network::FormatHandler.format_for(:pson)
91
95
  # must use 'pson' instead of 'text/pson'
@@ -103,6 +107,7 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
103
107
  facts: Puppet::Util.uri_query_encode(facts_as_string),
104
108
  environment: environment,
105
109
  configured_environment: configured_environment || environment,
110
+ check_environment: !!check_environment,
106
111
  transaction_uuid: transaction_uuid,
107
112
  job_uuid: job_uuid,
108
113
  static_catalog: static_catalog,
@@ -129,6 +134,75 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
129
134
  [response, deserialize(response, Puppet::Resource::Catalog)]
130
135
  end
131
136
 
137
+ #
138
+ # @api private
139
+ #
140
+ # Submit a POST request to request a catalog to the server using v4 endpoint
141
+ #
142
+ # @param [String] certname The name of the node for which to compile the catalog.
143
+ # @param [Hash] persistent A hash containing two required keys, facts and catalog,
144
+ # which when set to true will cause the facts and reports to be stored in
145
+ # PuppetDB, or discarded if set to false.
146
+ # @param [String] environment The name of the environment for which to compile the catalog.
147
+ # @param [Hash] facts A hash with a required values key, containing a hash of all the
148
+ # facts for the node. If not provided, Puppet will attempt to fetch facts for the node
149
+ # from PuppetDB.
150
+ # @param [Hash] trusted_facts A hash with a required values key containing a hash of
151
+ # the trusted facts for a node
152
+ # @param [String] transaction_uuid The id for tracking the catalog compilation and
153
+ # report submission.
154
+ # @param [String] job_id The id of the orchestrator job that triggered this run.
155
+ # @param [Hash] options A hash of options beyond direct input to catalogs. Options:
156
+ # - prefer_requested_environment Whether to always override a node's classified
157
+ # environment with the one supplied in the request. If this is true and no environment
158
+ # is supplied, fall back to the classified environment, or finally, 'production'.
159
+ # - capture_logs Whether to return the errors and warnings that occurred during
160
+ # compilation alongside the catalog in the response body.
161
+ # - log_level The logging level to use during the compile when capture_logs is true.
162
+ # Options are 'err', 'warning', 'info', and 'debug'.
163
+ #
164
+ # @return [Array<Puppet::HTTP::Response, Puppet::Resource::Catalog, Array<String>>] An array
165
+ # containing the request response, the deserialized catalog returned by
166
+ # the server and array containing logs (log array will be empty if capture_logs is false)
167
+ #
168
+ def post_catalog4(certname, persistence:, environment:, facts: nil, trusted_facts: nil, transaction_uuid: nil, job_id: nil, options: nil)
169
+ unless persistence.is_a?(Hash) && (missing = [:facts, :catalog] - persistence.keys.map(&:to_sym)).empty?
170
+ raise ArgumentError.new("The 'persistence' hash is missing the keys: #{missing.join(', ')}")
171
+ end
172
+ raise ArgumentError.new("Facts must be a Hash not a #{facts.class}") unless facts.nil? || facts.is_a?(Hash)
173
+ body = {
174
+ certname: certname,
175
+ persistence: persistence,
176
+ environment: environment,
177
+ transaction_uuid: transaction_uuid,
178
+ job_id: job_id,
179
+ options: options
180
+ }
181
+ body[:facts] = { values: facts } unless facts.nil?
182
+ body[:trusted_facts] = { values: trusted_facts } unless trusted_facts.nil?
183
+ headers = add_puppet_headers(
184
+ 'Accept' => get_mime_types(Puppet::Resource::Catalog).join(', '),
185
+ 'Content-Type' => 'application/json'
186
+ )
187
+
188
+ url = URI::HTTPS.build(host: @url.host, port: @url.port, path: Puppet::Util.uri_encode("/puppet/v4/catalog"))
189
+ response = @client.post(
190
+ url,
191
+ body.to_json,
192
+ headers: headers
193
+ )
194
+ process_response(response)
195
+ begin
196
+ response_body = JSON.parse(response.body)
197
+ catalog = Puppet::Resource::Catalog.from_data_hash(response_body['catalog'])
198
+ rescue => err
199
+ raise Puppet::HTTP::SerializationError.new("Failed to deserialize catalog from puppetserver response: #{err.message}", err)
200
+ end
201
+
202
+ logs = response_body['logs'] || []
203
+ [response, catalog, logs]
204
+ end
205
+
132
206
  #
133
207
  # @api private
134
208
  #
@@ -106,7 +106,7 @@ class Puppet::HTTP::Service::FileServer < Puppet::HTTP::Service
106
106
  # An array with the request response and an array of the deserialized
107
107
  # metadata for each file returned from the server
108
108
  #
109
- def get_file_metadatas(path: nil, environment:, recurse: :false, recurselimit: nil, ignore: nil, links: :manage, checksum_type: Puppet[:digest_algorithm], source_permissions: :ignore)
109
+ def get_file_metadatas(path: nil, environment:, recurse: :false, recurselimit: nil, max_files: nil, ignore: nil, links: :manage, checksum_type: Puppet[:digest_algorithm], source_permissions: :ignore)
110
110
  validate_path(path)
111
111
 
112
112
  headers = add_puppet_headers('Accept' => get_mime_types(Puppet::FileServing::Metadata).join(', '))
@@ -117,6 +117,7 @@ class Puppet::HTTP::Service::FileServer < Puppet::HTTP::Service
117
117
  params: {
118
118
  recurse: recurse,
119
119
  recurselimit: recurselimit,
120
+ max_files: max_files,
120
121
  ignore: ignore,
121
122
  links: links,
122
123
  checksum_type: checksum_type,
@@ -53,8 +53,22 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
53
53
  node.trusted_data = Puppet.lookup(:trusted_information) { Puppet::Context::TrustedInformation.local(node) }.to_h
54
54
 
55
55
  if node.environment
56
+ # If the requested environment doesn't match the server specified environment,
57
+ # as determined by the node terminus, and the request wants us to check for an
58
+ # environment mismatch, then return an empty catalog with the server-specified
59
+ # enviroment.
60
+ if request.remote? && request.options[:check_environment] && node.environment != request.environment
61
+ return Puppet::Resource::Catalog.new(node.name, node.environment)
62
+ end
63
+
56
64
  node.environment.with_text_domain do
57
- compile(node, request.options)
65
+ envs = Puppet.lookup(:environments)
66
+ envs.guard(node.environment.name)
67
+ begin
68
+ compile(node, request.options)
69
+ ensure
70
+ envs.unguard(node.environment.name)
71
+ end
58
72
  end
59
73
  else
60
74
  compile(node, request.options)
@@ -78,6 +92,10 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
78
92
  Puppet.run_mode.server?
79
93
  end
80
94
 
95
+ def require_environment?
96
+ false
97
+ end
98
+
81
99
  private
82
100
 
83
101
  # @param facts [String] facts in a wire format for decoding
@@ -154,7 +172,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
154
172
  location = Puppet::Module::FILETYPES['files']
155
173
 
156
174
  !!(source_as_uri.path =~ /^\/modules\// &&
157
- metadata.full_path =~ /#{environment_path}[^\/]+\/[^\/]+\/#{location}\/.+/)
175
+ metadata.full_path =~ /#{environment_path}\/[^\/]+\/[^\/]+\/#{location}\/.+/)
158
176
  end
159
177
 
160
178
  # Helper method to log file resources that could not be inlined because they
@@ -173,7 +191,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
173
191
  # Inline file metadata for static catalogs
174
192
  # Initially restricted to files sourced from codedir via puppet:/// uri.
175
193
  def inline_metadata(catalog, checksum_type)
176
- environment_path = Pathname.new File.join(Puppet[:environmentpath], catalog.environment, "")
194
+ environment_path = Pathname.new File.join(Puppet[:environmentpath], catalog.environment)
177
195
  environment_path = Puppet::Environments::Directories.real_path(environment_path)
178
196
  list_of_resources = catalog.resources.find_all { |res| res.type == "File" }
179
197
 
@@ -194,6 +212,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
194
212
  :source_permissions => resource[:source_permissions] ? resource[:source_permissions].to_sym : :ignore,
195
213
  :recurse => true,
196
214
  :recurselimit => resource[:recurselimit],
215
+ :max_files => resource[:max_files],
197
216
  :ignore => resource[:ignore],
198
217
  }
199
218
 
@@ -414,17 +433,17 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
414
433
  "serverip" => "ipaddress",
415
434
  "serverip6" => "ipaddress6"
416
435
  }.each do |var, fact|
417
- value = Facter.value(fact)
436
+ value = Puppet.runtime[:facter].value(fact)
418
437
  if !value.nil?
419
438
  @server_facts[var] = value
420
439
  end
421
440
  end
422
441
 
423
442
  if @server_facts["servername"].nil?
424
- host = Facter.value(:hostname)
443
+ host = Puppet.runtime[:facter].value(:hostname)
425
444
  if host.nil?
426
445
  Puppet.warning _("Could not retrieve fact servername")
427
- elsif domain = Facter.value(:domain) #rubocop:disable Lint/AssignmentInCondition
446
+ elsif domain = Puppet.runtime[:facter].value(:domain) #rubocop:disable Lint/AssignmentInCondition
428
447
  @server_facts["servername"] = [host, domain].join(".")
429
448
  else
430
449
  @server_facts["servername"] = host
@@ -20,6 +20,7 @@ class Puppet::Resource::Catalog::Rest < Puppet::Indirector::REST
20
20
  facts: request.options[:facts_for_catalog],
21
21
  environment: request.environment.to_s,
22
22
  configured_environment: request.options[:configured_environment],
23
+ check_environment: request.options[:check_environment],
23
24
  transaction_uuid: request.options[:transaction_uuid],
24
25
  job_uuid: request.options[:job_id],
25
26
  static_catalog: request.options[:static_catalog],
@@ -20,10 +20,10 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
20
20
 
21
21
  # Lookup a host's facts up in Facter.
22
22
  def find(request)
23
- Facter.reset
23
+ Puppet.runtime[:facter].reset
24
24
 
25
25
  # Note: we need to setup puppet's external search paths before adding the puppetversion
26
- # fact. This is because in Facter 2.x, the first `Facter.add` causes Facter to create
26
+ # fact. This is because in Facter 2.x, the first `Puppet.runtime[:facter].add` causes Facter to create
27
27
  # its directory loaders which cannot be changed, meaning other external facts won't
28
28
  # be resolved. (PUP-4607)
29
29
  self.class.setup_external_search_paths(request)
@@ -32,8 +32,14 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
32
32
  # Initialize core Puppet facts, such as puppetversion
33
33
  Puppet.initialize_facts
34
34
 
35
- result = Puppet::Node::Facts.new(request.key, Facter.to_hash)
36
- result.add_local_facts
35
+ result = if request.options[:resolve_options]
36
+ raise(Puppet::Error, _("puppet facts show requires version 4.0.40 or greater of Facter.")) unless Facter.respond_to?(:resolve)
37
+ find_with_options(request)
38
+ else
39
+ Puppet::Node::Facts.new(request.key, Puppet.runtime[:facter].to_hash)
40
+ end
41
+
42
+ result.add_local_facts unless request.options[:resolve_options]
37
43
  result.sanitize
38
44
  result
39
45
  end
@@ -61,8 +67,8 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
61
67
 
62
68
  true
63
69
  end
64
-
65
- Facter.search(*dirs)
70
+ dirs << request.options[:custom_dir] if request.options[:custom_dir]
71
+ Puppet.runtime[:facter].search(*dirs)
66
72
  end
67
73
 
68
74
  def self.setup_external_search_paths(request)
@@ -83,6 +89,21 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
83
89
  dirs << dir
84
90
  end
85
91
 
86
- Facter.search_external dirs
92
+ dirs << request.options[:external_dir] if request.options[:external_dir]
93
+ Puppet.runtime[:facter].search_external dirs
94
+ end
95
+
96
+ private
97
+
98
+ def find_with_options(request)
99
+ options = request.options
100
+ options_for_facter = String.new
101
+ options_for_facter += options[:user_query].join(' ')
102
+ options_for_facter += " --config #{options[:config_file]}" if options[:config_file]
103
+ options_for_facter += " --show-legacy" if options[:show_legacy]
104
+ options_for_facter += " --no-block" if options[:no_block] == false
105
+ options_for_facter += " --no-cache" if options[:no_cache] == false
106
+
107
+ Puppet::Node::Facts.new(request.key, Puppet.runtime[:facter].resolve(options_for_facter))
87
108
  end
88
109
  end
@@ -46,6 +46,7 @@ class Puppet::Indirector::FileMetadata::Rest < Puppet::Indirector::REST
46
46
  environment: request.environment.to_s,
47
47
  recurse: request.options[:recurse],
48
48
  recurselimit: request.options[:recurselimit],
49
+ max_files: request.options[:max_files],
49
50
  ignore: request.options[:ignore],
50
51
  links: request.options[:links],
51
52
  checksum_type: request.options[:checksum_type],
@@ -313,7 +313,7 @@ class Puppet::Indirector::Indirection
313
313
  request = request(:save, key, instance, options)
314
314
  terminus = prepare(request)
315
315
 
316
- result = terminus.save(request)
316
+ result = terminus.save(request) if !request.ignore_terminus?
317
317
 
318
318
  # If caching is enabled, save our document there
319
319
  cache.save(request) if cache? && !request.ignore_cache_save?
@@ -24,7 +24,12 @@ class Puppet::Resource::Ral < Puppet::Indirector::Code
24
24
  type(request).instances.map do |res|
25
25
  res.to_resource
26
26
  end.find_all do |res|
27
- conditions.all? {|property, value| res.to_resource[property].to_s == value.to_s}
27
+ conditions.all? do |property, value|
28
+ # even though `res` is an instance of Puppet::Resource, calling
29
+ # `res[:name]` on it returns nil, and for some reason it is necessary
30
+ # to invoke the Puppet::Resource#copy_as_resource copy constructor...
31
+ res.copy_as_resource[property].to_s == value.to_s
32
+ end
28
33
  end.sort_by(&:title)
29
34
  end
30
35
 
@@ -143,6 +143,10 @@ class Puppet::Indirector::Terminus
143
143
  self.class.name
144
144
  end
145
145
 
146
+ def require_environment?
147
+ true
148
+ end
149
+
146
150
  def allow_remote_requests?
147
151
  true
148
152
  end
@@ -76,6 +76,7 @@ class Puppet::Interface
76
76
  s.text(" ")
77
77
 
78
78
  options.each do |option|
79
+ next if option == :extra
79
80
  option = get_option(option)
80
81
  wrap = option.required? ? %w{ < > } : %w{ [ ] }
81
82
 
@@ -50,7 +50,6 @@ class Puppet::Module
50
50
  RESERVED_DATA_TYPES = %w{any array boolean catalogentry class collection
51
51
  callable data default enum float hash integer numeric optional pattern
52
52
  resource runtime scalar string struct tuple type undef variant}
53
- MOUNTS = %w[lib files plans]
54
53
 
55
54
  def self.is_plan_name?(name)
56
55
  return true if name =~ /^[a-z][a-z0-9_]*$/
@@ -45,7 +45,7 @@ class Puppet::Module
45
45
  end
46
46
 
47
47
  FORBIDDEN_EXTENSIONS = %w{.conf .md}
48
- MOUNTS = %w[lib files tasks]
48
+ MOUNTS = %w[files lib scripts tasks]
49
49
 
50
50
  def self.is_task_name?(name)
51
51
  return true if name =~ /^[a-z][a-z0-9_]*$/
data/lib/puppet/module.rb CHANGED
@@ -25,6 +25,7 @@ class Puppet::Module
25
25
  "plugins" => "lib",
26
26
  "pluginfacts" => "facts.d",
27
27
  "locales" => "locales",
28
+ "scripts" => "scripts",
28
29
  }
29
30
 
30
31
  # Find and return the +module+ that +path+ belongs to. If +path+ is
@@ -59,6 +59,10 @@ module Puppet::ModuleTool
59
59
  results = { :action => :install, :module_name => name, :module_version => version }
60
60
 
61
61
  begin
62
+ if !@local_tarball && name !~ /-/
63
+ raise InvalidModuleNameError.new(module_name: @name, suggestion: "puppetlabs-#{@name}", action: :install)
64
+ end
65
+
62
66
  installed_module = installed_modules[name]
63
67
  if installed_module
64
68
  unless forced?
@@ -134,7 +138,7 @@ module Puppet::ModuleTool
134
138
  rescue SemanticPuppet::Dependency::UnsatisfiableGraph => e
135
139
  unsatisfied = nil
136
140
 
137
- if e.respond_to?(:unsatisfied)
141
+ if e.respond_to?(:unsatisfied) && e.unsatisfied
138
142
  constraints = {}
139
143
  # If the module we're installing satisfies all its
140
144
  # dependencies, but would break an already installed
@@ -160,8 +164,12 @@ module Puppet::ModuleTool
160
164
  # If the module fails to satisfy one of its
161
165
  # dependencies, show the unsatisfiable module
162
166
  else
163
- unsatisfied_range = graph.dependencies[name].max.constraints[e.unsatisfied].first[1]
164
- constraints[e.unsatisfied] = unsatisfied_range
167
+ dep_constraints = graph.dependencies[name].max.constraints
168
+
169
+ if dep_constraints.key?(e.unsatisfied)
170
+ unsatisfied_range = dep_constraints[e.unsatisfied].first[1]
171
+ constraints[e.unsatisfied] = unsatisfied_range
172
+ end
165
173
  end
166
174
 
167
175
  installed_module = @environment.module_by_forge_name(e.unsatisfied.tr('-', '/'))
@@ -171,7 +179,7 @@ module Puppet::ModuleTool
171
179
  :name => e.unsatisfied,
172
180
  :constraints => constraints,
173
181
  :current_version => current_version
174
- }
182
+ } if constraints.any?
175
183
  end
176
184
 
177
185
  raise NoVersionsSatisfyError, results.merge(
@@ -89,7 +89,7 @@ module Puppet::ModuleTool
89
89
  mod = @installed.first
90
90
 
91
91
  unless @ignore_changes
92
- raise _("Either the `--ignore_changes` or `--force` argument must be specified to uninstall modules when running in FIPS mode.") if Facter.value(:fips_enabled)
92
+ raise _("Either the `--ignore_changes` or `--force` argument must be specified to uninstall modules when running in FIPS mode.") if Puppet.runtime[:facter].value(:fips_enabled)
93
93
 
94
94
  changes = begin
95
95
  Puppet::ModuleTool::Applications::Checksummer.run(mod.path)