puppet 6.14.0-universal-darwin → 6.19.0-universal-darwin

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

Potentially problematic release.


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

Files changed (496) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/Gemfile +4 -2
  4. data/Gemfile.lock +36 -34
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  7. data/ext/windows/service/daemon.rb +3 -3
  8. data/lib/puppet.rb +33 -9
  9. data/lib/puppet/agent.rb +20 -14
  10. data/lib/puppet/agent/locker.rb +0 -7
  11. data/lib/puppet/application/agent.rb +25 -9
  12. data/lib/puppet/application/apply.rb +18 -20
  13. data/lib/puppet/application/device.rb +1 -1
  14. data/lib/puppet/application/doc.rb +1 -1
  15. data/lib/puppet/application/filebucket.rb +5 -14
  16. data/lib/puppet/application/lookup.rb +16 -4
  17. data/lib/puppet/application/plugin.rb +1 -0
  18. data/lib/puppet/application/ssl.rb +3 -3
  19. data/lib/puppet/configurer.rb +68 -24
  20. data/lib/puppet/configurer/downloader.rb +31 -10
  21. data/lib/puppet/configurer/plugin_handler.rb +1 -1
  22. data/lib/puppet/confine.rb +2 -2
  23. data/lib/puppet/confine/any.rb +1 -1
  24. data/lib/puppet/context/trusted_information.rb +14 -8
  25. data/lib/puppet/daemon.rb +13 -27
  26. data/lib/puppet/defaults.rb +141 -41
  27. data/lib/puppet/environments.rb +55 -15
  28. data/lib/puppet/face/catalog.rb +1 -1
  29. data/lib/puppet/face/config.rb +46 -16
  30. data/lib/puppet/face/facts.rb +1 -1
  31. data/lib/puppet/face/help.rb +29 -3
  32. data/lib/puppet/face/module/search.rb +5 -0
  33. data/lib/puppet/face/node.rb +3 -3
  34. data/lib/puppet/face/node/clean.rb +2 -2
  35. data/lib/puppet/face/plugin.rb +2 -2
  36. data/lib/puppet/face/status.rb +1 -1
  37. data/lib/puppet/feature/base.rb +1 -1
  38. data/lib/puppet/file_bucket/dipper.rb +1 -1
  39. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  40. data/lib/puppet/file_serving/metadata.rb +4 -1
  41. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  42. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  43. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  44. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  45. data/lib/puppet/file_system/file_impl.rb +17 -13
  46. data/lib/puppet/file_system/uniquefile.rb +12 -16
  47. data/lib/puppet/forge.rb +1 -1
  48. data/lib/puppet/forge/cache.rb +1 -1
  49. data/lib/puppet/forge/repository.rb +4 -7
  50. data/lib/puppet/functions/call.rb +1 -1
  51. data/lib/puppet/functions/filter.rb +1 -0
  52. data/lib/puppet/functions/lstrip.rb +4 -4
  53. data/lib/puppet/functions/new.rb +8 -3
  54. data/lib/puppet/functions/reduce.rb +2 -4
  55. data/lib/puppet/functions/reverse_each.rb +1 -1
  56. data/lib/puppet/functions/rstrip.rb +4 -4
  57. data/lib/puppet/functions/step.rb +1 -1
  58. data/lib/puppet/functions/strip.rb +4 -4
  59. data/lib/puppet/gettext/config.rb +5 -5
  60. data/lib/puppet/gettext/module_translations.rb +4 -4
  61. data/lib/puppet/http.rb +3 -0
  62. data/lib/puppet/http/client.rb +215 -60
  63. data/lib/puppet/http/external_client.rb +90 -0
  64. data/lib/puppet/http/redirector.rb +43 -7
  65. data/lib/puppet/http/resolver.rb +43 -3
  66. data/lib/puppet/http/resolver/server_list.rb +66 -24
  67. data/lib/puppet/http/resolver/settings.rb +21 -1
  68. data/lib/puppet/http/resolver/srv.rb +28 -2
  69. data/lib/puppet/http/response.rb +82 -1
  70. data/lib/puppet/http/retry_after_handler.rb +39 -0
  71. data/lib/puppet/http/service.rb +70 -2
  72. data/lib/puppet/http/service/ca.rb +71 -9
  73. data/lib/puppet/http/service/compiler.rb +214 -12
  74. data/lib/puppet/http/service/file_server.rb +106 -5
  75. data/lib/puppet/http/service/puppetserver.rb +39 -0
  76. data/lib/puppet/http/service/report.rb +36 -3
  77. data/lib/puppet/http/session.rb +60 -8
  78. data/lib/puppet/indirector.rb +1 -1
  79. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  80. data/lib/puppet/indirector/catalog/rest.rb +2 -1
  81. data/lib/puppet/indirector/exec.rb +1 -1
  82. data/lib/puppet/indirector/facts/facter.rb +3 -3
  83. data/lib/puppet/indirector/facts/rest.rb +2 -1
  84. data/lib/puppet/indirector/facts/yaml.rb +1 -1
  85. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  86. data/lib/puppet/indirector/file_content/http.rb +5 -0
  87. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  88. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  89. data/lib/puppet/indirector/file_metadata/rest.rb +6 -4
  90. data/lib/puppet/indirector/hiera.rb +4 -0
  91. data/lib/puppet/indirector/indirection.rb +1 -1
  92. data/lib/puppet/indirector/json.rb +1 -1
  93. data/lib/puppet/indirector/msgpack.rb +1 -1
  94. data/lib/puppet/indirector/node/rest.rb +2 -1
  95. data/lib/puppet/indirector/report/processor.rb +2 -2
  96. data/lib/puppet/indirector/report/yaml.rb +23 -0
  97. data/lib/puppet/indirector/request.rb +5 -5
  98. data/lib/puppet/indirector/rest.rb +7 -1
  99. data/lib/puppet/indirector/status/rest.rb +2 -1
  100. data/lib/puppet/indirector/yaml.rb +1 -1
  101. data/lib/puppet/metatype/manager.rb +80 -80
  102. data/lib/puppet/module.rb +1 -2
  103. data/lib/puppet/network/format_support.rb +2 -2
  104. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  105. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  106. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  107. data/lib/puppet/network/http/base_pool.rb +6 -1
  108. data/lib/puppet/network/http/compression.rb +7 -0
  109. data/lib/puppet/network/http/connection.rb +2 -0
  110. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  111. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  112. data/lib/puppet/network/http/pool.rb +2 -4
  113. data/lib/puppet/network/http/route.rb +2 -2
  114. data/lib/puppet/network/http_pool.rb +2 -1
  115. data/lib/puppet/node/environment.rb +22 -5
  116. data/lib/puppet/node/facts.rb +17 -0
  117. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  118. data/lib/puppet/pal/pal_impl.rb +30 -31
  119. data/lib/puppet/parameter.rb +1 -1
  120. data/lib/puppet/parser/ast/leaf.rb +5 -5
  121. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  122. data/lib/puppet/parser/compiler.rb +43 -33
  123. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  124. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  125. data/lib/puppet/parser/environment_compiler.rb +4 -1
  126. data/lib/puppet/parser/functions.rb +18 -9
  127. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  128. data/lib/puppet/parser/functions/filter.rb +1 -0
  129. data/lib/puppet/parser/resource.rb +3 -2
  130. data/lib/puppet/parser/resource/param.rb +6 -0
  131. data/lib/puppet/parser/type_loader.rb +2 -2
  132. data/lib/puppet/pops/adaptable.rb +7 -13
  133. data/lib/puppet/pops/adapters.rb +8 -4
  134. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  135. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  136. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  137. data/lib/puppet/pops/issues.rb +5 -0
  138. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  139. data/lib/puppet/pops/loaders.rb +24 -15
  140. data/lib/puppet/pops/lookup/context.rb +1 -1
  141. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  143. data/lib/puppet/pops/types/iterable.rb +34 -8
  144. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  145. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  146. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  147. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  148. data/lib/puppet/provider/file/windows.rb +1 -1
  149. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  150. data/lib/puppet/provider/package/aix.rb +17 -2
  151. data/lib/puppet/provider/package/apt.rb +98 -1
  152. data/lib/puppet/provider/package/aptitude.rb +1 -1
  153. data/lib/puppet/provider/package/dnfmodule.rb +61 -14
  154. data/lib/puppet/provider/package/dpkg.rb +1 -1
  155. data/lib/puppet/provider/package/gem.rb +45 -9
  156. data/lib/puppet/provider/package/pacman.rb +2 -5
  157. data/lib/puppet/provider/package/pip.rb +143 -48
  158. data/lib/puppet/provider/package/pip2.rb +17 -0
  159. data/lib/puppet/provider/package/pip3.rb +0 -2
  160. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  161. data/lib/puppet/provider/package/pkgng.rb +16 -4
  162. data/lib/puppet/provider/package/portage.rb +2 -2
  163. data/lib/puppet/provider/package/puppet_gem.rb +11 -2
  164. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  165. data/lib/puppet/provider/package/rpm.rb +6 -213
  166. data/lib/puppet/provider/package/yum.rb +101 -20
  167. data/lib/puppet/provider/package/zypper.rb +62 -1
  168. data/lib/puppet/provider/service/systemd.rb +22 -4
  169. data/lib/puppet/provider/service/windows.rb +23 -7
  170. data/lib/puppet/provider/user/aix.rb +1 -1
  171. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  172. data/lib/puppet/provider/user/useradd.rb +16 -5
  173. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  174. data/lib/puppet/reports/http.rb +15 -9
  175. data/lib/puppet/resource.rb +2 -1
  176. data/lib/puppet/resource/type.rb +10 -1
  177. data/lib/puppet/resource/type_collection.rb +20 -16
  178. data/lib/puppet/rest/route.rb +2 -2
  179. data/lib/puppet/runtime.rb +25 -2
  180. data/lib/puppet/settings.rb +20 -6
  181. data/lib/puppet/ssl.rb +1 -0
  182. data/lib/puppet/ssl/host.rb +4 -4
  183. data/lib/puppet/ssl/oids.rb +1 -0
  184. data/lib/puppet/ssl/ssl_context.rb +2 -2
  185. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  186. data/lib/puppet/ssl/state_machine.rb +79 -37
  187. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  188. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  189. data/lib/puppet/test/test_helper.rb +19 -14
  190. data/lib/puppet/transaction.rb +2 -2
  191. data/lib/puppet/transaction/persistence.rb +1 -1
  192. data/lib/puppet/transaction/report.rb +14 -10
  193. data/lib/puppet/trusted_external.rb +29 -1
  194. data/lib/puppet/type.rb +21 -8
  195. data/lib/puppet/type/file.rb +40 -15
  196. data/lib/puppet/type/file/checksum.rb +4 -4
  197. data/lib/puppet/type/file/source.rb +35 -13
  198. data/lib/puppet/type/filebucket.rb +1 -1
  199. data/lib/puppet/type/notify.rb +2 -2
  200. data/lib/puppet/type/package.rb +41 -3
  201. data/lib/puppet/type/service.rb +59 -8
  202. data/lib/puppet/type/user.rb +19 -29
  203. data/lib/puppet/util.rb +41 -3
  204. data/lib/puppet/util/at_fork.rb +1 -1
  205. data/lib/puppet/util/autoload.rb +13 -25
  206. data/lib/puppet/util/character_encoding.rb +9 -5
  207. data/lib/puppet/util/checksums.rb +19 -4
  208. data/lib/puppet/util/connection.rb +8 -8
  209. data/lib/puppet/util/execution.rb +2 -2
  210. data/lib/puppet/util/fileparsing.rb +2 -2
  211. data/lib/puppet/util/instance_loader.rb +14 -10
  212. data/lib/puppet/util/log/destinations.rb +1 -10
  213. data/lib/puppet/util/package/version/debian.rb +175 -0
  214. data/lib/puppet/util/package/version/gem.rb +15 -0
  215. data/lib/puppet/util/package/version/pip.rb +167 -0
  216. data/lib/puppet/util/package/version/range.rb +53 -0
  217. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  218. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  219. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  220. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  221. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  222. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  223. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  224. data/lib/puppet/util/package/version/rpm.rb +73 -0
  225. data/lib/puppet/util/pidlock.rb +13 -7
  226. data/lib/puppet/util/platform.rb +5 -0
  227. data/lib/puppet/util/provider_features.rb +1 -1
  228. data/lib/puppet/util/reference.rb +1 -1
  229. data/lib/puppet/util/rpm_compare.rb +193 -0
  230. data/lib/puppet/util/run_mode.rb +5 -1
  231. data/lib/puppet/util/windows.rb +1 -0
  232. data/lib/puppet/util/windows/adsi.rb +2 -2
  233. data/lib/puppet/util/windows/api_types.rb +60 -33
  234. data/lib/puppet/util/windows/eventlog.rb +1 -6
  235. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  236. data/lib/puppet/util/windows/principal.rb +8 -6
  237. data/lib/puppet/util/windows/process.rb +15 -14
  238. data/lib/puppet/util/windows/registry.rb +11 -11
  239. data/lib/puppet/util/windows/security.rb +5 -4
  240. data/lib/puppet/util/windows/service.rb +43 -26
  241. data/lib/puppet/util/windows/sid.rb +3 -3
  242. data/lib/puppet/util/windows/user.rb +242 -8
  243. data/lib/puppet/version.rb +1 -1
  244. data/locales/puppet.pot +627 -507
  245. data/man/man5/puppet.conf.5 +93 -20
  246. data/man/man8/puppet-agent.8 +7 -4
  247. data/man/man8/puppet-apply.8 +1 -1
  248. data/man/man8/puppet-catalog.8 +1 -1
  249. data/man/man8/puppet-config.8 +6 -6
  250. data/man/man8/puppet-describe.8 +1 -1
  251. data/man/man8/puppet-device.8 +1 -1
  252. data/man/man8/puppet-doc.8 +1 -1
  253. data/man/man8/puppet-epp.8 +1 -1
  254. data/man/man8/puppet-facts.8 +1 -1
  255. data/man/man8/puppet-filebucket.8 +1 -1
  256. data/man/man8/puppet-generate.8 +1 -1
  257. data/man/man8/puppet-help.8 +6 -3
  258. data/man/man8/puppet-key.8 +1 -1
  259. data/man/man8/puppet-lookup.8 +2 -2
  260. data/man/man8/puppet-man.8 +1 -1
  261. data/man/man8/puppet-module.8 +4 -1
  262. data/man/man8/puppet-node.8 +4 -4
  263. data/man/man8/puppet-parser.8 +1 -1
  264. data/man/man8/puppet-plugin.8 +1 -1
  265. data/man/man8/puppet-report.8 +1 -1
  266. data/man/man8/puppet-resource.8 +1 -1
  267. data/man/man8/puppet-script.8 +1 -1
  268. data/man/man8/puppet-ssl.8 +1 -1
  269. data/man/man8/puppet-status.8 +2 -2
  270. data/man/man8/puppet.8 +2 -2
  271. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  272. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  273. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  274. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  275. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  276. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  277. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  278. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  279. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  280. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  281. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  282. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  283. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  284. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  285. data/spec/integration/application/agent_spec.rb +479 -0
  286. data/spec/integration/application/apply_spec.rb +279 -150
  287. data/spec/integration/application/config_spec.rb +74 -0
  288. data/spec/integration/application/doc_spec.rb +16 -6
  289. data/spec/integration/application/filebucket_spec.rb +239 -0
  290. data/spec/integration/application/help_spec.rb +42 -0
  291. data/spec/integration/application/lookup_spec.rb +13 -0
  292. data/spec/integration/application/module_spec.rb +68 -0
  293. data/spec/integration/application/plugin_spec.rb +123 -0
  294. data/spec/integration/configurer_spec.rb +14 -0
  295. data/spec/integration/data_binding_spec.rb +82 -0
  296. data/spec/integration/defaults_spec.rb +27 -3
  297. data/spec/integration/directory_environments_spec.rb +17 -17
  298. data/spec/integration/http/client_spec.rb +39 -40
  299. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  300. data/spec/integration/indirector/report/yaml.rb +83 -0
  301. data/spec/integration/network/http_pool_spec.rb +84 -19
  302. data/spec/integration/node/environment_spec.rb +15 -0
  303. data/spec/integration/parser/compiler_spec.rb +11 -0
  304. data/spec/integration/type/file_spec.rb +1 -1
  305. data/spec/integration/util/execution_spec.rb +22 -0
  306. data/spec/integration/util/windows/adsi_spec.rb +8 -3
  307. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  308. data/spec/integration/util/windows/process_spec.rb +26 -32
  309. data/spec/integration/util/windows/registry_spec.rb +7 -7
  310. data/spec/integration/util/windows/user_spec.rb +47 -5
  311. data/spec/integration/util_spec.rb +7 -33
  312. data/spec/lib/puppet/test_ca.rb +2 -2
  313. data/spec/lib/puppet_spec/https.rb +16 -7
  314. data/spec/lib/puppet_spec/matchers.rb +0 -80
  315. data/spec/lib/puppet_spec/puppetserver.rb +127 -0
  316. data/spec/shared_contexts/https.rb +29 -0
  317. data/spec/shared_contexts/types_setup.rb +2 -0
  318. data/spec/unit/agent_spec.rb +80 -26
  319. data/spec/unit/application/agent_spec.rb +12 -9
  320. data/spec/unit/application/device_spec.rb +2 -2
  321. data/spec/unit/application/doc_spec.rb +2 -2
  322. data/spec/unit/application/face_base_spec.rb +6 -4
  323. data/spec/unit/application/facts_spec.rb +41 -10
  324. data/spec/unit/application/filebucket_spec.rb +22 -2
  325. data/spec/unit/application/man_spec.rb +52 -0
  326. data/spec/unit/application/resource_spec.rb +3 -1
  327. data/spec/unit/application/ssl_spec.rb +15 -2
  328. data/spec/unit/application_spec.rb +9 -4
  329. data/spec/unit/configurer/downloader_spec.rb +10 -0
  330. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  331. data/spec/unit/configurer_spec.rb +87 -38
  332. data/spec/unit/confine_spec.rb +2 -1
  333. data/spec/unit/context/trusted_information_spec.rb +25 -2
  334. data/spec/unit/daemon_spec.rb +5 -64
  335. data/spec/unit/defaults_spec.rb +24 -1
  336. data/spec/unit/environments_spec.rb +107 -32
  337. data/spec/unit/face/config_spec.rb +59 -1
  338. data/spec/unit/face/module/search_spec.rb +17 -0
  339. data/spec/unit/face/node_spec.rb +2 -2
  340. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  341. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  342. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  343. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  344. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  345. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  346. data/spec/unit/file_system_spec.rb +11 -2
  347. data/spec/unit/http/client_spec.rb +173 -59
  348. data/spec/unit/http/external_client_spec.rb +201 -0
  349. data/spec/unit/http/resolver_spec.rb +44 -5
  350. data/spec/unit/http/response_spec.rb +6 -0
  351. data/spec/unit/http/service/ca_spec.rb +27 -5
  352. data/spec/unit/http/service/compiler_spec.rb +186 -9
  353. data/spec/unit/http/service/file_server_spec.rb +37 -6
  354. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  355. data/spec/unit/http/service/report_spec.rb +5 -4
  356. data/spec/unit/http/service_spec.rb +3 -4
  357. data/spec/unit/http/session_spec.rb +48 -12
  358. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  359. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  360. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  361. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  362. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  363. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  364. data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
  365. data/spec/unit/indirector/json_spec.rb +8 -8
  366. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  367. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  368. data/spec/unit/indirector/request_spec.rb +5 -5
  369. data/spec/unit/indirector/rest_spec.rb +14 -1
  370. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  371. data/spec/unit/indirector/yaml_spec.rb +7 -7
  372. data/spec/unit/interface_spec.rb +3 -3
  373. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  374. data/spec/unit/network/format_support_spec.rb +3 -2
  375. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  376. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  377. data/spec/unit/network/http/connection_spec.rb +552 -190
  378. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  379. data/spec/unit/network/http/pool_spec.rb +3 -3
  380. data/spec/unit/network/http_pool_spec.rb +63 -57
  381. data/spec/unit/network/http_spec.rb +1 -1
  382. data/spec/unit/node/environment_spec.rb +33 -0
  383. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  384. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  385. data/spec/unit/parser/scope_spec.rb +1 -1
  386. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  387. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  388. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  389. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  390. data/spec/unit/provider/exec_spec.rb +4 -3
  391. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  392. data/spec/unit/provider/package/aix_spec.rb +29 -0
  393. data/spec/unit/provider/package/apt_spec.rb +107 -0
  394. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  395. data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
  396. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  397. data/spec/unit/provider/package/gem_spec.rb +40 -0
  398. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  399. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  400. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  401. data/spec/unit/provider/package/pip_spec.rb +68 -19
  402. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  403. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  404. data/spec/unit/provider/package/portage_spec.rb +5 -0
  405. data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
  406. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  407. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  408. data/spec/unit/provider/package/yum_spec.rb +274 -1
  409. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  410. data/spec/unit/provider/service/base_spec.rb +2 -4
  411. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  412. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  413. data/spec/unit/provider/service/debian_spec.rb +3 -5
  414. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  415. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  416. data/spec/unit/provider/service/init_spec.rb +46 -5
  417. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  418. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  419. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  420. data/spec/unit/provider/service/openwrt_spec.rb +2 -1
  421. data/spec/unit/provider/service/redhat_spec.rb +10 -1
  422. data/spec/unit/provider/service/runit_spec.rb +2 -1
  423. data/spec/unit/provider/service/smf_spec.rb +1 -1
  424. data/spec/unit/provider/service/src_spec.rb +3 -5
  425. data/spec/unit/provider/service/systemd_spec.rb +95 -18
  426. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  427. data/spec/unit/provider/service/windows_spec.rb +50 -14
  428. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  429. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  430. data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
  431. data/spec/unit/puppet_pal_2pec.rb +11 -0
  432. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  433. data/spec/unit/puppet_spec.rb +33 -0
  434. data/spec/unit/reports/http_spec.rb +70 -52
  435. data/spec/unit/reports/store_spec.rb +17 -13
  436. data/spec/unit/resource_spec.rb +3 -3
  437. data/spec/unit/rest/route_spec.rb +4 -4
  438. data/spec/unit/settings_spec.rb +44 -22
  439. data/spec/unit/ssl/host_spec.rb +4 -2
  440. data/spec/unit/ssl/oids_spec.rb +1 -0
  441. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  442. data/spec/unit/ssl/state_machine_spec.rb +90 -14
  443. data/spec/unit/test/test_helper_spec.rb +17 -0
  444. data/spec/unit/transaction/persistence_spec.rb +15 -0
  445. data/spec/unit/transaction/report_spec.rb +7 -1
  446. data/spec/unit/type/file/source_spec.rb +4 -4
  447. data/spec/unit/type/file_spec.rb +122 -96
  448. data/spec/unit/type/filebucket_spec.rb +1 -1
  449. data/spec/unit/type/service_spec.rb +218 -8
  450. data/spec/unit/type/user_spec.rb +32 -3
  451. data/spec/unit/type_spec.rb +50 -0
  452. data/spec/unit/util/at_fork_spec.rb +2 -2
  453. data/spec/unit/util/autoload_spec.rb +2 -1
  454. data/spec/unit/util/character_encoding_spec.rb +4 -4
  455. data/spec/unit/util/checksums_spec.rb +16 -0
  456. data/spec/unit/util/command_line_spec.rb +11 -6
  457. data/spec/unit/util/log/destinations_spec.rb +1 -29
  458. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  459. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  460. data/spec/unit/util/package/version/range_spec.rb +175 -0
  461. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  462. data/spec/unit/util/pidlock_spec.rb +83 -47
  463. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  464. data/spec/unit/util/run_mode_spec.rb +6 -6
  465. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  466. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  467. data/spec/unit/util/windows/service_spec.rb +4 -4
  468. data/spec/unit/util/windows/sid_spec.rb +2 -2
  469. data/spec/unit/util_spec.rb +3 -3
  470. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  471. data/tasks/generate_cert_fixtures.rake +15 -1
  472. data/tasks/manpages.rake +5 -35
  473. metadata +90 -51
  474. data/spec/integration/faces/config_spec.rb +0 -91
  475. data/spec/integration/faces/documentation_spec.rb +0 -57
  476. data/spec/integration/faces/plugin_spec.rb +0 -63
  477. data/spec/integration/file_bucket/file_spec.rb +0 -50
  478. data/spec/integration/file_serving/content_spec.rb +0 -7
  479. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  480. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  481. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  482. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  483. data/spec/integration/module_tool/forge_spec.rb +0 -64
  484. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  485. data/spec/integration/provider/service/init_spec.rb +0 -48
  486. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  487. data/spec/integration/provider/service/windows_spec.rb +0 -50
  488. data/spec/integration/reference/providers_spec.rb +0 -21
  489. data/spec/integration/reports_spec.rb +0 -13
  490. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  491. data/spec/integration/ssl/host_spec.rb +0 -72
  492. data/spec/integration/ssl/key_spec.rb +0 -99
  493. data/spec/integration/test/test_helper_spec.rb +0 -31
  494. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  495. data/spec/unit/face/man_spec.rb +0 -25
  496. data/spec/unit/man_spec.rb +0 -31
