puppet 6.23.0 → 6.26.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 (397) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +5 -5
  3. data/Gemfile +4 -4
  4. data/Gemfile.lock +32 -25
  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/project_data.yaml +1 -0
  16. data/lib/puppet/application/agent.rb +4 -0
  17. data/lib/puppet/application/apply.rb +20 -2
  18. data/lib/puppet/application/filebucket.rb +1 -0
  19. data/lib/puppet/application/lookup.rb +78 -24
  20. data/lib/puppet/application/resource.rb +30 -15
  21. data/lib/puppet/application/ssl.rb +1 -0
  22. data/lib/puppet/concurrent/thread_local_singleton.rb +6 -3
  23. data/lib/puppet/configurer.rb +134 -56
  24. data/lib/puppet/confine/variable.rb +1 -1
  25. data/lib/puppet/defaults.rb +55 -32
  26. data/lib/puppet/environments.rb +75 -25
  27. data/lib/puppet/face/facts.rb +1 -1
  28. data/lib/puppet/face/generate.rb +2 -0
  29. data/lib/puppet/face/help/action.erb +1 -0
  30. data/lib/puppet/face/help/face.erb +1 -0
  31. data/lib/puppet/face/node/clean.rb +11 -0
  32. data/lib/puppet/facter_impl.rb +96 -0
  33. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  34. data/lib/puppet/file_serving/configuration.rb +3 -0
  35. data/lib/puppet/file_serving/metadata.rb +3 -0
  36. data/lib/puppet/file_serving/mount/file.rb +4 -4
  37. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  38. data/lib/puppet/file_system/file_impl.rb +10 -8
  39. data/lib/puppet/file_system/jruby.rb +1 -1
  40. data/lib/puppet/file_system/windows.rb +6 -6
  41. data/lib/puppet/file_system.rb +1 -1
  42. data/lib/puppet/forge.rb +4 -4
  43. data/lib/puppet/functions/empty.rb +8 -0
  44. data/lib/puppet/functions/find_template.rb +2 -2
  45. data/lib/puppet/functions/strftime.rb +1 -0
  46. data/lib/puppet/functions/unwrap.rb +17 -2
  47. data/lib/puppet/functions/versioncmp.rb +6 -2
  48. data/lib/puppet/generate/type.rb +9 -0
  49. data/lib/puppet/http/client.rb +1 -1
  50. data/lib/puppet/http/redirector.rb +5 -0
  51. data/lib/puppet/http/service/compiler.rb +6 -1
  52. data/lib/puppet/indirector/catalog/compiler.rb +24 -6
  53. data/lib/puppet/indirector/catalog/rest.rb +1 -0
  54. data/lib/puppet/indirector/facts/facter.rb +6 -6
  55. data/lib/puppet/indirector/indirection.rb +1 -1
  56. data/lib/puppet/indirector/resource/ral.rb +6 -1
  57. data/lib/puppet/indirector/terminus.rb +4 -0
  58. data/lib/puppet/interface/documentation.rb +1 -0
  59. data/lib/puppet/module/plan.rb +0 -1
  60. data/lib/puppet/module/task.rb +1 -1
  61. data/lib/puppet/module.rb +1 -0
  62. data/lib/puppet/module_tool/applications/installer.rb +12 -4
  63. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  64. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  65. data/lib/puppet/module_tool/errors/shared.rb +17 -0
  66. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  67. data/lib/puppet/node/environment.rb +10 -11
  68. data/lib/puppet/node.rb +1 -1
  69. data/lib/puppet/pal/pal_impl.rb +1 -1
  70. data/lib/puppet/parser/resource.rb +1 -1
  71. data/lib/puppet/parser/scope.rb +1 -0
  72. data/lib/puppet/parser/templatewrapper.rb +1 -0
  73. data/lib/puppet/pops/evaluator/closure.rb +7 -5
  74. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +1 -0
  75. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  76. data/lib/puppet/pops/model/ast.rb +1 -0
  77. data/lib/puppet/pops/model/factory.rb +2 -1
  78. data/lib/puppet/pops/parser/code_merger.rb +4 -4
  79. data/lib/puppet/pops/parser/egrammar.ra +2 -0
  80. data/lib/puppet/pops/parser/eparser.rb +1014 -995
  81. data/lib/puppet/pops/parser/lexer2.rb +92 -91
  82. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  83. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  84. data/lib/puppet/pops/types/type_formatter.rb +4 -3
  85. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  86. data/lib/puppet/pops/types/types.rb +1 -1
  87. data/lib/puppet/provider/aix_object.rb +1 -1
  88. data/lib/puppet/provider/exec/posix.rb +16 -4
  89. data/lib/puppet/provider/group/groupadd.rb +5 -2
  90. data/lib/puppet/provider/package/pip.rb +15 -3
  91. data/lib/puppet/provider/package/pkg.rb +19 -2
  92. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  93. data/lib/puppet/provider/package/yum.rb +1 -1
  94. data/lib/puppet/provider/parsedfile.rb +3 -0
  95. data/lib/puppet/provider/service/base.rb +1 -1
  96. data/lib/puppet/provider/service/init.rb +10 -9
  97. data/lib/puppet/provider/service/launchd.rb +2 -2
  98. data/lib/puppet/provider/service/redhat.rb +1 -1
  99. data/lib/puppet/provider/service/smf.rb +3 -3
  100. data/lib/puppet/provider/service/systemd.rb +2 -2
  101. data/lib/puppet/provider/service/upstart.rb +5 -5
  102. data/lib/puppet/provider/user/aix.rb +44 -1
  103. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  104. data/lib/puppet/provider/user/useradd.rb +72 -16
  105. data/lib/puppet/provider.rb +1 -1
  106. data/lib/puppet/reference/providers.rb +2 -2
  107. data/lib/puppet/resource/catalog.rb +1 -1
  108. data/lib/puppet/resource/type_collection.rb +1 -0
  109. data/lib/puppet/resource.rb +38 -5
  110. data/lib/puppet/runtime.rb +11 -1
  111. data/lib/puppet/settings.rb +32 -9
  112. data/lib/puppet/ssl/verifier.rb +6 -0
  113. data/lib/puppet/test/test_helper.rb +4 -1
  114. data/lib/puppet/transaction/persistence.rb +21 -1
  115. data/lib/puppet/transaction/report.rb +15 -1
  116. data/lib/puppet/type/exec.rb +35 -5
  117. data/lib/puppet/type/file/data_sync.rb +1 -1
  118. data/lib/puppet/type/file/mode.rb +6 -0
  119. data/lib/puppet/type/file.rb +6 -6
  120. data/lib/puppet/type/filebucket.rb +3 -3
  121. data/lib/puppet/type/group.rb +0 -1
  122. data/lib/puppet/type/resources.rb +1 -1
  123. data/lib/puppet/type/service.rb +8 -3
  124. data/lib/puppet/type/tidy.rb +1 -1
  125. data/lib/puppet/type/user.rb +40 -39
  126. data/lib/puppet/type.rb +1 -1
  127. data/lib/puppet/util/command_line.rb +1 -1
  128. data/lib/puppet/util/filetype.rb +2 -2
  129. data/lib/puppet/util/json.rb +20 -0
  130. data/lib/puppet/util/log.rb +8 -4
  131. data/lib/puppet/util/logging.rb +1 -25
  132. data/lib/puppet/util/monkey_patches.rb +6 -0
  133. data/lib/puppet/util/package.rb +25 -16
  134. data/lib/puppet/util/pidlock.rb +1 -1
  135. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  136. data/lib/puppet/util/suidmanager.rb +1 -2
  137. data/lib/puppet/util/symbolic_file_mode.rb +29 -17
  138. data/lib/puppet/util/tagging.rb +1 -0
  139. data/lib/puppet/util/windows/service.rb +0 -5
  140. data/lib/puppet/util/windows/sid.rb +3 -1
  141. data/lib/puppet/util/windows/user.rb +0 -2
  142. data/lib/puppet/util/windows.rb +3 -0
  143. data/lib/puppet/util/yaml.rb +21 -2
  144. data/lib/puppet/util.rb +4 -3
  145. data/lib/puppet/version.rb +1 -1
  146. data/lib/puppet.rb +6 -9
  147. data/locales/puppet.pot +5 -10418
  148. data/man/man5/puppet.conf.5 +52 -25
  149. data/man/man8/puppet-agent.8 +4 -1
  150. data/man/man8/puppet-apply.8 +1 -1
  151. data/man/man8/puppet-catalog.8 +9 -9
  152. data/man/man8/puppet-config.8 +1 -1
  153. data/man/man8/puppet-describe.8 +1 -1
  154. data/man/man8/puppet-device.8 +1 -1
  155. data/man/man8/puppet-doc.8 +1 -1
  156. data/man/man8/puppet-epp.8 +1 -1
  157. data/man/man8/puppet-facts.8 +8 -8
  158. data/man/man8/puppet-filebucket.8 +1 -1
  159. data/man/man8/puppet-generate.8 +1 -1
  160. data/man/man8/puppet-help.8 +1 -1
  161. data/man/man8/puppet-key.8 +7 -7
  162. data/man/man8/puppet-lookup.8 +9 -6
  163. data/man/man8/puppet-man.8 +1 -1
  164. data/man/man8/puppet-module.8 +3 -3
  165. data/man/man8/puppet-node.8 +5 -5
  166. data/man/man8/puppet-parser.8 +1 -1
  167. data/man/man8/puppet-plugin.8 +1 -1
  168. data/man/man8/puppet-report.8 +5 -5
  169. data/man/man8/puppet-resource.8 +1 -1
  170. data/man/man8/puppet-script.8 +1 -1
  171. data/man/man8/puppet-ssl.8 +1 -1
  172. data/man/man8/puppet-status.8 +4 -4
  173. data/man/man8/puppet.8 +2 -2
  174. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +2 -1
  175. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  176. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  177. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  178. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  179. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  180. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  181. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  182. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  183. data/spec/fixtures/ssl/127.0.0.1-key.pem +106 -106
  184. data/spec/fixtures/ssl/127.0.0.1.pem +48 -48
  185. data/spec/fixtures/ssl/bad-basic-constraints.pem +54 -54
  186. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +51 -51
  187. data/spec/fixtures/ssl/ca.pem +52 -52
  188. data/spec/fixtures/ssl/crl.pem +25 -25
  189. data/spec/fixtures/ssl/ec-key.pem +11 -11
  190. data/spec/fixtures/ssl/ec.pem +32 -32
  191. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  192. data/spec/fixtures/ssl/encrypted-key.pem +107 -107
  193. data/spec/fixtures/ssl/intermediate-agent-crl.pem +25 -25
  194. data/spec/fixtures/ssl/intermediate-agent.pem +54 -54
  195. data/spec/fixtures/ssl/intermediate-crl.pem +28 -28
  196. data/spec/fixtures/ssl/intermediate.pem +51 -51
  197. data/spec/fixtures/ssl/oid-key.pem +117 -0
  198. data/spec/fixtures/ssl/oid.pem +69 -0
  199. data/spec/fixtures/ssl/pluto-key.pem +106 -106
  200. data/spec/fixtures/ssl/pluto.pem +50 -50
  201. data/spec/fixtures/ssl/request-key.pem +106 -106
  202. data/spec/fixtures/ssl/request.pem +45 -45
  203. data/spec/fixtures/ssl/revoked-key.pem +106 -106
  204. data/spec/fixtures/ssl/revoked.pem +49 -49
  205. data/spec/fixtures/ssl/signed-key.pem +106 -106
  206. data/spec/fixtures/ssl/signed.pem +47 -47
  207. data/spec/fixtures/ssl/tampered-cert.pem +49 -49
  208. data/spec/fixtures/ssl/tampered-csr.pem +45 -45
  209. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
  210. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +106 -106
  211. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -48
  212. data/spec/fixtures/ssl/unknown-ca-key.pem +106 -106
  213. data/spec/fixtures/ssl/unknown-ca.pem +52 -52
  214. data/spec/fixtures/unit/forge/bacula.json +1 -1
  215. data/spec/integration/application/agent_spec.rb +141 -37
  216. data/spec/integration/application/filebucket_spec.rb +16 -0
  217. data/spec/integration/application/lookup_spec.rb +32 -6
  218. data/spec/integration/application/module_spec.rb +21 -0
  219. data/spec/integration/application/resource_spec.rb +35 -1
  220. data/spec/integration/application/ssl_spec.rb +20 -0
  221. data/spec/integration/configurer_spec.rb +18 -2
  222. data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
  223. data/spec/integration/indirector/facts/facter_spec.rb +93 -39
  224. data/spec/integration/l10n/compiler_spec.rb +37 -0
  225. data/spec/integration/parser/pcore_resource_spec.rb +10 -0
  226. data/spec/integration/transaction/report_spec.rb +1 -1
  227. data/spec/integration/type/exec_spec.rb +70 -45
  228. data/spec/integration/type/file_spec.rb +2 -2
  229. data/spec/integration/type/package_spec.rb +6 -6
  230. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  231. data/spec/integration/util/windows/process_spec.rb +1 -9
  232. data/spec/lib/puppet/test_ca.rb +5 -0
  233. data/spec/lib/puppet_spec/modules.rb +13 -2
  234. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  235. data/spec/lib/puppet_spec/settings.rb +1 -0
  236. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  237. data/spec/shared_contexts/l10n.rb +32 -0
  238. data/spec/spec_helper.rb +1 -10
  239. data/spec/unit/application/apply_spec.rb +76 -56
  240. data/spec/unit/application/lookup_spec.rb +131 -10
  241. data/spec/unit/application/resource_spec.rb +29 -0
  242. data/spec/unit/concurrent/thread_local_singleton_spec.rb +39 -0
  243. data/spec/unit/configurer_spec.rb +265 -57
  244. data/spec/unit/defaults_spec.rb +1 -0
  245. data/spec/unit/environments_spec.rb +184 -0
  246. data/spec/unit/face/generate_spec.rb +64 -0
  247. data/spec/unit/facter_impl_spec.rb +31 -0
  248. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  249. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  250. data/spec/unit/file_serving/configuration_spec.rb +14 -4
  251. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  252. data/spec/unit/file_system_spec.rb +47 -4
  253. data/spec/unit/forge/module_release_spec.rb +3 -3
  254. data/spec/unit/functions/assert_type_spec.rb +1 -1
  255. data/spec/unit/functions/empty_spec.rb +10 -0
  256. data/spec/unit/functions/logging_spec.rb +1 -0
  257. data/spec/unit/functions/lookup_spec.rb +64 -0
  258. data/spec/unit/functions/unwrap_spec.rb +8 -0
  259. data/spec/unit/functions/versioncmp_spec.rb +40 -4
  260. data/spec/unit/functions4_spec.rb +2 -2
  261. data/spec/unit/http/client_spec.rb +58 -1
  262. data/spec/unit/http/service/compiler_spec.rb +8 -0
  263. data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
  264. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  265. data/spec/unit/indirector/indirection_spec.rb +10 -3
  266. data/spec/unit/indirector/resource/ral_spec.rb +40 -75
  267. data/spec/unit/interface/action_spec.rb +0 -9
  268. data/spec/unit/module_spec.rb +15 -1
  269. data/spec/unit/module_tool/applications/installer_spec.rb +51 -12
  270. data/spec/unit/network/authstore_spec.rb +0 -15
  271. data/spec/unit/network/formats_spec.rb +6 -0
  272. data/spec/unit/node_spec.rb +6 -0
  273. data/spec/unit/parser/templatewrapper_spec.rb +12 -2
  274. data/spec/unit/pops/parser/parse_containers_spec.rb +2 -13
  275. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  276. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  277. data/spec/unit/pops/validator/validator_spec.rb +5 -0
  278. data/spec/unit/provider/package/gem_spec.rb +1 -1
  279. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  280. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  281. data/spec/unit/provider/package/pip_spec.rb +38 -1
  282. data/spec/unit/provider/package/pkg_spec.rb +29 -4
  283. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  284. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  285. data/spec/unit/provider/parsedfile_spec.rb +10 -0
  286. data/spec/unit/provider/service/gentoo_spec.rb +6 -5
  287. data/spec/unit/provider/service/init_spec.rb +15 -9
  288. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  289. data/spec/unit/provider/service/openwrt_spec.rb +21 -29
  290. data/spec/unit/provider/service/redhat_spec.rb +3 -2
  291. data/spec/unit/provider/service/systemd_spec.rb +1 -1
  292. data/spec/unit/provider/user/aix_spec.rb +100 -0
  293. data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
  294. data/spec/unit/provider/user/useradd_spec.rb +43 -2
  295. data/spec/unit/provider_spec.rb +4 -4
  296. data/spec/unit/puppet_spec.rb +12 -4
  297. data/spec/unit/resource/catalog_spec.rb +14 -1
  298. data/spec/unit/resource_spec.rb +58 -2
  299. data/spec/unit/settings_spec.rb +97 -56
  300. data/spec/unit/ssl/certificate_request_spec.rb +8 -14
  301. data/spec/unit/transaction/persistence_spec.rb +51 -0
  302. data/spec/unit/type/exec_spec.rb +76 -29
  303. data/spec/unit/type/file/source_spec.rb +4 -4
  304. data/spec/unit/type/service_spec.rb +27 -0
  305. data/spec/unit/type/tidy_spec.rb +7 -0
  306. data/spec/unit/type/user_spec.rb +0 -45
  307. data/spec/unit/type_spec.rb +2 -2
  308. data/spec/unit/util/json_spec.rb +126 -0
  309. data/spec/unit/util/logging_spec.rb +2 -0
  310. data/spec/unit/util/windows/sid_spec.rb +39 -4
  311. data/spec/unit/util/yaml_spec.rb +54 -29
  312. data/tasks/generate_cert_fixtures.rake +10 -1
  313. data/tasks/parallel.rake +3 -3
  314. metadata +52 -96
  315. data/ext/README.environment +0 -8
  316. data/ext/dbfix.sql +0 -132
  317. data/ext/debian/README.Debian +0 -8
  318. data/ext/debian/README.source +0 -2
  319. data/ext/debian/TODO.Debian +0 -1
  320. data/ext/debian/changelog.erb +0 -1122
  321. data/ext/debian/compat +0 -1
  322. data/ext/debian/control +0 -144
  323. data/ext/debian/copyright +0 -339
  324. data/ext/debian/docs +0 -1
  325. data/ext/debian/fileserver.conf +0 -41
  326. data/ext/debian/puppet-common.dirs +0 -13
  327. data/ext/debian/puppet-common.install +0 -3
  328. data/ext/debian/puppet-common.lintian-overrides +0 -5
  329. data/ext/debian/puppet-common.manpages +0 -28
  330. data/ext/debian/puppet-common.postinst +0 -35
  331. data/ext/debian/puppet-common.postrm +0 -33
  332. data/ext/debian/puppet-el.dirs +0 -1
  333. data/ext/debian/puppet-el.emacsen-install +0 -25
  334. data/ext/debian/puppet-el.emacsen-remove +0 -11
  335. data/ext/debian/puppet-el.emacsen-startup +0 -9
  336. data/ext/debian/puppet-el.install +0 -1
  337. data/ext/debian/puppet-testsuite.install +0 -2
  338. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  339. data/ext/debian/puppet.lintian-overrides +0 -3
  340. data/ext/debian/puppet.logrotate +0 -20
  341. data/ext/debian/puppet.postinst +0 -20
  342. data/ext/debian/puppet.postrm +0 -20
  343. data/ext/debian/puppet.preinst +0 -20
  344. data/ext/debian/puppetmaster-common.install +0 -2
  345. data/ext/debian/puppetmaster-common.manpages +0 -2
  346. data/ext/debian/puppetmaster-common.postinst +0 -6
  347. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  348. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  349. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  350. data/ext/debian/puppetmaster.README.debian +0 -17
  351. data/ext/debian/puppetmaster.default +0 -14
  352. data/ext/debian/puppetmaster.init +0 -137
  353. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  354. data/ext/debian/puppetmaster.postinst +0 -20
  355. data/ext/debian/puppetmaster.postrm +0 -5
  356. data/ext/debian/puppetmaster.preinst +0 -22
  357. data/ext/debian/rules +0 -132
  358. data/ext/debian/source/format +0 -1
  359. data/ext/debian/source/options +0 -1
  360. data/ext/debian/vim-puppet.README.Debian +0 -13
  361. data/ext/debian/vim-puppet.dirs +0 -5
  362. data/ext/debian/vim-puppet.yaml +0 -7
  363. data/ext/debian/watch +0 -2
  364. data/ext/freebsd/puppetd +0 -26
  365. data/ext/freebsd/puppetmasterd +0 -26
  366. data/ext/gentoo/conf.d/puppet +0 -5
  367. data/ext/gentoo/conf.d/puppetmaster +0 -12
  368. data/ext/gentoo/init.d/puppet +0 -38
  369. data/ext/gentoo/init.d/puppetmaster +0 -51
  370. data/ext/gentoo/puppet/fileserver.conf +0 -41
  371. data/ext/ips/puppet-agent +0 -44
  372. data/ext/ips/puppet-master +0 -44
  373. data/ext/ips/puppet.p5m.erb +0 -12
  374. data/ext/ips/puppetagent.xml +0 -42
  375. data/ext/ips/puppetmaster.xml +0 -42
  376. data/ext/ips/rules +0 -19
  377. data/ext/ips/transforms +0 -34
  378. data/ext/ldap/puppet.schema +0 -24
  379. data/ext/logcheck/puppet +0 -23
  380. data/ext/osx/file_mapping.yaml +0 -33
  381. data/ext/osx/postflight.erb +0 -109
  382. data/ext/osx/preflight.erb +0 -52
  383. data/ext/osx/prototype.plist.erb +0 -38
  384. data/ext/redhat/fileserver.conf +0 -41
  385. data/ext/redhat/logrotate +0 -21
  386. data/ext/redhat/puppet.spec.erb +0 -842
  387. data/ext/redhat/server.init +0 -128
  388. data/ext/redhat/server.sysconfig +0 -13
  389. data/ext/solaris/pkginfo +0 -6
  390. data/ext/solaris/smf/puppetd.xml +0 -77
  391. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  392. data/ext/solaris/smf/svc-puppetd +0 -71
  393. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  394. data/ext/suse/puppet.spec +0 -310
  395. data/ext/suse/server.init +0 -173
  396. data/ext/yaml_nodes.rb +0 -105
  397. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -96,6 +96,14 @@ describe Puppet::HTTP::Service::Compiler do
