puppet 6.15.0-x86-mingw32 → 6.19.1-x86-mingw32

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

Potentially problematic release.


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

Files changed (418) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/Gemfile +4 -2
  4. data/Gemfile.lock +29 -27
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  7. data/lib/puppet.rb +32 -8
  8. data/lib/puppet/agent.rb +18 -4
  9. data/lib/puppet/agent/locker.rb +0 -7
  10. data/lib/puppet/application/agent.rb +23 -8
  11. data/lib/puppet/application/apply.rb +18 -20
  12. data/lib/puppet/application/device.rb +1 -1
  13. data/lib/puppet/application/doc.rb +1 -1
  14. data/lib/puppet/application/lookup.rb +16 -4
  15. data/lib/puppet/application/plugin.rb +1 -0
  16. data/lib/puppet/application/ssl.rb +1 -1
  17. data/lib/puppet/configurer.rb +61 -21
  18. data/lib/puppet/configurer/downloader.rb +31 -10
  19. data/lib/puppet/confine.rb +2 -2
  20. data/lib/puppet/confine/any.rb +1 -1
  21. data/lib/puppet/context/trusted_information.rb +14 -8
  22. data/lib/puppet/daemon.rb +13 -27
  23. data/lib/puppet/defaults.rb +119 -39
  24. data/lib/puppet/environments.rb +51 -10
  25. data/lib/puppet/face/catalog.rb +1 -1
  26. data/lib/puppet/face/config.rb +46 -16
  27. data/lib/puppet/face/facts.rb +1 -1
  28. data/lib/puppet/face/help.rb +29 -3
  29. data/lib/puppet/face/module/search.rb +5 -0
  30. data/lib/puppet/face/node.rb +3 -3
  31. data/lib/puppet/face/node/clean.rb +2 -2
  32. data/lib/puppet/face/plugin.rb +1 -1
  33. data/lib/puppet/face/status.rb +1 -1
  34. data/lib/puppet/feature/base.rb +1 -1
  35. data/lib/puppet/file_bucket/dipper.rb +1 -1
  36. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  37. data/lib/puppet/file_serving/metadata.rb +4 -1
  38. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  39. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  40. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  41. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  42. data/lib/puppet/file_system/file_impl.rb +4 -4
  43. data/lib/puppet/file_system/uniquefile.rb +12 -16
  44. data/lib/puppet/forge.rb +1 -1
  45. data/lib/puppet/forge/cache.rb +1 -1
  46. data/lib/puppet/forge/repository.rb +4 -7
  47. data/lib/puppet/functions/filter.rb +1 -0
  48. data/lib/puppet/functions/lstrip.rb +4 -4
  49. data/lib/puppet/functions/new.rb +8 -3
  50. data/lib/puppet/functions/reverse_each.rb +1 -1
  51. data/lib/puppet/functions/rstrip.rb +4 -4
  52. data/lib/puppet/functions/step.rb +1 -1
  53. data/lib/puppet/functions/strip.rb +4 -4
  54. data/lib/puppet/gettext/config.rb +5 -5
  55. data/lib/puppet/gettext/module_translations.rb +4 -4
  56. data/lib/puppet/http.rb +1 -0
  57. data/lib/puppet/http/client.rb +28 -12
  58. data/lib/puppet/http/external_client.rb +0 -6
  59. data/lib/puppet/http/redirector.rb +9 -7
  60. data/lib/puppet/http/resolver.rb +5 -8
  61. data/lib/puppet/http/resolver/server_list.rb +18 -36
  62. data/lib/puppet/http/resolver/settings.rb +4 -4
  63. data/lib/puppet/http/resolver/srv.rb +5 -5
  64. data/lib/puppet/http/response.rb +19 -0
  65. data/lib/puppet/http/service.rb +3 -1
  66. data/lib/puppet/http/service/compiler.rb +1 -1
  67. data/lib/puppet/http/service/file_server.rb +1 -1
  68. data/lib/puppet/http/service/puppetserver.rb +39 -0
  69. data/lib/puppet/http/session.rb +5 -4
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/facts/facter.rb +3 -3
  74. data/lib/puppet/indirector/facts/yaml.rb +1 -1
  75. data/lib/puppet/indirector/file_content/http.rb +5 -0
  76. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  77. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  78. data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
  79. data/lib/puppet/indirector/hiera.rb +4 -0
  80. data/lib/puppet/indirector/indirection.rb +1 -1
  81. data/lib/puppet/indirector/json.rb +1 -1
  82. data/lib/puppet/indirector/msgpack.rb +1 -1
  83. data/lib/puppet/indirector/report/processor.rb +2 -2
  84. data/lib/puppet/indirector/request.rb +5 -5
  85. data/lib/puppet/indirector/rest.rb +7 -1
  86. data/lib/puppet/indirector/yaml.rb +1 -1
  87. data/lib/puppet/module.rb +1 -2
  88. data/lib/puppet/network/format_support.rb +2 -2
  89. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  90. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  91. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  92. data/lib/puppet/network/http/compression.rb +7 -0
  93. data/lib/puppet/network/http/connection.rb +2 -0
  94. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  95. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  96. data/lib/puppet/network/http/route.rb +2 -2
  97. data/lib/puppet/network/http_pool.rb +2 -2
  98. data/lib/puppet/node/environment.rb +12 -5
  99. data/lib/puppet/node/facts.rb +17 -0
  100. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  101. data/lib/puppet/pal/pal_impl.rb +31 -4
  102. data/lib/puppet/parameter.rb +1 -1
  103. data/lib/puppet/parser/ast/leaf.rb +5 -5
  104. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  105. data/lib/puppet/parser/compiler.rb +29 -26
  106. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  107. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  108. data/lib/puppet/parser/environment_compiler.rb +4 -1
  109. data/lib/puppet/parser/functions.rb +21 -17
  110. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  111. data/lib/puppet/parser/functions/filter.rb +1 -0
  112. data/lib/puppet/parser/resource.rb +3 -2
  113. data/lib/puppet/parser/resource/param.rb +6 -0
  114. data/lib/puppet/parser/type_loader.rb +2 -2
  115. data/lib/puppet/pops/adaptable.rb +7 -13
  116. data/lib/puppet/pops/adapters.rb +8 -4
  117. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  118. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  119. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  120. data/lib/puppet/pops/issues.rb +5 -0
  121. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  122. data/lib/puppet/pops/loaders.rb +18 -11
  123. data/lib/puppet/pops/lookup/context.rb +1 -1
  124. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  125. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  126. data/lib/puppet/pops/types/iterable.rb +34 -8
  127. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  128. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  129. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  130. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  131. data/lib/puppet/provider/file/windows.rb +1 -1
  132. data/lib/puppet/provider/package/aix.rb +17 -2
  133. data/lib/puppet/provider/package/apt.rb +38 -1
  134. data/lib/puppet/provider/package/aptitude.rb +1 -1
  135. data/lib/puppet/provider/package/dnfmodule.rb +24 -4
  136. data/lib/puppet/provider/package/dpkg.rb +1 -1
  137. data/lib/puppet/provider/package/gem.rb +4 -2
  138. data/lib/puppet/provider/package/pip.rb +60 -37
  139. data/lib/puppet/provider/package/pip2.rb +17 -0
  140. data/lib/puppet/provider/package/portage.rb +2 -2
  141. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  142. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  143. data/lib/puppet/provider/package/yum.rb +9 -1
  144. data/lib/puppet/provider/package/zypper.rb +62 -1
  145. data/lib/puppet/provider/service/systemd.rb +21 -4
  146. data/lib/puppet/provider/service/windows.rb +23 -7
  147. data/lib/puppet/provider/user/aix.rb +1 -1
  148. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  149. data/lib/puppet/provider/user/useradd.rb +16 -5
  150. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  151. data/lib/puppet/reports/http.rb +7 -3
  152. data/lib/puppet/resource.rb +2 -1
  153. data/lib/puppet/resource/type.rb +10 -1
  154. data/lib/puppet/rest/route.rb +2 -2
  155. data/lib/puppet/runtime.rb +25 -2
  156. data/lib/puppet/settings.rb +43 -6
  157. data/lib/puppet/ssl/ssl_context.rb +2 -2
  158. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  159. data/lib/puppet/ssl/state_machine.rb +33 -8
  160. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  161. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  162. data/lib/puppet/test/test_helper.rb +19 -14
  163. data/lib/puppet/transaction.rb +2 -2
  164. data/lib/puppet/transaction/persistence.rb +1 -1
  165. data/lib/puppet/transaction/report.rb +12 -8
  166. data/lib/puppet/trusted_external.rb +29 -1
  167. data/lib/puppet/type.rb +15 -7
  168. data/lib/puppet/type/file.rb +40 -15
  169. data/lib/puppet/type/file/checksum.rb +4 -4
  170. data/lib/puppet/type/file/source.rb +33 -13
  171. data/lib/puppet/type/filebucket.rb +1 -1
  172. data/lib/puppet/type/notify.rb +2 -2
  173. data/lib/puppet/type/package.rb +16 -1
  174. data/lib/puppet/type/service.rb +59 -8
  175. data/lib/puppet/type/user.rb +19 -10
  176. data/lib/puppet/util.rb +41 -3
  177. data/lib/puppet/util/autoload.rb +10 -25
  178. data/lib/puppet/util/character_encoding.rb +9 -5
  179. data/lib/puppet/util/checksums.rb +19 -4
  180. data/lib/puppet/util/connection.rb +8 -8
  181. data/lib/puppet/util/execution.rb +2 -2
  182. data/lib/puppet/util/fileparsing.rb +2 -2
  183. data/lib/puppet/util/log/destinations.rb +1 -10
  184. data/lib/puppet/util/package/version/range.rb +4 -1
  185. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  186. data/lib/puppet/util/provider_features.rb +1 -1
  187. data/lib/puppet/util/reference.rb +1 -1
  188. data/lib/puppet/util/run_mode.rb +5 -1
  189. data/lib/puppet/util/windows.rb +1 -0
  190. data/lib/puppet/util/windows/api_types.rb +60 -33
  191. data/lib/puppet/util/windows/eventlog.rb +1 -6
  192. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  193. data/lib/puppet/util/windows/principal.rb +8 -6
  194. data/lib/puppet/util/windows/registry.rb +11 -11
  195. data/lib/puppet/util/windows/security.rb +4 -4
  196. data/lib/puppet/util/windows/service.rb +43 -26
  197. data/lib/puppet/util/windows/user.rb +242 -8
  198. data/lib/puppet/version.rb +1 -1
  199. data/locales/puppet.pot +541 -427
  200. data/man/man5/puppet.conf.5 +84 -19
  201. data/man/man8/puppet-agent.8 +7 -4
  202. data/man/man8/puppet-apply.8 +1 -1
  203. data/man/man8/puppet-catalog.8 +1 -1
  204. data/man/man8/puppet-config.8 +6 -6
  205. data/man/man8/puppet-describe.8 +1 -1
  206. data/man/man8/puppet-device.8 +1 -1
  207. data/man/man8/puppet-doc.8 +1 -1
  208. data/man/man8/puppet-epp.8 +1 -1
  209. data/man/man8/puppet-facts.8 +1 -1
  210. data/man/man8/puppet-filebucket.8 +1 -1
  211. data/man/man8/puppet-generate.8 +1 -1
  212. data/man/man8/puppet-help.8 +6 -3
  213. data/man/man8/puppet-key.8 +1 -1
  214. data/man/man8/puppet-lookup.8 +2 -2
  215. data/man/man8/puppet-man.8 +1 -1
  216. data/man/man8/puppet-module.8 +4 -1
  217. data/man/man8/puppet-node.8 +4 -4
  218. data/man/man8/puppet-parser.8 +1 -1
  219. data/man/man8/puppet-plugin.8 +1 -1
  220. data/man/man8/puppet-report.8 +1 -1
  221. data/man/man8/puppet-resource.8 +1 -1
  222. data/man/man8/puppet-script.8 +1 -1
  223. data/man/man8/puppet-ssl.8 +1 -1
  224. data/man/man8/puppet-status.8 +2 -2
  225. data/man/man8/puppet.8 +2 -2
  226. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  227. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  228. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  229. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  230. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-enabled.txt → dnf-module-list.txt} +6 -0
  231. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  232. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  233. data/spec/integration/application/agent_spec.rb +202 -52
  234. data/spec/integration/application/apply_spec.rb +149 -149
  235. data/spec/integration/application/config_spec.rb +74 -0
  236. data/spec/integration/application/doc_spec.rb +16 -6
  237. data/spec/integration/application/filebucket_spec.rb +70 -21
  238. data/spec/integration/application/help_spec.rb +42 -0
  239. data/spec/integration/application/lookup_spec.rb +13 -0
  240. data/spec/integration/application/module_spec.rb +68 -0
  241. data/spec/integration/application/plugin_spec.rb +75 -2
  242. data/spec/integration/configurer_spec.rb +14 -0
  243. data/spec/integration/data_binding_spec.rb +82 -0
  244. data/spec/integration/defaults_spec.rb +27 -3
  245. data/spec/integration/directory_environments_spec.rb +17 -17
  246. data/spec/integration/http/client_spec.rb +6 -1
  247. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  248. data/spec/integration/network/http_pool_spec.rb +73 -0
  249. data/spec/integration/node/environment_spec.rb +1 -1
  250. data/spec/integration/parser/compiler_spec.rb +11 -0
  251. data/spec/integration/type/file_spec.rb +1 -1
  252. data/spec/integration/util/execution_spec.rb +22 -0
  253. data/spec/integration/util/windows/adsi_spec.rb +7 -2
  254. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  255. data/spec/integration/util/windows/process_spec.rb +26 -32
  256. data/spec/integration/util/windows/registry_spec.rb +7 -7
  257. data/spec/integration/util/windows/user_spec.rb +47 -5
  258. data/spec/integration/util_spec.rb +7 -33
  259. data/spec/lib/puppet_spec/https.rb +6 -0
  260. data/spec/lib/puppet_spec/matchers.rb +0 -80
  261. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  262. data/spec/shared_contexts/types_setup.rb +2 -0
  263. data/spec/unit/agent_spec.rb +47 -1
  264. data/spec/unit/application/agent_spec.rb +7 -8
  265. data/spec/unit/application/doc_spec.rb +2 -2
  266. data/spec/unit/application/face_base_spec.rb +6 -4
  267. data/spec/unit/application/facts_spec.rb +41 -10
  268. data/spec/unit/application/man_spec.rb +52 -0
  269. data/spec/unit/application/resource_spec.rb +3 -1
  270. data/spec/unit/application/ssl_spec.rb +15 -2
  271. data/spec/unit/application_spec.rb +9 -4
  272. data/spec/unit/configurer/downloader_spec.rb +10 -0
  273. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  274. data/spec/unit/configurer_spec.rb +86 -37
  275. data/spec/unit/confine_spec.rb +2 -1
  276. data/spec/unit/context/trusted_information_spec.rb +25 -2
  277. data/spec/unit/daemon_spec.rb +5 -64
  278. data/spec/unit/environments_spec.rb +99 -32
  279. data/spec/unit/face/config_spec.rb +59 -1
  280. data/spec/unit/face/module/search_spec.rb +17 -0
  281. data/spec/unit/face/node_spec.rb +2 -2
  282. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  283. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  284. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  285. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  286. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  287. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  288. data/spec/unit/file_system_spec.rb +1 -2
  289. data/spec/unit/http/client_spec.rb +74 -19
  290. data/spec/unit/http/external_client_spec.rb +9 -9
  291. data/spec/unit/http/resolver_spec.rb +24 -5
  292. data/spec/unit/http/response_spec.rb +6 -0
  293. data/spec/unit/http/service/ca_spec.rb +2 -3
  294. data/spec/unit/http/service/compiler_spec.rb +2 -3
  295. data/spec/unit/http/service/file_server_spec.rb +2 -3
  296. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  297. data/spec/unit/http/service/report_spec.rb +2 -3
  298. data/spec/unit/http/service_spec.rb +0 -1
  299. data/spec/unit/http/session_spec.rb +8 -21
  300. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  301. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  302. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  303. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  304. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  305. data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
  306. data/spec/unit/indirector/json_spec.rb +8 -8
  307. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  308. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  309. data/spec/unit/indirector/request_spec.rb +5 -5
  310. data/spec/unit/indirector/rest_spec.rb +14 -1
  311. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  312. data/spec/unit/indirector/yaml_spec.rb +7 -7
  313. data/spec/unit/interface_spec.rb +3 -3
  314. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  315. data/spec/unit/network/format_support_spec.rb +3 -2
  316. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  317. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  318. data/spec/unit/network/http/connection_spec.rb +552 -190
  319. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  320. data/spec/unit/network/http_pool_spec.rb +63 -57
  321. data/spec/unit/network/http_spec.rb +1 -1
  322. data/spec/unit/node/environment_spec.rb +18 -1
  323. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  324. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  325. data/spec/unit/parser/scope_spec.rb +1 -1
  326. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  327. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  328. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  329. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  330. data/spec/unit/provider/exec_spec.rb +4 -3
  331. data/spec/unit/provider/package/aix_spec.rb +29 -0
  332. data/spec/unit/provider/package/apt_spec.rb +77 -0
  333. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  334. data/spec/unit/provider/package/dnfmodule_spec.rb +25 -5
  335. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  336. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  337. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  338. data/spec/unit/provider/package/pip_spec.rb +42 -16
  339. data/spec/unit/provider/package/portage_spec.rb +5 -0
  340. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  341. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  342. data/spec/unit/provider/package/yum_spec.rb +47 -8
  343. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  344. data/spec/unit/provider/service/base_spec.rb +2 -4
  345. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  346. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  347. data/spec/unit/provider/service/debian_spec.rb +3 -5
  348. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  349. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  350. data/spec/unit/provider/service/init_spec.rb +46 -5
  351. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  352. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  353. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  354. data/spec/unit/provider/service/openwrt_spec.rb +2 -1
  355. data/spec/unit/provider/service/redhat_spec.rb +10 -1
  356. data/spec/unit/provider/service/runit_spec.rb +2 -1
  357. data/spec/unit/provider/service/smf_spec.rb +1 -1
  358. data/spec/unit/provider/service/src_spec.rb +3 -5
  359. data/spec/unit/provider/service/systemd_spec.rb +87 -19
  360. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  361. data/spec/unit/provider/service/windows_spec.rb +50 -14
  362. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  363. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  364. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  365. data/spec/unit/puppet_pal_2pec.rb +40 -0
  366. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  367. data/spec/unit/puppet_spec.rb +33 -0
  368. data/spec/unit/reports/http_spec.rb +1 -1
  369. data/spec/unit/reports/store_spec.rb +17 -13
  370. data/spec/unit/resource_spec.rb +3 -3
  371. data/spec/unit/rest/route_spec.rb +4 -4
  372. data/spec/unit/settings_spec.rb +182 -22
  373. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  374. data/spec/unit/ssl/state_machine_spec.rb +52 -8
  375. data/spec/unit/test/test_helper_spec.rb +17 -0
  376. data/spec/unit/transaction/persistence_spec.rb +15 -0
  377. data/spec/unit/transaction/report_spec.rb +3 -1
  378. data/spec/unit/type/file/source_spec.rb +4 -4
  379. data/spec/unit/type/file_spec.rb +122 -96
  380. data/spec/unit/type/filebucket_spec.rb +1 -1
  381. data/spec/unit/type/service_spec.rb +218 -8
  382. data/spec/unit/type/user_spec.rb +32 -3
  383. data/spec/unit/type_spec.rb +50 -0
  384. data/spec/unit/util/autoload_spec.rb +2 -1
  385. data/spec/unit/util/character_encoding_spec.rb +4 -4
  386. data/spec/unit/util/checksums_spec.rb +16 -0
  387. data/spec/unit/util/command_line_spec.rb +11 -6
  388. data/spec/unit/util/log/destinations_spec.rb +1 -29
  389. data/spec/unit/util/package/version/range_spec.rb +22 -1
  390. data/spec/unit/util/run_mode_spec.rb +6 -6
  391. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  392. data/spec/unit/util/windows/service_spec.rb +4 -4
  393. data/spec/unit/util_spec.rb +3 -3
  394. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  395. data/tasks/manpages.rake +5 -35
  396. metadata +43 -49
  397. data/spec/integration/faces/config_spec.rb +0 -91
  398. data/spec/integration/faces/documentation_spec.rb +0 -57
  399. data/spec/integration/file_bucket/file_spec.rb +0 -50
  400. data/spec/integration/file_serving/content_spec.rb +0 -7
  401. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  402. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  403. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  404. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  405. data/spec/integration/module_tool/forge_spec.rb +0 -51
  406. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  407. data/spec/integration/provider/service/init_spec.rb +0 -48
  408. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  409. data/spec/integration/provider/service/windows_spec.rb +0 -50
  410. data/spec/integration/reference/providers_spec.rb +0 -21
  411. data/spec/integration/reports_spec.rb +0 -13
  412. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  413. data/spec/integration/ssl/host_spec.rb +0 -72
  414. data/spec/integration/ssl/key_spec.rb +0 -99
  415. data/spec/integration/test/test_helper_spec.rb +0 -31
  416. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  417. data/spec/unit/face/man_spec.rb +0 -25
  418. data/spec/unit/man_spec.rb +0 -31
