puppet 6.22.1-universal-darwin → 6.25.1-universal-darwin

Sign up to get free protection for your applications and to get access to all the features.
Files changed (415) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +5 -5
  3. data/Gemfile +2 -2
  4. data/Gemfile.lock +20 -20
  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 +1 -0
  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 +1 -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 +144 -56
  27. data/lib/puppet/confine/variable.rb +1 -1
  28. data/lib/puppet/defaults.rb +47 -33
  29. data/lib/puppet/environments.rb +75 -25
  30. data/lib/puppet/face/facts.rb +1 -1
  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/windows.rb +2 -2
  42. data/lib/puppet/forge.rb +4 -4
  43. data/lib/puppet/functions/all.rb +1 -1
  44. data/lib/puppet/functions/camelcase.rb +1 -1
  45. data/lib/puppet/functions/capitalize.rb +2 -2
  46. data/lib/puppet/functions/downcase.rb +2 -2
  47. data/lib/puppet/functions/empty.rb +8 -0
  48. data/lib/puppet/functions/find_template.rb +2 -2
  49. data/lib/puppet/functions/get.rb +5 -5
  50. data/lib/puppet/functions/group_by.rb +13 -5
  51. data/lib/puppet/functions/lest.rb +1 -1
  52. data/lib/puppet/functions/new.rb +100 -100
  53. data/lib/puppet/functions/partition.rb +4 -4
  54. data/lib/puppet/functions/require.rb +5 -5
  55. data/lib/puppet/functions/sort.rb +3 -3
  56. data/lib/puppet/functions/strftime.rb +1 -0
  57. data/lib/puppet/functions/tree_each.rb +7 -9
  58. data/lib/puppet/functions/type.rb +4 -4
  59. data/lib/puppet/functions/unwrap.rb +17 -2
  60. data/lib/puppet/functions/upcase.rb +2 -2
  61. data/lib/puppet/http/client.rb +1 -1
  62. data/lib/puppet/http/redirector.rb +5 -0
  63. data/lib/puppet/http/resolver/server_list.rb +15 -4
  64. data/lib/puppet/http/service/compiler.rb +75 -1
  65. data/lib/puppet/http/service/file_server.rb +2 -1
  66. data/lib/puppet/indirector/catalog/compiler.rb +25 -6
  67. data/lib/puppet/indirector/catalog/rest.rb +1 -0
  68. data/lib/puppet/indirector/facts/facter.rb +6 -6
  69. data/lib/puppet/indirector/file_metadata/rest.rb +1 -0
  70. data/lib/puppet/indirector/indirection.rb +1 -1
  71. data/lib/puppet/indirector/resource/ral.rb +6 -1
  72. data/lib/puppet/indirector/terminus.rb +4 -0
  73. data/lib/puppet/interface/documentation.rb +1 -0
  74. data/lib/puppet/module/plan.rb +0 -1
  75. data/lib/puppet/module/task.rb +1 -1
  76. data/lib/puppet/module.rb +1 -0
  77. data/lib/puppet/module_tool/applications/installer.rb +12 -4
  78. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  79. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  80. data/lib/puppet/module_tool/errors/shared.rb +17 -0
  81. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  82. data/lib/puppet/node/environment.rb +10 -11
  83. data/lib/puppet/pal/pal_impl.rb +1 -1
  84. data/lib/puppet/parser/functions/fqdn_rand.rb +14 -6
  85. data/lib/puppet/parser/resource.rb +1 -1
  86. data/lib/puppet/parser/scope.rb +1 -0
  87. data/lib/puppet/parser/templatewrapper.rb +1 -0
  88. data/lib/puppet/pops/evaluator/closure.rb +7 -5
  89. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +1 -0
  90. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  91. data/lib/puppet/pops/model/ast.rb +1 -0
  92. data/lib/puppet/pops/model/factory.rb +2 -1
  93. data/lib/puppet/pops/parser/eparser.rb +201 -201
  94. data/lib/puppet/pops/parser/lexer2.rb +92 -91
  95. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  96. data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
  97. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  98. data/lib/puppet/pops/types/p_sem_ver_type.rb +8 -2
  99. data/lib/puppet/pops/types/p_sensitive_type.rb +10 -0
  100. data/lib/puppet/pops/types/type_formatter.rb +4 -3
  101. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  102. data/lib/puppet/pops/types/types.rb +1 -1
  103. data/lib/puppet/provider/aix_object.rb +1 -1
  104. data/lib/puppet/provider/exec/posix.rb +16 -4
  105. data/lib/puppet/provider/group/groupadd.rb +5 -2
  106. data/lib/puppet/provider/package/nim.rb +11 -6
  107. data/lib/puppet/provider/package/pip.rb +15 -3
  108. data/lib/puppet/provider/package/pkg.rb +19 -2
  109. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  110. data/lib/puppet/provider/package/yum.rb +1 -1
  111. data/lib/puppet/provider/parsedfile.rb +3 -0
  112. data/lib/puppet/provider/service/base.rb +1 -1
  113. data/lib/puppet/provider/service/init.rb +5 -5
  114. data/lib/puppet/provider/service/launchd.rb +2 -2
  115. data/lib/puppet/provider/service/redhat.rb +1 -1
  116. data/lib/puppet/provider/service/smf.rb +3 -3
  117. data/lib/puppet/provider/service/systemd.rb +15 -5
  118. data/lib/puppet/provider/service/upstart.rb +5 -5
  119. data/lib/puppet/provider/service/windows.rb +38 -0
  120. data/lib/puppet/provider/user/aix.rb +44 -1
  121. data/lib/puppet/provider/user/directoryservice.rb +26 -13
  122. data/lib/puppet/provider/user/useradd.rb +72 -16
  123. data/lib/puppet/provider.rb +1 -1
  124. data/lib/puppet/reference/configuration.rb +1 -1
  125. data/lib/puppet/reference/providers.rb +2 -2
  126. data/lib/puppet/resource/catalog.rb +1 -1
  127. data/lib/puppet/resource/type_collection.rb +1 -0
  128. data/lib/puppet/resource.rb +38 -5
  129. data/lib/puppet/runtime.rb +11 -1
  130. data/lib/puppet/settings.rb +32 -9
  131. data/lib/puppet/test/test_helper.rb +4 -1
  132. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  133. data/lib/puppet/transaction/persistence.rb +11 -1
  134. data/lib/puppet/transaction/report.rb +15 -1
  135. data/lib/puppet/type/exec.rb +35 -5
  136. data/lib/puppet/type/file/mode.rb +6 -0
  137. data/lib/puppet/type/file/selcontext.rb +1 -1
  138. data/lib/puppet/type/file.rb +25 -7
  139. data/lib/puppet/type/filebucket.rb +3 -3
  140. data/lib/puppet/type/group.rb +0 -1
  141. data/lib/puppet/type/resources.rb +1 -1
  142. data/lib/puppet/type/service.rb +26 -41
  143. data/lib/puppet/type/tidy.rb +22 -3
  144. data/lib/puppet/type/user.rb +38 -21
  145. data/lib/puppet/type.rb +1 -1
  146. data/lib/puppet/util/command_line.rb +1 -1
  147. data/lib/puppet/util/filetype.rb +2 -2
  148. data/lib/puppet/util/json.rb +3 -0
  149. data/lib/puppet/util/log.rb +1 -2
  150. data/lib/puppet/util/logging.rb +1 -25
  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/service.rb +0 -5
  158. data/lib/puppet/util/windows/sid.rb +3 -1
  159. data/lib/puppet/util/windows/user.rb +0 -2
  160. data/lib/puppet/util/windows.rb +3 -0
  161. data/lib/puppet/util.rb +4 -3
  162. data/lib/puppet/version.rb +1 -1
  163. data/lib/puppet.rb +5 -9
  164. data/locales/puppet.pot +408 -364
  165. data/man/man5/puppet.conf.5 +303 -275
  166. data/man/man8/puppet-agent.8 +4 -1
  167. data/man/man8/puppet-apply.8 +1 -1
  168. data/man/man8/puppet-catalog.8 +9 -9
  169. data/man/man8/puppet-config.8 +1 -1
  170. data/man/man8/puppet-describe.8 +1 -1
  171. data/man/man8/puppet-device.8 +1 -1
  172. data/man/man8/puppet-doc.8 +1 -1
  173. data/man/man8/puppet-epp.8 +1 -1
  174. data/man/man8/puppet-facts.8 +8 -8
  175. data/man/man8/puppet-filebucket.8 +1 -1
  176. data/man/man8/puppet-generate.8 +1 -1
  177. data/man/man8/puppet-help.8 +1 -1
  178. data/man/man8/puppet-key.8 +7 -7
  179. data/man/man8/puppet-lookup.8 +1 -1
  180. data/man/man8/puppet-man.8 +1 -1
  181. data/man/man8/puppet-module.8 +3 -3
  182. data/man/man8/puppet-node.8 +5 -5
  183. data/man/man8/puppet-parser.8 +1 -1
  184. data/man/man8/puppet-plugin.8 +1 -1
  185. data/man/man8/puppet-report.8 +5 -5
  186. data/man/man8/puppet-resource.8 +1 -1
  187. data/man/man8/puppet-script.8 +1 -1
  188. data/man/man8/puppet-ssl.8 +1 -1
  189. data/man/man8/puppet-status.8 +4 -4
  190. data/man/man8/puppet.8 +2 -2
  191. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +2 -1
  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/integration/application/agent_spec.rb +141 -37
  232. data/spec/integration/application/filebucket_spec.rb +16 -0
  233. data/spec/integration/application/module_spec.rb +21 -0
  234. data/spec/integration/application/resource_spec.rb +64 -0
  235. data/spec/integration/application/ssl_spec.rb +20 -0
  236. data/spec/integration/configurer_spec.rb +18 -2
  237. data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
  238. data/spec/integration/indirector/facts/facter_spec.rb +93 -39
  239. data/spec/integration/l10n/compiler_spec.rb +37 -0
  240. data/spec/integration/parser/pcore_resource_spec.rb +10 -0
  241. data/spec/integration/transaction/report_spec.rb +1 -1
  242. data/spec/integration/type/exec_spec.rb +70 -45
  243. data/spec/integration/type/file_spec.rb +2 -2
  244. data/spec/integration/type/package_spec.rb +6 -6
  245. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  246. data/spec/integration/util/windows/process_spec.rb +1 -9
  247. data/spec/lib/puppet/test_ca.rb +7 -2
  248. data/spec/lib/puppet_spec/modules.rb +13 -2
  249. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  250. data/spec/lib/puppet_spec/settings.rb +1 -0
  251. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  252. data/spec/shared_contexts/l10n.rb +27 -0
  253. data/spec/spec_helper.rb +1 -10
  254. data/spec/unit/application/agent_spec.rb +7 -2
  255. data/spec/unit/application/apply_spec.rb +76 -56
  256. data/spec/unit/application/resource_spec.rb +29 -0
  257. data/spec/unit/configurer/downloader_spec.rb +6 -0
  258. data/spec/unit/configurer_spec.rb +256 -57
  259. data/spec/unit/defaults_spec.rb +1 -0
  260. data/spec/unit/environments_spec.rb +184 -0
  261. data/spec/unit/facter_impl_spec.rb +31 -0
  262. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  263. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  264. data/spec/unit/file_serving/configuration_spec.rb +14 -4
  265. data/spec/unit/file_serving/fileset_spec.rb +60 -0
  266. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  267. data/spec/unit/file_system_spec.rb +13 -0
  268. data/spec/unit/functions/assert_type_spec.rb +1 -1
  269. data/spec/unit/functions/empty_spec.rb +10 -0
  270. data/spec/unit/functions/logging_spec.rb +1 -0
  271. data/spec/unit/functions/lookup_spec.rb +64 -0
  272. data/spec/unit/functions/unwrap_spec.rb +8 -0
  273. data/spec/unit/functions4_spec.rb +2 -2
  274. data/spec/unit/gettext/config_spec.rb +12 -0
  275. data/spec/unit/http/client_spec.rb +58 -1
  276. data/spec/unit/http/service/compiler_spec.rb +131 -0
  277. data/spec/unit/indirector/catalog/compiler_spec.rb +101 -10
  278. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  279. data/spec/unit/indirector/indirection_spec.rb +10 -3
  280. data/spec/unit/indirector/resource/ral_spec.rb +40 -75
  281. data/spec/unit/interface/action_spec.rb +0 -9
  282. data/spec/unit/module_spec.rb +15 -1
  283. data/spec/unit/module_tool/applications/installer_spec.rb +51 -12
  284. data/spec/unit/network/authstore_spec.rb +0 -15
  285. data/spec/unit/network/formats_spec.rb +6 -0
  286. data/spec/unit/parser/functions/fqdn_rand_spec.rb +15 -1
  287. data/spec/unit/parser/templatewrapper_spec.rb +12 -2
  288. data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
  289. data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
  290. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  291. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +18 -0
  292. data/spec/unit/pops/types/p_sensitive_type_spec.rb +18 -0
  293. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  294. data/spec/unit/provider/package/gem_spec.rb +1 -1
  295. data/spec/unit/provider/package/nim_spec.rb +42 -0
  296. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  297. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  298. data/spec/unit/provider/package/pip_spec.rb +38 -1
  299. data/spec/unit/provider/package/pkg_spec.rb +29 -4
  300. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  301. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  302. data/spec/unit/provider/parsedfile_spec.rb +10 -0
  303. data/spec/unit/provider/service/init_spec.rb +1 -0
  304. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  305. data/spec/unit/provider/service/openwrt_spec.rb +3 -1
  306. data/spec/unit/provider/service/systemd_spec.rb +43 -9
  307. data/spec/unit/provider/service/windows_spec.rb +202 -0
  308. data/spec/unit/provider/user/aix_spec.rb +100 -0
  309. data/spec/unit/provider/user/directoryservice_spec.rb +68 -36
  310. data/spec/unit/provider/user/useradd_spec.rb +43 -2
  311. data/spec/unit/provider_spec.rb +4 -4
  312. data/spec/unit/puppet_spec.rb +12 -4
  313. data/spec/unit/resource/catalog_spec.rb +14 -1
  314. data/spec/unit/resource_spec.rb +58 -2
  315. data/spec/unit/settings_spec.rb +97 -56
  316. data/spec/unit/ssl/certificate_request_spec.rb +8 -14
  317. data/spec/unit/ssl/state_machine_spec.rb +19 -5
  318. data/spec/unit/transaction/additional_resource_generator_spec.rb +0 -2
  319. data/spec/unit/transaction_spec.rb +18 -20
  320. data/spec/unit/type/exec_spec.rb +76 -29
  321. data/spec/unit/type/file/selinux_spec.rb +3 -3
  322. data/spec/unit/type/file/source_spec.rb +4 -4
  323. data/spec/unit/type/service_spec.rb +86 -188
  324. data/spec/unit/type/tidy_spec.rb +24 -7
  325. data/spec/unit/type/user_spec.rb +45 -0
  326. data/spec/unit/type_spec.rb +2 -2
  327. data/spec/unit/util/logging_spec.rb +2 -0
  328. data/spec/unit/util/selinux_spec.rb +87 -16
  329. data/spec/unit/util/windows/sid_spec.rb +39 -4
  330. data/tasks/generate_cert_fixtures.rake +12 -3
  331. data/tasks/parallel.rake +3 -3
  332. metadata +49 -95
  333. data/ext/README.environment +0 -8
  334. data/ext/dbfix.sql +0 -132
  335. data/ext/debian/README.Debian +0 -8
  336. data/ext/debian/README.source +0 -2
  337. data/ext/debian/TODO.Debian +0 -1
  338. data/ext/debian/changelog.erb +0 -1122
  339. data/ext/debian/compat +0 -1
  340. data/ext/debian/control +0 -144
  341. data/ext/debian/copyright +0 -339
  342. data/ext/debian/docs +0 -1
  343. data/ext/debian/fileserver.conf +0 -41
  344. data/ext/debian/puppet-common.dirs +0 -13
  345. data/ext/debian/puppet-common.install +0 -3
  346. data/ext/debian/puppet-common.lintian-overrides +0 -5
  347. data/ext/debian/puppet-common.manpages +0 -28
  348. data/ext/debian/puppet-common.postinst +0 -35
  349. data/ext/debian/puppet-common.postrm +0 -33
  350. data/ext/debian/puppet-el.dirs +0 -1
  351. data/ext/debian/puppet-el.emacsen-install +0 -25
  352. data/ext/debian/puppet-el.emacsen-remove +0 -11
  353. data/ext/debian/puppet-el.emacsen-startup +0 -9
  354. data/ext/debian/puppet-el.install +0 -1
  355. data/ext/debian/puppet-testsuite.install +0 -2
  356. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  357. data/ext/debian/puppet.lintian-overrides +0 -3
  358. data/ext/debian/puppet.logrotate +0 -20
  359. data/ext/debian/puppet.postinst +0 -20
  360. data/ext/debian/puppet.postrm +0 -20
  361. data/ext/debian/puppet.preinst +0 -20
  362. data/ext/debian/puppetmaster-common.install +0 -2
  363. data/ext/debian/puppetmaster-common.manpages +0 -2
  364. data/ext/debian/puppetmaster-common.postinst +0 -6
  365. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  366. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  367. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  368. data/ext/debian/puppetmaster.README.debian +0 -17
  369. data/ext/debian/puppetmaster.default +0 -14
  370. data/ext/debian/puppetmaster.init +0 -137
  371. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  372. data/ext/debian/puppetmaster.postinst +0 -20
  373. data/ext/debian/puppetmaster.postrm +0 -5
  374. data/ext/debian/puppetmaster.preinst +0 -22
  375. data/ext/debian/rules +0 -132
  376. data/ext/debian/source/format +0 -1
  377. data/ext/debian/source/options +0 -1
  378. data/ext/debian/vim-puppet.README.Debian +0 -13
  379. data/ext/debian/vim-puppet.dirs +0 -5
  380. data/ext/debian/vim-puppet.yaml +0 -7
  381. data/ext/debian/watch +0 -2
  382. data/ext/freebsd/puppetd +0 -26
  383. data/ext/freebsd/puppetmasterd +0 -26
  384. data/ext/gentoo/conf.d/puppet +0 -5
  385. data/ext/gentoo/conf.d/puppetmaster +0 -12
  386. data/ext/gentoo/init.d/puppet +0 -38
  387. data/ext/gentoo/init.d/puppetmaster +0 -51
  388. data/ext/gentoo/puppet/fileserver.conf +0 -41
  389. data/ext/ips/puppet-agent +0 -44
  390. data/ext/ips/puppet-master +0 -44
  391. data/ext/ips/puppet.p5m.erb +0 -12
  392. data/ext/ips/puppetagent.xml +0 -42
  393. data/ext/ips/puppetmaster.xml +0 -42
  394. data/ext/ips/rules +0 -19
  395. data/ext/ips/transforms +0 -34
  396. data/ext/ldap/puppet.schema +0 -24
  397. data/ext/logcheck/puppet +0 -23
  398. data/ext/osx/file_mapping.yaml +0 -33
  399. data/ext/osx/postflight.erb +0 -109
  400. data/ext/osx/preflight.erb +0 -52
  401. data/ext/osx/prototype.plist.erb +0 -38
  402. data/ext/redhat/fileserver.conf +0 -41
  403. data/ext/redhat/logrotate +0 -21
  404. data/ext/redhat/puppet.spec.erb +0 -842
  405. data/ext/redhat/server.init +0 -128
  406. data/ext/redhat/server.sysconfig +0 -13
  407. data/ext/solaris/pkginfo +0 -6
  408. data/ext/solaris/smf/puppetd.xml +0 -77
  409. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  410. data/ext/solaris/smf/svc-puppetd +0 -71
  411. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  412. data/ext/suse/puppet.spec +0 -310
  413. data/ext/suse/server.init +0 -173
  414. data/ext/yaml_nodes.rb +0 -105
  415. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -1,3 +1,4 @@