96
96
  subject.post_catalog(certname, environment: 'production', facts: facts, configured_environment: 'agent_specified')
97
97
  end
98
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
+
99
107
  it 'includes transaction_uuid' do
100
108
  uuid = "ec3d2844-b236-4287-b0ad-632fbb4d1ff0"
101
109
 
@@ -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}':
@@ -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
@@ -101,21 +101,6 @@ describe Puppet::Network::AuthStore::Declaration do
101
101
  }
102
102
  }
103
103
 
104
- describe "when the pattern is a numeric IP with a back reference" do
105
- pending("implementation of backreferences for IP") do
106
- before :each do
107
- @ip = '100.101.$1'
108
- @declaration = Puppet::Network::AuthStore::Declaration.new(:allow_ip,@ip).interpolate('12.34'.match(/(.*)/))
109
- end
110
- it "should match an IP with the appropriate interpolation" do
111
- @declaration.should be_match('www.testsite.org',@ip.sub(/\$1/,'12.34'))
112
- end
113
- it "should not match other IPs" do
114
- @declaration.should_not be_match('www.testsite.org',@ip.sub(/\$1/,'66.34'))
115
- end
116
- end
117
- end
118
-
119
104
  [
120
105
  "02001:0000:1234:0000:0000:C1C0:ABCD:0876",
121
106
  "2001:0000:1234:0000:00001:C1C0:ABCD:0876",
@@ -368,6 +368,12 @@ describe "Puppet Network Format" do
368
368
  expect(json.render_multiple(instances)).to eq([{"string" => "foo"}].to_json)
369
369
  end
370
370
 
371
+ it "should render multiple instances as a JSON array of hashes when multi_json is not present" do
372
+ hide_const("MultiJson") if defined?(MultiJson)
373
+ instances = [FormatsTest.new("foo")]
374
+ expect(json.render_multiple(instances)).to eq([{"string" => "foo"}].to_json)
375
+ end
376
+
371
377
  it "should intern an instance from a JSON hash" do
372
378
  text = Puppet::Util::Json.dump({"string" => "parsed_json"})
373
379
  instance = json.intern(FormatsTest, text)
@@ -40,6 +40,12 @@ describe Puppet::Node do
40
40
  expect(node.environment.name).to eq(:bar)
41
41
  end
42
42
 
43
+ it "sets environment_name with the correct environment name" do
44
+ node = Puppet::Node.new("foo")
45
+ node.environment = Puppet::Node::Environment.remote('www123')
46
+ expect(node.environment_name).to eq(:www123)
47
+ end
48
+
43
49
  it "allows its environment to be set by parameters after initialization" do
44
50
  node = Puppet::Node.new("foo")
45
51
  node.parameters["environment"] = :bar
@@ -2,6 +2,8 @@ require 'spec_helper'
2
2
  require 'puppet/parser/templatewrapper'
3
3
 
4
4
  describe Puppet::Parser::TemplateWrapper do
5
+ include PuppetSpec::Files
6
+
5
7
  let(:known_resource_types) { Puppet::Resource::TypeCollection.new("env") }
6
8
  let(:scope) do
7
9
  compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("mynode"))