@@ -54,10 +54,11 @@ describe Puppet::Confine do
54
54
  end
55
55
 
56
56
  it "should log failing confines with the label and message" do
57
+ Puppet[:log_level] = 'debug'
57
58
  allow(@confine).to receive(:pass?).and_return(false)
58
59
  expect(@confine).to receive(:message).and_return("My message")
59
60
  expect(@confine).to receive(:label).and_return("Mylabel")
60
- expect(Puppet).to receive(:debug).with("Mylabel: My message")
61
+ expect(Puppet).to receive(:debug) { |&b| expect(b.call).to eq("Mylabel: My message") }
61
62
  @confine.valid?
62
63
  end
63
64
  end
@@ -41,8 +41,12 @@ describe Puppet::Context::TrustedInformation, :unless => RUBY_PLATFORM == 'java'
41
41
  }
42
42
 
43
43
  def allow_external_trusted_data(certname, data)
44
- Puppet[:trusted_external_command] = '/usr/bin/generate_data.sh'
45
- allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/generate_data.sh', certname], anything).and_return(JSON.dump(data))
44
+ command = 'generate_data.sh'
45
+ Puppet[:trusted_external_command] = command
46
+ # The expand_path bit is necessary b/c :trusted_external_command is a
47
+ # file_or_directory setting, and file_or_directory settings automatically
48
+ # expand the given path.
49
+ allow(Puppet::Util::Execution).to receive(:execute).with([File.expand_path(command), certname], anything).and_return(JSON.dump(data))
46
50
  end
