puppet 6.17.0-x86-mingw32 → 6.21.0-x86-mingw32

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

Potentially problematic release.


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

Files changed (401) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +38 -34
  5. data/README.md +1 -2
  6. data/Rakefile +4 -12
  7. data/lib/puppet/agent/locker.rb +0 -7
  8. data/lib/puppet/application.rb +10 -6
  9. data/lib/puppet/application/agent.rb +9 -3
  10. data/lib/puppet/application/apply.rb +20 -21
  11. data/lib/puppet/application/device.rb +1 -0
  12. data/lib/puppet/application/doc.rb +1 -1
  13. data/lib/puppet/application/filebucket.rb +2 -2
  14. data/lib/puppet/application/lookup.rb +16 -4
  15. data/lib/puppet/application/script.rb +1 -0
  16. data/lib/puppet/application_support.rb +7 -0
  17. data/lib/puppet/configurer.rb +50 -8
  18. data/lib/puppet/configurer/downloader.rb +31 -10
  19. data/lib/puppet/confine.rb +1 -1
  20. data/lib/puppet/confine/any.rb +1 -1
  21. data/lib/puppet/defaults.rb +88 -38
  22. data/lib/puppet/environments.rb +84 -59
  23. data/lib/puppet/face/catalog.rb +1 -1
  24. data/lib/puppet/face/config.rb +56 -16
  25. data/lib/puppet/face/epp.rb +12 -2
  26. data/lib/puppet/face/facts.rb +60 -0
  27. data/lib/puppet/face/node.rb +3 -3
  28. data/lib/puppet/face/node/clean.rb +2 -2
  29. data/lib/puppet/face/status.rb +1 -1
  30. data/lib/puppet/feature/base.rb +1 -1
  31. data/lib/puppet/ffi/posix.rb +10 -0
  32. data/lib/puppet/ffi/posix/constants.rb +14 -0
  33. data/lib/puppet/ffi/posix/functions.rb +24 -0
  34. data/lib/puppet/file_bucket/dipper.rb +1 -1
  35. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  36. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  37. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  38. data/lib/puppet/file_system/file_impl.rb +3 -3
  39. data/lib/puppet/functions/epp.rb +1 -0
  40. data/lib/puppet/functions/inline_epp.rb +1 -0
  41. data/lib/puppet/functions/lstrip.rb +4 -4
  42. data/lib/puppet/functions/new.rb +8 -3
  43. data/lib/puppet/functions/reverse_each.rb +1 -1
  44. data/lib/puppet/functions/rstrip.rb +4 -4
  45. data/lib/puppet/functions/step.rb +1 -1
  46. data/lib/puppet/functions/strip.rb +4 -4
  47. data/lib/puppet/gettext/config.rb +5 -5
  48. data/lib/puppet/gettext/module_translations.rb +4 -4
  49. data/lib/puppet/http.rb +1 -0
  50. data/lib/puppet/http/client.rb +1 -1
  51. data/lib/puppet/http/resolver.rb +5 -8
  52. data/lib/puppet/http/resolver/server_list.rb +18 -36
  53. data/lib/puppet/http/resolver/settings.rb +4 -4
  54. data/lib/puppet/http/resolver/srv.rb +5 -5
  55. data/lib/puppet/http/service.rb +3 -1
  56. data/lib/puppet/http/service/compiler.rb +1 -1
  57. data/lib/puppet/http/service/file_server.rb +1 -1
  58. data/lib/puppet/http/service/puppetserver.rb +39 -0
  59. data/lib/puppet/http/session.rb +5 -4
  60. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  61. data/lib/puppet/indirector/exec.rb +1 -1
  62. data/lib/puppet/indirector/fact_search.rb +60 -0
  63. data/lib/puppet/indirector/facts/facter.rb +3 -3
  64. data/lib/puppet/indirector/facts/json.rb +27 -0
  65. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  66. data/lib/puppet/indirector/file_metadata/http.rb +1 -0
  67. data/lib/puppet/indirector/hiera.rb +4 -0
  68. data/lib/puppet/indirector/indirection.rb +1 -1
  69. data/lib/puppet/indirector/json.rb +5 -1
  70. data/lib/puppet/indirector/msgpack.rb +1 -1
  71. data/lib/puppet/indirector/node/json.rb +8 -0
  72. data/lib/puppet/indirector/report/json.rb +34 -0
  73. data/lib/puppet/indirector/report/processor.rb +2 -2
  74. data/lib/puppet/indirector/request.rb +4 -4
  75. data/lib/puppet/indirector/yaml.rb +1 -1
  76. data/lib/puppet/module.rb +1 -2
  77. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  78. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  79. data/lib/puppet/network/format_support.rb +2 -2
  80. data/lib/puppet/network/formats.rb +2 -1
  81. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  82. data/lib/puppet/network/http/route.rb +2 -2
  83. data/lib/puppet/node/environment.rb +12 -5
  84. data/lib/puppet/node/facts.rb +17 -0
  85. data/lib/puppet/pal/pal_impl.rb +90 -13
  86. data/lib/puppet/parameter.rb +1 -1
  87. data/lib/puppet/parser/ast/leaf.rb +3 -2
  88. data/lib/puppet/parser/functions.rb +21 -17
  89. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  90. data/lib/puppet/parser/templatewrapper.rb +1 -1
  91. data/lib/puppet/parser/type_loader.rb +2 -2
  92. data/lib/puppet/pops/adaptable.rb +7 -13
  93. data/lib/puppet/pops/adapters.rb +8 -4
  94. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  95. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  96. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
  97. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  98. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  99. data/lib/puppet/pops/loaders.rb +18 -11
  100. data/lib/puppet/pops/lookup/context.rb +1 -1
  101. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  102. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  103. data/lib/puppet/pops/types/iterable.rb +34 -8
  104. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  105. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  106. data/lib/puppet/pops/validation/checker4_0.rb +19 -15
  107. data/lib/puppet/property/list.rb +1 -1
  108. data/lib/puppet/provider/file/windows.rb +1 -1
  109. data/lib/puppet/provider/group/groupadd.rb +13 -8
  110. data/lib/puppet/provider/package/apt.rb +67 -1
  111. data/lib/puppet/provider/package/aptitude.rb +6 -0
  112. data/lib/puppet/provider/package/dpkg.rb +1 -1
  113. data/lib/puppet/provider/package/gem.rb +4 -2
  114. data/lib/puppet/provider/package/pip2.rb +17 -0
  115. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  116. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  117. data/lib/puppet/provider/package/yum.rb +1 -0
  118. data/lib/puppet/provider/package/zypper.rb +3 -0
  119. data/lib/puppet/provider/service/debian.rb +2 -0
  120. data/lib/puppet/provider/user/aix.rb +3 -3
  121. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  122. data/lib/puppet/provider/user/useradd.rb +55 -8
  123. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  124. data/lib/puppet/reference/configuration.rb +6 -5
  125. data/lib/puppet/resource/type.rb +2 -1
  126. data/lib/puppet/rest/route.rb +2 -2
  127. data/lib/puppet/settings.rb +63 -21
  128. data/lib/puppet/settings/alias_setting.rb +37 -0
  129. data/lib/puppet/settings/base_setting.rb +26 -2
  130. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  131. data/lib/puppet/test/test_helper.rb +10 -3
  132. data/lib/puppet/transaction.rb +2 -2
  133. data/lib/puppet/transaction/persistence.rb +1 -1
  134. data/lib/puppet/transaction/report.rb +12 -8
  135. data/lib/puppet/trusted_external.rb +2 -2
  136. data/lib/puppet/type.rb +4 -3
  137. data/lib/puppet/type/file.rb +2 -2
  138. data/lib/puppet/type/file/source.rb +28 -8
  139. data/lib/puppet/type/filebucket.rb +1 -1
  140. data/lib/puppet/type/notify.rb +2 -2
  141. data/lib/puppet/type/package.rb +3 -3
  142. data/lib/puppet/type/service.rb +4 -0
  143. data/lib/puppet/type/user.rb +18 -3
  144. data/lib/puppet/util.rb +26 -12
  145. data/lib/puppet/util/autoload.rb +10 -15
  146. data/lib/puppet/util/character_encoding.rb +9 -5
  147. data/lib/puppet/util/connection.rb +8 -8
  148. data/lib/puppet/util/execution.rb +2 -2
  149. data/lib/puppet/util/fact_dif.rb +62 -0
  150. data/lib/puppet/util/posix.rb +54 -5
  151. data/lib/puppet/util/rubygems.rb +5 -1
  152. data/lib/puppet/util/run_mode.rb +5 -1
  153. data/lib/puppet/util/windows.rb +1 -0
  154. data/lib/puppet/util/windows/api_types.rb +15 -1
  155. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  156. data/lib/puppet/util/windows/security.rb +4 -4
  157. data/lib/puppet/util/windows/service.rb +1 -1
  158. data/lib/puppet/util/windows/user.rb +219 -0
  159. data/lib/puppet/version.rb +1 -1
  160. data/locales/puppet.pot +342 -312
  161. data/man/man5/puppet.conf.5 +53 -18
  162. data/man/man8/puppet-agent.8 +7 -4
  163. data/man/man8/puppet-apply.8 +2 -2
  164. data/man/man8/puppet-catalog.8 +1 -1
  165. data/man/man8/puppet-config.8 +6 -6
  166. data/man/man8/puppet-describe.8 +1 -1
  167. data/man/man8/puppet-device.8 +2 -2
  168. data/man/man8/puppet-doc.8 +1 -1
  169. data/man/man8/puppet-epp.8 +1 -1
  170. data/man/man8/puppet-facts.8 +32 -1
  171. data/man/man8/puppet-filebucket.8 +3 -3
  172. data/man/man8/puppet-generate.8 +1 -1
  173. data/man/man8/puppet-help.8 +1 -1
  174. data/man/man8/puppet-key.8 +1 -1
  175. data/man/man8/puppet-lookup.8 +2 -2
  176. data/man/man8/puppet-man.8 +1 -1
  177. data/man/man8/puppet-module.8 +1 -1
  178. data/man/man8/puppet-node.8 +7 -4
  179. data/man/man8/puppet-parser.8 +1 -1
  180. data/man/man8/puppet-plugin.8 +1 -1
  181. data/man/man8/puppet-report.8 +4 -1
  182. data/man/man8/puppet-resource.8 +1 -1
  183. data/man/man8/puppet-script.8 +2 -2
  184. data/man/man8/puppet-ssl.8 +1 -1
  185. data/man/man8/puppet-status.8 +2 -2
  186. data/man/man8/puppet.8 +2 -2
  187. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  188. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  189. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  190. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  191. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  192. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  193. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  194. data/spec/integration/application/agent_spec.rb +208 -55
  195. data/spec/integration/application/apply_spec.rb +168 -149
  196. data/spec/integration/application/doc_spec.rb +16 -6
  197. data/spec/integration/application/filebucket_spec.rb +70 -21
  198. data/spec/integration/application/help_spec.rb +42 -0
  199. data/spec/integration/application/lookup_spec.rb +13 -0
  200. data/spec/integration/application/module_spec.rb +68 -0
  201. data/spec/integration/application/plugin_spec.rb +53 -3
  202. data/spec/integration/configurer_spec.rb +14 -0
  203. data/spec/integration/data_binding_spec.rb +82 -0
  204. data/spec/integration/defaults_spec.rb +19 -1
  205. data/spec/integration/directory_environments_spec.rb +17 -17
  206. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  207. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  208. data/spec/integration/node/environment_spec.rb +1 -1
  209. data/spec/integration/resource/type_collection_spec.rb +2 -6
  210. data/spec/integration/transaction_spec.rb +4 -9
  211. data/spec/integration/util/execution_spec.rb +22 -0
  212. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  213. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  214. data/spec/integration/util/windows/process_spec.rb +26 -32
  215. data/spec/integration/util/windows/registry_spec.rb +0 -10
  216. data/spec/integration/util/windows/user_spec.rb +7 -0
  217. data/spec/integration/util_spec.rb +7 -33
  218. data/spec/lib/puppet_spec/matchers.rb +0 -80
  219. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  220. data/spec/lib/puppet_spec/settings.rb +6 -1
  221. data/spec/shared_contexts/types_setup.rb +2 -0
  222. data/spec/spec_helper.rb +1 -4
  223. data/spec/unit/agent_spec.rb +8 -6
  224. data/spec/unit/application/agent_spec.rb +3 -5
  225. data/spec/unit/application/config_spec.rb +224 -4
  226. data/spec/unit/application/doc_spec.rb +2 -2
  227. data/spec/unit/application/face_base_spec.rb +6 -4
  228. data/spec/unit/application/facts_spec.rb +41 -10
  229. data/spec/unit/application/filebucket_spec.rb +0 -2
  230. data/spec/unit/application/man_spec.rb +52 -0
  231. data/spec/unit/application/resource_spec.rb +3 -1
  232. data/spec/unit/application/ssl_spec.rb +15 -2
  233. data/spec/unit/application_spec.rb +60 -13
  234. data/spec/unit/configurer/downloader_spec.rb +10 -0
  235. data/spec/unit/configurer_spec.rb +86 -37
  236. data/spec/unit/confine/feature_spec.rb +1 -1
  237. data/spec/unit/confine_spec.rb +10 -3
  238. data/spec/unit/defaults_spec.rb +20 -1
  239. data/spec/unit/environments_spec.rb +176 -32
  240. data/spec/unit/face/config_spec.rb +65 -12
  241. data/spec/unit/face/node_spec.rb +2 -13
  242. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
  243. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  244. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  245. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  246. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  247. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  248. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  249. data/spec/unit/file_system_spec.rb +1 -2
  250. data/spec/unit/forge/module_release_spec.rb +2 -7
  251. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  252. data/spec/unit/http/client_spec.rb +0 -1
  253. data/spec/unit/http/resolver_spec.rb +24 -5
  254. data/spec/unit/http/service/ca_spec.rb +2 -3
  255. data/spec/unit/http/service/compiler_spec.rb +51 -3
  256. data/spec/unit/http/service/file_server_spec.rb +2 -3
  257. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  258. data/spec/unit/http/service/report_spec.rb +2 -3
  259. data/spec/unit/http/service_spec.rb +1 -2
  260. data/spec/unit/http/session_spec.rb +8 -21
  261. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  262. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  263. data/spec/unit/indirector/face_spec.rb +0 -1
  264. data/spec/unit/indirector/facts/facter_spec.rb +0 -1
  265. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  266. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  267. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  268. data/spec/unit/indirector/indirection_spec.rb +8 -12
  269. data/spec/unit/indirector/json_spec.rb +8 -8
  270. data/spec/unit/indirector/key/file_spec.rb +0 -1
  271. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  272. data/spec/unit/indirector/node/json_spec.rb +33 -0
  273. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  274. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  275. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  276. data/spec/unit/indirector/request_spec.rb +4 -4
  277. data/spec/unit/indirector/rest_spec.rb +1 -1
  278. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  279. data/spec/unit/indirector/yaml_spec.rb +7 -7
  280. data/spec/unit/indirector_spec.rb +2 -2
  281. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  282. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  283. data/spec/unit/network/authconfig_spec.rb +0 -3
  284. data/spec/unit/network/format_support_spec.rb +3 -2
  285. data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
  286. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  287. data/spec/unit/network/http/handler_spec.rb +0 -5
  288. data/spec/unit/node/environment_spec.rb +18 -1
  289. data/spec/unit/parser/compiler_spec.rb +3 -19
  290. data/spec/unit/parser/resource_spec.rb +14 -8
  291. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  292. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  293. data/spec/unit/pops/loaders/loaders_spec.rb +70 -0
  294. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  295. data/spec/unit/property_spec.rb +1 -0
  296. data/spec/unit/provider/exec_spec.rb +4 -3
  297. data/spec/unit/provider/group/groupadd_spec.rb +5 -2
  298. data/spec/unit/provider/nameservice_spec.rb +66 -65
  299. data/spec/unit/provider/package/apt_spec.rb +85 -3
  300. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  301. data/spec/unit/provider/package/base_spec.rb +6 -5
  302. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  303. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  304. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  305. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  306. data/spec/unit/provider/package/pip_spec.rb +6 -11
  307. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  308. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  309. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  310. data/spec/unit/provider/package/yum_spec.rb +31 -0
  311. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  312. data/spec/unit/provider/service/base_spec.rb +2 -4
  313. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  314. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  315. data/spec/unit/provider/service/debian_spec.rb +3 -5
  316. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  317. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  318. data/spec/unit/provider/service/init_spec.rb +45 -5
  319. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  320. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  321. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  322. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  323. data/spec/unit/provider/service/runit_spec.rb +2 -1
  324. data/spec/unit/provider/service/smf_spec.rb +1 -1
  325. data/spec/unit/provider/service/src_spec.rb +3 -5
  326. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  327. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  328. data/spec/unit/provider/service/windows_spec.rb +28 -0
  329. data/spec/unit/provider/user/aix_spec.rb +5 -0
  330. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  331. data/spec/unit/provider/user/pw_spec.rb +2 -0
  332. data/spec/unit/provider/user/useradd_spec.rb +56 -3
  333. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  334. data/spec/unit/provider_spec.rb +8 -10
  335. data/spec/unit/puppet_pal_2pec.rb +40 -0
  336. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  337. data/spec/unit/reports/store_spec.rb +17 -13
  338. data/spec/unit/resource/capability_finder_spec.rb +6 -1
  339. data/spec/unit/resource/type_spec.rb +1 -1
  340. data/spec/unit/resource_spec.rb +11 -10
  341. data/spec/unit/rest/route_spec.rb +4 -4
  342. data/spec/unit/settings_spec.rb +576 -239
  343. data/spec/unit/ssl/base_spec.rb +0 -1
  344. data/spec/unit/ssl/host_spec.rb +0 -5
  345. data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
  346. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  347. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  348. data/spec/unit/transaction/persistence_spec.rb +15 -0
  349. data/spec/unit/transaction/report_spec.rb +2 -0
  350. data/spec/unit/transaction_spec.rb +13 -4
  351. data/spec/unit/type/file/content_spec.rb +0 -1
  352. data/spec/unit/type/file/selinux_spec.rb +0 -2
  353. data/spec/unit/type/file/source_spec.rb +1 -1
  354. data/spec/unit/type/file_spec.rb +0 -6
  355. data/spec/unit/type/filebucket_spec.rb +1 -1
  356. data/spec/unit/type/group_spec.rb +13 -6
  357. data/spec/unit/type/resources_spec.rb +7 -7
  358. data/spec/unit/type/service_spec.rb +36 -3
  359. data/spec/unit/type/tidy_spec.rb +0 -1
  360. data/spec/unit/type/user_spec.rb +31 -2
  361. data/spec/unit/type_spec.rb +2 -2
  362. data/spec/unit/util/at_fork_spec.rb +2 -2
  363. data/spec/unit/util/autoload_spec.rb +5 -1
  364. data/spec/unit/util/backups_spec.rb +1 -2
  365. data/spec/unit/util/character_encoding_spec.rb +4 -4
  366. data/spec/unit/util/command_line_spec.rb +11 -6
  367. data/spec/unit/util/execution_spec.rb +15 -11
  368. data/spec/unit/util/inifile_spec.rb +6 -14
  369. data/spec/unit/util/log_spec.rb +8 -7
  370. data/spec/unit/util/logging_spec.rb +3 -3
  371. data/spec/unit/util/posix_spec.rb +363 -15
  372. data/spec/unit/util/rubygems_spec.rb +2 -2
  373. data/spec/unit/util/run_mode_spec.rb +6 -6
  374. data/spec/unit/util/selinux_spec.rb +76 -52
  375. data/spec/unit/util/storage_spec.rb +3 -1
  376. data/spec/unit/util/suidmanager_spec.rb +44 -41
  377. data/spec/unit/util_spec.rb +13 -6
  378. metadata +49 -50
  379. data/spec/integration/faces/config_spec.rb +0 -91
  380. data/spec/integration/faces/documentation_spec.rb +0 -57
  381. data/spec/integration/file_bucket/file_spec.rb +0 -50
  382. data/spec/integration/file_serving/content_spec.rb +0 -7
  383. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  384. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  385. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  386. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  387. data/spec/integration/module_tool/forge_spec.rb +0 -51
  388. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  389. data/spec/integration/provider/service/init_spec.rb +0 -48
  390. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  391. data/spec/integration/provider/service/windows_spec.rb +0 -50
  392. data/spec/integration/reference/providers_spec.rb +0 -21
  393. data/spec/integration/reports_spec.rb +0 -13
  394. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  395. data/spec/integration/ssl/host_spec.rb +0 -72
  396. data/spec/integration/ssl/key_spec.rb +0 -99
  397. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  398. data/spec/unit/face/catalog_spec.rb +0 -6
  399. data/spec/unit/face/man_spec.rb +0 -25
  400. data/spec/unit/face/module_spec.rb +0 -3
  401. data/spec/unit/man_spec.rb +0 -31