@@ -41,6 +43,13 @@ describe Puppet::Parser::TemplateWrapper do
41
43
  expect(tw.result).to eq(full_file_name)
42
44
  end
43
45
 
46
+ it "ignores a leading BOM" do
47
+ full_file_name = given_a_template_file("bom_template", "\uFEFF<%= file %>")
48
+
49
+ tw.file = "bom_template"
50
+ expect(tw.result).to eq(full_file_name)
51
+ end
52
+
44
53
  it "evaluates a given string as a template" do
45
54
  expect(tw.result("template contents")).to eql("template contents")
46
55
  end
@@ -90,11 +99,12 @@ describe Puppet::Parser::TemplateWrapper do
90
99
  end
91
100
 
92
101
  def given_a_template_file(name, contents)
93
- full_name = "/full/path/to/#{name}"
102
+ full_name = tmpfile("template_#{name}")
103
+ File.binwrite(full_name, contents)
104
+
94
105
  allow(Puppet::Parser::Files).to receive(:find_template).
95
106
  with(name, anything()).
96
107
  and_return(full_name)
97
- allow(Puppet::FileSystem).to receive(:read_preserve_line_endings).with(full_name).and_return(contents)
98
108
 
99
109
  full_name
100
110
  end
@@ -95,18 +95,7 @@ describe "egrammar parsing containers" do
95
95
  expect(dump(parse("class foo::default {}"))).to eq("(class foo::default ())")