1
+
1
2
  # coding: utf-8
2
3
  require 'spec_helper'
3
4
  require 'puppet/http'
@@ -95,6 +96,14 @@ describe Puppet::HTTP::Service::Compiler do
95
96
  subject.post_catalog(certname, environment: 'production', facts: facts, configured_environment: 'agent_specified')
96
97
  end
97
98
 
99
+ it 'includes check_environment' do
100
+ stub_request(:post, uri)
101
+ .with(body: hash_including('check_environment' => 'false'))
102
+ .to_return(**catalog_response)
103
+
104
+ subject.post_catalog(certname, environment: 'production', facts: facts)
105
+ end
106
+
98
107
  it 'includes transaction_uuid' do
99
108
  uuid = "ec3d2844-b236-4287-b0ad-632fbb4d1ff0"
100
109
 
@@ -258,6 +267,128 @@ describe Puppet::HTTP::Service::Compiler do
258
267
  end
259
268
  end
260
269
 
270
+ context 'when posting for a v4 catalog' do
271
+ let(:uri) {"https://compiler.example.com:8140/puppet/v4/catalog"}
272
+ let(:persistence) {{ facts: true, catalog: true }}
273
+ let(:facts) {{ 'foo' => 'bar' }}
274
+ let(:trusted_facts) {{}}
275
+ let(:uuid) { "ec3d2844-b236-4287-b0ad-632fbb4d1ff0" }
276
+ let(:job_id) { "1" }
277
+ let(:payload) {{
278
+ environment: environment,
279
+ persistence: persistence,
280
+ facts: facts,
281
+ trusted_facts: trusted_facts,
282
+ transaction_uuid: uuid,
283
+ job_id: job_id,
284
+ options: {
285
+ prefer_requested_environment: false,
286
+ capture_logs: false
287
+ }
288
+ }}
289
+ let(:serialized_catalog) {{ 'catalog' => catalog.to_data_hash }.to_json}
290
+ let(:catalog_response) {{ body: serialized_catalog, headers: {'Content-Type' => formatter.mime }}}
291
+
292
+ it 'includes default HTTP headers' do
293
+ stub_request(:post, uri).with do |request|
294
+ expect(request.headers).to include({'X-Puppet-Version' => /./, 'User-Agent' => /./})
295
+ expect(request.headers).to_not include('X-Puppet-Profiling')
296
+ end.to_return(**catalog_response)
297
+
298
+ subject.post_catalog4(certname, **payload)
299
+ end
300
+
301
+ it 'defaults the server and port based on settings' do
302
+ Puppet[:server] = 'compiler2.example.com'
303
+ Puppet[:serverport] = 8141
304
+
305
+ stub_request(:post, "https://compiler2.example.com:8141/puppet/v4/catalog")
306
+ .to_return(**catalog_response)
307
+
308
+ subject.post_catalog4(certname, **payload)
309
+ end
310
+
311
+ it 'includes puppet headers set via the :http_extra_headers and :profile settings' do
312
+ stub_request(:post, uri).with(headers: {'Example-Header' => 'real-thing', 'another' => 'thing', 'X-Puppet-Profiling' => 'true'}).
313
+ to_return(**catalog_response)
314
+
315
+ Puppet[:http_extra_headers] = 'Example-Header:real-thing,another:thing'
316
+ Puppet[:profile] = true
317
+
318
+ subject.post_catalog4(certname, **payload)
319
+ end
320
+
321
+ it 'returns a deserialized catalog' do
322
+ stub_request(:post, uri)
323
+ .to_return(**catalog_response)
324
+
325
+ _, cat, _ = subject.post_catalog4(certname, **payload)
326
+ expect(cat).to be_a(Puppet::Resource::Catalog)
327
+ expect(cat.name).to eq(certname)
328
+ end
329
+
330
+ it 'returns the request response' do
331
+ stub_request(:post, uri)
332
+ .to_return(**catalog_response)
333
+
334
+ resp, _, _ = subject.post_catalog4(certname, **payload)
335
+ expect(resp).to be_a(Puppet::HTTP::Response)
336
+ end
337
+
338
+ it 'raises a response error if unsuccessful' do
339
+ stub_request(:post, uri)
340
+ .to_return(status: [500, "Server Error"])
341
+
342
+ expect {
343
+ subject.post_catalog4(certname, **payload)
344
+ }.to raise_error do |err|
345
+ expect(err).to be_an_instance_of(Puppet::HTTP::ResponseError)
346
+ expect(err.message).to eq('Server Error')
347
+ expect(err.response.code).to eq(500)
348
+ end
349
+ end
350
+
351
+ it 'raises a response error when server response is not JSON' do
352
+ stub_request(:post, uri)
353
+ .to_return(body: "this isn't valid JSON", headers: {'Content-Type' => 'application/json'})
354
+
355
+ expect {
356
+ subject.post_catalog4(certname, **payload)
357
+ }.to raise_error do |err|
358
+ expect(err).to be_an_instance_of(Puppet::HTTP::SerializationError)
359
+ expect(err.message).to match(/Failed to deserialize catalog from puppetserver response/)
360
+ end
361
+ end
362
+
363
+ it 'raises a response error when server response a JSON serialized catalog' do
364
+ stub_request(:post, uri)
365
+ .to_return(body: {oops: 'bad response data'}.to_json, headers: {'Content-Type' => 'application/json'})
366
+
367
+ expect {
368
+ subject.post_catalog4(certname, **payload)
369
+ }.to raise_error do |err|
370
+ expect(err).to be_an_instance_of(Puppet::HTTP::SerializationError)
371
+ expect(err.message).to match(/Failed to deserialize catalog from puppetserver response/)
372
+ end
373
+ end
374
+
375
+ it 'raises ArgumentError when the `persistence` hash does not contain required keys' do
376
+ payload[:persistence].delete(:facts)
377
+ expect { subject.post_catalog4(certname, **payload) }.to raise_error do |err|
378
+ expect(err).to be_an_instance_of(ArgumentError)
379
+ expect(err.message).to match(/The 'persistence' hash is missing the keys: facts/)
380
+ end
381
+ end
382
+
383
+ it 'raises ArgumentError when `facts` are not a Hash' do
384
+ payload[:facts] = Puppet::Node::Facts.new(certname)
385
+ expect { subject.post_catalog4(certname, **payload) }.to raise_error do |err|
386
+ expect(err).to be_an_instance_of(ArgumentError)
387
+ expect(err.message).to match(/Facts must be a Hash not a Puppet::Node::Facts/)
388
+ end
389
+ end
390
+ end
391
+
261
392
  context 'when getting a node' do