@@ -13,14 +13,14 @@ class Puppet::HTTP::Resolver::Settings < Puppet::HTTP::Resolver
13
13
  # @param [Puppet::HTTP::Session] session
14
14
  # @param [Symbol] name the name of the service to be resolved
15
15
  # @param [Puppet::SSL::SSLContext] ssl_context
16
- # @param [Proc] error_handler (nil) optional callback for each error
17
- # encountered while resolving a route.
16
+ # @param [Proc] canceled_handler (nil) optional callback allowing a resolver
17
+ # to cancel resolution.
18
18
  #
19
19
  # @return [Puppet::HTTP::Service] if the service successfully connects,
20
20
  # return it. Otherwise, return nil.
21
21
  #
22
- def resolve(session, name, ssl_context: nil, error_handler: nil)
22
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
23
23
  service = Puppet::HTTP::Service.create_service(@client, session, name)
24
- check_connection?(session, service, ssl_context: ssl_context, error_handler: error_handler) ? service : nil
24
+ check_connection?(session, service, ssl_context: ssl_context) ? service : nil
25
25
  end
26
26
  end
@@ -25,21 +25,21 @@ class Puppet::HTTP::Resolver::SRV < Puppet::HTTP::Resolver
25
25
  # @param [Puppet::HTTP::Session] session
