puppet 6.21.1 → 6.25.0

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

Potentially problematic release.


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

Files changed (427) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +5 -5
  3. data/Gemfile +3 -3
  4. data/Gemfile.lock +34 -28
  5. data/README.md +4 -4
  6. data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
  7. data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
  8. data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
  9. data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
  10. data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
  11. data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
  12. data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
  13. data/{ext → examples}/nagios/check_puppet.rb +2 -2
  14. data/ext/README.md +13 -0
  15. data/ext/osx/puppet.plist +2 -0
  16. data/ext/project_data.yaml +3 -2
  17. data/lib/puppet/application/agent.rb +16 -5
  18. data/lib/puppet/application/apply.rb +22 -3
  19. data/lib/puppet/application/device.rb +2 -1
  20. data/lib/puppet/application/filebucket.rb +1 -0
  21. data/lib/puppet/application/resource.rb +32 -16
  22. data/lib/puppet/application/script.rb +2 -1
  23. data/lib/puppet/application/ssl.rb +12 -0
  24. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  25. data/lib/puppet/configurer/downloader.rb +2 -1
  26. data/lib/puppet/configurer.rb +85 -57
  27. data/lib/puppet/confine/variable.rb +1 -1
  28. data/lib/puppet/defaults.rb +63 -35
  29. data/lib/puppet/environments.rb +91 -26
  30. data/lib/puppet/face/facts.rb +129 -31
  31. data/lib/puppet/face/help/action.erb +1 -0
  32. data/lib/puppet/face/help/face.erb +1 -0
  33. data/lib/puppet/face/node/clean.rb +11 -0
  34. data/lib/puppet/facter_impl.rb +96 -0
  35. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  36. data/lib/puppet/file_serving/configuration.rb +3 -0
  37. data/lib/puppet/file_serving/fileset.rb +14 -2
  38. data/lib/puppet/file_serving/mount/file.rb +4 -4
  39. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  40. data/lib/puppet/file_system/file_impl.rb +3 -1
  41. data/lib/puppet/file_system/memory_file.rb +8 -1
  42. data/lib/puppet/file_system/windows.rb +4 -2
  43. data/lib/puppet/forge.rb +4 -4
  44. data/lib/puppet/functions/all.rb +1 -1
  45. data/lib/puppet/functions/camelcase.rb +1 -1
  46. data/lib/puppet/functions/capitalize.rb +2 -2
  47. data/lib/puppet/functions/downcase.rb +2 -2
  48. data/lib/puppet/functions/empty.rb +8 -0
  49. data/lib/puppet/functions/find_template.rb +2 -2
  50. data/lib/puppet/functions/get.rb +5 -5
  51. data/lib/puppet/functions/group_by.rb +13 -5
  52. data/lib/puppet/functions/lest.rb +1 -1
  53. data/lib/puppet/functions/new.rb +100 -100
  54. data/lib/puppet/functions/partition.rb +12 -4
  55. data/lib/puppet/functions/require.rb +5 -5
  56. data/lib/puppet/functions/sort.rb +3 -3
  57. data/lib/puppet/functions/strftime.rb +1 -0
  58. data/lib/puppet/functions/tree_each.rb +7 -9
  59. data/lib/puppet/functions/type.rb +4 -4
  60. data/lib/puppet/functions/unwrap.rb +17 -2
  61. data/lib/puppet/functions/upcase.rb +2 -2
  62. data/lib/puppet/http/resolver/server_list.rb +15 -4
  63. data/lib/puppet/http/service/compiler.rb +75 -1
  64. data/lib/puppet/http/service/file_server.rb +2 -1
  65. data/lib/puppet/indirector/catalog/compiler.rb +25 -6
  66. data/lib/puppet/indirector/catalog/rest.rb +1 -0
  67. data/lib/puppet/indirector/facts/facter.rb +28 -7
  68. data/lib/puppet/indirector/file_metadata/rest.rb +1 -0
  69. data/lib/puppet/indirector/indirection.rb +1 -1
  70. data/lib/puppet/indirector/resource/ral.rb +6 -1
  71. data/lib/puppet/indirector/terminus.rb +4 -0
  72. data/lib/puppet/interface/documentation.rb +1 -0
  73. data/lib/puppet/module/plan.rb +0 -1
  74. data/lib/puppet/module/task.rb +1 -1
  75. data/lib/puppet/module.rb +1 -0
  76. data/lib/puppet/module_tool/applications/installer.rb +12 -4
  77. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  78. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  79. data/lib/puppet/module_tool/errors/shared.rb +17 -0
  80. data/lib/puppet/network/formats.rb +67 -0
  81. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  82. data/lib/puppet/network/http/factory.rb +4 -0
  83. data/lib/puppet/node/environment.rb +10 -11
  84. data/lib/puppet/pal/pal_impl.rb +1 -1
  85. data/lib/puppet/parser/functions/fqdn_rand.rb +14 -6
  86. data/lib/puppet/parser/scope.rb +1 -0
  87. data/lib/puppet/parser/templatewrapper.rb +1 -0
  88. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  89. data/lib/puppet/pops/model/ast.rb +1 -0
  90. data/lib/puppet/pops/model/factory.rb +2 -1
  91. data/lib/puppet/pops/parser/eparser.rb +201 -201
  92. data/lib/puppet/pops/parser/lexer2.rb +92 -91
  93. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  94. data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
  95. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  96. data/lib/puppet/pops/types/p_sem_ver_type.rb +8 -2
  97. data/lib/puppet/pops/types/p_sensitive_type.rb +10 -0
  98. data/lib/puppet/pops/types/type_formatter.rb +4 -3
  99. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  100. data/lib/puppet/pops/types/types.rb +1 -1
  101. data/lib/puppet/provider/aix_object.rb +1 -1
  102. data/lib/puppet/provider/exec/posix.rb +16 -4
  103. data/lib/puppet/provider/group/groupadd.rb +5 -2
  104. data/lib/puppet/provider/package/dnfmodule.rb +1 -1
  105. data/lib/puppet/provider/package/nim.rb +11 -6
  106. data/lib/puppet/provider/package/pip.rb +15 -3
  107. data/lib/puppet/provider/package/pkg.rb +19 -2
  108. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  109. data/lib/puppet/provider/package/yum.rb +1 -1
  110. data/lib/puppet/provider/parsedfile.rb +3 -0
  111. data/lib/puppet/provider/service/base.rb +1 -1
  112. data/lib/puppet/provider/service/init.rb +5 -5
  113. data/lib/puppet/provider/service/launchd.rb +2 -2
  114. data/lib/puppet/provider/service/redhat.rb +1 -1
  115. data/lib/puppet/provider/service/smf.rb +3 -3
  116. data/lib/puppet/provider/service/systemd.rb +16 -6
  117. data/lib/puppet/provider/service/upstart.rb +5 -5
  118. data/lib/puppet/provider/service/windows.rb +38 -0
  119. data/lib/puppet/provider/user/aix.rb +44 -1
  120. data/lib/puppet/provider/user/directoryservice.rb +26 -13
  121. data/lib/puppet/provider/user/useradd.rb +73 -17
  122. data/lib/puppet/provider.rb +1 -1
  123. data/lib/puppet/reference/configuration.rb +1 -1
  124. data/lib/puppet/reference/providers.rb +2 -2
  125. data/lib/puppet/resource/type_collection.rb +1 -0
  126. data/lib/puppet/runtime.rb +11 -1
  127. data/lib/puppet/settings/environment_conf.rb +1 -0
  128. data/lib/puppet/settings.rb +32 -9
  129. data/lib/puppet/test/test_helper.rb +4 -1
  130. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  131. data/lib/puppet/transaction/persistence.rb +11 -1
  132. data/lib/puppet/transaction/report.rb +15 -1
  133. data/lib/puppet/type/exec.rb +35 -5
  134. data/lib/puppet/type/file/mode.rb +6 -0
  135. data/lib/puppet/type/file/selcontext.rb +1 -1
  136. data/lib/puppet/type/file.rb +25 -7
  137. data/lib/puppet/type/filebucket.rb +3 -3
  138. data/lib/puppet/type/group.rb +0 -1
  139. data/lib/puppet/type/resources.rb +1 -1
  140. data/lib/puppet/type/service.rb +26 -41
  141. data/lib/puppet/type/tidy.rb +22 -3
  142. data/lib/puppet/type/user.rb +38 -21
  143. data/lib/puppet/type.rb +1 -1
  144. data/lib/puppet/util/command_line.rb +1 -1
  145. data/lib/puppet/util/fact_dif.rb +36 -17
  146. data/lib/puppet/util/filetype.rb +2 -2
  147. data/lib/puppet/util/json.rb +3 -0
  148. data/lib/puppet/util/log.rb +1 -2
  149. data/lib/puppet/util/logging.rb +1 -25
  150. data/lib/puppet/util/monkey_patches.rb +7 -0
  151. data/lib/puppet/util/pidlock.rb +1 -1
  152. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  153. data/lib/puppet/util/selinux.rb +30 -4
  154. data/lib/puppet/util/suidmanager.rb +1 -2
  155. data/lib/puppet/util/symbolic_file_mode.rb +29 -17
  156. data/lib/puppet/util/tagging.rb +1 -0
  157. data/lib/puppet/util/windows/adsi.rb +46 -0
  158. data/lib/puppet/util/windows/api_types.rb +1 -1
  159. data/lib/puppet/util/windows/principal.rb +9 -2
  160. data/lib/puppet/util/windows/sid.rb +6 -2
  161. data/lib/puppet/util/windows/user.rb +0 -2
  162. data/lib/puppet/util.rb +4 -3
  163. data/lib/puppet/version.rb +1 -1
  164. data/lib/puppet.rb +5 -9
  165. data/locales/puppet.pot +506 -410
  166. data/man/man5/puppet.conf.5 +310 -274
  167. data/man/man8/puppet-agent.8 +4 -1
  168. data/man/man8/puppet-apply.8 +1 -1
  169. data/man/man8/puppet-catalog.8 +9 -9
  170. data/man/man8/puppet-config.8 +1 -1
  171. data/man/man8/puppet-describe.8 +1 -1
  172. data/man/man8/puppet-device.8 +1 -1
  173. data/man/man8/puppet-doc.8 +1 -1
  174. data/man/man8/puppet-epp.8 +1 -1
  175. data/man/man8/puppet-facts.8 +65 -7
  176. data/man/man8/puppet-filebucket.8 +1 -1
  177. data/man/man8/puppet-generate.8 +1 -1
  178. data/man/man8/puppet-help.8 +1 -1
  179. data/man/man8/puppet-key.8 +7 -7
  180. data/man/man8/puppet-lookup.8 +1 -1
  181. data/man/man8/puppet-man.8 +1 -1
  182. data/man/man8/puppet-module.8 +3 -3
  183. data/man/man8/puppet-node.8 +5 -5
  184. data/man/man8/puppet-parser.8 +1 -1
  185. data/man/man8/puppet-plugin.8 +1 -1
  186. data/man/man8/puppet-report.8 +5 -5
  187. data/man/man8/puppet-resource.8 +1 -1
  188. data/man/man8/puppet-script.8 +1 -1
  189. data/man/man8/puppet-ssl.8 +5 -1
  190. data/man/man8/puppet-status.8 +4 -4
  191. data/man/man8/puppet.8 +2 -2
  192. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  193. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  194. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  195. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  196. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  197. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  198. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  199. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  200. data/spec/fixtures/ssl/127.0.0.1-key.pem +107 -57
  201. data/spec/fixtures/ssl/127.0.0.1.pem +52 -31
  202. data/spec/fixtures/ssl/bad-basic-constraints.pem +57 -35
  203. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +57 -35
  204. data/spec/fixtures/ssl/ca.pem +57 -35
  205. data/spec/fixtures/ssl/crl.pem +28 -18
  206. data/spec/fixtures/ssl/ec-key.pem +11 -11
  207. data/spec/fixtures/ssl/ec.pem +33 -24
  208. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  209. data/spec/fixtures/ssl/encrypted-key.pem +108 -58
  210. data/spec/fixtures/ssl/intermediate-agent-crl.pem +28 -19
  211. data/spec/fixtures/ssl/intermediate-agent.pem +57 -36
  212. data/spec/fixtures/ssl/intermediate-crl.pem +31 -21
  213. data/spec/fixtures/ssl/intermediate.pem +57 -36
  214. data/spec/fixtures/ssl/oid-key.pem +117 -0
  215. data/spec/fixtures/ssl/oid.pem +69 -0
  216. data/spec/fixtures/ssl/pluto-key.pem +107 -57
  217. data/spec/fixtures/ssl/pluto.pem +52 -30
  218. data/spec/fixtures/ssl/request-key.pem +107 -57
  219. data/spec/fixtures/ssl/request.pem +47 -26
  220. data/spec/fixtures/ssl/revoked-key.pem +107 -57
  221. data/spec/fixtures/ssl/revoked.pem +52 -30
  222. data/spec/fixtures/ssl/signed-key.pem +107 -57
  223. data/spec/fixtures/ssl/signed.pem +52 -30
  224. data/spec/fixtures/ssl/tampered-cert.pem +52 -30
  225. data/spec/fixtures/ssl/tampered-csr.pem +47 -26
  226. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
  227. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +107 -57
  228. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +50 -29
  229. data/spec/fixtures/ssl/unknown-ca-key.pem +107 -57
  230. data/spec/fixtures/ssl/unknown-ca.pem +55 -33
  231. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +9 -0
  232. data/spec/integration/application/agent_spec.rb +113 -37
  233. data/spec/integration/application/filebucket_spec.rb +16 -0
  234. data/spec/integration/application/module_spec.rb +21 -0
  235. data/spec/integration/application/plugin_spec.rb +1 -1
  236. data/spec/integration/application/resource_spec.rb +64 -0
  237. data/spec/integration/application/ssl_spec.rb +20 -0
  238. data/spec/integration/configurer_spec.rb +18 -2
  239. data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
  240. data/spec/integration/http/client_spec.rb +12 -0
  241. data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
  242. data/spec/integration/indirector/facts/facter_spec.rb +93 -39
  243. data/spec/integration/l10n/compiler_spec.rb +37 -0
  244. data/spec/integration/transaction/report_spec.rb +1 -1
  245. data/spec/integration/type/exec_spec.rb +70 -45
  246. data/spec/integration/type/file_spec.rb +2 -2
  247. data/spec/integration/type/package_spec.rb +6 -6
  248. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  249. data/spec/integration/util/windows/adsi_spec.rb +18 -0
  250. data/spec/integration/util/windows/principal_spec.rb +21 -0
  251. data/spec/integration/util/windows/process_spec.rb +1 -9
  252. data/spec/integration/util/windows/registry_spec.rb +6 -0
  253. data/spec/lib/puppet/test_ca.rb +7 -2
  254. data/spec/lib/puppet_spec/modules.rb +13 -2
  255. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  256. data/spec/lib/puppet_spec/settings.rb +1 -0
  257. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  258. data/spec/shared_contexts/l10n.rb +27 -0
  259. data/spec/spec_helper.rb +12 -11
  260. data/spec/unit/application/agent_spec.rb +7 -2
  261. data/spec/unit/application/apply_spec.rb +76 -56
  262. data/spec/unit/application/facts_spec.rb +482 -3
  263. data/spec/unit/application/resource_spec.rb +29 -0
  264. data/spec/unit/application/ssl_spec.rb +23 -0
  265. data/spec/unit/configurer/downloader_spec.rb +6 -0
  266. data/spec/unit/configurer_spec.rb +194 -56
  267. data/spec/unit/defaults_spec.rb +17 -0
  268. data/spec/unit/environments_spec.rb +348 -88
  269. data/spec/unit/face/facts_spec.rb +4 -0
  270. data/spec/unit/facter_impl_spec.rb +31 -0
  271. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  272. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  273. data/spec/unit/file_serving/configuration_spec.rb +14 -4
  274. data/spec/unit/file_serving/fileset_spec.rb +60 -0
  275. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  276. data/spec/unit/file_system_spec.rb +22 -0
  277. data/spec/unit/functions/assert_type_spec.rb +1 -1
  278. data/spec/unit/functions/empty_spec.rb +10 -0
  279. data/spec/unit/functions/logging_spec.rb +1 -0
  280. data/spec/unit/functions/lookup_spec.rb +64 -0
  281. data/spec/unit/functions/unwrap_spec.rb +8 -0
  282. data/spec/unit/functions4_spec.rb +2 -2
  283. data/spec/unit/gettext/config_spec.rb +12 -0
  284. data/spec/unit/http/service/compiler_spec.rb +131 -0
  285. data/spec/unit/indirector/catalog/compiler_spec.rb +101 -10
  286. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  287. data/spec/unit/indirector/facts/facter_spec.rb +95 -0
  288. data/spec/unit/indirector/indirection_spec.rb +10 -3
  289. data/spec/unit/indirector/resource/ral_spec.rb +40 -75
  290. data/spec/unit/interface/action_spec.rb +0 -9
  291. data/spec/unit/module_spec.rb +15 -1
  292. data/spec/unit/module_tool/applications/installer_spec.rb +51 -12
  293. data/spec/unit/network/authstore_spec.rb +0 -15
  294. data/spec/unit/network/formats_spec.rb +47 -0
  295. data/spec/unit/network/http/factory_spec.rb +19 -0
  296. data/spec/unit/parser/functions/fqdn_rand_spec.rb +15 -1
  297. data/spec/unit/parser/templatewrapper_spec.rb +12 -2
  298. data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
  299. data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
  300. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  301. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +18 -0
  302. data/spec/unit/pops/types/p_sensitive_type_spec.rb +18 -0
  303. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  304. data/spec/unit/provider/package/dnfmodule_spec.rb +10 -1
  305. data/spec/unit/provider/package/gem_spec.rb +1 -1
  306. data/spec/unit/provider/package/nim_spec.rb +42 -0
  307. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  308. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  309. data/spec/unit/provider/package/pip_spec.rb +38 -1
  310. data/spec/unit/provider/package/pkg_spec.rb +29 -4
  311. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  312. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  313. data/spec/unit/provider/parsedfile_spec.rb +10 -0
  314. data/spec/unit/provider/service/init_spec.rb +1 -0
  315. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  316. data/spec/unit/provider/service/openwrt_spec.rb +3 -1
  317. data/spec/unit/provider/service/systemd_spec.rb +54 -9
  318. data/spec/unit/provider/service/windows_spec.rb +202 -0
  319. data/spec/unit/provider/user/aix_spec.rb +100 -0
  320. data/spec/unit/provider/user/directoryservice_spec.rb +68 -36
  321. data/spec/unit/provider/user/useradd_spec.rb +61 -5
  322. data/spec/unit/provider_spec.rb +4 -4
  323. data/spec/unit/puppet_spec.rb +12 -4
  324. data/spec/unit/resource/catalog_spec.rb +1 -1
  325. data/spec/unit/settings_spec.rb +97 -56
  326. data/spec/unit/ssl/certificate_request_spec.rb +8 -14
  327. data/spec/unit/ssl/state_machine_spec.rb +19 -5
  328. data/spec/unit/transaction/additional_resource_generator_spec.rb +0 -2
  329. data/spec/unit/transaction_spec.rb +18 -20
  330. data/spec/unit/type/exec_spec.rb +76 -29
  331. data/spec/unit/type/file/selinux_spec.rb +3 -3
  332. data/spec/unit/type/file/source_spec.rb +4 -4
  333. data/spec/unit/type/service_spec.rb +86 -188
  334. data/spec/unit/type/tidy_spec.rb +24 -7
  335. data/spec/unit/type/user_spec.rb +45 -0
  336. data/spec/unit/type_spec.rb +2 -2
  337. data/spec/unit/util/logging_spec.rb +2 -0
  338. data/spec/unit/util/selinux_spec.rb +87 -16
  339. data/spec/unit/util/windows/sid_spec.rb +41 -0
  340. data/tasks/generate_cert_fixtures.rake +12 -3
  341. data/tasks/parallel.rake +3 -3
  342. metadata +51 -99
  343. data/ext/README.environment +0 -8
  344. data/ext/dbfix.sql +0 -132
  345. data/ext/debian/README.Debian +0 -8
  346. data/ext/debian/README.source +0 -2
  347. data/ext/debian/TODO.Debian +0 -1
  348. data/ext/debian/changelog.erb +0 -1122
  349. data/ext/debian/compat +0 -1
  350. data/ext/debian/control +0 -144
  351. data/ext/debian/copyright +0 -339
  352. data/ext/debian/docs +0 -1
  353. data/ext/debian/fileserver.conf +0 -41
  354. data/ext/debian/puppet-common.dirs +0 -13
  355. data/ext/debian/puppet-common.install +0 -3
  356. data/ext/debian/puppet-common.lintian-overrides +0 -5
  357. data/ext/debian/puppet-common.manpages +0 -28
  358. data/ext/debian/puppet-common.postinst +0 -35
  359. data/ext/debian/puppet-common.postrm +0 -33
  360. data/ext/debian/puppet-el.dirs +0 -1
  361. data/ext/debian/puppet-el.emacsen-install +0 -25
  362. data/ext/debian/puppet-el.emacsen-remove +0 -11
  363. data/ext/debian/puppet-el.emacsen-startup +0 -9
  364. data/ext/debian/puppet-el.install +0 -1
  365. data/ext/debian/puppet-testsuite.install +0 -2
  366. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  367. data/ext/debian/puppet.lintian-overrides +0 -3
  368. data/ext/debian/puppet.logrotate +0 -20
  369. data/ext/debian/puppet.postinst +0 -20
  370. data/ext/debian/puppet.postrm +0 -20
  371. data/ext/debian/puppet.preinst +0 -20
  372. data/ext/debian/puppetmaster-common.install +0 -2
  373. data/ext/debian/puppetmaster-common.manpages +0 -2
  374. data/ext/debian/puppetmaster-common.postinst +0 -6
  375. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  376. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  377. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  378. data/ext/debian/puppetmaster.README.debian +0 -17
  379. data/ext/debian/puppetmaster.default +0 -14
  380. data/ext/debian/puppetmaster.init +0 -137
  381. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  382. data/ext/debian/puppetmaster.postinst +0 -20
  383. data/ext/debian/puppetmaster.postrm +0 -5
  384. data/ext/debian/puppetmaster.preinst +0 -22
  385. data/ext/debian/rules +0 -132
  386. data/ext/debian/source/format +0 -1
  387. data/ext/debian/source/options +0 -1
  388. data/ext/debian/vim-puppet.README.Debian +0 -13
  389. data/ext/debian/vim-puppet.dirs +0 -5
  390. data/ext/debian/vim-puppet.yaml +0 -7
  391. data/ext/debian/watch +0 -2
  392. data/ext/freebsd/puppetd +0 -26
  393. data/ext/freebsd/puppetmasterd +0 -26
  394. data/ext/gentoo/conf.d/puppet +0 -5
  395. data/ext/gentoo/conf.d/puppetmaster +0 -12
  396. data/ext/gentoo/init.d/puppet +0 -38
  397. data/ext/gentoo/init.d/puppetmaster +0 -51
  398. data/ext/gentoo/puppet/fileserver.conf +0 -41
  399. data/ext/ips/puppet-agent +0 -44
  400. data/ext/ips/puppet-master +0 -44
  401. data/ext/ips/puppet.p5m.erb +0 -12
  402. data/ext/ips/puppetagent.xml +0 -42
  403. data/ext/ips/puppetmaster.xml +0 -42
  404. data/ext/ips/rules +0 -19
  405. data/ext/ips/transforms +0 -34
  406. data/ext/ldap/puppet.schema +0 -24
  407. data/ext/logcheck/puppet +0 -23
  408. data/ext/osx/file_mapping.yaml +0 -33
  409. data/ext/osx/postflight.erb +0 -109
  410. data/ext/osx/preflight.erb +0 -52
  411. data/ext/osx/prototype.plist.erb +0 -38
  412. data/ext/redhat/fileserver.conf +0 -41
  413. data/ext/redhat/logrotate +0 -21
  414. data/ext/redhat/puppet.spec.erb +0 -842
  415. data/ext/redhat/server.init +0 -128
  416. data/ext/redhat/server.sysconfig +0 -13
  417. data/ext/solaris/pkginfo +0 -6
  418. data/ext/solaris/smf/puppetd.xml +0 -77
  419. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  420. data/ext/solaris/smf/svc-puppetd +0 -71
  421. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  422. data/ext/suse/puppet.spec +0 -310
  423. data/ext/suse/server.init +0 -173
  424. data/ext/yaml_nodes.rb +0 -105
  425. data/spec/lib/matchers/include.rb +0 -27
  426. data/spec/lib/matchers/include_spec.rb +0 -32
  427. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -1,15 +1,18 @@