47
51
 
48
52
  it "defaults external to an empty hash" do
@@ -90,6 +94,25 @@ describe Puppet::Context::TrustedInformation, :unless => RUBY_PLATFORM == 'java'
90
94
 
91
95
  expect(trusted.external).to eq(external_data)
92
96
  end
97
+
98
+ it 'does not run the trusted external command when creating a trusted context' do
99
+ Puppet[:trusted_external_command] = '/usr/bin/generate_data.sh'
100
+
101
+ expect(Puppet::Util::Execution).to receive(:execute).never
102
+ Puppet::Context::TrustedInformation.remote(true, 'cert name', cert)
103
+ end
104
+
105
+ it 'only runs the trusted external command the first time it is invoked' do
106
+ command = 'generate_data.sh'
107
+ Puppet[:trusted_external_command] = command
108
+
109
+ # See allow_external_trusted_data to understand why expand_path is necessary
110
+ expect(Puppet::Util::Execution).to receive(:execute).with([File.expand_path(command), 'cert name'], anything).and_return(JSON.dump(external_data)).once
111
+
112
+ trusted = Puppet::Context::TrustedInformation.remote(true, 'cert name', cert)
113
+ trusted.external
114
+ trusted.external
115
+ end
93
116
  end
94
117
 
95
118
  context "when local" do