26
26
  # @param [Symbol] name the service being resolved
27
27
  # @param [Puppet::SSL::SSLContext] ssl_context
28
- # @param [Proc] error_handler (nil) optional callback for each error
29
- # encountered while resolving a route.
28
+ # @param [Proc] canceled_handler (nil) optional callback allowing a resolver
29
+ # to cancel resolution.
30
30
  #
31
31
  # @return [Puppet::HTTP::Service] if an available service is found, return
32
32
  # it. Return nil otherwise.
33
33
  #
34
- def resolve(session, name, ssl_context: nil, error_handler: nil)
34
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
35
35
  # Here we pass our HTTP service name as the DNS SRV service name
36
36
  # This is fine for :ca, but note that :puppet and :file are handled
37
37
  # specially in `each_srv_record`.
38
38
  @delegate.each_srv_record(@srv_domain, name) do |server, port|
39
39
  service = Puppet::HTTP::Service.create_service(@client, session, name, server, port)
40
- return service if check_connection?(session, service, ssl_context: ssl_context, error_handler: error_handler)
40
+ return service if check_connection?(session, service, ssl_context: ssl_context)
41
41
  end
42
42
 
43
- return nil
43
+ nil
44
44
  end
45
45
  end
@@ -10,7 +10,7 @@ class Puppet::HTTP::Service
10
10
 