1
1
  require 'spec_helper'
2
2
  require 'puppet/environments'
3
3
  require 'puppet/file_system'
4
- require 'matchers/include'
5
- require 'matchers/include_in_order'
6
4
 
7
- module PuppetEnvironments
8
5
  describe Puppet::Environments do
9
- include Matchers::Include
10
-
11
6
  FS = Puppet::FileSystem
12
7
 
8
+ module FsRemove
9
+ def remove
10
+ @properties[:directory?] = false
11
+ @properties[:exist?] = false
12
+ @properties[:executable?] = false
13
+ end
14
+ end
15
+
13
16
  before(:each) do
14
17
  Puppet.settings.initialize_global_settings
15
18
  Puppet[:environment_timeout] = "unlimited"
@@ -49,7 +52,7 @@ describe Puppet::Environments do
49
52
  loader_from(:filesystem => [directory_tree, global_path_1, global_path_2],
50
53
  :directory => directory_tree.children.first,
51
54
  :modulepath => [global_path_1_location, global_path_2_location]) do |loader|
52
- expect(loader.list).to include_in_any_order(
55
+ expect(loader.list).to contain_exactly(
53
56
  environment(:an_environment).
54
57
  with_manifest("#{FS.path_string(directory_tree)}/envdir/an_environment/manifests").
55
58
  with_modulepath(["#{FS.path_string(directory_tree)}/envdir/an_environment/modules",
@@ -87,7 +90,7 @@ describe Puppet::Environments do
87
90
 
88
91
  loader_from(:filesystem => [envdir],
89
92
  :directory => envdir) do |loader|
90
- expect(loader.list).to include_in_any_order(environment(:env1), environment(:env2))
93
+ expect(loader.list).to contain_exactly(environment(:env1), environment(:env2))
91
94
  end
92
95
  end
93
96
 
@@ -136,6 +139,14 @@ describe Puppet::Environments do
136
139
  end
137
140
  end
138
141
 
142
+ it "implements guard and unguard" do
143
+ loader_from(:filesystem => [directory_tree],
144
+ :directory => directory_tree.children.first) do |loader|
145
+ expect(loader.guard('env1')).to be_nil
146
+ expect(loader.unguard('env1')).to be_nil
147
+ end
148
+ end
149
+
139
150
  context "with an environment.conf" do
140
151
  let(:envdir) do
141
152
  FS::MemoryFile.a_directory(File.expand_path("envdir"), [
@@ -406,33 +417,29 @@ config_version=$vardir/random/scripts
406
417
  ]),
407
418
  ])
408
419
 
409
- FS.overlay(original_envdir) do
410
- dir_loader = Puppet::Environments::Directories.new(original_envdir, [])
411
- loader = Puppet::Environments::Cached.new(dir_loader)
412
- Puppet.override(:environments => loader) do
413
- original_env = loader.get("env3") # force the environment.conf to be read
414
-
415
- changed_envdir = FS::MemoryFile.a_directory(base_dir, [
416
- FS::MemoryFile.a_directory("env3", [
417
- FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
418
- manifest=/manifest_changed
419
- modulepath=/modules_changed
420
- environment_timeout=0
421
- EOF
422
- ]),
423
- ])
420
+ cached_loader_from(:filesystem => [original_envdir], :directory => original_envdir) do |loader|
421
+ original_env = loader.get("env3") # force the environment.conf to be read
422
+
423
+ changed_envdir = FS::MemoryFile.a_directory(base_dir, [
424
+ FS::MemoryFile.a_directory("env3", [
425
+ FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
426
+ manifest=/manifest_changed
427
+ modulepath=/modules_changed
428
+ environment_timeout=0
429
+ EOF
430
+ ]),
431
+ ])
424
432
 
425
- FS.overlay(changed_envdir) do
426
- changed_env = loader.get("env3")
433
+ FS.overlay(changed_envdir) do
434
+ changed_env = loader.get("env3")
427
435
 
428
- expect(original_env).to environment(:env3).
429
- with_manifest(File.expand_path("/manifest_orig")).
430
- with_full_modulepath([File.expand_path("/modules_orig")])
436
+ expect(original_env).to environment(:env3).
437
+ with_manifest(File.expand_path("/manifest_orig")).
438
+ with_full_modulepath([File.expand_path("/modules_orig")])
431
439
 
432
- expect(changed_env).to environment(:env3).
433
- with_manifest(File.expand_path("/manifest_changed")).
434
- with_full_modulepath([File.expand_path("/modules_changed")])
435
- end
440
+ expect(changed_env).to environment(:env3).
441
+ with_manifest(File.expand_path("/manifest_changed")).
442
+ with_full_modulepath([File.expand_path("/modules_changed")])
436
443
  end
437
444
  end
438
445
  end
@@ -558,24 +565,49 @@ config_version=$vardir/random/scripts
558
565
 
559
566
  describe "cached loaders" do
560
567
  it "lists environments" do
561
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
562
- expect(Puppet::Environments::Cached.new(loader).list).to include_in_any_order(
568
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
569
+ expect(loader.list).to contain_exactly(
563
570
  environment(:an_environment),
564
571
  environment(:another_environment),
565
572
  environment(:symlinked_environment))
566
573
  end
567
574
  end
568
575
 
576
+ it "returns the same cached environment object for list and get methods" do
577
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
578
+ env = loader.list.find { |e| e.name == :an_environment }
579
+
580
+ expect(env).to equal(loader.get(:an_environment)) # same object
581
+ end
582
+ end
583
+
584
+ it "returns the same cached environment object for multiple list calls" do
585
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
586
+ expect(loader.list.first).to equal(loader.list.first) # same object
587
+ end
588
+ end
589
+
590
+ it "expires environments and returns a new environment object with the same value" do
591
+ Puppet[:environment_timeout] = "0"
592
+
593
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
594
+ a = loader.list.first
595
+ b = loader.list.first
596
+ expect(a).to eq(b) # same value
597
+ expect(a).to_not equal(b) # not same object
598
+ end
599
+ end
600
+
569
601
  it "has search_paths" do
570
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
571
- expect(Puppet::Environments::Cached.new(loader).search_paths).to eq(["file://#{directory_tree.children.first}"])
602
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
603
+ expect(loader.search_paths).to eq(["file://#{directory_tree.children.first}"])
572
604
  end
573
605
  end
574
606
 
575
607
  context "#get" do
576
608
  it "gets an environment" do
577
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
578
- expect(Puppet::Environments::Cached.new(loader).get(:an_environment)).to environment(:an_environment)
609
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
610
+ expect(loader.get(:an_environment)).to environment(:an_environment)
579
611
  end
580
612
  end
581
613
 
@@ -591,17 +623,89 @@ config_version=$vardir/random/scripts
591
623
  cached.get(:cached)
592
624
  end
593
625
 
626
+ it "does not list deleted environments" do
627
+ env3 = FS::MemoryFile.a_directory("env3", [
628
+ FS::MemoryFile.a_regular_file_containing("environment.conf", '')
629
+ ])
630
+
631
+ envdir = FS::MemoryFile.a_directory(File.expand_path("envdir"), [
632
+ FS::MemoryFile.a_directory("env1", [
633
+ FS::MemoryFile.a_regular_file_containing("environment.conf", '')
634
+ ]),
635
+ FS::MemoryFile.a_directory("env2", [
636
+ FS::MemoryFile.a_regular_file_containing("environment.conf", '')
637
+ ]),
638
+ env3
639
+ ])
640
+
641
+ loader_from(:filesystem => [envdir], :directory => envdir) do |loader|
642
+ cached = Puppet::Environments::Cached.new(loader)
643
+ cached.get(:env1)
644
+ cached.get(:env2)
645
+ cached.get(:env3)
646
+ env3.extend(FsRemove).remove
647
+
648
+ expect(cached.list).to contain_exactly(environment(:env1),environment(:env2))
649
+ expect(cached.get(:env3)).to be_nil
650
+ end
651
+ end
652
+
653
+ it "normalizes environment name to symbol" do
654
+ env = Puppet::Node::Environment.create(:cached, [])
655
+ mocked_loader = double('loader')
656
+
657
+ expect(mocked_loader).not_to receive(:get).with('cached')
658
+ expect(mocked_loader).to receive(:get).with(:cached).and_return(env).once
659
+ expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).once
660
+
661
+ cached = Puppet::Environments::Cached.new(mocked_loader)
662
+ cached.get('cached')
663
+ cached.get(:cached)
664
+ end
665
+
666
+ it "caches environment name as symbol and only once" do
667
+ mocked_loader = double('loader')
668
+
669
+ env = Puppet::Node::Environment.create(:cached, [])
670
+ allow(mocked_loader).to receive(:get).with(:cached).and_return(env)
671
+ allow(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20))
672
+
673
+ cached = Puppet::Environments::Cached.new(mocked_loader)
674
+ cached.get(:cached)
675
+ cached.get('cached')
676
+
677
+ expect(cached.instance_variable_get(:@cache).keys).to eq([:cached])
678
+ end
679
+
680
+ it "is able to cache multiple environments" do
681
+ mocked_loader = double('loader')
682
+
683
+ env1 = Puppet::Node::Environment.create(:env1, [])
684
+ allow(mocked_loader).to receive(:get).with(:env1).and_return(env1)
685
+ allow(mocked_loader).to receive(:get_conf).with(:env1).and_return(Puppet::Settings::EnvironmentConf.static_for(env1, 20))
686
+
687
+ env2 = Puppet::Node::Environment.create(:env2, [])
688
+ allow(mocked_loader).to receive(:get).with(:env2).and_return(env2)
689
+ allow(mocked_loader).to receive(:get_conf).with(:env2).and_return(Puppet::Settings::EnvironmentConf.static_for(env2, 20))
690
+
691
+ cached = Puppet::Environments::Cached.new(mocked_loader)
692
+ cached.get('env1')
693
+ cached.get('env2')
694
+
695
+ expect(cached.instance_variable_get(:@cache).keys).to eq([:env1, :env2])
696
+ end
697
+
594
698
  it "returns nil if env not found" do
595
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
596
- expect(Puppet::Environments::Cached.new(loader).get(:doesnotexist)).to be_nil
699
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
700
+ expect(loader.get(:doesnotexist)).to be_nil
597
701
  end
598
702
  end
599
703
  end
600
704
 
601
705
  context "#get!" do
602
706
  it "gets an environment" do
603
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
604
- expect(Puppet::Environments::Cached.new(loader).get!(:an_environment)).to environment(:an_environment)
707
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
708
+ expect(loader.get!(:an_environment)).to environment(:an_environment)
605
709
  end
606
710
  end
607
711
 
@@ -618,14 +722,52 @@ config_version=$vardir/random/scripts
618
722
  end
619
723
 
620
724
  it "raises error if environment is not found" do
621
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
725
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
622
726
  expect do
623
- Puppet::Environments::Cached.new(loader).get!(:doesnotexist)
727
+ loader.get!(:doesnotexist)
624
728
  end.to raise_error(Puppet::Environments::EnvironmentNotFound)
625
729
  end
626
730
  end
627
731
  end
628
732
 
733
+ context "#get_conf" do
734
+ it "loads environment.conf" do
735
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
736
+ expect(loader.get_conf(:an_environment)).to match_environment_conf(:an_environment).
737
+ with_env_path(directory_tree.children.first).
738
+ with_global_module_path([])
739
+ end
740
+ end
741
+
742
+ it "always reloads environment.conf" do
743
+ env = Puppet::Node::Environment.create(:cached, [])
744
+ mocked_loader = double('loader')
745
+ expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).twice
746
+
747
+ cached = Puppet::Environments::Cached.new(mocked_loader)
748
+
749
+ cached.get_conf(:cached)
750
+ cached.get_conf(:cached)
751
+ end
752
+
753
+ it "normalizes environment name to symbol" do
754
+ env = Puppet::Node::Environment.create(:cached, [])
755
+ mocked_loader = double('loader')
756
+ expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).twice
757
+
758
+ cached = Puppet::Environments::Cached.new(mocked_loader)
759
+
760
+ cached.get_conf('cached')
761
+ cached.get_conf(:cached)
762
+ end
763
+
764
+ it "returns nil if environment is not found" do
765
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
766
+ expect(loader.get_conf(:doesnotexist)).to be_nil
767
+ end
768
+ end
769
+ end
770
+
629
771
  context "expiration policies" do