262
393
  let(:uri) { %r{/puppet/v3/node/ziggy} }
263
394
  let(:node_response) { { body: formatter.render(node), headers: {'Content-Type' => formatter.mime } } }
@@ -11,6 +11,9 @@ def set_facts(fact_hash)
11
11
  end
12
12
 
13
13
  describe Puppet::Resource::Catalog::Compiler do
14
+ include Matchers::Resource
15
+ include PuppetSpec::Files
16
+
14
17
  let(:compiler) { described_class.new }
15
18
  let(:node_name) { "foo" }
16
19
  let(:node) { Puppet::Node.new(node_name)}
@@ -236,6 +239,46 @@ describe Puppet::Resource::Catalog::Compiler do
236
239
  expect { compiler.find(@request) }.to raise_error Puppet::Error,
237
240
  "Unable to find a common checksum type between agent '' and master '[:sha256, :sha256lite, :md5, :md5lite, :sha1, :sha1lite, :sha512, :sha384, :sha224, :mtime, :ctime, :none]'."
238
241
  end
242
+
243
+ it "prevents the environment from being evicted during compilation" do
244
+ Puppet[:environment_timeout] = 0
245
+
246
+ envs = Puppet.lookup(:environments)
247
+
248
+ expect(compiler).to receive(:compile) do
249
+ # we should get the same object
250
+ expect(envs.get!(:production)).to equal(envs.get!(:production))
251
+ end
252
+
253
+ compiler.find(@request)
254
+ end
255
+
256
+ context 'when checking agent and server specified environments' do
257
+ before :each do
258
+ FileUtils.mkdir_p(File.join(Puppet[:environmentpath], 'env_server'))
259
+ FileUtils.mkdir_p(File.join(Puppet[:environmentpath], 'env_agent'))
260
+
261
+ node.environment = 'env_server'
262
+ allow(Puppet::Node.indirection).to receive(:find).and_return(node)
263
+
264
+ @request.environment = 'env_agent'
265
+ end
266
+
267
+ it 'ignores mismatched environments by default' do
268
+ catalog = compiler.find(@request)
269
+
270
+ expect(catalog.environment).to eq('env_server')
271
+ expect(catalog).to have_resource('Stage[main]')
272
+ end
273
+
274
+ it 'returns an empty catalog if asked to check the environment and they are mismatched' do
275
+ @request.options[:check_environment] = "true"
276
+ catalog = compiler.find(@request)
277
+
278
+ expect(catalog.environment).to eq('env_server')
279
+ expect(catalog.resources).to be_empty
280
+ end
281
+ end
239
282
  end