11
11
  # @api private
12
12
  # @return [Array<Symbol>] available services
13
- SERVICE_NAMES = [:ca, :fileserver, :puppet, :report].freeze
13
+ SERVICE_NAMES = [:ca, :fileserver, :puppet, :puppetserver, :report].freeze
14
14
 
15
15
  # @api private
16
16
  # @return [Array<Symbol>] format types that are unsupported
@@ -43,6 +43,8 @@ class Puppet::HTTP::Service
43
43
  Puppet::HTTP::Service::FileServer.new(client, session, server, port)
44
44
  when :puppet
45
45
  ::Puppet::HTTP::Service::Compiler.new(client, session, server, port)
46
+ when :puppetserver
47
+ ::Puppet::HTTP::Service::Puppetserver.new(client, session, server, port)
46
48
  when :report
47
49
  Puppet::HTTP::Service::Report.new(client, session, server, port)
48
50
  else
@@ -22,7 +22,7 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
22
22
  # create the service.
23
23
  #
24
24
  def initialize(client, session, server, port)
25
- url = build_url(API, server || Puppet[:server], port || Puppet[:masterport])
25
+ url = build_url(API, server || Puppet[:server], port || Puppet[:serverport])
26
26
  super(client, session, url)
27
27
  end
28
28
 