@@ -0,0 +1,128 @@
1
+ {
2
+ "pagination": {
3
+ "limit": 20,
4
+ "offset": 0,
5
+ "first": "/v3/releases?module=puppetlabs-bacula&sort_by=version&exclude_fields=readme%2Cchangelog%2Clicense%2Curi%2Cmodule%2Ctags%2Csupported%2Cfile_size%2Cdownloads%2Ccreated_at%2Cupdated_at%2Cdeleted_at&limit=20&offset=0",
6
+ "previous": null,
7
+ "current": "/v3/releases?module=puppetlabs-bacula&sort_by=version&exclude_fields=readme%2Cchangelog%2Clicense%2Curi%2Cmodule%2Ctags%2Csupported%2Cfile_size%2Cdownloads%2Ccreated_at%2Cupdated_at%2Cdeleted_at&limit=20&offset=0",
8
+ "next": null,
9
+ "total": 2
10
+ },
11
+ "results": [
12
+ {
13
+ "slug": "puppetlabs-bacula-0.0.2",
14
+ "version": "0.0.2",
15
+ "metadata": {
16
+ "description": "This module manages Bacula, a complete backup solution",
17
+ "source": "http://github.com/puppetlabs/puppetlabs-bacula",
18
+ "checksums": {
19
+ "templates/client_config.erb": "5d4005eda5ace78fd90a8cb6dcb388bd",
20
+ "spec/spec_helper.rb": "ca19ec4f451ebc7fdb035b52eae6e909",
21
+ "templates/bacula-fd.conf.erb": "344fff616e138fbf8cd150f4bab8125d",
22
+ "CHANGELOG": "a20043858790de6086b9b30c36806cd2",
23
+ "manifests/config/validate.pp": "7d2f9f7cffb2bd1d221eb699ea55f246",
24
+ "LICENSE": "26ce13c80c7a8493533c65c32dc29f09",
25
+ "manifests/director.pp": "36f34f749314634173b6a47b92a58421",
26
+ "manifests/config/client.pp": "5d25cbfd94be2829d9d530673cd2307f",
27
+ "lib/puppet/parser/functions/generate_clients.rb": "e09d77f88d18ec3e59bbe7bae4a48036",
28
+ "manifests/common.pp": "67391e5560ee7fc97d873ab5c3e2f84c",
29
+ "manifests/client.pp": "42e9255711d0a6abed6ab8deafb1248c",
30
+ "manifests/console.pp": "4cf8ac2f96f9268e2a3d70ed777797b7",
31
+ "README.md": "13d0f1119d510e41c539cbc3825a4f82",
32
+ "templates/bacula-sd.conf.erb": "df7987695bf1dd18bb789a2673b2cd95",
33
+ "manifests/config.pp": "624a225f85f907e7db5cf717561953f3",
34
+ "tests/init.pp": "b95d199119d5e592df7e1580bf23fe06",
35
+ "templates/bconsole.conf.erb": "ba5e1ef7d320a48bde6e403dc956952a",
36
+ "manifests/bat.pp": "3743bddf0197b4110e54a8e297e927e8",
37
+ "manifests/storage.pp": "84f4ec1413df4fdec7288c18d6ba2897",
38
+ "templates/bacula-dir.conf.erb": "5ab5aa263cf318ebf65c6b52a0726647",
39
+ "metadata.json": "d34d0b70aba36510fbc2df4e667479ef",
40
+ "spec/spec.opts": "a600ded995d948e393fbe2320ba8e51c",
41
+ "Modulefile": "63f93af605871a69211cd3f79ac62582",
42
+ "manifests/init.pp": "fafac38161dd69f4b7e452cf910812f4"
43
+ },
44
+ "summary": "This module manages a bacula infrastructure",
45
+ "author": "Puppet Labs",
46
+ "dependencies": [
47
+
48
+ ],
49
+ "project_page": "http://github.com/puppetlabs/puppetlabs-bacula",
50
+ "types": [
51
+
52
+ ],
53
+ "license": "Apache",
54
+ "version": "0.0.2",
55
+ "name": "puppetlabs-bacula"
56
+ },
57
+ "pdk": false,
58
+ "validation_score": 22,
59
+ "file_uri": "/v3/files/puppetlabs-bacula-0.0.2.tar.gz",
60
+ "file_md5": "6cd7b8a3ec788e4ddbd06ae59be45d7a",
61
+ "file_sha256": "4cea5bae3c2b3dbe236bdc87ab9caa4f6d41943d1bf81651b2c0e08205910cdd",
62
+ "reference": null,
63
+ "tasks": [
64
+
65
+ ],
66
+ "plans": [
67
+
68
+ ],
69
+ "deleted_for": null
70
+ },
71
+ {
72
+ "slug": "puppetlabs-bacula-0.0.1",
73
+ "version": "0.0.1",
74
+ "metadata": {
75
+ "description": "This module manages Bacula, a complete backup solution",
76
+ "source": "http://github.com/puppetlabs/puppetlabs-bacula",
77
+ "checksums": {
78
+ "spec/spec_helper.rb": "ca19ec4f451ebc7fdb035b52eae6e909",
79
+ "templates/bacula-fd.conf.erb": "344fff616e138fbf8cd150f4bab8125d",
80
+ "CHANGELOG": "28c8a36d149971979b867491203b5fef",
81
+ "manifests/config/validate.pp": "e74d9dfbf4814d455a2c4a27ac516571",
82
+ "LICENSE": "26ce13c80c7a8493533c65c32dc29f09",
83
+ "manifests/director.pp": "bec6d5b6b8befca9640edb8bdb8b5b10",
84
+ "manifests/common.pp": "9c037f51fd8b70c4bed0ceeb55f93ffb",
85
+ "manifests/client.pp": "42e9255711d0a6abed6ab8deafb1248c",
86
+ "manifests/console.pp": "1ee546361e47c0bc43299b3b62baa925",
87
+ "README.md": "470c6e1e9b4d877bcfdc88d751de8d19",
88
+ "templates/bacula-sd.conf.erb": "df7987695bf1dd18bb789a2673b2cd95",
89
+ "manifests/config.pp": "4410fadc6d82543e0b19039e3365fd3a",
90
+ "tests/init.pp": "b95d199119d5e592df7e1580bf23fe06",
91
+ "templates/bconsole.conf.erb": "ba5e1ef7d320a48bde6e403dc956952a",
92
+ "manifests/bat.pp": "3743bddf0197b4110e54a8e297e927e8",
93
+ "manifests/storage.pp": "13eadb4376a07d095d1ee13e8ff60846",
94
+ "templates/bacula-dir.conf.erb": "c0b1b57660cf965bcff7e5fda547ee03",
95
+ "metadata.json": "d34d0b70aba36510fbc2df4e667479ef",
96
+ "spec/spec.opts": "a600ded995d948e393fbe2320ba8e51c",
97
+ "Modulefile": "082b764ac91831266b7cbda75f79c199",
98
+ "manifests/init.pp": "6b9d2e9ca0a06c1a318837307fadcc70"
99
+ },
100
+ "summary": "This module manages a bacula infrastructure",
101
+ "author": "Puppet Labs",
102
+ "dependencies": [
103
+
104
+ ],
105
+ "project_page": "http://github.com/puppetlabs/puppetlabs-bacula",
106
+ "types": [
107
+
108
+ ],
109
+ "license": "Apache",
110
+ "version": "0.0.1",
111
+ "name": "puppetlabs-bacula"
112
+ },
113
+ "pdk": false,
114
+ "validation_score": 38,
115
+ "file_uri": "/v3/files/puppetlabs-bacula-0.0.1.tar.gz",
116
+ "file_md5": "c29882cf29eff17f18dcb74cc544c200",
117
+ "file_sha256": "7a68af4ab6e413a1cb3ec1694ddc3956138aa4c34d97abbe61a50947d0b12069",
118
+ "reference": null,
119
+ "tasks": [
120
+
121
+ ],
122
+ "plans": [
123
+
124
+ ],
125
+ "deleted_for": null
126
+ }
127
+ ]
128
+ }
@@ -1,11 +1,19 @@
1
1
  localmirror-appstream