240
283
 
241
284
  describe "when handling a request with facts" do
@@ -564,6 +607,50 @@ describe Puppet::Resource::Catalog::Compiler do
564
607
  metadata
565
608
  end
566
609
 
610
+ describe "and the environment is a symlink and versioned_environment_dirs is true" do
611
+
612
+ let(:tmpdir) { Dir.mktmpdir }
613
+
614
+ before(:each) do
615
+ Puppet[:versioned_environment_dirs] = true
616
+ prod_path = File.join(Puppet[:environmentpath], 'production')
617
+ FileUtils.rm_rf(prod_path)
618
+ FileUtils.symlink(tmpdir, prod_path)
619
+ end
620
+
621
+ it "inlines metadata for a file" do
622
+ catalog = compile_to_catalog(<<-MANIFEST, node)
623
+ file { '#{path}':
624
+ ensure => file,
625
+ source => '#{source}'
626
+ }
627
+ MANIFEST
628
+
629
+ module_relative_path = 'modules/mymodule/files/config_file.txt'
630
+ metadata = stubs_file_metadata(checksum_type,
631
+ checksum_value,
632
+ module_relative_path,
633
+ File.join(tmpdir, module_relative_path) )
634
+ expect(metadata).to receive(:source=).with(source)
635
+ expect(metadata).to receive(:content_uri=).with("puppet:///#{module_relative_path}")
636
+
637
+ options = {
638
+ :environment => catalog.environment_instance,
639
+ :links => :manage,
640
+ :checksum_type => checksum_type.to_sym,
641
+ :source_permissions => :ignore
642
+ }
643
+ expect(Puppet::FileServing::Metadata.indirection).to receive(:find).with(source, options).and_return(metadata)
644
+
645
+ compiler.send(:inline_metadata, catalog, checksum_type)
646
+
647
+
648
+ expect(catalog.metadata[path]).to eq(metadata)
649
+ expect(catalog.recursive_metadata).to be_empty
650
+
651
+ end
652
+ end
653
+
567
654
  it "inlines metadata for a file" do