@@ -27,7 +27,7 @@ class Puppet::HTTP::Service::FileServer < Puppet::HTTP::Service
27
27
  # create the service.
28
28
  #
29
29
  def initialize(client, session, server, port)
30
- url = build_url(API, server || Puppet[:server], port || Puppet[:masterport])
30
+ url = build_url(API, server || Puppet[:server], port || Puppet[:serverport])
31
31
  super(client, session, url)
32
32
  end
33
33
 
@@ -0,0 +1,39 @@
1
+ # The puppetserver service.
2
+ #
3
+ # @api private
4
+ #
5
+ class Puppet::HTTP::Service::Puppetserver < Puppet::HTTP::Service
6
+ # @param [Puppet::HTTP::Client] client
7
+ # @param [Puppet::HTTP::Session] session
8
+ # @param [String] server If an explicit server is given,
9
+ # create a service using that server. If server is nil, the default value
10
+ # is used to create the service.
11
+ # @param [Integer] port If an explicit port is given, create
12
+ # a service using that port. If port is nil, the default value is used to
13
+ # create the service.
14
+ # @api private
15
+ #
16
+ def initialize(client, session, server, port)
17
+ url = build_url('', server || Puppet[:server], port || Puppet[:serverport])
18
+ super(client, session, url)
19
+ end
20
+
21
+ # Request the puppetserver's simple status
22
+ #
23
+ # @param [Puppet::SSL::SSLContext] ssl_context to use when establishing
24
+ # the connection.
25
+ # @return Puppet::HTTP::Response The HTTP response
26
+ # @api private
27
+ #
28
+ def get_simple_status(ssl_context: nil)
29
+ response = @client.get(
30
+ with_base_url("/status/v1/simple/master"),
31
+ headers: add_puppet_headers({}),
32
+ options: {ssl_context: ssl_context}
33
+ )
34
+
35
+ process_response(response)
36
+
37
+ [response, response.body.to_s]
38
+ end
39
+ end
@@ -64,20 +64,21 @@ class Puppet::HTTP::Session
64
64
  cached = @resolved_services[name]