@@ -32,13 +32,17 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
32
32
  let(:pidfile) { double("PidFile", :lock => true, :unlock => true, :file_path => 'fake.pid') }
33
33
  let(:scheduler) { RecordingScheduler.new }
34
34
 
35
- let(:daemon) { Puppet::Daemon.new(pidfile, scheduler) }
35
+ let(:daemon) { Puppet::Daemon.new(agent, pidfile, scheduler) }
36
36
 
37
37
  before(:each) do
38
38
  allow(Signal).to receive(:trap)
39
39
  allow(daemon).to receive(:close_streams).and_return(nil)
40
40
  end
41
41
 
42
+ it "should fail when no agent is provided" do
43
+ expect { Puppet::Daemon.new(nil, pidfile, scheduler) }.to raise_error(Puppet::DevError)
44
+ end
45
+
42
46
  it "should reopen the Log logs when told to reopen logs" do
43
47
  expect(Puppet::Util::Log).to receive(:reopen)
44
48
  daemon.reopen_logs
@@ -72,65 +76,21 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
72
76
  allow(daemon).to receive(:set_signal_traps)
73
77
  end
74
78
 
75
- it "should fail if it has neither agent nor server" do
76
- expect { daemon.start }.to raise_error(Puppet::DevError)
77
- end
78
-
79
79
  it "should create its pidfile" do