96
96
  end
97
97
 
98
- it "class class inherits default {} # inherits default", :broken => true do
99
- expect {
100
- parse("class class inherits default {}")
101
- }.to raise_error(/not a valid classname/)
102
- end
103
-
104
98
  it "class class inherits default {} # inherits default" do
105
- # TODO: See previous test marked as :broken=>true, it is actually this test (result) that is wacky,
106
- # this because a class is named at parse time (since class evaluation is lazy, the model must have the
107
- # full class name for nested classes - only, it gets this wrong when a class is named "class" - or at least
108
- # I think it is wrong.)
109
- #
110
99
  expect { parse("class class inherits default {}") }.to raise_error(/'class' keyword not allowed at this location/)
111
100
  end
112
101
 
@@ -117,7 +106,7 @@ describe "egrammar parsing containers" do
117
106
 
118
107
  context 'it should allow keywords as attribute names' do
119
108
  ['and', 'case', 'class', 'default', 'define', 'else', 'elsif', 'if', 'in', 'inherits', 'node', 'or',
120
- 'undef', 'unless', 'type', 'attr', 'function', 'private'].each do |keyword|
109
+ 'undef', 'unless', 'type', 'attr', 'function', 'private', 'plan', 'apply'].each do |keyword|
121
110
  it "such as #{keyword}" do