630
772
  let(:service) { ReplayExpirationService.new }
631
773
 
@@ -647,8 +789,6 @@ config_version=$vardir/random/scripts
647
789
  end
648
790
 
649
791
  it "evicts an expired environment" do
650
- service = ReplayExpirationService.new
651
-
652
792
  expect(service).to receive(:expired?).and_return(true)
653
793
 
654
794
  with_environment_loaded(service) do |cached|
@@ -703,13 +843,92 @@ config_version=$vardir/random/scripts
703
843
  expect(service.created_envs).to eq([:an_environment, :an_environment])
704
844
  expect(service.evicted_envs).to eq([:an_environment])
705
845
  end
706
- end
707
846
 
708
- it "gets an environment.conf" do
709
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
710
- expect(Puppet::Environments::Cached.new(loader).get_conf(:an_environment)).to match_environment_conf(:an_environment).
711
- with_env_path(directory_tree.children.first).
712
- with_global_module_path([])
847
+ it "evicts expired environments when listing" do
848
+ expect(service).to receive(:expired?).with(:an_environment).and_return(true)
849
+
850
+ with_environment_loaded(service) do |cached|
851
+ cached.list
852
+ end
853
+
854
+ expect(service.evicted_envs).to eq([:an_environment])
855
+ end
856
+
857
+ context "when guarding an environment" do
858
+ before :each do
859
+ Puppet[:environment_timeout] = 0
860
+ end
861
+
862
+ let(:name) { :an_environment }
863
+
864
+ def with_guard(cached, name, &block)
865
+ cached.guard(name)
866
+ begin
867
+ yield
868
+ ensure
869
+ cached.unguard(name)
870
+ end
871
+ end
872
+
873
+ it "evicts an expired and unguarded environment" do
874
+ with_environment_loaded(service) do |cached|
875
+ cached.get!(name)
876
+ end
877
+
878
+ expect(service.created_envs).to eq([name, name])
879
+ expect(service.evicted_envs).to eq([name])
880
+ end
881
+
882
+ it "does not evict an expired, but guarded environment" do
883
+ with_environment_loaded(service) do |cached|
884
+ with_guard(cached, name) do
885
+ cached.get!(name) # these shouldn't reload
886
+ cached.get!(name)
887
+ end
888
+ end
889
+
890
+ expect(service.created_envs).to eq([name])
891
+ expect(service.evicted_envs).to eq([])
892
+ end
893
+
894
+ it "does not evict an environment marked for expiration, but is guarded" do
895
+ Puppet[:environment_timeout] = 'unlimited'
896
+
897
+ expect(service).to receive(:expired?).never
898
+
899
+ with_environment_loaded(service) do |cached|
900
+ with_guard(cached, name) do
901
+ cached.get!(name)
902
+ end
903
+ end
904
+
905
+ expect(service.created_envs).to eq([name])
906
+ expect(service.evicted_envs).to eq([])
907
+ end
908
+
909
+ it "evicts an environment that is no longer guarded" do
910
+ with_environment_loaded(service) do |cached|
911
+ with_guard(cached, name) {}
912
+
913
+ cached.get!(name) # this reloads
914
+ end
915
+
916
+ expect(service.created_envs).to eq([name, name])
917
+ expect(service.evicted_envs).to eq([name])
918
+ end
919
+
920
+ it "can nest guards" do
921
+ with_environment_loaded(service) do |cached|
922
+ with_guard(cached, name) do
923
+ with_guard(cached, name) do
924
+ cached.get!(name) # doesn't reload
925
+ end
926
+ end
927
+ end
928
+
929
+ expect(service.created_envs).to eq([name])
930
+ expect(service.evicted_envs).to eq([])
931
+ end
713
932
  end