80
80
  expect(pidfile).to receive(:lock).and_return(true)
81
-
82
- daemon.agent = agent
83
81
  daemon.start
84
82
  end
85
83
 
86
84
  it "should fail if it cannot lock" do
87
85
  expect(pidfile).to receive(:lock).and_return(false)
88
- daemon.agent = agent
89
-
90
86
  expect { daemon.start }.to raise_error(RuntimeError, "Could not create PID file: #{pidfile.file_path}")
91
87
  end
92
88
 
93
- it "should start its server if one is configured" do
94
- daemon.server = server
95
-
96
- expect(server).to receive(:start)
97
-
98
- daemon.start
99
- end
100
-
101
89
  it "disables the reparse of configs if the filetimeout is 0" do
102
90
  Puppet[:filetimeout] = 0
103
- daemon.agent = agent
104
-
105
91
  daemon.start
106
-
107
92
  expect(scheduler.jobs[0]).not_to be_enabled
108
93
  end
109
-
110
- it "disables the agent run when there is no agent" do
111
- Puppet[:filetimeout] = 0
112
- daemon.server = server
113
-
114
- daemon.start
115
-
116
- expect(scheduler.jobs[1]).not_to be_enabled
117
- end
118
-
119
- it "waits for the server to shutdown when there is one" do
120
- daemon.server = server
121
-
122
- expect(server).to receive(:wait_for_shutdown)
123
-
124
- daemon.start
125
- end
126
-
127
- it "waits for the server to shutdown when there is one" do
128
- daemon.server = server
129
-
130
- expect(server).to receive(:wait_for_shutdown)
131
-
132
- daemon.start
133
- end
134
94
  end