2
2
  Name Stream Profiles Summary
3
+ 389-ds 1.4 [e] 389 Directory Server (base)
3
4
  gimp 2.8 [d][e] common [d], devel [i] gimp module
4
5
  mariadb 10.3 [d][e] client [i], server [d], galera MariaDB Module
5
6
  nodejs 10 [d][e] common [d], development, minimal [i], s2i Javascript runtime
6
7
  perl 5.26 [d][e] common [d], minimal [i] Practical Extraction and Report Language
7
8
  postgresql 10 [d][e] client, server [d] [i] PostgreSQL server and client module
9
+ ruby 2.5 [d][e] common [d] An interpreter of object-oriented scripting language
8
10
  rust-toolset rhel8 [d][e] common [d] [i] Rust
9
11
  subversion 1.10 [d][e] common [d], server [i] Apache Subversion
12
+ scala 2.10 [d] common [d] A hybrid functional/object-oriented language for the JVM
13
+ squid 4 [d] common [d] Squid - Optimising Web Delivery
14
+ subversion 1.10 [d] common [d], server Apache Subversion
15
+ swig 3.0 [d][x] common [d], complete Connects C/C++/Objective C to some high-level programming languages
16
+ varnish 6 [d] common [d] Varnish HTTP cache
17
+ virt rhel [d][x] common [d] Virtualization module
10
18
 