714
933
  end
715
934
 
@@ -723,10 +942,42 @@ config_version=$vardir/random/scripts
723
942
 
724
943
  expect(service.evicted_envs).to eq([:an_environment])
725
944
  end
945
+
946
+ it "normalizes environment name to symbol" do
947
+ with_environment_loaded(service) do |cached|
948
+ cached.clear('an_environment')
949
+ end
950
+
951
+ expect(service.evicted_envs).to eq([:an_environment])
952
+ end
726
953
  end
727
954
 
728
955
  context '#clear_all' do
729
956
  let(:service) { ReplayExpirationService.new }
957
+ let(:envdir) { File.expand_path("envdir") }
958
+ let(:default_dir) { File.join(envdir, "cached_env", "modules") }
959
+ let(:expected_dir) { File.join(envdir, "cached_env", "site") }
960
+
961
+ let(:base_dir) do
962
+ FS::MemoryFile.a_directory(envdir, [
963
+ FS::MemoryFile.a_directory("cached_env", [
964
+ FS::MemoryFile.a_missing_file("environment.conf")
965
+ ])
966
+ ])
967
+ end
968
+
969
+ let(:updated_dir) do
970
+ FS::MemoryFile.a_directory(envdir, [
971
+ FS::MemoryFile.a_directory("cached_env", [
972
+ FS::MemoryFile.a_directory("site"),
973
+ FS::MemoryFile.a_missing_directory("modules"),
974
+ FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
975
+ modulepath=site
976
+ environment_timeout=unlimited
977
+ EOF
978
+ ])
979
+ ])
980
+ end
730
981
 