568
655
  catalog = compile_to_catalog(<<-MANIFEST, node)
569
656
  file { '#{path}':
@@ -909,9 +996,10 @@ describe Puppet::Resource::Catalog::Compiler do
909
996
  it "inlines child metadata" do
910
997
  catalog = compile_to_catalog(<<-MANIFEST, node)
911
998
  file { '#{path}':
912
- ensure => directory,
913
- recurse => true,
914
- source => '#{source_dir}'
999
+ ensure => directory,
1000
+ recurse => true,
1001
+ source => '#{source_dir}',
1002
+ max_files => 1234,
915
1003
  }
916
1004
  MANIFEST
917
1005
 
@@ -925,6 +1013,7 @@ describe Puppet::Resource::Catalog::Compiler do
925
1013
  :source_permissions => :ignore,
926
1014
  :recurse => true,
927
1015
  :recurselimit => nil,
1016
+ :max_files => 1234,
928
1017
  :ignore => nil,
929
1018
  }
930
1019
  expect(Puppet::FileServing::Metadata.indirection).to receive(:search).with(source_dir, options).and_return([metadata, child_metadata])
@@ -938,14 +1027,15 @@ describe Puppet::Resource::Catalog::Compiler do
938
1027
  it "uses resource parameters when inlining metadata" do