11
19
  Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
@@ -1,3 +1,5 @@
1
1
  shells/bash-completion < needs updating (index has 2.1_3)
2
2
  ftp/curl < needs updating (index has 7.33.0_2)
3
3
  shells/zsh < needs updating (index has 5.0.4)
4
+ sysutils/orphan ? orphaned: sysutils/orphan
5
+ sysutils/broken ! Comparison failed
@@ -0,0 +1,30 @@
1
+ concurrent-ruby (1.1.5)
2
+
3
+ deep_merge (1.0.1)
4
+
5
+ fast_gettext (1.1.2)
6
+
7
+ gettext (3.2.2)
8
+
9
+ hiera-eyaml (3.2.0)
10
+
11
+ highline (1.6.21)
12
+
13
+ hocon (1.3.1, 1.2.5)
14
+
15
+ locale (2.1.3, 2.1.2)
16
+
17
+ multi_json (1.14.1)
18
+
19
+ optimist (3.0.1)
20
+
21
+ puppet-resource_api (1.8.13)
22
+
23
+ puppetserver-ca (1.8.0)
24
+
25
+ semantic_puppet (1.0.2)
26
+
27
+ text (1.3.1)
28
+
29
+ world_airports (1.1.3)
30
+
@@ -0,0 +1,9 @@
1
+ Loaded plugins: product-id, search-disabled-repos, subscription-manager
2
+
3
+ This system is not registered with an entitlement server. You can use subscription-manager to register on.
4
+
5
+ curl.i686 7.32.0-10.fc20 updates
6
+ curl.x86_64 7.32.0-10.fc20 updates
7
+ gawk.i686 4.1.0-3.fc20 updates
8
+ dhclient.i686 12:4.1.1-38.P1.fc20 updates
9
+ java-1.8.0-openjdk.x86_64 1:1.8.0.131-2.b11.el7_3 updates
@@ -0,0 +1,13 @@
1
+ Refreshing service 'spacewalk'.
2
+ Problem retrieving the repository index file for service 'spacewalk':
3
+ [|] This client is not registered to any spacewalk server.
4
+
5
+ Skipping service 'spacewalk' because of the above error.
6
+ Loading repository data...
7
+ Reading installed packages...
8
+
9
+ S | Name | Type | Version | Arch | Repository
10
+ --+---------+---------+-------------------+--------+-------------------------------------------------
11
+ | vim | package | 1.0.20040813-19.9 | noarch | localmirror-os
12
+ | vim | package | 1.0.20040813-19.9 | noarch | localmirror-os
13
+ | vim | package | 1.0.20040813-19.9 | noarch | SUSE-Linux-Enterprise-Server-11-SP4 11.4.4-1.109
@@ -5,3 +5,12 @@ autovt@.service disabled
5
5
  avahi-daemon.service enabled