65
65
  return cached if cached
66
66
 
67
- resolution_exceptions = []
68
- error_handler = proc { |e| resolution_exceptions << e }
67
+ canceled = false
68
+ canceled_handler = lambda { |cancel| canceled = cancel }
69
69
 
70
70
  @resolvers.each do |resolver|
71
71
  Puppet.debug("Resolving service '#{name}' using #{resolver.class}")
72
- service = resolver.resolve(self, name, ssl_context: ssl_context, error_handler: error_handler)
72
+ service = resolver.resolve(self, name, ssl_context: ssl_context, canceled_handler: canceled_handler)
73
73
  if service
74
74
  @resolved_services[name] = service
75
75
  Puppet.debug("Resolved service '#{name}' to #{service.url}")
76
76
  return service
77
+ elsif canceled
78
+ break
77
79
  end
78
80
  end
79
81
 
80
- resolution_exceptions.each { |e| Puppet.log_exception(e) }
81
82
  raise Puppet::HTTP::RouteError, "No more routes to #{name}"
82
83
  end
83
84
 
@@ -75,7 +75,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
75
75
 
76
76
  # Is our compiler part of a network, or are we just local?
77
77
  def networked?
78
- Puppet.run_mode.master?
78
+ Puppet.run_mode.server?
79
79
  end
80
80
 
81
81
  private
@@ -22,7 +22,7 @@ class Puppet::Indirector::Exec < Puppet::Indirector::Terminus
22
22
  end
23
23
 
24
24
  if output =~ /\A\s*\Z/ # all whitespace
25
- Puppet.debug "Empty response for #{name} from #{self.name} terminus"
25
+ Puppet.debug { "Empty response for #{name} from #{self.name} terminus" }
26
26
  return nil
27
27
  else
28
28
  return output
@@ -0,0 +1,60 @@
1
+ # module containing common methods used by json and yaml facts indirection terminus
2
+ module Puppet::Indirector::FactSearch
3
+ def node_matches?(facts, options)
4
+ options.each do |key, value|
5
+ type, name, operator = key.to_s.split(".")
6
+ operator ||= 'eq'
7
+
8
+ return false unless node_matches_option?(type, name, operator, value, facts)
9
+ end
10
+ return true
11
+ end
12
+
13
+ def node_matches_option?(type, name, operator, value, facts)
14
+ case type
15
+ when "meta"
16
+ case name
17
+ when "timestamp"
18
+ compare_timestamp(operator, facts.timestamp, Time.parse(value))
19
+ end
20
+ when "facts"
21
+ compare_facts(operator, facts.values[name], value)
22
+ end
23
+ end
24
+
25
+ def compare_facts(operator, value1, value2)
26
+ return false unless value1
27
+
28
+ case operator
29
+ when "eq"
30
+ value1.to_s == value2.to_s
31
+ when "le"
32
+ value1.to_f <= value2.to_f
33
+ when "ge"
34
+ value1.to_f >= value2.to_f
35
+ when "lt"
36
+ value1.to_f < value2.to_f
37
+ when "gt"
38
+ value1.to_f > value2.to_f
39
+ when "ne"
40
+ value1.to_s != value2.to_s
41
+ end
42
+ end
43
+
44
+ def compare_timestamp(operator, value1, value2)
45
+ case operator
46
+ when "eq"
47
+ value1 == value2
48
+ when "le"
49
+ value1 <= value2
50
+ when "ge"
51
+ value1 >= value2
52
+ when "lt"
53
+ value1 < value2
54
+ when "gt"
55
+ value1 > value2
56
+ when "ne"
57
+ value1 != value2
58
+ end
59
+ end
60
+ end
@@ -55,7 +55,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
55
55
  if Puppet::Util::Log.sendlevel?(:info)
