puppet 6.4.5-x86-mingw32 → 6.5.0-x86-mingw32

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

Potentially problematic release.


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

Files changed (329) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +10 -10
  3. data/Gemfile +6 -6
  4. data/Gemfile.lock +46 -52
  5. data/ext/build_defaults.yaml +0 -1
  6. data/ext/project_data.yaml +3 -3
  7. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  8. data/ext/solaris/smf/puppet.xml +0 -2
  9. data/ext/windows/eventlog/Rakefile +32 -0
  10. data/ext/windows/eventlog/puppetres.dll +0 -0
  11. data/ext/windows/eventlog/puppetres.mc +18 -0
  12. data/ext/windows/service/daemon.rb +8 -38
  13. data/install.rb +24 -6
  14. data/lib/puppet.rb +3 -1
  15. data/lib/puppet/application.rb +1 -1
  16. data/lib/puppet/application/agent.rb +11 -34
  17. data/lib/puppet/application/apply.rb +6 -6
  18. data/lib/puppet/application/describe.rb +9 -3
  19. data/lib/puppet/application/device.rb +4 -14
  20. data/lib/puppet/application/doc.rb +1 -1
  21. data/lib/puppet/application/lookup.rb +2 -2
  22. data/lib/puppet/application/resource.rb +4 -4
  23. data/lib/puppet/application/script.rb +2 -2
  24. data/lib/puppet/application/ssl.rb +10 -9
  25. data/lib/puppet/configurer.rb +30 -86
  26. data/lib/puppet/configurer/downloader.rb +6 -2
  27. data/lib/puppet/defaults.rb +50 -44
  28. data/lib/puppet/error.rb +14 -9
  29. data/lib/puppet/face/catalog.rb +20 -1
  30. data/lib/puppet/face/config.rb +48 -10
  31. data/lib/puppet/face/facts.rb +1 -1
  32. data/lib/puppet/face/help.rb +1 -1
  33. data/lib/puppet/face/module/list.rb +5 -5
  34. data/lib/puppet/face/module/search.rb +1 -1
  35. data/lib/puppet/face/module/uninstall.rb +1 -1
  36. data/lib/puppet/face/module/upgrade.rb +1 -1
  37. data/lib/puppet/face/parser.rb +48 -9
  38. data/lib/puppet/face/plugin.rb +2 -9
  39. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  40. data/lib/puppet/file_system.rb +12 -2
  41. data/lib/puppet/file_system/file_impl.rb +6 -3
  42. data/lib/puppet/file_system/memory_file.rb +1 -1
  43. data/lib/puppet/file_system/posix.rb +2 -3
  44. data/lib/puppet/forge.rb +3 -3
  45. data/lib/puppet/functions.rb +2 -1
  46. data/lib/puppet/functions/camelcase.rb +2 -2
  47. data/lib/puppet/functions/epp.rb +4 -4
  48. data/lib/puppet/functions/find_file.rb +9 -9
  49. data/lib/puppet/functions/inline_epp.rb +5 -5
  50. data/lib/puppet/functions/regsubst.rb +6 -8
  51. data/lib/puppet/gettext/module_translations.rb +1 -1
  52. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  53. data/lib/puppet/graph/simple_graph.rb +3 -4
  54. data/lib/puppet/indirector/catalog/compiler.rb +5 -11
  55. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  56. data/lib/puppet/indirector/hiera.rb +0 -2
  57. data/lib/puppet/indirector/resource/ral.rb +3 -1
  58. data/lib/puppet/indirector/resource/validator.rb +1 -1
  59. data/lib/puppet/interface.rb +1 -2
  60. data/lib/puppet/loaders.rb +1 -0
  61. data/lib/puppet/metatype/manager.rb +1 -1
  62. data/lib/puppet/module.rb +1 -1
  63. data/lib/puppet/module/task.rb +4 -20
  64. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  65. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  66. data/lib/puppet/module_tool/metadata.rb +1 -1
  67. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  68. data/lib/puppet/module_tool/tar/mini.rb +2 -12
  69. data/lib/puppet/network/http/api/indirected_routes.rb +11 -12
  70. data/lib/puppet/network/http/connection.rb +12 -10
  71. data/lib/puppet/network/http/factory.rb +11 -1
  72. data/lib/puppet/network/http/pool.rb +0 -2
  73. data/lib/puppet/network/http/site.rb +1 -1
  74. data/lib/puppet/network/resolver.rb +2 -2
  75. data/lib/puppet/node/environment.rb +2 -4
  76. data/lib/puppet/pal/pal_impl.rb +2 -2
  77. data/lib/puppet/parser/ast.rb +1 -1
  78. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  79. data/lib/puppet/parser/functions.rb +1 -1
  80. data/lib/puppet/parser/functions/epp.rb +3 -3
  81. data/lib/puppet/parser/functions/fail.rb +8 -1
  82. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  83. data/lib/puppet/parser/scope.rb +7 -8
  84. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  85. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  86. data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -3
  87. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  88. data/lib/puppet/pops/loader/null_loader.rb +60 -0
  89. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -4
  90. data/lib/puppet/pops/loader/task_instantiator.rb +0 -4
  91. data/lib/puppet/pops/loaders.rb +1 -1
  92. data/lib/puppet/pops/lookup/hiera_config.rb +0 -1
  93. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  94. data/lib/puppet/pops/merge_strategy.rb +18 -22
  95. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  96. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  97. data/lib/puppet/pops/parser/locator.rb +1 -1
  98. data/lib/puppet/pops/parser/pn_parser.rb +16 -17
  99. data/lib/puppet/pops/puppet_stack.rb +49 -51
  100. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  101. data/lib/puppet/pops/types/string_converter.rb +10 -10
  102. data/lib/puppet/pops/types/types.rb +6 -5
  103. data/lib/puppet/property.rb +1 -1
  104. data/lib/puppet/property/ensure.rb +1 -1
  105. data/lib/puppet/provider/exec.rb +2 -6
  106. data/lib/puppet/provider/file/posix.rb +0 -5
  107. data/lib/puppet/provider/nameservice.rb +3 -10
  108. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  109. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  110. data/lib/puppet/provider/package.rb +0 -2
  111. data/lib/puppet/provider/package/apt.rb +1 -5
  112. data/lib/puppet/provider/package/dnf.rb +1 -1
  113. data/lib/puppet/provider/package/dpkg.rb +18 -34
  114. data/lib/puppet/provider/package/openbsd.rb +1 -1
  115. data/lib/puppet/provider/package/pip.rb +13 -37
  116. data/lib/puppet/provider/package/portage.rb +4 -4
  117. data/lib/puppet/provider/package/puppet_gem.rb +1 -1
  118. data/lib/puppet/provider/package/rpm.rb +18 -56
  119. data/lib/puppet/provider/package/windows/package.rb +1 -1
  120. data/lib/puppet/provider/package/yum.rb +5 -9
  121. data/lib/puppet/provider/package_targetable.rb +4 -7
  122. data/lib/puppet/provider/parsedfile.rb +1 -1
  123. data/lib/puppet/provider/service/daemontools.rb +9 -9
  124. data/lib/puppet/provider/service/launchd.rb +5 -20
  125. data/lib/puppet/provider/service/openbsd.rb +1 -1
  126. data/lib/puppet/provider/service/rcng.rb +2 -2
  127. data/lib/puppet/provider/service/runit.rb +8 -2
  128. data/lib/puppet/provider/service/systemd.rb +19 -14
  129. data/lib/puppet/provider/service/windows.rb +0 -8
  130. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  131. data/lib/puppet/provider/user/hpux.rb +1 -1
  132. data/lib/puppet/provider/user/pw.rb +3 -12
  133. data/lib/puppet/provider/user/user_role_add.rb +1 -5
  134. data/lib/puppet/provider/user/useradd.rb +20 -45
  135. data/lib/puppet/provider/user/windows_adsi.rb +5 -4
  136. data/lib/puppet/reference/configuration.rb +3 -3
  137. data/lib/puppet/reference/indirection.rb +2 -2
  138. data/lib/puppet/reference/metaparameter.rb +3 -1
  139. data/lib/puppet/reference/providers.rb +3 -1
  140. data/lib/puppet/reference/type.rb +9 -3
  141. data/lib/puppet/reports.rb +1 -1
  142. data/lib/puppet/resource.rb +1 -18
  143. data/lib/puppet/resource/catalog.rb +1 -1
  144. data/lib/puppet/rest/routes.rb +30 -17
  145. data/lib/puppet/settings.rb +3 -43
  146. data/lib/puppet/settings/environment_conf.rb +0 -1
  147. data/lib/puppet/ssl/certificate_request.rb +12 -2
  148. data/lib/puppet/ssl/host.rb +2 -2
  149. data/lib/puppet/ssl/oids.rb +1 -1
  150. data/lib/puppet/ssl/ssl_provider.rb +11 -5
  151. data/lib/puppet/ssl/state_machine.rb +102 -98
  152. data/lib/puppet/test/test_helper.rb +1 -0
  153. data/lib/puppet/transaction.rb +11 -33
  154. data/lib/puppet/transaction/report.rb +1 -1
  155. data/lib/puppet/type.rb +4 -2
  156. data/lib/puppet/type/exec.rb +17 -23
  157. data/lib/puppet/type/file.rb +39 -11
  158. data/lib/puppet/type/file/data_sync.rb +1 -5
  159. data/lib/puppet/type/group.rb +2 -4
  160. data/lib/puppet/type/notify.rb +3 -4
  161. data/lib/puppet/type/package.rb +3 -20
  162. data/lib/puppet/type/schedule.rb +1 -1
  163. data/lib/puppet/type/service.rb +3 -8
  164. data/lib/puppet/type/user.rb +2 -4
  165. data/lib/puppet/util.rb +29 -39
  166. data/lib/puppet/util/command_line/trollop.rb +1 -1
  167. data/lib/puppet/util/execution.rb +3 -4
  168. data/lib/puppet/util/http_proxy.rb +19 -27
  169. data/lib/puppet/util/log.rb +2 -2
  170. data/lib/puppet/util/log/destinations.rb +2 -2
  171. data/lib/puppet/util/logging.rb +20 -32
  172. data/lib/puppet/util/metric.rb +2 -2
  173. data/lib/puppet/util/monkey_patches.rb +33 -0
  174. data/lib/puppet/util/pidlock.rb +2 -3
  175. data/lib/puppet/util/provider_features.rb +4 -2
  176. data/lib/puppet/util/rdoc.rb +1 -1
  177. data/lib/puppet/util/reference.rb +1 -1
  178. data/lib/puppet/util/resource_template.rb +1 -1
  179. data/lib/puppet/util/selinux.rb +2 -8
  180. data/lib/puppet/util/skip_tags.rb +4 -0
  181. data/lib/puppet/util/windows/adsi.rb +18 -48
  182. data/lib/puppet/util/windows/process.rb +8 -8
  183. data/lib/puppet/util/windows/registry.rb +5 -7
  184. data/lib/puppet/util/windows/security.rb +0 -2
  185. data/lib/puppet/util/windows/service.rb +4 -149
  186. data/lib/puppet/util/windows/sid.rb +0 -1
  187. data/lib/puppet/vendor.rb +1 -1
  188. data/lib/puppet/version.rb +1 -1
  189. data/lib/puppet/x509/cert_provider.rb +81 -24
  190. data/locales/puppet.pot +462 -482
  191. data/man/man5/puppet.conf.5 +43 -44
  192. data/man/man8/puppet-agent.8 +1 -1
  193. data/man/man8/puppet-apply.8 +3 -3
  194. data/man/man8/puppet-catalog.8 +31 -3
  195. data/man/man8/puppet-config.8 +1 -1
  196. data/man/man8/puppet-describe.8 +1 -1
  197. data/man/man8/puppet-device.8 +1 -1
  198. data/man/man8/puppet-doc.8 +1 -1
  199. data/man/man8/puppet-epp.8 +1 -1
  200. data/man/man8/puppet-facts.8 +1 -1
  201. data/man/man8/puppet-filebucket.8 +1 -1
  202. data/man/man8/puppet-generate.8 +1 -1
  203. data/man/man8/puppet-help.8 +1 -1
  204. data/man/man8/puppet-key.8 +1 -1
  205. data/man/man8/puppet-lookup.8 +1 -1
  206. data/man/man8/puppet-man.8 +1 -1
  207. data/man/man8/puppet-module.8 +1 -1
  208. data/man/man8/puppet-node.8 +1 -1
  209. data/man/man8/puppet-parser.8 +1 -1
  210. data/man/man8/puppet-plugin.8 +1 -1
  211. data/man/man8/puppet-report.8 +1 -1
  212. data/man/man8/puppet-resource.8 +1 -1
  213. data/man/man8/puppet-script.8 +1 -1
  214. data/man/man8/puppet-ssl.8 +1 -1
  215. data/man/man8/puppet-status.8 +1 -1
  216. data/man/man8/puppet.8 +3 -3
  217. data/spec/fixtures/ssl/127.0.0.1-key.pem +56 -56
  218. data/spec/fixtures/ssl/127.0.0.1.pem +27 -27
  219. data/spec/fixtures/ssl/bad-basic-constraints.pem +32 -32
  220. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +30 -30
  221. data/spec/fixtures/ssl/ca.pem +30 -30
  222. data/spec/fixtures/ssl/crl.pem +15 -15
  223. data/spec/fixtures/ssl/ec-key.pem +18 -0
  224. data/spec/fixtures/ssl/ec.pem +40 -0
  225. data/spec/fixtures/ssl/encrypted-ec-key.pem +21 -0
  226. data/spec/fixtures/ssl/encrypted-key.pem +57 -57
  227. data/spec/fixtures/ssl/intermediate-agent-crl.pem +16 -16
  228. data/spec/fixtures/ssl/intermediate-agent.pem +33 -33
  229. data/spec/fixtures/ssl/intermediate-crl.pem +17 -17
  230. data/spec/fixtures/ssl/intermediate.pem +31 -31
  231. data/spec/fixtures/ssl/pluto-key.pem +56 -56
  232. data/spec/fixtures/ssl/pluto.pem +28 -28
  233. data/spec/fixtures/ssl/request-key.pem +56 -56
  234. data/spec/fixtures/ssl/request.pem +24 -24
  235. data/spec/fixtures/ssl/revoked-key.pem +56 -56
  236. data/spec/fixtures/ssl/revoked.pem +25 -25
  237. data/spec/fixtures/ssl/signed-key.pem +56 -56
  238. data/spec/fixtures/ssl/signed.pem +25 -25
  239. data/spec/fixtures/ssl/tampered-cert.pem +27 -27
  240. data/spec/fixtures/ssl/tampered-csr.pem +24 -24
  241. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/func_with_syntax_error.rb +9 -0
  242. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
  243. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
  244. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
  245. data/spec/integration/configurer_spec.rb +0 -52
  246. data/spec/integration/provider/service/init_spec.rb +1 -0
  247. data/spec/integration/provider/service/systemd_spec.rb +5 -8
  248. data/spec/integration/type/file_spec.rb +38 -28
  249. data/spec/integration/util/execution_spec.rb +0 -27
  250. data/spec/lib/puppet/certificate_factory.rb +2 -2
  251. data/spec/lib/puppet/test_ca.rb +17 -4
  252. data/spec/lib/puppet_spec/fixtures.rb +4 -0
  253. data/spec/spec_helper.rb +0 -28
  254. data/spec/unit/application/agent_spec.rb +34 -67
  255. data/spec/unit/application/device_spec.rb +1 -27
  256. data/spec/unit/application/ssl_spec.rb +60 -35
  257. data/spec/unit/configurer_spec.rb +399 -395
  258. data/spec/unit/defaults_spec.rb +4 -4
  259. data/spec/unit/face/facts_spec.rb +0 -9
  260. data/spec/unit/face/parser_spec.rb +69 -22
  261. data/spec/unit/face/plugin_spec.rb +0 -8
  262. data/spec/unit/file_system_spec.rb +30 -1
  263. data/spec/unit/forge/forge_spec.rb +3 -1
  264. data/spec/unit/forge/repository_spec.rb +3 -1
  265. data/spec/unit/indirector/catalog/compiler_spec.rb +5 -62
  266. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  267. data/spec/unit/module_tool/tar/mini_spec.rb +1 -1
  268. data/spec/unit/network/http/api/indirected_routes_spec.rb +10 -25
  269. data/spec/unit/network/http/connection_spec.rb +145 -119
  270. data/spec/unit/network/http/factory_spec.rb +5 -27
  271. data/spec/unit/parser/scope_spec.rb +0 -10
  272. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +3 -8
  273. data/spec/unit/pops/loaders/loaders_spec.rb +4 -0
  274. data/spec/unit/pops/loaders/module_loaders_spec.rb +0 -37
  275. data/spec/unit/pops/types/types_spec.rb +27 -0
  276. data/spec/unit/provider/exec_spec.rb +0 -209
  277. data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
  278. data/spec/unit/provider/package/dnf_spec.rb +0 -7
  279. data/spec/unit/provider/package/dpkg_spec.rb +80 -240
  280. data/spec/unit/provider/package/pip_spec.rb +8 -61
  281. data/spec/unit/provider/package/portage_spec.rb +4 -4
  282. data/spec/unit/provider/package/rpm_spec.rb +16 -150
  283. data/spec/unit/provider/package/yum_spec.rb +0 -7
  284. data/spec/unit/provider/service/daemontools_spec.rb +0 -24
  285. data/spec/unit/provider/service/launchd_spec.rb +0 -28
  286. data/spec/unit/provider/service/runit_spec.rb +0 -24
  287. data/spec/unit/provider/service/systemd_spec.rb +25 -39
  288. data/spec/unit/provider/service/windows_spec.rb +0 -20
  289. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  290. data/spec/unit/provider/user/pw_spec.rb +0 -37
  291. data/spec/unit/provider/user/useradd_spec.rb +0 -88
  292. data/spec/unit/resource_spec.rb +1 -26
  293. data/spec/unit/ssl/host_spec.rb +5 -0
  294. data/spec/unit/ssl/ssl_provider_spec.rb +36 -11
  295. data/spec/unit/ssl/state_machine_spec.rb +233 -158
  296. data/spec/unit/transaction_spec.rb +0 -64
  297. data/spec/unit/type/exec_spec.rb +12 -15
  298. data/spec/unit/type/file/content_spec.rb +3 -9
  299. data/spec/unit/type/file/source_spec.rb +4 -4
  300. data/spec/unit/type/file_spec.rb +15 -11
  301. data/spec/unit/type/package_spec.rb +0 -5
  302. data/spec/unit/type/schedule_spec.rb +1 -3
  303. data/spec/unit/type/service_spec.rb +0 -16
  304. data/spec/unit/util/execution_spec.rb +0 -16
  305. data/spec/unit/util/http_proxy_spec.rb +21 -151
  306. data/spec/unit/util/ldap/manager_spec.rb +0 -15
  307. data/spec/unit/util/log/destinations_spec.rb +3 -7
  308. data/spec/unit/util/log_spec.rb +138 -0
  309. data/spec/unit/util/logging_spec.rb +0 -200
  310. data/spec/unit/util/pidlock_spec.rb +0 -26
  311. data/spec/unit/util/skip_tags_spec.rb +14 -0
  312. data/spec/unit/util/windows/adsi_spec.rb +0 -51
  313. data/spec/unit/util/windows/service_spec.rb +0 -9
  314. data/spec/unit/util_spec.rb +10 -0
  315. data/spec/unit/x509/cert_provider_spec.rb +82 -43
  316. data/tasks/generate_cert_fixtures.rake +13 -1
  317. data/tasks/manpages.rake +0 -1
  318. metadata +28 -22
  319. data/ext/cert_inspector +0 -140
  320. data/ext/envpuppet +0 -139
  321. data/ext/envpuppet.bat +0 -14
  322. data/ext/puppet-test +0 -476
  323. data/ext/pure_ruby_dsl/dsl_test.rb +0 -7
  324. data/ext/upload_facts.rb +0 -119
  325. data/lib/puppet/provider/package/dnfmodule.rb +0 -87
  326. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list-installed.txt +0 -11
  327. data/spec/integration/type/notify_spec.rb +0 -46
  328. data/spec/unit/provider/package/dnfmodule_spec.rb +0 -186
  329. data/spec/unit/provider/package_targetable_spec.rb +0 -60