135
95
 
136
96
  describe "when stopping" do
@@ -146,14 +106,6 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
146
106
  without_warnings { Puppet::Application = Puppet::Application.superclass }
147
107
  end
148
108
 
149
- it "should stop its server if one is configured" do
150
- expect(server).to receive(:stop)
151
-
152
- daemon.server = server
153
-
154
- expect { daemon.stop }.to exit_with 0
155
- end
156
-
157
109
  it 'should request a stop from Puppet::Application' do
158
110
  expect(Puppet::Application).to receive(:stop!)
159
111
  expect { daemon.stop }.to exit_with 0
@@ -161,7 +113,6 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
161
113
 
162
114
  it "should remove its pidfile" do
163
115
  expect(pidfile).to receive(:unlock)
164
-
165
116
  expect { daemon.stop }.to exit_with 0
166
117
  end
167
118
 
@@ -188,8 +139,6 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
188
139
  expect(agent).to receive(:run).with({:splay => false}).and_raise(Puppet::LockError, 'Failed to aquire lock')
189
140
  expect(Puppet).to receive(:notice).with('Not triggering already-running agent')
190
141
 
191
- daemon.agent = agent
192
-
193
142
  daemon.reload
194
143
  end
195
144
 
@@ -197,8 +146,6 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
197
146
  expect(agent).to receive(:run).with({:splay => false})
198
147
  expect(Puppet).not_to receive(:notice).with('Not triggering already-running agent')
199
148
 
200
- daemon.agent = agent
201
-
202
149
  daemon.reload
203
150
  end
204
151
  end
@@ -220,15 +167,11 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
220
167
 
221
168
  it "should reexec itself if no agent is available" do
222
169
  expect(daemon).to receive(:reexec)
223
-
224
170
  daemon.restart
225
171
  end
226
172
 
227
173
  it "should reexec itself if the agent is not running" do
228
- expect(agent).to receive(:running?).and_return(false)
229
- daemon.agent = agent
230
174
  expect(daemon).to receive(:reexec)
231
-
232
175
  daemon.restart
233
176
  end
234
177
  end
@@ -247,14 +190,12 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
247
190
  it "should shut down without exiting" do
248
191
  daemon.argv = %w{foo}
249
192
  expect(daemon).to receive(:stop).with(:exit => false)
250
-
251
193
  daemon.reexec
252
194
  end
253
195
 
254
196
  it "should call 'exec' with the original executable and arguments" do
255
197
  daemon.argv = %w{foo}
256
198
  expect(daemon).to receive(:exec).with($0 + " foo")