939
1028
  catalog = compile_to_catalog(<<-MANIFEST, node)
940
1029
  file { '#{path}':
941
- ensure => directory,
942
- recurse => true,
943
- source => '#{source_dir}',
944
- checksum => sha256,
1030
+ ensure => directory,
1031
+ recurse => true,
1032
+ source => '#{source_dir}',
1033
+ checksum => sha256,
945
1034
  source_permissions => use_when_creating,
946
- recurselimit => 2,
947
- ignore => 'foo.+',
948
- links => follow,
1035
+ recurselimit => 2,
1036
+ max_files => 4321,
1037
+ ignore => 'foo.+',
1038
+ links => follow,
949
1039
  }
950
1040
  MANIFEST
951
1041
 
@@ -956,6 +1046,7 @@ describe Puppet::Resource::Catalog::Compiler do
956
1046
  :source_permissions => :use_when_creating,
957
1047
  :recurse => true,
958
1048
  :recurselimit => 2,
1049
+ :max_files => 4321,
959
1050
  :ignore => 'foo.+',
960
1051
  }
961
1052
  expect(Puppet::FileServing::Metadata.indirection).to receive(:search).with(source_dir, options).and_return([metadata, child_metadata])
@@ -33,6 +33,14 @@ describe Puppet::Resource::Catalog::Rest do
33
33
  described_class.indirection.find(certname, environment: Puppet::Node::Environment.remote('outerspace'))
34
34
  end
35
35
 
36
+ it "passes 'check_environment'" do
37
+ stub_request(:post, uri)
38
+ .with(body: hash_including('check_environment' => 'true'))
39
+ .to_return(**catalog_response(catalog))
40
+
41
+ described_class.indirection.find(certname, check_environment: true)
42
+ end
43
+
36
44
  it 'constructs a catalog environment_instance' do
37
45
  env = Puppet::Node::Environment.remote('outerspace')
38
46
  catalog = Puppet::Resource::Catalog.new(certname, env)
@@ -499,7 +499,7 @@ describe Puppet::Indirector::Indirection do
499
499
  end
500
500
 
501
501
  it "should return the result of saving to the terminus" do
502
- request = double('request', :instance => @instance, :node => nil, :ignore_cache_save? => false)
502
+ request = double('request', :instance => @instance, :node => nil, :ignore_cache_save? => false, :ignore_terminus? => false)
503
503
 
504
504
  expect(@indirection).to receive(:request).and_return(request)
505
505
 
@@ -509,7 +509,7 @@ describe Puppet::Indirector::Indirection do
509
509
  end
510
510
 
511
511
  it "should use a request to save the object to the cache" do
512
- request = double('request', :instance => @instance, :node => nil, :ignore_cache_save? => false)
512
+ request = double('request', :instance => @instance, :node => nil, :ignore_cache_save? => false, :ignore_terminus? => false)
513
513
 
514
514
  expect(@indirection).to receive(:request).and_return(request)
515
515
 
@@ -519,7 +519,7 @@ describe Puppet::Indirector::Indirection do
519
519
  end
520
520
 
521
521
  it "should not save to the cache if the normal save fails" do
522
- request = double('request', :instance => @instance, :node => nil)
522
+ request = double('request', :instance => @instance, :node => nil, :ignore_terminus? => false)
523
523
 
524
524
  expect(@indirection).to receive(:request).and_return(request)
525
525
 
@@ -534,6 +534,13 @@ describe Puppet::Indirector::Indirection do
534
534
 
535
535
  @indirection.save(@instance, '/my/key', :ignore_cache_save => true)
536
536
  end
537
+
538
+ it "should only save to the cache if the request specifies not to use the terminus" do
539
+ expect(@terminus).not_to receive(:save)
540
+ expect(@cache).to receive(:save)
541
+
542
+ @indirection.save(@instance, "/my/key", :ignore_terminus => true)
543
+ end
537
544
  end
538
545
  end
539
546
 
@@ -1,120 +1,85 @@
1
1
  require 'spec_helper'
2
2
  require 'puppet/indirector/resource/ral'
3
3
 
4
- describe "Puppet::Resource::Ral" do
4
+ describe Puppet::Resource::Ral do
5
+ let(:my_instance) { Puppet::Type.type(:user).new(:name => "root") }
6
+ let(:wrong_instance) { Puppet::Type.type(:user).new(:name => "bob")}
7
+
8
+ def stub_retrieve(*instances)
9
+ instances.each do |i|
10
+ allow(i).to receive(:retrieve).and_return(Puppet::Resource.new(i, nil))
11
+ end
12
+ end
13
+
14
+ before do
15
+ described_class.indirection.terminus_class = :ral
16
+
17
+ # make sure we don't try to retrieve current state
18
+ allow_any_instance_of(Puppet::Type.type(:user)).to receive(:retrieve).never
19
+ stub_retrieve(my_instance, wrong_instance)
20
+ end
21
+
5
22
  it "disallows remote requests" do
6
23
  expect(Puppet::Resource::Ral.new.allow_remote_requests?).to eq(false)
7
24
  end
8
25
 
9
26
  describe "find" do
10
- before do
11
- @request = double('request', :key => "user/root")
12
- end
13
-
14
27
  it "should find an existing instance" do
15
- my_resource = double("my user resource")
28
+ allow(Puppet::Type.type(:user)).to receive(:instances).and_return([ wrong_instance, my_instance, wrong_instance ])
16
29
 
17
- wrong_instance = double("wrong user", :name => "bob")
18
- my_instance = double("my user", :name => "root", :to_resource => my_resource)
19
-
20
- expect(Puppet::Type.type(:user)).to receive(:instances).and_return([ wrong_instance, my_instance, wrong_instance ])
21
- expect(Puppet::Resource::Ral.new.find(@request)).to eq(my_resource)
30
+ actual_resource = described_class.indirection.find('user/root')
31
+ expect(actual_resource.name).to eq('User/root')
22
32
  end
23
33
 
24
34
  it "should produce Puppet::Error instead of ArgumentError" do