@@ -139,7 +139,7 @@ describe "Defaults" do
139
139
  let(:installdir) { 'C:\Program Files\Puppet Labs\Puppet' }
140
140
 
141
141
  it 'includes user and system modules' do
142
- allow(ENV).to receive(:[]).with("FACTER_env_windows_installdir").and_return(installdir)
142
+ allow(Facter).to receive(:value).with(:env_windows_installdir).and_return(installdir)
143
143
 
144
144
  expect(
145
145
  Puppet.default_basemodulepath
@@ -147,7 +147,7 @@ describe "Defaults" do
147
147
  end
148
148
 
149
149
  it 'includes user modules if installdir fact is missing' do
150
- allow(ENV).to receive(:[]).with("FACTER_env_windows_installdir").and_return(nil)
150
+ allow(Facter).to receive(:value).with(:env_windows_installdir).and_return(nil)
151
151
 
152
152
  expect(
153
153
  Puppet.default_basemodulepath
@@ -167,7 +167,7 @@ describe "Defaults" do
167
167
  let(:installdir) { 'C:\Program Files\Puppet Labs\Puppet' }
168
168
 
169
169
  it 'includes the default vendormoduledir' do
170
- allow(ENV).to receive(:[]).with("FACTER_env_windows_installdir").and_return(installdir)
170
+ allow(Facter).to receive(:value).with(:env_windows_installdir).and_return(installdir)
171
171
 
172
172
  expect(
173
173
  Puppet.default_vendormoduledir
@@ -175,7 +175,7 @@ describe "Defaults" do
175
175
  end
176
176
 
177
177
  it 'is nil if installdir fact is missing' do
178
- allow(ENV).to receive(:[]).with("FACTER_env_windows_installdir").and_return(nil)
178
+ allow(Facter).to receive(:value).with(:env_windows_installdir).and_return(nil)
179
179
 
180
180
  expect(Puppet.default_vendormoduledir).to be_nil
181
181
  end
@@ -45,15 +45,6 @@ CONF
45
45
  subject.upload
46
46
  end
47
47
 
48
- it "passes the current environment" do
49
- env = Puppet::Node::Environment.remote('qa')
50
- expect(model.indirection).to receive(:save).with(anything, nil, :environment => env)
51
-
52
- Puppet.override(:current_environment => env) do
53
- subject.upload
54
- end
55
- end
56
-
57
48
  it "uses settings from the agent section of puppet.conf" do
58
49
  expect(facter_terminus).to receive(:find).with(have_attributes(key: 'puppet.node.test')).and_return(test_data)
59
50
 
@@ -2,6 +2,7 @@ require 'spec_helper'
2
2
  require 'puppet_spec/files'
3
3
 
4
4
  require 'puppet/face'
5
+ require 'puppet/application/parser'
5
6
 
6
7
  describe Puppet::Face[:parser, :current] do
7
8
  include PuppetSpec::Files
@@ -9,6 +10,12 @@ describe Puppet::Face[:parser, :current] do
9
10
  let(:parser) { Puppet::Face[:parser, :current] }
10
11
 
11
12
  context "validate" do
13
+ let(:validate_app) do
14
+ Puppet::Application::Parser.new.tap do |app|
15
+ allow(app).to receive(:action).and_return(parser.get_action(:validate))
16
+ end
17
+ end
18
+
12
19
  context "from an interactive terminal" do
13
20
  before :each do
14
21
  from_an_interactive_terminal
@@ -25,14 +32,17 @@ describe Puppet::Face[:parser, :current] do
25
32
 
26
33
  configured_environment = Puppet::Node::Environment.create(:default, [], manifest)
27
34
  Puppet.override(:current_environment => configured_environment) do
28
- expect { parser.validate() }.to exit_with(1)
35
+ parse_errors = parser.validate()
36
+
37
+ expect(parse_errors[manifest]).to be_a_kind_of(Puppet::ParseErrorWithIssue)
29
38
  end
30
39
  end
31
40
 
32
41
  it "validates the given file" do
33
42
  manifest = file_containing('site.pp', "{ invalid =>")
43
+ parse_errors = parser.validate(manifest)
34
44
 
35
- expect { parser.validate(manifest) }.to exit_with(1)
45
+ expect(parse_errors[manifest]).to be_a_kind_of(Puppet::ParseErrorWithIssue)
36
46
  end
37
47
 
38
48
  it "validates static heredoc with specified syntax" do
@@ -40,36 +50,40 @@ describe Puppet::Face[:parser, :current] do
40
50
  { invalid =>
41
51
  EOT
42
52
  ")
43
- expect { parser.validate(manifest) }.to exit_with(1)
53
+ parse_errors = parser.validate(manifest)
54
+
55
+ expect(parse_errors[manifest]).to be_a_kind_of(Puppet::ParseErrorWithIssue)
44
56
  end
45
57
 
46
58
  it "does not validates dynamic heredoc with specified syntax" do
47
59
  manifest = file_containing('site.pp', "@(\"EOT\":pp)
48
60
  {invalid => ${1+1}
49
61
  EOT")
50
- expect { parser.validate(manifest) }.to_not exit_with(1)
62
+ parse_errors = parser.validate(manifest)
63
+
64
+ expect(parse_errors).to be_empty
51
65
  end
52
66
 
53
67
  it "runs error free when there are no validation errors" do
54
- expect {
55
- manifest = file_containing('site.pp', "notify { valid: }")
56
- parser.validate(manifest)
57
- }.to_not raise_error
68
+ manifest = file_containing('site.pp', "notify { valid: }")
69
+ parse_errors = parser.validate(manifest)
70
+
71
+ expect(parse_errors).to be_empty
58
72
  end
59
73
 
60
74
  it "runs error free when there is a puppet function in manifest being validated" do
61
- expect {
62
- manifest = file_containing('site.pp', "function valid() { 'valid' } notify{ valid(): }")
63
- parser.validate(manifest)
64
- }.to_not raise_error
75
+ manifest = file_containing('site.pp', "function valid() { 'valid' } notify{ valid(): }")
76
+ parse_errors = parser.validate(manifest)
77
+
78
+ expect(parse_errors).to be_empty
65
79
  end
66
80
 
67
81
  it "runs error free when there is a type alias in a manifest that requires type resolution" do
68
- expect {
69
- manifest = file_containing('site.pp',
70
- "type A = String; type B = Array[A]; function valid(B $x) { $x } notify{ valid([valid]): }")
71
- parser.validate(manifest)
72
- }.to_not raise_error
82
+ manifest = file_containing('site.pp',
83
+ "type A = String; type B = Array[A]; function valid(B $x) { $x } notify{ valid([valid]): }")
84
+ parse_errors = parser.validate(manifest)
85
+
86
+ expect(parse_errors).to be_empty
73
87
  end
74
88
 
75
89
  it "reports missing files" do
@@ -84,19 +98,52 @@ describe Puppet::Face[:parser, :current] do
84
98
  env = Puppet::Node::Environment.create(:special, [])
85
99
  env_loader = Puppet::Environments::Static.new(env)
86
100
  Puppet.override({:environments => env_loader, :current_environment => env}) do
87
- expect { parser.validate(manifest) }.to exit_with(1)
88
- end
101
+ parse_errors = parser.validate(manifest)
89
102
 
90
- expect(@logs.join).to match(/environment special.*Syntax error at end of input/)
103
+ expect(parse_errors[manifest]).to be_a_kind_of(Puppet::ParseErrorWithIssue)
104
+ end
91
105
  end
92
-
93
106
  end
94
107
 
95
108
  it "validates the contents of STDIN when no files given and STDIN is not a tty" do
96
109
  from_a_piped_input_of("{ invalid =>")
97
110
 
98
111
  Puppet.override(:current_environment => Puppet::Node::Environment.create(:special, [])) do
99
- expect { parser.validate() }.to exit_with(1)
112
+ parse_errors = parser.validate()
113
+
114
+ expect(parse_errors['STDIN']).to be_a_kind_of(Puppet::ParseErrorWithIssue)
115
+ end
116
+ end
117
+
118
+ context "when invoked with console output renderer" do
119
+ before(:each) do
120
+ validate_app.render_as = :console
121
+ end
122
+
123
+ it "logs errors using Puppet.log_exception" do
124
+ manifest = file_containing('test.pp', "{ invalid =>")
125
+ results = parser.validate(manifest)
126
+
127
+ results.each do |_, error|
128
+ expect(Puppet).to receive(:log_exception).with(error)
129
+ end
130
+
131
+ expect { validate_app.render(results, nil) }.to raise_error(SystemExit)
132
+ end
133
+ end
134
+
135
+ context "when invoked with --render-as=json" do
136
+ before(:each) do
137
+ validate_app.render_as = :json
138
+ end
139
+
140
+ it "outputs errors in a JSON document to stdout" do
141
+ manifest = file_containing('test.pp', "{ invalid =>")
142
+ results = parser.validate(manifest)
143
+
144
+ expected_json = /\A{.*#{Regexp.escape('"message":')}\s*#{Regexp.escape('"Syntax error at end of input"')}.*}\Z/m
145
+
146
+ expect { validate_app.render(results, nil) }.to output(expected_json).to_stdout.and raise_error(SystemExit)
100
147
  end
101
148
  end
102
149
  end
@@ -50,14 +50,6 @@ describe Puppet::Face[:plugin, :current] do
50
50
  expect(receive_count).to eq(3)
51
51
  expect(render(result)).to eq('Downloaded these plugins: /a, /b, /c')
52
52
  end
53
-
54
- it "uses persistent HTTP pool" do
55
- allow_any_instance_of(Puppet::Configurer::Downloader).to receive(:evaluate) do
56
- expect(Puppet.lookup(:http_pool)).to be_instance_of(Puppet::Network::HTTP::Pool)
57
- end.and_return([])
58
-
59
- pluginface.download
60
- end
61
53
  end
62
54
 
63
55
  context "download when server_agent_version is 5.3.3" do
@@ -223,7 +223,7 @@ describe "Puppet::FileSystem" do
223
223
  expect do
224
224
  Puppet::FileSystem.exclusive_open(file, 0666, 'a', 0.1) do |f|
225
225
  end
226
- end.to raise_error(Timeout::Error)
226
+ end.to raise_error(Timeout::Error, /Timeout waiting for exclusive lock on #{file}/)
227
227
 
228
228
  Process.kill(9, child)
229
229
  end
@@ -1089,4 +1089,33 @@ describe "Puppet::FileSystem" do
1089
1089
  end
1090
1090
  end
1091
1091
  end
1092
+
1093
+ context '#touch' do
1094
+ let(:dest) { tmpfile('touch_file') }
1095
+
1096
+ it 'creates a file' do
1097
+ Puppet::FileSystem.touch(dest)
1098
+
1099
+ expect(File).to be_file(dest)
1100
+ end
1101
+
1102
+ it 'updates the mtime for an existing file' do
1103
+ Puppet::FileSystem.touch(dest)
1104
+
1105
+ now = Time.now
1106
+ allow(Time).to receive(:now).and_return(now)
1107
+
1108
+ Puppet::FileSystem.touch(dest)
1109
+
1110
+ expect(File.mtime(dest)).to be_within(1).of(now)
1111
+ end
1112
+
1113
+ it 'allows the mtime to be passed in' do
1114
+ tomorrow = Time.now + (24 * 60 * 60)
1115
+
1116
+ Puppet::FileSystem.touch(dest, mtime: tomorrow)
1117
+
1118
+ expect(File.mtime(dest)).to be_within(1).of(tomorrow)
1119
+ end
1120
+ end
1092
1121
  end
@@ -97,8 +97,10 @@ describe Puppet::Forge do
97
97
  def mock_proxy(port, proxy_args, result, &block)
98
98
  http = double("http client")
99
99
  proxy = double("http proxy")
100
+ proxy_class = double("http proxy class")
100
101
 
101
- expect(Net::HTTP).to receive(:new).with(host, port, *proxy_args).and_return(proxy)
102
+ expect(Net::HTTP).to receive(:Proxy).with(*proxy_args).and_return(proxy_class)
103
+ expect(proxy_class).to receive(:new).with(host, port).and_return(proxy)
102
104
 
103
105
  expect(proxy).to receive(:open_timeout=)
104
106
  expect(proxy).to receive(:read_timeout=)
@@ -234,8 +234,10 @@ describe Puppet::Forge::Repository do
234
234
  def mock_proxy(port, proxy_args, result, &block)
235
235
  http = double("http client")
236
236
  proxy = double("http proxy")
237
+ proxy_class = double("http proxy class")
237
238
 
238
- expect(Net::HTTP).to receive(:new).with("fake.com", port, *proxy_args).and_return(proxy)
239
+ expect(Net::HTTP).to receive(:Proxy).with(*proxy_args).and_return(proxy_class)
240
+ expect(proxy_class).to receive(:new).with("fake.com", port).and_return(proxy)
239
241
 
240
242
  expect(proxy).to receive(:open_timeout=)
241
243
  expect(proxy).to receive(:read_timeout=)
@@ -4,12 +4,6 @@ require 'matchers/resource'
4
4
 
5
5
  require 'puppet/indirector/catalog/compiler'
6
6
 
7
- def set_facts(fact_hash)
8
- fact_hash.each do |key, value|
9
- allow(Facter).to receive(:value).with(key).and_return(value)
10
- end
11
- end
12
-
13
7
  describe Puppet::Resource::Catalog::Compiler do
14
8
  let(:compiler) { described_class.new }
15
9
  let(:node_name) { "foo" }
@@ -22,11 +16,8 @@ describe Puppet::Resource::Catalog::Compiler do
22
16
  describe "when initializing" do
23
17
  before do
24
18
  expect(Puppet).to receive(:version).and_return(1)
25
- set_facts({
26
- 'fqdn' => "my.server.com",
27
- 'ipaddress' => "my.ip.address",
28
- 'ipaddress6' => nil
29
- })
19
+ expect(Facter).to receive(:value).with('fqdn').and_return("my.server.com")
20
+ expect(Facter).to receive(:value).with('ipaddress').and_return("my.ip.address")
30
21
  end
31
22
 
32
23
  it "should gather data about itself" do
@@ -399,12 +390,9 @@ describe Puppet::Resource::Catalog::Compiler do
399
390
 
400
391
  describe "after finding nodes" do
401
392
  before do
402
- allow(Puppet).to receive(:version).and_return(1)
403
- set_facts({
404
- 'fqdn' => "my.server.com",
405
- 'ipaddress' => "my.ip.address",
406
- 'ipaddress6' => nil
407
- })
393
+ expect(Puppet).to receive(:version).and_return(1)
394
+ expect(Facter).to receive(:value).with('fqdn').and_return("my.server.com")
395
+ expect(Facter).to receive(:value).with('ipaddress').and_return("my.ip.address")
408
396
  @request = Puppet::Indirector::Request.new(:catalog, :find, node_name, nil)
409
397
  allow(compiler).to receive(:compile)
410
398
  allow(Puppet::Node.indirection).to receive(:find).with(node_name, anything).and_return(node)
@@ -424,51 +412,6 @@ describe Puppet::Resource::Catalog::Compiler do
424
412
  expect(node).to receive(:merge).with(hash_including("serverip" => "my.ip.address"))
425
413
  compiler.find(@request)
426
414
  end
427
-
428
- it "shouldn't warn if there is at least one ip fact" do
429
- expect(node).to receive(:merge).with(hash_including("serverip" => "my.ip.address"))
430
- compiler.find(@request)
431
- expect(@logs).not_to be_any {|log| log.level == :warning and log.message =~ /Could not retrieve either serverip or serverip6 fact/}
432
- end
433
- end
434
-
435
- describe "in an IPv6 only environment" do
436
- before do |example|
437
- allow(Puppet).to receive(:version).and_return(1)
438
- set_facts({
439
- 'fqdn' => "my.server.com",
440
- 'ipaddress' => nil,
441
- })
442
- if example.metadata[:nil_ipv6]
443
- set_facts({
444
- 'ipaddress6' => nil
445
- })
446
- else
447
- set_facts({
448
- 'ipaddress6' => "my.ipv6.address"
449
- })
450
- end
451
- @request = Puppet::Indirector::Request.new(:catalog, :find, node_name, nil)
452
- allow(compiler).to receive(:compile)
453
- allow(Puppet::Node.indirection).to receive(:find).with(node_name, anything).and_return(node)
454
- end
455
-
456
- it "should populate the :serverip6 fact" do
457
- expect(node).to receive(:merge).with(hash_including("serverip6" => "my.ipv6.address"))
458
- compiler.find(@request)
459
- end
460
-
461
- it "shouldn't warn if there is at least one ip fact" do
462
- expect(node).to receive(:merge).with(hash_including("serverip6" => "my.ipv6.address"))
463
- compiler.find(@request)
464
- expect(@logs).not_to be_any {|log| log.level == :warning and log.message =~ /Could not retrieve either serverip or serverip6 fact/}
465
- end
466
-
467
- it "should warn if there are no ip facts", :nil_ipv6 do
468
- expect(node).to receive(:merge)
469
- compiler.find(@request)
470
- expect(@logs).to be_any {|log| log.level == :warning and log.message =~ /Could not retrieve either serverip or serverip6 fact/}
471
- end
472
415
  end
473
416
 
474
417
  describe "when filtering resources" do
@@ -48,7 +48,7 @@ describe "Puppet::Resource::Ral" do
48
48
  end
49
49
 
50
50
  it "should convert ral resources into regular resources" do
51
- my_resource = double("my user resource", :title => "my user resource")
51
+ my_resource = double("my user resource")
52
52
  my_instance = double("my user", :name => "root", :to_resource => my_resource)
53
53
 
54
54
  expect(Puppet::Type::User).to receive(:instances).and_return([ my_instance ])
@@ -56,7 +56,7 @@ describe "Puppet::Resource::Ral" do
56
56
  end
57
57
 
58
58
  it "should filter results by name if there's a name in the key" do
59
- my_resource = double("my user resource", title: "my user resource")
59
+ my_resource = double("my user resource")
60
60
  allow(my_resource).to receive(:to_resource).and_return(my_resource)
61
61
  allow(my_resource).to receive(:[]).with(:name).and_return("root")
62
62
 
@@ -74,11 +74,11 @@ describe "Puppet::Resource::Ral" do
74
74
  end
75
75
 
76
76
  it "should filter results by query parameters" do
77
- wrong_resource = double("my user resource", title: "my user resource")
77
+ wrong_resource = double("my user resource")
78
78
  allow(wrong_resource).to receive(:to_resource).and_return(wrong_resource)
79
79
  allow(wrong_resource).to receive(:[]).with(:name).and_return("root")
80
80
 
81
- my_resource = double("wrong resource", title: "wrong resource")
81
+ my_resource = double("wrong resource")
82
82
  allow(my_resource).to receive(:to_resource).and_return(my_resource)
83
83
  allow(my_resource).to receive(:[]).with(:name).and_return("bob")
84
84
 
@@ -82,7 +82,7 @@ describe Puppet::ModuleTool::Tar::Mini, :if => (Puppet.features.minitar? and Pup
82
82
  expect(Zlib::GzipReader).to receive(:open).with(sourcefile).and_yield(reader)
83
83
  expect(minitar).to receive(:find_valid_files).with(reader).and_return([name])
84
84
  entry = MockFileStatEntry.new(mode)
85
- expect(Archive::Tar::Minitar).to receive(:unpack).with(reader, destdir, [name], :fsync => false).
85
+ expect(Archive::Tar::Minitar).to receive(:unpack).with(reader, destdir, [name]).
86
86
  and_yield(type, name, {:entry => entry})
87
87
  entry
88
88
  end
@@ -40,27 +40,19 @@ describe Puppet::Network::HTTP::API::IndirectedRoutes do
40
40
  end
41
41
 
42
42
  it "should fail if there is no environment specified" do
43
- expect {
44
- handler.uri2indirection("GET", "#{master_url_prefix}/node/bar", {})
45
- }.to raise_error(bad_request_error)
43
+ expect(lambda { handler.uri2indirection("GET", "#{master_url_prefix}/node/bar", {}) }).to raise_error(bad_request_error)
46
44
  end
47
45
 
48
46
  it "should fail if the environment is not alphanumeric" do
49
- expect {
50
- handler.uri2indirection("GET", "#{master_url_prefix}/node/bar", {:environment => "env ness"})
51
- }.to raise_error(bad_request_error)
47
+ expect(lambda { handler.uri2indirection("GET", "#{master_url_prefix}/node/bar", {:environment => "env ness"}) }).to raise_error(bad_request_error)
52
48
  end
53
49
 
54
50
  it "should fail if the indirection does not match the prefix" do
55
- expect {
56
- handler.uri2indirection("GET", "#{master_url_prefix}/certificate/foo", params)
57
- }.to raise_error(bad_request_error)
51
+ expect(lambda { handler.uri2indirection("GET", "#{master_url_prefix}/certificate/foo", params) }).to raise_error(bad_request_error)
58
52
  end
59
53
 
60
54
  it "should fail if the indirection does not have the correct version" do
61
- expect {
62
- handler.uri2indirection("GET", "#{Puppet::Network::HTTP::MASTER_URL_PREFIX}/v1/node/bar", params)
63
- }.to raise_error(bad_request_error)
55
+ expect(lambda { handler.uri2indirection("GET", "#{Puppet::Network::HTTP::MASTER_URL_PREFIX}/v1/node/bar", params) }).to raise_error(bad_request_error)
64
56
  end
65
57
 
66
58
  it "should not pass a buck_path parameter through (See Bugs #13553, #13518, #13511)" do
@@ -84,9 +76,7 @@ describe Puppet::Network::HTTP::API::IndirectedRoutes do
84
76
  end
85
77
 
86
78
  it "should fail if the indirection name is not alphanumeric" do
87
- expect {
88
- handler.uri2indirection("GET", "#{master_url_prefix}/foo ness/bar", params)
89
- }.to raise_error(bad_request_error)
79
+ expect(lambda { handler.uri2indirection("GET", "#{master_url_prefix}/foo ness/bar", params) }).to raise_error(bad_request_error)
90
80
  end
91
81
 
92
82
  it "should use the remainder of the URI as the indirection key" do
@@ -98,9 +88,7 @@ describe Puppet::Network::HTTP::API::IndirectedRoutes do
98
88
  end
99
89
 
100
90
  it "should fail if no indirection key is specified" do
101
- expect {
102
- handler.uri2indirection("GET", "#{master_url_prefix}/node", params)
103
- }.to raise_error(bad_request_error)
91
+ expect(lambda { handler.uri2indirection("GET", "#{master_url_prefix}/node", params) }).to raise_error(bad_request_error)
104
92
  end
105
93
 
106
94
  it "should choose 'find' as the indirection method if the http method is a GET and the indirection name is singular" do
@@ -140,9 +128,7 @@ describe Puppet::Network::HTTP::API::IndirectedRoutes do
140
128
  end
141
129
 
142
130
  it "should fail if an indirection method cannot be picked" do
143
- expect {
144
- handler.uri2indirection("UPDATE", "#{master_url_prefix}/node/bar", params)
145
- }.to raise_error(method_not_allowed_error)
131
+ expect(lambda { handler.uri2indirection("UPDATE", "#{master_url_prefix}/node/bar", params) }).to raise_error(method_not_allowed_error)
146
132
  end
147
133
 
148
134
  it "should not URI unescape the indirection key" do
@@ -162,10 +148,9 @@ describe Puppet::Network::HTTP::API::IndirectedRoutes do
162
148
  expect(handler).to receive(:check_authorization).with(anything,
163
149
  anything,
164
150
  excluding(:environment))
165
- expect { handler.uri2indirection("GET",
166
- "#{master_url_prefix}/node/bar",
167
- {:environment => 'bogus'})
168
- }.to raise_error(not_found_error)
151
+ expect(lambda { handler.uri2indirection("GET",
152
+ "#{master_url_prefix}/node/bar",
153
+ {:environment => 'bogus'}) }).to raise_error(not_found_error)
169
154
  end
170
155
 
171
156
  it "should not URI unescape the indirection key as passed through to a call to check_authorization" do