257
-
258
199
  daemon.reexec
259
200
  end
260
201
  end
@@ -436,25 +436,6 @@ config_version=$vardir/random/scripts
436
436
  end
437
437
  end
438
438
  end
439
-
440
- context "custom cache expiration service" do
441
- it "consults the custom service to expire the cache" do
442
- loader_from(:filesystem => [directory_tree],
443
- :directory => directory_tree.children.first) do |loader|
444
- service = ReplayExpirationService.new([true])
445
- using_expiration_service(service) do
446
-
447
- cached = Puppet::Environments::Cached.new(loader)
448
- cached.get(:an_environment)
449
- cached.get(:an_environment)
450
-
451
- expect(service.created_envs).to include(:an_environment)
452
- expect(service.expired_envs).to include(:an_environment)
453
- expect(service.evicted_envs).to include(:an_environment)
454
- end
455
- end
456
- end
457
- end
458
439
  end
459
440
  end
460
441
 
@@ -645,6 +626,102 @@ config_version=$vardir/random/scripts
645
626
  end
646
627
  end
647
628
 
629
+ context "expiration policies" do
630
+ let(:service) { ReplayExpirationService.new }
631
+
632
+ # The environment named `:an_environment` will already be loaded when the
633
+ # block is yielded to
634
+ def with_environment_loaded(service, &block)
635
+ loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
636
+ using_expiration_service(service) do
637
+ cached = Puppet::Environments::Cached.new(loader)
638
+ cached.get!(:an_environment)
639
+
640
+ yield cached if block_given?
641
+ end
642
+ end
643
+ end
644
+
645
+ it "notifies when the environment is first created" do
646
+ with_environment_loaded(service)
647
+
648
+ expect(service.created_envs).to eq([:an_environment])
649
+ end
650
+
651
+ it "does not evict an unexpired environment" do
652
+ Puppet[:environment_timeout] = 'unlimited'
653
+
654
+ with_environment_loaded(service) do |cached|
655
+ cached.get!(:an_environment)
656
+ end
657
+
658
+ expect(service.created_envs).to eq([:an_environment])
659
+ expect(service.evicted_envs).to eq([])
660
+ end
661
+
662
+ it "evicts an expired environment" do
663
+ service = ReplayExpirationService.new
664
+
665
+ # The `Cached#clear_all_expired` method tries to optimize the case where
666
+ # no entries are expired. But if `Time.now < @next_expiration` and there is
667
+ # an expired entry, then the `service#expired?` method is called twice.
668
+ expect(service).to receive(:expired?).twice.and_return(true)
669
+
670
+ with_environment_loaded(service) do |cached|
671
+ cached.get!(:an_environment)
672
+ end
673
+
674
+ expect(service.created_envs).to eq([:an_environment, :an_environment])
675
+ expect(service.evicted_envs).to eq([:an_environment])
676
+ end
677
+
678
+ it "evicts an environment that hasn't been recently touched" do
679
+ Puppet[:environment_timeout] = 1
680
+ Puppet[:environment_timeout_mode] = :from_last_used
681
+
682
+ with_environment_loaded(service) do |cached|
683
+ future = Time.now + 60
684
+ expect(Time).to receive(:now).and_return(future).at_least(:once)
685
+
686
+ # this should cause the cached environment to be evicted and a new one created
687
+ cached.get!(:an_environment)
688
+ end
689
+
690
+ expect(service.created_envs).to eq([:an_environment, :an_environment])
691
+ expect(service.evicted_envs).to eq([:an_environment])
692
+
693
+ end
694
+
695
+ it "reuses an environment that was recently touched" do
696
+ Puppet[:environment_timeout] = 60
697
+ Puppet[:environment_timeout_mode] = :from_last_used
698
+
699
+ with_environment_loaded(service) do |cached|
700
+ # reuse the already cached environment
701
+ cached.get!(:an_environment)
702
+ end
703
+
704
+ expect(service.created_envs).to eq([:an_environment])
705
+ expect(service.evicted_envs).to eq([])
706
+ end
707
+
708
+ it "evicts a recently touched environment" do
709
+ Puppet[:environment_timeout] = 60
710
+ Puppet[:environment_timeout_mode] = :from_last_used
711
+
712
+ # see note above about "twice"
713
+ expect(service).to receive(:expired?).twice.and_return(true)
714
+
715
+ with_environment_loaded(service) do |cached|
716
+ # even though the environment was recently touched, it's been expired
717
+ cached.get!(:an_environment)
718
+ end
719
+
720
+ expect(service.created_envs).to eq([:an_environment, :an_environment])
721
+ expect(service.evicted_envs).to eq([:an_environment])
722
+ end
723
+ end
724
+
648
725
  it "gets an environment.conf" do
649
726
  loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
650
727
  expect(Puppet::Environments::Cached.new(loader).get_conf(:an_environment)).to match_environment_conf(:an_environment).
@@ -746,31 +823,21 @@ config_version=$vardir/random/scripts
746
823
  end
747
824
  end
748
825
 