25
- @bad_request = double('thiswillcauseanerror', :key => "thiswill/causeanerror")
26
- expect{Puppet::Resource::Ral.new.find(@bad_request)}.to raise_error(Puppet::Error)
35
+ expect{described_class.indirection.find('thiswill/causeanerror')}.to raise_error(Puppet::Error)
27
36
  end
28
37
 
29
38
  it "if there is no instance, it should create one" do
30
- wrong_instance = double("wrong user", :name => "bob")
31
- root = double("Root User")
32
- root_resource = double("Root Resource")
33
-
34
- expect(Puppet::Type.type(:user)).to receive(:instances).and_return([ wrong_instance, wrong_instance ])
35
- expect(Puppet::Type.type(:user)).to receive(:new).with(hash_including(name: "root")).and_return(root)
36
- expect(root).to receive(:to_resource).and_return(root_resource)
37
-
38
- result = Puppet::Resource::Ral.new.find(@request)
39
+ allow(Puppet::Type.type(:user)).to receive(:instances).and_return([wrong_instance])
39
40
 
40
- expect(result).to eq(root_resource)
41
+ expect(Puppet::Type.type(:user)).to receive(:new).with(hash_including(name: "root")).and_return(my_instance)
42
+ expect(described_class.indirection.find('user/root')).to be
41
43
  end
42
44
  end
43
45
 
44
46
  describe "search" do
45
- before do
46
- @request = double('request', :key => "user/", :options => {})
47
- end
48
-
49
47
  it "should convert ral resources into regular resources" do
50
- my_resource = double("my user resource", :title => "my user resource")
51
- my_instance = double("my user", :name => "root", :to_resource => my_resource)
48
+ allow(Puppet::Type.type(:user)).to receive(:instances).and_return([ my_instance ])
52
49
 
53
- expect(Puppet::Type.type(:user)).to receive(:instances).and_return([ my_instance ])
54
- expect(Puppet::Resource::Ral.new.search(@request)).to eq([my_resource])
50
+ actual = described_class.indirection.search('user')
51
+ expect(actual).to contain_exactly(an_instance_of(Puppet::Resource))
55
52
  end
56
53
 
57
54
  it "should filter results by name if there's a name in the key" do
58
- my_resource = double("my user resource", title: "my user resource")
59
- allow(my_resource).to receive(:to_resource).and_return(my_resource)
60
- allow(my_resource).to receive(:[]).with(:name).and_return("root")
61
-
62
- wrong_resource = double("wrong resource")
63
- allow(wrong_resource).to receive(:to_resource).and_return(wrong_resource)
64
- allow(wrong_resource).to receive(:[]).with(:name).and_return("bad")
55
+ allow(Puppet::Type.type(:user)).to receive(:instances).and_return([ my_instance, wrong_instance ])
65
56
 
66
- my_instance = double("my user", :to_resource => my_resource)
67
- wrong_instance = double("wrong user", :to_resource => wrong_resource)
68
-
69
- @request = double('request', :key => "user/root", :options => {})
70
-
71
- expect(Puppet::Type.type(:user)).to receive(:instances).and_return([ my_instance, wrong_instance ])
72
- expect(Puppet::Resource::Ral.new.search(@request)).to eq([my_resource])
57
+ actual = described_class.indirection.search('user/root')
58
+ expect(actual).to contain_exactly(an_object_having_attributes(name: 'User/root'))
73
59
  end
74
60
 
75
61
  it "should filter results by query parameters" do
76
- wrong_resource = double("my user resource", title: "my user resource")
77
- allow(wrong_resource).to receive(:to_resource).and_return(wrong_resource)
78
- allow(wrong_resource).to receive(:[]).with(:name).and_return("root")
79
-
80
- my_resource = double("wrong resource", title: "wrong resource")
81
- allow(my_resource).to receive(:to_resource).and_return(my_resource)
82
- allow(my_resource).to receive(:[]).with(:name).and_return("bob")
62
+ allow(Puppet::Type.type(:user)).to receive(:instances).and_return([ my_instance, wrong_instance ])
83
63
 
84
- my_instance = double("my user", :to_resource => my_resource)
85
- wrong_instance = double("wrong user", :to_resource => wrong_resource)
86
-
87
- @request = double('request', :key => "user/", :options => {:name => "bob"})
88
-
89
- expect(Puppet::Type.type(:user)).to receive(:instances).and_return([ my_instance, wrong_instance ])
90
- expect(Puppet::Resource::Ral.new.search(@request)).to eq([my_resource])
64
+ actual = described_class.indirection.search('user', name: 'bob')
65
+ expect(actual).to contain_exactly(an_object_having_attributes(name: 'User/bob'))
91
66
  end
92
67
 
93
68
  it "should return sorted results" do
94
- a_resource = double("alice resource")
95
- allow(a_resource).to receive(:to_resource).and_return(a_resource)
96
- allow(a_resource).to receive(:title).and_return("alice")
97
-
98
- b_resource = double("bob resource")
99
- allow(b_resource).to receive(:to_resource).and_return(b_resource)
100
- allow(b_resource).to receive(:title).and_return("bob")
101
-
102
- a_instance = double("alice user", :to_resource => a_resource)
103
- b_instance = double("bob user", :to_resource => b_resource)
104
-
105
- @request = double('request', :key => "user/", :options => {})
69
+ a_instance = Puppet::Type.type(:user).new(:name => "alice")
70
+ b_instance = Puppet::Type.type(:user).new(:name => "bob")
71
+ stub_retrieve(a_instance, b_instance)
72
+ allow(Puppet::Type.type(:user)).to receive(:instances).and_return([ b_instance, a_instance ])
106
73
 
107
- expect(Puppet::Type.type(:user)).to receive(:instances).and_return([ b_instance, a_instance ])
108
- expect(Puppet::Resource::Ral.new.search(@request)).to eq([a_resource, b_resource])
74
+ expect(described_class.indirection.search('user').map(&:title)).to eq(['alice', 'bob'])
109
75
  end
110
76
  end
111
77
 
112
78
  describe "save" do
113
79
  it "returns a report covering the application of the given resource to the system" do
114
80
  resource = Puppet::Resource.new(:notify, "the title")
115
- ral = Puppet::Resource::Ral.new
116
81
 
117
- applied_resource, report = ral.save(Puppet::Indirector::Request.new(:ral, :save, 'testing', resource, :environment => Puppet::Node::Environment.remote(:testing)))
82
+ applied_resource, report = described_class.indirection.save(resource, nil, environment: Puppet::Node::Environment.remote(:testing))
118
83
 