731
982
  it 'evicts all environments' do
732
983
  with_environment_loaded(service) do |cached|
@@ -738,48 +989,44 @@ config_version=$vardir/random/scripts
738
989
  end
739
990
  end
740
991
 
741
- it 'clears cached environment settings' do
742
- base_dir = File.expand_path("envdir")
743
- original_envdir = FS::MemoryFile.a_directory(base_dir, [
744
- FS::MemoryFile.a_directory("env3", [
745
- FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
746
- manifest=/manifest_orig
747
- modulepath=/modules_orig
748
- environment_timeout=60
749
- EOF
750
- ]),
751
- ])
992
+ it "recomputes modulepath if 'get' is called before 'clear_all'" do
993
+ cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
994
+ loader.get(:cached_env)
752
995
 
753
- FS.overlay(original_envdir) do
754
- dir_loader = Puppet::Environments::Directories.new(original_envdir, [])
755
- loader = Puppet::Environments::Cached.new(dir_loader)
756
- Puppet.override(:environments => loader) do
757
- original_env = loader.get("env3") # force the environment.conf to be read
758
-
759
- changed_envdir = FS::MemoryFile.a_directory(base_dir, [
760
- FS::MemoryFile.a_directory("env3", [
761
- FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
762
- manifest=/manifest_changed
763
- modulepath=/modules_changed
764
- environment_timeout=60
765
- EOF
766
- ]),
767
- ])
996
+ expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
768
997
 