749
- class ReplayExpirationService
750
- attr_reader :created_envs, :expired_envs, :evicted_envs
826
+ class ReplayExpirationService < Puppet::Environments::Cached::DefaultCacheExpirationService
827
+ attr_reader :created_envs, :evicted_envs
751
828
 
752
- def initialize(expiration_sequence)
829
+ def initialize
753
830
  @created_envs = []
754
- @expired_envs = []
755
831
  @evicted_envs = []
756
- @expiration_sequence = expiration_sequence
757
832
  end
758
833
 
759
834
  def created(env)
760
835
  @created_envs << env.name
761
836
  end
762
837
 
763
- def expired?(env_name)
764
- # make expired? idempotent
765
- return true if @expired_envs.include? (env_name)
766
- @expired_envs << env_name
767
- @expiration_sequence.pop
768
- end
769
-
770
838
  def evicted(env_name)
771
839
  @evicted_envs << env_name
772
840
  end
773
841
  end
774
-
775
842
  end
776
843
  end
@@ -200,6 +200,44 @@ trace = true
200
200
  expect(Puppet::FileSystem).to receive(:open).with(path, nil, 'r+:UTF-8')
201
201
  subject.set('foo', 'bar')
202
202
  end
203
+
204
+ it "sets settings into the [server] section when setting [master] section settings" do
205
+ initial_contents = <<-CONFIG
206
+ [master]
207
+ setting = old_setting_value
208
+ untouched_setting = value
209
+ CONFIG
210
+
211
+ myinitialfile = StringIO.new(initial_contents)
212
+ allow(Puppet::FileSystem).to receive(:open).with(path, anything, anything).and_yield(myinitialfile)
213
+
214
+ expect {
215
+ subject.set('setting', 'new_setting_value', {:section => 'master'})
216
+ }.to output("Deleted setting from 'master': 'setting = old_setting_value', and adding it to 'server' section\n").to_stdout
217
+ modified_content = <<-CONFIG
218
+ [master]
219
+ untouched_setting = value
220
+ [server]
221
+ setting = new_setting_value
222
+ CONFIG
223
+
224
+ mymodifiedfile = StringIO.new(modified_content)
225
+ expect(myinitialfile.string).to match(mymodifiedfile.string)
226
+ end
227
+
228
+ it "setting [master] section settings, sets settings into [server] section instead" do
229
+ myinitialfile = StringIO.new("")
230
+ allow(Puppet::FileSystem).to receive(:open).with(path, anything, anything).and_yield(myinitialfile)
231
+ subject.set('setting_name', 'value', {:section => 'master'})
232
+
233
+ expected_content = <<-CONFIG
234
+ [server]
235
+ setting_name = value
236
+ CONFIG
237
+
238
+ myexpectedfile = StringIO.new(expected_content)
239
+ expect(myinitialfile.string).to match(myexpectedfile.string)
240
+ end
203
241
  end
204
242
 
205
243
  context 'when the puppet.conf file does not exist' do
@@ -234,7 +272,9 @@ trace = true
234
272
  allow(Puppet::Settings::IniFile::Manipulator).to receive(:new).and_return(manipulator)
235
273
 
236
274
  expect(manipulator).to receive(:delete).with('main', 'setting').and_return(' setting=value')
237
- expect { subject.delete('setting', {:section => 'main'}) }.to have_printed("Deleted setting from 'main': 'setting=value'")
275
+ expect {
276
+ subject.delete('setting', {:section => 'main'})
277
+ }.to output("Deleted setting from 'main': 'setting=value'\n").to_stdout
238
278
  end
239
279
 
240
280
  it 'prints a warning when a setting is not found to delete' do
@@ -247,6 +287,24 @@ trace = true
247
287
  expect(Puppet).to receive(:warning).with("No setting found in configuration file for section 'main' setting name 'setting'")
248
288
  subject.delete('setting', {:section => 'main'})
249
289
  end
290
+
291
+ ['master', 'server'].each do |section|
292
+ describe "when deleting from [#{section}] section" do
293
+ it "deletes section values from both [server] and [master] sections" do
294
+ allow(Puppet::FileSystem).to receive(:open).with(path, anything, anything).and_yield(StringIO.new)
295
+ config = Puppet::Settings::IniFile.new([Puppet::Settings::IniFile::DefaultSection.new])
296
+ manipulator = Puppet::Settings::IniFile::Manipulator.new(config)
297
+ allow(Puppet::Settings::IniFile::Manipulator).to receive(:new).and_return(manipulator)
298
+
299
+ expect(manipulator).to receive(:delete).with('master', 'setting').and_return('setting=value')
300
+ expect(manipulator).to receive(:delete).with('server', 'setting').and_return('setting=value')
301
+ expect {
302
+ subject.delete('setting', {:section => section})
303
+ }.to output(/Deleted setting from 'master': 'setting'\nDeleted setting from 'server': 'setting'\n/).to_stdout
304
+ end
305
+ end
306
+ end
307
+
250
308
  end
251
309
 
252
310
  shared_examples_for :config_printing_a_section do |section|