56
56
  Puppet.info _("Loading facts")
57
57
  Dir.glob("#{dir}/*.rb").each do |file|
58
- Puppet.debug "Loading facts from #{file}"
58
+ Puppet.debug { "Loading facts from #{file}" }
59
59
  end
60
60
  end
61
61
 
@@ -71,7 +71,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
71
71
  request.environment.modules.each do |m|
72
72
  if m.has_external_facts?
73
73
  dir = m.plugin_fact_directory
74
- Puppet.debug "Loading external facts from #{dir}"
74
+ Puppet.debug { "Loading external facts from #{dir}" }
75
75
  dirs << dir
76
76
  end
77
77
  end
@@ -79,7 +79,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
79
79
  # Add system external fact directory if it exists
80
80
  if FileTest.directory?(Puppet[:pluginfactdest])
81
81
  dir = Puppet[:pluginfactdest]
82
- Puppet.debug "Loading external facts from #{dir}"
82
+ Puppet.debug { "Loading external facts from #{dir}" }
83
83
  dirs << dir
84
84
  end
85
85
 
@@ -0,0 +1,27 @@
1
+ require 'puppet/node/facts'
2
+ require 'puppet/indirector/json'
3
+ require 'puppet/indirector/fact_search'
4
+
5
+ class Puppet::Node::Facts::Json < Puppet::Indirector::JSON
6
+ desc "Store client facts as flat files, serialized using JSON, or
7
+ return deserialized facts from disk."
8
+
9
+ include Puppet::Indirector::FactSearch
10
+
11
+ def search(request)
12
+ node_names = []
13
+ Dir.glob(json_dir_path).each do |file|
14
+ facts = load_json_from_file(file, '')
15
+ if facts && node_matches?(facts, request.options)
16
+ node_names << facts.name
17
+ end
18
+ end
19
+ node_names
20
+ end
21
+
22
+ private
23
+
24
+ def json_dir_path
25
+ self.path("*")
26
+ end
27
+ end
@@ -1,10 +1,13 @@
1
1
  require 'puppet/node/facts'
2
2
  require 'puppet/indirector/yaml'
3
+ require 'puppet/indirector/fact_search'
3
4
 
4
5
  class Puppet::Node::Facts::Yaml < Puppet::Indirector::Yaml
5
6
  desc "Store client facts as flat files, serialized using YAML, or
6
7
  return deserialized facts from disk."
7
8
 
9
+ include Puppet::Indirector::FactSearch
10
+
8
11
  def search(request)
9
12
  node_names = []
10
13
  Dir.glob(yaml_dir_path).each do |file|
@@ -20,65 +23,7 @@ class Puppet::Node::Facts::Yaml < Puppet::Indirector::Yaml
20
23
 
21
24
  # Return the path to a given node's file.
22
25
  def yaml_dir_path
23
- base = Puppet.run_mode.master? ? Puppet[:yamldir] : Puppet[:clientyamldir]
26
+ base = Puppet.run_mode.server? ? Puppet[:yamldir] : Puppet[:clientyamldir]
24
27
  File.join(base, 'facts', '*.yaml')
25
28
  end
26
-
27
- def node_matches?(facts, options)
28
- options.each do |key, value|
29
- type, name, operator = key.to_s.split(".")
30
- operator ||= 'eq'
31
-
32
- return false unless node_matches_option?(type, name, operator, value, facts)
33
- end
34
- return true
35
- end
36
-
37
- def node_matches_option?(type, name, operator, value, facts)
38
- case type
39
- when "meta"
40
- case name
41
- when "timestamp"
42
- compare_timestamp(operator, facts.timestamp, Time.parse(value))
43
- end
44
- when "facts"
45
- compare_facts(operator, facts.values[name], value)
46
- end
47
- end
48
-
49
- def compare_facts(operator, value1, value2)
50
- return false unless value1
51
-
52
- case operator
53
- when "eq"
54
- value1.to_s == value2.to_s
55
- when "le"
56
- value1.to_f <= value2.to_f
57
- when "ge"
58
- value1.to_f >= value2.to_f
59
- when "lt"
60
- value1.to_f < value2.to_f
61
- when "gt"
62
- value1.to_f > value2.to_f
63
- when "ne"
64
- value1.to_s != value2.to_s
65
- end
66
- end
67
-
68
- def compare_timestamp(operator, value1, value2)
69
- case operator
70
- when "eq"
71
- value1 == value2
72
- when "le"
73
- value1 <= value2
74
- when "ge"
75
- value1 >= value2
76
- when "lt"
77
- value1 < value2
78
- when "gt"
79
- value1 > value2
80
- when "ne"
81
- value1 != value2
82
- end
83
- end
84
29
  end