769
- #Clear all cached environments
998
+ FS.overlay(updated_dir) do
770
999
  loader.clear_all
771
1000
 
772
- FS.overlay(changed_envdir) do
773
- changed_env = loader.get("env3")
1001
+ expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
1002
+ end
1003
+ end
1004
+ end
774
1005
 
775
- expect(original_env).to environment(:env3).
776
- with_manifest(File.expand_path("/manifest_orig")).
777
- with_full_modulepath([File.expand_path("/modules_orig")])
1006
+ it "recomputes modulepath if 'list' is called before 'clear_all'" do
1007
+ cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
1008
+ loader.list
778
1009
 
779
- expect(changed_env).to environment(:env3).
780
- with_manifest(File.expand_path("/manifest_changed")).
781
- with_full_modulepath([File.expand_path("/modules_changed")])
782
- end
1010
+ expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
1011
+
1012
+ FS.overlay(updated_dir) do
1013
+ loader.clear_all
1014
+
1015
+ expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
1016
+ end
1017
+ end
1018
+ end
1019
+
1020
+ it "recomputes modulepath if 'get_conf' is called before 'clear_all'" do
1021
+ cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
1022
+ loader.get_conf(:cached_env)
1023
+
1024
+ expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
1025
+
1026
+ FS.overlay(updated_dir) do
1027
+ loader.clear_all
1028
+
1029
+ expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
783
1030
  end