122
111
  expect { parse("class x ($#{keyword}){} class { x: #{keyword} => 1 }") }.to_not raise_error
123
112
  end
@@ -189,7 +178,7 @@ describe "egrammar parsing containers" do
189
178
 
190
179
  context 'it should allow keywords as attribute names' do
191
180
  ['and', 'case', 'class', 'default', 'define', 'else', 'elsif', 'if', 'in', 'inherits', 'node', 'or',
192
- 'undef', 'unless', 'type', 'attr', 'function', 'private'].each do |keyword|
181
+ 'undef', 'unless', 'type', 'attr', 'function', 'private', 'plan', 'apply'].each do |keyword|
193
182
  it "such as #{keyword}" do
194
183
  expect {parse("define x ($#{keyword}){} x { y: #{keyword} => 1 }")}.to_not raise_error
195
184
  end
@@ -154,4 +154,9 @@ describe 'ToStringifiedConverter' do
154
154
  unassigned = [243, 176, 128, 128].pack("C*").force_encoding(Encoding::UTF_8)
155
155
  expect(transform(unassigned)).to eq("󰀀")
156
156
  end
157
+
158
+ it 'converts ProcessOutput objects to string' do
159
+ object = Puppet::Util::Execution::ProcessOutput.new('object', 0)
160
+ expect(transform(object)).to be_instance_of(String)
161
+ end
157
162
  end