@@ -10,6 +10,7 @@ class Puppet::Indirector::FileMetadata::Http < Puppet::Indirector::GenericHttp
10
10
 
11
11
  def find(request)
12
12
  checksum_type = request.options[:checksum_type]
13
+ # See URL encoding comment in Puppet::Type::File::ParamSource#chunk_file_from_source
13
14
  uri = URI(request.uri)
14
15
  client = Puppet.runtime[:http]
15
16
  head = client.head(uri, options: {include_system_store: true})
@@ -1,6 +1,10 @@
1
1
  require 'puppet/indirector/terminus'
2
2
  require 'hiera/scope'
3
3
 
4
+ # This class can't be collapsed into Puppet::Indirector::DataBindings::Hiera
5
+ # because some community plugins rely on this class directly, see PUP-1843.
6
+ # This class is deprecated and will be deleted in a future release.
7
+ # Use `Puppet::DataBinding.indirection.terminus(:hiera)` instead.
4
8
  class Puppet::Indirector::Hiera < Puppet::Indirector::Terminus
5
9
  def initialize(*args)
6
10
  if ! Puppet.features.hiera?
@@ -269,7 +269,7 @@ class Puppet::Indirector::Indirection
269
269
  return nil
270
270
  end
271
271
 
272
- Puppet.debug "Using cached #{self.name} for #{request.key}"
272
+ Puppet.debug { "Using cached #{self.name} for #{request.key}" }
273
273
  cached
274
274
  rescue => detail
275
275
  Puppet.log_exception(detail, _("Cached %{indirection} for %{request} failed: %{detail}") % { indirection: self.name, request: request.key, detail: detail })
@@ -41,12 +41,16 @@ class Puppet::Indirector::JSON < Puppet::Indirector::Terminus
41
41
  raise ArgumentError, _("invalid key")
42
42
  end
43
43
 
44
- base = Puppet.run_mode.master? ? Puppet[:server_datadir] : Puppet[:client_datadir]
44
+ base = data_dir
45
45
  File.join(base, self.class.indirection_name.to_s, name.to_s + ext)
46
46
  end
47
47
 
48
48
  private
49
49
 
50
+ def data_dir()
51
+ Puppet.run_mode.server? ? Puppet[:server_datadir] : Puppet[:client_datadir]
52
+ end
53
+
50
54
  def load_json_from_file(file, key)
51
55
  json = nil
52
56
 
@@ -48,7 +48,7 @@ class Puppet::Indirector::Msgpack < Puppet::Indirector::Terminus
48
48
  raise ArgumentError, _("invalid key")
49
49
  end
50
50
 
51
- base = Puppet.run_mode.master? ? Puppet[:server_datadir] : Puppet[:client_datadir]
51
+ base = Puppet.run_mode.server? ? Puppet[:server_datadir] : Puppet[:client_datadir]
52
52
  File.join(base, self.class.indirection_name.to_s, name.to_s + ext)
53
53
  end
54
54
 
@@ -0,0 +1,8 @@
1
+ require 'puppet/node'
2
+ require 'puppet/indirector/json'
3
+
4
+ class Puppet::Node::Json < Puppet::Indirector::JSON
5
+ desc "Store node information as flat files, serialized using JSON,
6
+ or deserialize stored JSON nodes."
7
+
8
+ end
@@ -0,0 +1,34 @@
1
+ require 'puppet/transaction/report'
2
+ require 'puppet/indirector/json'
3
+
4
+ class Puppet::Transaction::Report::Json < Puppet::Indirector::JSON
5
+ include Puppet::Util::SymbolicFileMode
6
+
7
+ desc "Store last report as a flat file, serialized using JSON."
8
+
9
+ # Force report to be saved there
10
+ def path(name,ext='.json')
11
+ Puppet[:lastrunreport]
12
+ end
13
+
14
+ def save(request)
15
+ filename = path(request.key)
16
+ mode = Puppet.settings.setting(:lastrunreport).mode
17
+
18
+ unless valid_symbolic_mode?(mode)
19
+ raise Puppet::DevError, _("replace_file mode: %{mode} is invalid") % { mode: mode }
20
+ end
21
+
22
+ mode = symbolic_mode_to_int(normalize_symbolic_mode(mode))
23
+
24
+ FileUtils.mkdir_p(File.dirname(filename))
25
+
26
+ begin
27
+ Puppet::FileSystem.replace_file(filename, mode) do |fh|
28
+ fh.print JSON.dump(request.instance)
29
+ end
30
+ rescue TypeError => detail
31
+ Puppet.err _("Could not save %{indirection} %{request}: %{detail}") % { indirection: self.name, request: request.key, detail: detail }
32
+ end
33
+ end
34
+ end