784
1031
  end
785
1032
  end
@@ -865,6 +1112,20 @@ config_version=$vardir/random/scripts
865
1112
  end
866
1113
  end
867
1114
 
1115
+ def cached_loader_from(options, &block)
1116
+ FS.overlay(*options[:filesystem]) do
1117
+ environments = Puppet::Environments::Cached.new(
1118
+ Puppet::Environments::Directories.new(
1119
+ options[:directory],
1120
+ options[:modulepath] || []
1121
+ )
1122
+ )
1123
+ Puppet.override(:environments => environments) do
1124
+ yield environments
1125
+ end
1126
+ end
1127
+ end
1128
+
868
1129
  def loader_from(options, &block)
869
1130
  FS.overlay(*options[:filesystem]) do
870
1131
  environments = Puppet::Environments::Directories.new(
@@ -917,4 +1178,3 @@ config_version=$vardir/random/scripts
917
1178
  end
918
1179
  end
919
1180
  end
920
- end
@@ -71,4 +71,8 @@ CONF
71
71
  log.message =~ /Uploading facts for '.*' to 'puppet\.server\.test'/}
72
72
  end
73
73
  end
74
+
75
+ describe "#show" do
76
+ it { is_expected.to be_action :show }
77
+ end
74
78
  end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Puppet::FacterImpl' do