119
84
  expect(applied_resource.title).to eq("the title")
120
85
  expect(report.environment).to eq("testing")
@@ -537,15 +537,6 @@ describe Puppet::Interface::Action do
537
537
  end
538
538
  end
539
539
 
540
- context "#when_rendering" do
541
- it "should fail if no type is given when_rendering"
542
- it "should accept a when_rendering block"
543
- it "should accept multiple when_rendering blocks"
544
- it "should fail if when_rendering gets a non-symbol identifier"
545
- it "should fail if a second block is given for the same type"
546
- it "should return the block if asked"
547
- end
548
-
549
540
  context "#validate_and_clean" do
550
541
  subject do
551
542
  Puppet::Interface.new(:validate_args, '1.0.0') do
@@ -478,7 +478,7 @@ describe Puppet::Module do
478
478
  end
479
479
  end
480
480
 
481
- [:plugins, :pluginfacts, :templates, :files, :manifests].each do |filetype|
481
+ [:plugins, :pluginfacts, :templates, :files, :manifests, :scripts].each do |filetype|
482
482
  case filetype
483
483
  when :plugins
484
484
  dirname = "lib"
@@ -567,6 +567,20 @@ describe Puppet::Module do
567
567
  expect(mod.task_file(task_exe)).to eq("#{mod.path}/tasks/#{task_exe}")
568
568
  end
569
569
 
570
+ it "should list files from the scripts directory if required by the task" do
571
+ mod = 'loads_scripts'
572
+ task_dep = 'myscript.sh'
573
+ script_ref = "#{mod}/scripts/#{task_dep}"
574
+ task_json = JSON.generate({'files' => [script_ref]})
575
+ task = [['task', { name: 'task.json', content: task_json }]]
576
+ mod = PuppetSpec::Modules.create(mod, @modpath, {:environment => env,
577
+ :scripts => [task_dep],
578
+ :tasks => task})
579
+
580
+ expect(mod.tasks.first.files).to include({'name' => script_ref,
581
+ 'path' => /#{script_ref}/})
582
+ end
583
+
570
584
  it "should return nil when asked for an individual task file if it does not exist" do
571
585
  mod = PuppetSpec::Modules.create('task_file_neg', @modpath, {:environment => env,
572
586
  :tasks => []})
@@ -66,6 +66,18 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM =
66
66
  graph_should_include 'pmtacceptance-stdlib', nil => v('4.1.0')
67
67
  end
68
68
 
69
+ it 'reports a meaningful error if the name is invalid' do
70
+ app = installer('ntp', install_dir, options)
71
+ results = app.run
72
+ expect(results).to include :result => :failure
73
+ expect(results[:error][:oneline]).to eq("Could not install 'ntp', did you mean 'puppetlabs-ntp'?")
74
+ expect(results[:error][:multiline]).to eq(<<~END.chomp)
75
+ Could not install module 'ntp'
76
+ The name 'ntp' is invalid
77
+ Did you mean `puppet module install puppetlabs-ntp`?
78
+ END
79
+ end
80
+
69
81
  context 'with a tarball file' do
70
82
  let(:module) { fixtures('stdlib.tgz') }
71
83
 
@@ -273,18 +285,45 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM =
273
285
  expect(subject).to include :result => :failure
274
286
  end
275
287
 
276
- it 'prints a detailed error containing the modules that would not be satisfied' do
277
- graph = double(SemanticPuppet::Dependency::Graph, :modules => ['pmtacceptance-mysql'])
278
- exception = SemanticPuppet::Dependency::UnsatisfiableGraph.new(graph)
279
- allow(exception).to receive(:respond_to?).and_return(true)
280
- allow(exception).to receive(:unsatisfied).and_return('pmtacceptance-mysql')
281
- allow(SemanticPuppet::Dependency).to receive(:resolve).and_raise(exception)
282
-
283
- expect(subject[:error]).to include(:multiline)
284
- expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (> 1.0.0)")
285
- expect(subject[:error][:multiline]).to include("The requested version cannot satisfy one or more of the following installed modules:")
286
- expect(subject[:error][:multiline]).to include("pmtacceptance-keystone, expects 'pmtacceptance-mysql': >=0.6.1 <1.0.0")
287
- expect(subject[:error][:multiline]).to include("Use `puppet module install 'pmtacceptance-mysql' --ignore-dependencies` to install only this module")
288
+ context 'with unsatisfiable dependencies' do
289
+ let(:graph) { double(SemanticPuppet::Dependency::Graph, :modules => ['pmtacceptance-mysql']) }
290
+ let(:exception) { SemanticPuppet::Dependency::UnsatisfiableGraph.new(graph, constraint) }
291
+
292
+ before do
293
+ allow(SemanticPuppet::Dependency).to receive(:resolve).and_raise(exception)
294
+ end
295
+
296
+ context 'with known constraint' do
297
+ let(:constraint) { 'pmtacceptance-mysql' }
298
+
299
+ it 'prints a detailed error containing the modules that would not be satisfied' do
300
+ expect(subject[:error]).to include(:multiline)
301
+ expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (> 1.0.0)")
302
+ expect(subject[:error][:multiline]).to include("The requested version cannot satisfy one or more of the following installed modules:")
303
+ expect(subject[:error][:multiline]).to include("pmtacceptance-keystone, expects 'pmtacceptance-mysql': >=0.6.1 <1.0.0")
304
+ expect(subject[:error][:multiline]).to include("Use `puppet module install 'pmtacceptance-mysql' --ignore-dependencies` to install only this module")
305
+ end
306
+ end
307
+
308
+ context 'with missing constraint' do
309
+ let(:constraint) { nil }
310
+
311
+ it 'prints the generic error message' do
312
+ expect(subject[:error]).to include(:multiline)
313
+ expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (> 1.0.0)")
314
+ expect(subject[:error][:multiline]).to include("The requested version cannot satisfy all dependencies")
315
+ end
316
+ end
317
+
318
+ context 'with unknown constraint' do
319
+ let(:constraint) { 'another' }
320
+
321
+ it 'prints the generic error message' do
322
+ expect(subject[:error]).to include(:multiline)
323
+ expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (> 1.0.0)")
324
+ expect(subject[:error][:multiline]).to include("The requested version cannot satisfy all dependencies")
325
+ end
326
+ end
288
327
  end
289
328
 
290
329
  context 'with --ignore-dependencies' do