6
6
  blk-availability.service disabled
7
7
  brandbot.service static
8
+ apparmor.service bad
9
+ udev.service enabled-runtime
10
+ ufw.service linked
11
+ umountfs.service linked-runtime
12
+ umountnfs.service masked
13
+ umountroot.service masked-runtime
14
+ urandom.service indirect
15
+ user@.service generated
16
+ uuidd.service transient
@@ -0,0 +1,479 @@
1
+ require 'spec_helper'
2
+ require 'puppet_spec/files'
3
+ require 'puppet_spec/puppetserver'
4
+ require 'puppet_spec/compiler'
5
+ require 'puppet_spec/https'
6
+
7
+ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
8
+ include PuppetSpec::Files
9
+ include PuppetSpec::Compiler
10
+ include_context "https client"
11
+
12
+ let(:server) { PuppetSpec::Puppetserver.new }
13
+ let(:agent) { Puppet::Application[:agent] }
14
+ let(:node) { Puppet::Node.new(Puppet[:certname], environment: 'production')}
15
+ let(:formatter) { Puppet::Network::FormatHandler.format(:rich_data_json) }
16
+
17
+ context 'server_list' do
18
+ it "uses the first server in the list" do
19
+ Puppet[:server_list] = '127.0.0.1'
20
+ Puppet[:log_level] = 'debug'
21
+
22
+ server.start_server do |port|
23
+ Puppet[:serverport] = port
24
+ expect {
25
+ agent.command_line.args << '--test'
26
+ agent.run
27
+ }.to exit_with(0)
28
+ .and output(%r{HTTP GET https://127.0.0.1:#{port}/status/v1/simple/master returned 200 OK}).to_stdout
29
+ end
30
+ end
31
+
32
+ it "falls back, recording the first viable server in the report" do
33
+ Puppet[:server_list] = "puppet.example.com,#{Puppet[:server]}"
34
+
35
+ server.start_server do |port|
36
+ Puppet[:serverport] = port
37
+ expect {
38
+ agent.command_line.args << '--test'
39
+ agent.run
40
+ }.to exit_with(0)
41
+ .and output(%r{Notice: Applied catalog}).to_stdout
42
+ .and output(%r{Unable to connect to server from server_list setting: Request to https://puppet.example.com:#{port}/status/v1/simple/master failed}).to_stderr
43
+
44
+ report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
45
+ expect(report.master_used).to eq("127.0.0.1:#{port}")
46
+ expect(report.server_used).to eq("127.0.0.1:#{port}")
47
+ end
48
+ end
49
+
50
+ it "doesn't write a report if no servers could be contacted" do
51
+ Puppet[:server_list] = "puppet.example.com"
52
+
53
+ expect {
54
+ agent.command_line.args << '--test'
55
+ agent.run
56
+ }.to exit_with(1)
57
+ .and output(a_string_matching(%r{Unable to connect to server from server_list setting})
58
+ .and matching(/Error: Could not run Puppet configuration client: Could not select a functional puppet server from server_list: 'puppet.example.com'/)).to_stderr
59
+
60
+ # I'd expect puppet to update the last run report even if the server_list was
61
+ # exhausted, but it doesn't work that way currently, see PUP-6708
62
+ expect(File).to_not be_exist(Puppet[:lastrunreport])
63
+ end
64
+
65
+ it "omits server_used when not using server_list" do
66
+ Puppet[:log_level] = 'debug'
67
+
68
+ server.start_server do |port|
69
+ Puppet[:serverport] = port
70
+ expect {
71
+ agent.command_line.args << '--test'
72
+ agent.run
73
+ }.to exit_with(0)
74
+ .and output(%r{Resolved service 'puppet' to https://127.0.0.1:#{port}/puppet/v3}).to_stdout
75
+ end
76
+
77
+ report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
78
+ expect(report.master_used).to be_nil
79
+ expect(report.server_used).to be_nil
80
+ end
81
+
82
+ it "server_list takes precedence over server" do
83
+ Puppet[:server] = 'notvalid.example.com'
84
+ Puppet[:log_level] = 'debug'
85
+
86
+ server.start_server do |port|
87
+ Puppet[:server_list] = "127.0.0.1:#{port}"
88
+
89
+ expect {
90
+ agent.command_line.args << '--test'
91
+ agent.run
92
+ }.to exit_with(0)
93
+ .and output(%r{Debug: Resolved service 'puppet' to https://127.0.0.1:#{port}/puppet/v3}).to_stdout
94
+
95
+ report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
96
+ expect(report.master_used).to eq("127.0.0.1:#{port}")
97
+ expect(report.server_used).to eq("127.0.0.1:#{port}")
98
+ end
99
+ end
100
+ end
101
+
102
+ context 'rich data' do
103
+ it "applies deferred values" do
104
+ catalog_handler = -> (req, res) {
105
+ catalog = compile_to_catalog(<<-MANIFEST, node)
106
+ notify { 'deferred':
107
+ message => Deferred('join', [[1,2,3], ':'])
108
+ }
109
+ MANIFEST
110
+
111
+ res.body = formatter.render(catalog)
112
+ res['Content-Type'] = formatter.mime
113
+ }
114
+
115
+ server.start_server(mounts: {catalog: catalog_handler}) do |port|
116
+ Puppet[:serverport] = port
117
+ expect {
118
+ agent.command_line.args << '--test'
119
+ agent.run
120
+ }.to exit_with(2)
121
+ .and output(%r{Notice: /Stage\[main\]/Main/Notify\[deferred\]/message: defined 'message' as '1:2:3'}).to_stdout
122
+ end
123
+ end
124
+
125
+ it "redacts sensitive values" do
126
+ catalog_handler = -> (req, res) {
127
+ catalog = compile_to_catalog(<<-MANIFEST, node)
128
+ notify { 'sensitive':
129
+ message => Sensitive('supersecret')
130
+ }
131
+ MANIFEST
132
+
133
+ res.body = formatter.render(catalog)
134
+ res['Content-Type'] = formatter.mime
135
+ }
136
+
137
+ server.start_server(mounts: {catalog: catalog_handler}) do |port|
138
+ Puppet[:serverport] = port
139
+ expect {
140
+ agent.command_line.args << '--test'
141
+ agent.run
142
+ }.to exit_with(2)
143
+ .and output(a_string_matching(
144
+ /Notice: Sensitive \[value redacted\]/
145
+ ).and matching(
146
+ /Notify\[sensitive\]\/message: changed \[redacted\] to \[redacted\]/
147
+ )).to_stdout
148
+ end
149
+ end
150
+
151
+ it "applies binary data in a cached catalog" do
152
+ catalog = compile_to_catalog(<<-MANIFEST, node)
153
+ notify { 'some title':
154
+ message => Binary.new('aGk=')
155
+ }
156
+ MANIFEST
157
+
158
+ catalog_dir = File.join(Puppet[:client_datadir], 'catalog')
159
+ Puppet::FileSystem.mkpath(catalog_dir)
160
+ cached_catalog = "#{File.join(catalog_dir, Puppet[:certname])}.json"
161
+ File.write(cached_catalog, catalog.render(:rich_data_json))
162
+
163
+ expect {
164
+ Puppet[:report] = false
165
+ Puppet[:use_cached_catalog] = true
166
+ Puppet[:usecacheonfailure] = false
167
+ agent.command_line.args << '-t'
168
+ agent.run
169
+ }.to exit_with(2)
170
+ .and output(%r{defined 'message' as 'hi'}).to_stdout
171
+ end
172
+ end
173
+
174
+ context 'static catalogs' do
175
+ let(:path) { tmpfile('file') }
176
+ let(:metadata) { Puppet::FileServing::Metadata.new(path) }
177
+ let(:source) { "puppet:///modules/foo/foo.txt" }
178
+
179
+ before :each do
180
+ Puppet::FileSystem.touch(path)
181
+
182
+ metadata.collect
183
+ metadata.source = source
184
+ metadata.content_uri = "puppet:///modules/foo/files/foo.txt"
185
+ end
186
+
187
+ it 'uses inline file metadata to determine the file is insync' do
188
+ catalog_handler = -> (req, res) {
189
+ catalog = compile_to_catalog(<<-MANIFEST, node)
190
+ file { "#{path}":
191
+ ensure => file,
192
+ source => "#{source}"
193
+ }
194
+ MANIFEST
195
+ catalog.metadata = { path => metadata }
196
+
197
+ res.body = formatter.render(catalog)
198
+ res['Content-Type'] = formatter.mime
199
+ }
200
+
201
+ server.start_server(mounts: {catalog: catalog_handler}) do |port|
202
+ Puppet[:serverport] = port
203
+ expect {
204
+ expect {
205
+ agent.command_line.args << '--test'
206
+ agent.run
207
+ }.to exit_with(0)
208
+ }.to_not output(/content changed/).to_stdout
209
+ end
210
+ end
211
+
212
+ it 'retrieves file content using the content_uri from the inlined file metadata' do
213
+ # create file with binary content
214
+ binary_content = "\xC0\xFF".force_encoding('binary')
215
+ File.binwrite(path, binary_content)
216
+
217
+ # recollect metadata
218
+ metadata.collect
219
+
220
+ # overwrite local file so it is no longer in sync
221
+ File.binwrite(path, "")
222
+
223
+ catalog_handler = -> (req, res) {
224
+ catalog = compile_to_catalog(<<-MANIFEST, node)
225
+ file { "#{path}":
226
+ ensure => file,
227
+ source => "#{source}",
228
+ }
229
+ MANIFEST
230
+ catalog.metadata = { path => metadata }
231
+
232
+ res.body = formatter.render(catalog)
233
+ res['Content-Type'] = formatter.mime
234
+ }
235
+
236
+ static_file_content_handler = -> (req, res) {
237
+ res.body = binary_content
238
+ res['Content-Type'] = 'application/octet-stream'
239
+ }
240
+
241
+ mounts = {
242
+ catalog: catalog_handler,
243
+ static_file_content: static_file_content_handler
244
+ }
245
+
246
+ server.start_server(mounts: mounts) do |port|
247
+ Puppet[:serverport] = port
248
+ expect {
249
+ agent.command_line.args << '--test'
250
+ agent.run
251
+ }.to exit_with(2)
252
+ .and output(/content changed '{md5}d41d8cd98f00b204e9800998ecf8427e' to '{md5}4cf49285ae567157ebfba72bd04ccf32'/).to_stdout
253
+
254
+ # verify puppet restored binary content
255
+ expect(File.binread(path)).to eq(binary_content)
256
+ end
257
+ end
258
+ end
259
+
260
+ context 'https file sources' do
261
+ let(:path) { tmpfile('https_file_source') }
262
+ let(:response_body) { "from https server" }
263
+ let(:digest) { Digest::SHA1.hexdigest(response_body) }
264
+
265
+ it 'rejects HTTPS servers whose root cert is not in the system CA store' do
266
+ unknown_ca_cert = cert_fixture('unknown-ca.pem')
267
+ https = PuppetSpec::HTTPSServer.new(
268
+ ca_cert: unknown_ca_cert,
269
+ server_cert: cert_fixture('unknown-127.0.0.1.pem'),
270
+ server_key: key_fixture('unknown-127.0.0.1-key.pem')
271
+ )
272
+
273
+ # create a temp cacert bundle
274
+ ssl_file = tmpfile('systemstore')
275
+ # add CA cert that is neither the puppet CA nor unknown CA
276
+ File.write(ssl_file, cert_fixture('netlock-arany-utf8.pem').to_pem)
277
+
278
+ https.start_server do |https_port|
279
+ catalog_handler = -> (req, res) {
280
+ catalog = compile_to_catalog(<<-MANIFEST, node)
281
+ file { "#{path}":
282
+ ensure => file,
283
+ backup => false,
284
+ checksum => sha1,
285
+ checksum_value => '#{digest}',
286
+ source => "https://127.0.0.1:#{https_port}/path/to/file"
287
+ }
288
+ MANIFEST
289
+
290
+ res.body = formatter.render(catalog)
291
+ res['Content-Type'] = formatter.mime
292
+ }
293
+
294
+ server.start_server(mounts: {catalog: catalog_handler}) do |puppetserver_port|
295
+ Puppet[:serverport] = puppetserver_port
296
+
297
+ # override path to system cacert bundle, this must be done before
298
+ # the SSLContext is created and the call to X509::Store.set_default_paths
299
+ Puppet::Util.withenv("SSL_CERT_FILE" => ssl_file) do
300
+ expect {
301
+ agent.command_line.args << '--test'
302
+ agent.run
303
+ }.to exit_with(4)
304
+ .and output(/Notice: Applied catalog/).to_stdout
305
+ .and output(%r{Error: Could not retrieve file metadata for https://127.0.0.1:#{https_port}/path/to/file: certificate verify failed}).to_stderr
306
+ end
307
+
308
+ expect(File).to_not be_exist(path)
309
+ end
310
+ end
311
+ end
312
+
313
+ it 'accepts HTTPS servers whose cert is in the system CA store' do
314
+ unknown_ca_cert = cert_fixture('unknown-ca.pem')
315
+ https = PuppetSpec::HTTPSServer.new(
316
+ ca_cert: unknown_ca_cert,
317
+ server_cert: cert_fixture('unknown-127.0.0.1.pem'),
318
+ server_key: key_fixture('unknown-127.0.0.1-key.pem')
319
+ )
320
+
321
+ # create a temp cacert bundle
322
+ ssl_file = tmpfile('systemstore')
323
+ File.write(ssl_file, unknown_ca_cert.to_pem)
324
+
325
+ response_proc = -> (req, res) {
326
+ res.status = 200
327
+ res.body = response_body
328
+ }
329
+
330
+ https.start_server(response_proc: response_proc) do |https_port|
331
+ catalog_handler = -> (req, res) {
332
+ catalog = compile_to_catalog(<<-MANIFEST, node)
333
+ file { "#{path}":
334
+ ensure => file,
335
+ backup => false,
336
+ checksum => sha1,
337
+ checksum_value => '#{digest}',
338
+ source => "https://127.0.0.1:#{https_port}/path/to/file"
339
+ }
340
+ MANIFEST
341
+
342
+ res.body = formatter.render(catalog)
343
+ res['Content-Type'] = formatter.mime
344
+ }
345
+
346
+ server.start_server(mounts: {catalog: catalog_handler}) do |puppetserver_port|
347
+ Puppet[:serverport] = puppetserver_port
348
+
349
+ # override path to system cacert bundle, this must be done before
350
+ # the SSLContext is created and the call to X509::Store.set_default_paths
351
+ Puppet::Util.withenv("SSL_CERT_FILE" => ssl_file) do
352
+ expect {
353
+ agent.command_line.args << '--test'
354
+ agent.run
355
+ }.to exit_with(2)
356
+ .and output(%r{https_file_source.*/ensure: created}).to_stdout
357
+ end
358
+
359
+ expect(File.binread(path)).to eq("from https server")
360
+ end
361
+ end
362
+ end
363
+
364
+ it 'accepts HTTPS servers whose cert is in the external CA store' do
365
+ unknown_ca_cert = cert_fixture('unknown-ca.pem')
366
+ https = PuppetSpec::HTTPSServer.new(
367
+ ca_cert: unknown_ca_cert,
368
+ server_cert: cert_fixture('unknown-127.0.0.1.pem'),
369
+ server_key: key_fixture('unknown-127.0.0.1-key.pem')
370
+ )
371
+
372
+ # create a temp cacert bundle
373
+ ssl_file = tmpfile('systemstore')
374
+ File.write(ssl_file, unknown_ca_cert.to_pem)
375
+
376
+ response_proc = -> (req, res) {
377
+ res.status = 200
378
+ res.body = response_body
379
+ }
380
+
381
+ https.start_server(response_proc: response_proc) do |https_port|
382
+ catalog_handler = -> (req, res) {
383
+ catalog = compile_to_catalog(<<-MANIFEST, node)
384
+ file { "#{path}":
385
+ ensure => file,
386
+ backup => false,
387
+ checksum => sha1,
388
+ checksum_value => '#{digest}',
389
+ source => "https://127.0.0.1:#{https_port}/path/to/file"
390
+ }
391
+ MANIFEST
392
+
393
+ res.body = formatter.render(catalog)
394
+ res['Content-Type'] = formatter.mime
395
+ }
396
+
397
+ server.start_server(mounts: {catalog: catalog_handler}) do |puppetserver_port|
398
+ Puppet[:serverport] = puppetserver_port
399
+
400
+ # set path to external cacert bundle, this must be done before
401
+ # the SSLContext is created
402
+ Puppet[:ssl_trust_store] = ssl_file
403
+ expect {
404
+ agent.command_line.args << '--test'
405
+ agent.run
406
+ }.to exit_with(2)
407
+ .and output(%r{https_file_source.*/ensure: created}).to_stdout
408
+ end
409
+
410
+ expect(File.binread(path)).to eq("from https server")
411
+ end
412
+ end
413
+ end
414
+
415
+ context 'multiple agents running' do
416
+ it "exits if an agent is already running" do
417
+ path = Puppet[:agent_catalog_run_lockfile]
418
+
419
+ th = Thread.new {
420
+ %x{ruby -e "$0 = 'puppet'; File.write('#{path}', Process.pid); sleep(2)"}
421
+ }
422
+
423
+ until File.exists?(path) && File.size(path) > 0 do
424
+ sleep 0.1
425
+ end
426
+
427
+ expect {
428
+ agent.command_line.args << '--test'
429
+ agent.run
430
+ }.to exit_with(1).and output(/Run of Puppet configuration client already in progress; skipping/).to_stdout
431
+
432
+ th.kill # kill thread so we don't wait too much
433
+ end
434
+
435
+ it "waits for other agent run to finish before starting" do
436
+ server.start_server do |port|
437
+ path = Puppet[:agent_catalog_run_lockfile]
438
+ Puppet[:serverport] = port
439
+ Puppet[:waitforlock] = 1
440
+
441
+ th = Thread.new {
442
+ %x{ruby -e "$0 = 'puppet'; File.write('#{path}', Process.pid); sleep(2)"}
443
+ }
444
+
445
+ until File.exists?(path) && File.size(path) > 0 do
446
+ sleep 0.1
447
+ end
448
+
449
+ expect {
450
+ agent.command_line.args << '--test'
451
+ agent.run
452
+ }.to exit_with(0).and output(/Info: Will try again in #{Puppet[:waitforlock]} seconds./).to_stdout
453
+
454
+ th.kill # kill thread so we don't wait too much
455
+ end
456
+ end
457
+
458
+ it "exits if maxwaitforlock is exceeded" do
459
+ path = Puppet[:agent_catalog_run_lockfile]
460
+ Puppet[:waitforlock] = 1
461
+ Puppet[:maxwaitforlock] = 0
462
+
463
+ th = Thread.new {
464
+ %x{ruby -e "$0 = 'puppet'; File.write('#{path}', Process.pid); sleep(2)"}
465
+ }
466
+
467
+ until File.exists?(path) && File.size(path) > 0 do
468
+ sleep 0.1
469
+ end
470
+
471
+ expect {
472
+ agent.command_line.args << '--test'
473
+ agent.run
474
+ }.to exit_with(1).and output(/Exiting now because the maxwaitforlock timeout has been exceeded./).to_stdout
475
+
476
+ th.kill # kill thread so we don't wait too much
477
+ end
478
+ end
479
+ end