@@ -1980,6 +1980,12 @@ describe 'The type calculator' do
1980
1980
  expect(calculator.instance?(tuple, [1, 'a', 1])).to eq(false)
1981
1981
  end
1982
1982
 
1983
+ it 'should not consider ProcessOutput objects as instanceof PScalarDataType' do
1984
+ object = Puppet::Util::Execution::ProcessOutput.new('object', 0)
1985
+
1986
+ expect(calculator.instance?(PScalarDataType::DEFAULT, object)).to eq(false)
1987
+ end
1988
+
1983
1989
  context 'and t is Struct' do
1984
1990
  it 'should consider hash[cont] as instance of Struct[cont-t]' do
1985
1991
  struct = struct_t({'a'=>Integer, 'b'=>String, 'c'=>Float})
@@ -432,6 +432,11 @@ describe "validating 4x" do
432
432
  expect(acceptor.error_count).to eql(0)
433
433
  end
434
434
 
435
+ it 'allows apply to be used as a resource attribute name' do
436
+ acceptor = validate(parse('apply("foo.example.com") { sometype { "resourcetitle": apply => "applyvalue" } }'))
437
+ expect(acceptor.error_count).to eql(0)
438
+ end
439
+
435
440
  it 'accepts multiple arguments' do
436
441
  acceptor = validate(parse('apply(["foo.example.com"], { "other" => "args" }) { }'))
437
442
  expect(acceptor.error_count).to eql(0)
@@ -442,7 +442,7 @@ context Puppet::Type.type(:package).provider(:gem) do
442
442
  end
443
443
 
444
444
  context 'when is defaultfor' do
445
- let(:os) { Facter.value(:operatingsystem) }
445
+ let(:os) { Puppet.runtime[:facter].value(:operatingsystem) }
446
446
  subject do
447
447
  described_class.defaultfor(operatingsystem: os)
448
448
  described_class.specificity
@@ -24,7 +24,7 @@ describe Puppet::Type.type(:package).provider(:pip2) do
24
24
  end
25
25
 
26
26
  context 'when is defaultfor' do
27
- let(:os) { Facter.value(:operatingsystem) }
27
+ let(:os) { Puppet.runtime[:facter].value(:operatingsystem) }
28
28
  subject do
29
29
  described_class.defaultfor(operatingsystem: os)
30
30
  described_class.specificity