4
+ subject(:facter_impl) { Puppet::FacterImpl.new }
5
+
6
+ it { is_expected.to respond_to(:value) }
7
+ it { is_expected.to respond_to(:add) }
8
+
9
+ describe '.value' do
10
+ let(:method_name) { :value }
11
+
12
+ before { allow(Facter).to receive(method_name) }
13
+
14
+ it 'delegates to Facter API' do
15
+ facter_impl.value('test_fact')
16
+ expect(Facter).to have_received(method_name).with('test_fact')
17
+ end
18
+ end
19
+
20
+ describe '.add' do
21
+ let(:block) { Proc.new { setcode 'test' } }
22
+ let(:method_name) { :add }
23
+
24
+ before { allow(Facter).to receive(method_name) }
25
+
26
+ it 'delegates to Facter API' do
27
+ facter_impl.add('test_fact', &block)
28
+ expect(Facter).to have_received(method_name).with('test_fact', &block)
29
+ end
30
+ end
31
+ end
@@ -104,8 +104,8 @@ describe Puppet::FileBucket::Dipper, :uses_checksums => true do
104
104
  # Diff without the context
105
105
  # Lines we need to see match 'Content' instead of trimming diff output filter out
106
106
  # surrounding noise...or hard code the check values
107
- if Facter.value(:osfamily) == 'Solaris' &&
108
- Puppet::Util::Package.versioncmp(Facter.value(:operatingsystemrelease), '11.0') >= 0
107
+ if Puppet.runtime[:facter].value(:osfamily) == 'Solaris' &&
108
+ Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:operatingsystemrelease), '11.0') >= 0
109
109
  # Use gdiff on Solaris
110
110
  diff12 = Puppet::Util::Execution.execute("gdiff -uN #{file1} #{file2}| grep Content")
111
111
  diff21 = Puppet::Util::Execution.execute("gdiff -uN #{file2} #{file1}| grep Content")
@@ -155,6 +155,29 @@ describe Puppet::FileServing::Configuration::Parser do
155
155
  end
156
156
  end
157
157
 
158
+ describe Puppet::FileServing::Configuration::Parser, " when parsing the scripts mount" do
159
+ include FSConfigurationParserTesting
160
+
161
+ before do
162
+ @mount = double('scriptsmount', :name => "scripts", :validate => true)
163
+ end
164
+
165
+ it "should create an instance of the Scripts Mount class" do
166
+ write_config_file "[scripts]\n"
167
+
168
+ expect(Puppet::FileServing::Mount::Scripts).to receive(:new).with("scripts").and_return(@mount)
169
+ @parser.parse
170
+ end
171
+
172
+ it "should warn if a path is set" do
173
+ write_config_file "[scripts]\npath /some/path\n"
174
+ expect(Puppet::FileServing::Mount::Scripts).to receive(:new).with("scripts").and_return(@mount)
175
+
176
+ expect(Puppet).to receive(:warning)
177
+ @parser.parse
178
+ end
179
+ end
180
+
158
181
  describe Puppet::FileServing::Configuration::Parser, " when parsing the plugins mount" do
159
182
  include FSConfigurationParserTesting
160
183