puppet 6.17.0-universal-darwin → 6.18.0-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile.lock +6 -5
- data/lib/puppet/application/apply.rb +18 -20
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/confine.rb +1 -1
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/defaults.rb +21 -3
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/file_serving/mount/locales.rb +1 -2
- data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
- data/lib/puppet/file_serving/mount/plugins.rb +1 -2
- data/lib/puppet/file_system/file_impl.rb +3 -3
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/reverse_each.rb +1 -1
- data/lib/puppet/functions/rstrip.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -1
- data/lib/puppet/functions/strip.rb +4 -4
- data/lib/puppet/gettext/config.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +4 -4
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/file_metadata/http.rb +1 -0
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/network/format_support.rb +2 -2
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/pal/pal_impl.rb +27 -3
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/functions.rb +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- data/lib/puppet/parser/type_loader.rb +2 -2
- data/lib/puppet/pops/adaptable.rb +7 -13
- data/lib/puppet/pops/adapters.rb +8 -4
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
- data/lib/puppet/pops/loaders.rb +18 -11
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
- data/lib/puppet/pops/types/iterable.rb +34 -8
- data/lib/puppet/pops/validation/checker4_0.rb +19 -15
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +34 -0
- data/lib/puppet/provider/package/gem.rb +4 -2
- data/lib/puppet/provider/package/puppet_gem.rb +5 -0
- data/lib/puppet/provider/package/zypper.rb +3 -0
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +10 -3
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/trusted_external.rb +2 -2
- data/lib/puppet/type.rb +4 -3
- data/lib/puppet/type/file.rb +2 -2
- data/lib/puppet/type/file/source.rb +27 -7
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/service.rb +4 -0
- data/lib/puppet/type/user.rb +18 -3
- data/lib/puppet/util.rb +26 -12
- data/lib/puppet/util/autoload.rb +9 -7
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/api_types.rb +15 -1
- data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/user.rb +219 -0
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +78 -69
- data/man/man5/puppet.conf.5 +22 -3
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +2 -2
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
- data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
- data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
- data/spec/integration/application/agent_spec.rb +29 -37
- data/spec/integration/application/apply_spec.rb +149 -149
- data/spec/integration/application/config_spec.rb +74 -0
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +65 -16
- data/spec/integration/application/help_spec.rb +42 -0
- data/spec/integration/application/lookup_spec.rb +13 -0
- data/spec/integration/application/module_spec.rb +68 -0
- data/spec/integration/application/plugin_spec.rb +50 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/node/environment_spec.rb +1 -1
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
- data/spec/integration/util/windows/process_spec.rb +26 -32
- data/spec/integration/util/windows/user_spec.rb +7 -0
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +8 -0
- data/spec/unit/application/agent_spec.rb +3 -4
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +39 -10
- data/spec/unit/application/man_spec.rb +52 -0
- data/spec/unit/application/resource_spec.rb +3 -1
- data/spec/unit/application/ssl_spec.rb +15 -2
- data/spec/unit/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer_spec.rb +47 -31
- data/spec/unit/confine_spec.rb +2 -1
- data/spec/unit/face/config_spec.rb +3 -1
- data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
- data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
- data/spec/unit/file_system/uniquefile_spec.rb +18 -0
- data/spec/unit/http/client_spec.rb +0 -1
- data/spec/unit/http/resolver_spec.rb +0 -1
- data/spec/unit/http/service/ca_spec.rb +0 -1
- data/spec/unit/http/service/compiler_spec.rb +0 -1
- data/spec/unit/http/service/file_server_spec.rb +0 -1
- data/spec/unit/http/service/report_spec.rb +0 -1
- data/spec/unit/http/service_spec.rb +0 -1
- data/spec/unit/http/session_spec.rb +0 -1
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/node/environment_spec.rb +18 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +70 -0
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- data/spec/unit/provider/package/apt_spec.rb +77 -0
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/init_spec.rb +41 -0
- data/spec/unit/provider/service/systemd_spec.rb +1 -6
- data/spec/unit/provider/service/windows_spec.rb +28 -0
- data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
- data/spec/unit/puppet_pal_2pec.rb +40 -0
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/type/service_spec.rb +35 -2
- data/spec/unit/type/user_spec.rb +31 -2
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- data/spec/unit/util/command_line_spec.rb +11 -6
- metadata +21 -44
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/file_bucket/file_spec.rb +0 -50
- data/spec/integration/file_serving/content_spec.rb +0 -7
- data/spec/integration/file_serving/fileset_spec.rb +0 -12
- data/spec/integration/file_serving/metadata_spec.rb +0 -8
- data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
- data/spec/integration/file_system/uniquefile_spec.rb +0 -26
- data/spec/integration/module_tool/forge_spec.rb +0 -51
- data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
- data/spec/integration/provider/service/init_spec.rb +0 -48
- data/spec/integration/provider/service/systemd_spec.rb +0 -25
- data/spec/integration/provider/service/windows_spec.rb +0 -50
- data/spec/integration/reference/providers_spec.rb +0 -21
- data/spec/integration/reports_spec.rb +0 -13
- data/spec/integration/ssl/certificate_request_spec.rb +0 -44
- data/spec/integration/ssl/host_spec.rb +0 -72
- data/spec/integration/ssl/key_spec.rb +0 -99
- data/spec/shared_behaviours/file_serving_model.rb +0 -51
- data/spec/unit/face/man_spec.rb +0 -25
- data/spec/unit/man_spec.rb +0 -31
@@ -2,21 +2,50 @@ require 'spec_helper'
|
|
2
2
|
require 'puppet/application/facts'
|
3
3
|
|
4
4
|
describe Puppet::Application::Facts do
|
5
|
+
let(:app) { Puppet::Application[:facts] }
|
6
|
+
let(:values) { {"filesystems" => "apfs,autofs,devfs"} }
|
7
|
+
|
5
8
|
before :each do
|
6
|
-
|
9
|
+
Puppet::Node::Facts.indirection.terminus_class = :memory
|
7
10
|
end
|
8
11
|
|
9
|
-
it "
|
10
|
-
Puppet::Node::Facts.
|
11
|
-
|
12
|
-
|
12
|
+
it "returns facts for a given node" do
|
13
|
+
facts = Puppet::Node::Facts.new('whatever', values)
|
14
|
+
Puppet::Node::Facts.indirection.save(facts)
|
15
|
+
|
16
|
+
app.command_line.args = %w{find whatever --render-as yaml}
|
17
|
+
|
18
|
+
# due to PUP-10105 we emit the class tag when we shouldn't
|
19
|
+
expected = Regexp.new(<<~END)
|
20
|
+
--- !ruby/object:Puppet::Node::Facts
|
21
|
+
name: whatever
|
22
|
+
values:
|
23
|
+
filesystems: apfs,autofs,devfs
|
24
|
+
END
|
13
25
|
|
14
26
|
expect {
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
27
|
+
app.run
|
28
|
+
}.to exit_with(0)
|
29
|
+
.and output(expected).to_stdout
|
30
|
+
end
|
19
31
|
|
20
|
-
|
32
|
+
it "returns facts for the current node when the name is omitted" do
|
33
|
+
facts = Puppet::Node::Facts.new(Puppet[:certname], values)
|
34
|
+
Puppet::Node::Facts.indirection.save(facts)
|
35
|
+
|
36
|
+
app.command_line.args = %w{find --render-as yaml}
|
37
|
+
|
38
|
+
# due to PUP-10105 we emit the class tag when we shouldn't
|
39
|
+
expected = Regexp.new(<<~END)
|
40
|
+
--- !ruby/object:Puppet::Node::Facts
|
41
|
+
name: #{Puppet[:certname]}
|
42
|
+
values:
|
43
|
+
filesystems: apfs,autofs,devfs
|
44
|
+
END
|
45
|
+
|
46
|
+
expect {
|
47
|
+
app.run
|
48
|
+
}.to exit_with(0)
|
49
|
+
.and output(expected).to_stdout
|
21
50
|
end
|
22
51
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/face'
|
3
|
+
|
4
|
+
describe Puppet::Face[:man, :current] do
|
5
|
+
let(:pager) { '/path/to/our/pager' }
|
6
|
+
|
7
|
+
around do |example|
|
8
|
+
Puppet::Util.withenv('MANPAGER' => pager) do
|
9
|
+
example.run
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'is deprecated' do
|
14
|
+
expect(subject).to be_deprecated
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'has a man action' do
|
18
|
+
expect(subject).to be_action(:man)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'accepts a call with no arguments' do
|
22
|
+
expect { subject.man }.to output(/USAGE: puppet man <action>/).to_stdout
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'raises an ArgumentError when given too many arguments' do
|
26
|
+
expect {
|
27
|
+
subject.man(:man, 'agent', 'extra')
|
28
|
+
}.to raise_error(ArgumentError)
|
29
|
+
.and output(/USAGE: puppet man <action>/).to_stdout
|
30
|
+
end
|
31
|
+
|
32
|
+
it "exits with 0 when generating man documentation for each available application" do
|
33
|
+
# turn off deprecation warning
|
34
|
+
Puppet[:disable_warnings] = ['deprecations']
|
35
|
+
|
36
|
+
allow(Puppet::Util).to receive(:which).with('ronn').and_return(nil)
|
37
|
+
allow(Puppet::Util).to receive(:which).with(pager).and_return(pager)
|
38
|
+
|
39
|
+
Puppet::Application.available_application_names.each do |name|
|
40
|
+
next if %w{man face_base indirection_base}.include? name
|
41
|
+
|
42
|
+
app = Puppet::Application[:man]
|
43
|
+
app.command_line.args << 'man' << name
|
44
|
+
|
45
|
+
expect {
|
46
|
+
allow(IO).to receive(:popen).with(pager, 'w:UTF-8').and_yield($stdout)
|
47
|
+
app.run
|
48
|
+
}.to exit_with(0)
|
49
|
+
.and output(/puppet-#{name}/m).to_stdout
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -51,7 +51,9 @@ describe Puppet::Application::Resource do
|
|
51
51
|
# provider is a parameter that should always be available
|
52
52
|
@resource_app.extra_params = [ :provider ]
|
53
53
|
|
54
|
-
expect {
|
54
|
+
expect {
|
55
|
+
@resource_app.main
|
56
|
+
}.to output(/provider\s+=>/).to_stdout
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
@@ -38,7 +38,7 @@ describe Puppet::Application::Ssl, unless: Puppet::Util::Platform.jruby? do
|
|
38
38
|
def expects_command_to_pass(expected_output = nil)
|
39
39
|
expect {
|
40
40
|
ssl.run_command
|
41
|
-
}.to
|
41
|
+
}.to output(expected_output).to_stdout
|
42
42
|
end
|
43
43
|
|
44
44
|
def expects_command_to_fail(message)
|
@@ -46,7 +46,7 @@ describe Puppet::Application::Ssl, unless: Puppet::Util::Platform.jruby? do
|
|
46
46
|
expect {
|
47
47
|
ssl.run_command
|
48
48
|
}.to raise_error(Puppet::Error, message)
|
49
|
-
}.to
|
49
|
+
}.to output(/.*/).to_stdout
|
50
50
|
end
|
51
51
|
|
52
52
|
shared_examples_for 'an ssl action' do
|
@@ -266,6 +266,19 @@ describe Puppet::Application::Ssl, unless: Puppet::Util::Platform.jruby? do
|
|
266
266
|
FileUtils.cp(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'encrypted-key.pem'), Puppet[:hostprivkey])
|
267
267
|
FileUtils.cp(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'signed.pem'), Puppet[:hostcert])
|
268
268
|
|
269
|
+
# To verify the client cert we need the root and intermediate certs and crls.
|
270
|
+
# We don't need to do this with `ssl-client` cert above, because it is issued
|
271
|
+
# directly from the generated TestCa above.
|
272
|
+
File.open(Puppet[:localcacert], 'w') do |f|
|
273
|
+
f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'ca.pem')))
|
274
|
+
f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'intermediate.pem')))
|
275
|
+
end
|
276
|
+
|
277
|
+
File.open(Puppet[:hostcrl], 'w') do |f|
|
278
|
+
f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'crl.pem')))
|
279
|
+
f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'intermediate-crl.pem')))
|
280
|
+
end
|
281
|
+
|
269
282
|
Puppet[:passfile] = file_containing('passfile', '74695716c8b6')
|
270
283
|
|
271
284
|
expects_command_to_pass(%r{Verified client certificate 'CN=signed' fingerprint})
|
@@ -228,5 +228,15 @@ describe Puppet::Configurer::Downloader do
|
|
228
228
|
|
229
229
|
expect { @dler.evaluate }.not_to raise_error
|
230
230
|
end
|
231
|
+
|
232
|
+
it "raises an exception if catalog application fails" do
|
233
|
+
Puppet[:ignore_plugin_errors] = false
|
234
|
+
|
235
|
+
expect(@dler.file).to receive(:retrieve).and_raise(Puppet::Error, "testing")
|
236
|
+
|
237
|
+
expect {
|
238
|
+
@dler.evaluate
|
239
|
+
}.to raise_error(Puppet::Error, /testing/)
|
240
|
+
end
|
231
241
|
end
|
232
242
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'puppet/configurer'
|
3
|
-
require 'webmock/rspec'
|
4
3
|
|
5
4
|
describe Puppet::Configurer do
|
6
5
|
before do
|
@@ -85,6 +84,26 @@ describe Puppet::Configurer do
|
|
85
84
|
expect(configurer.run).to eq(0)
|
86
85
|
end
|
87
86
|
|
87
|
+
it "fails the run if pluginsync fails when usecacheonfailure is false" do
|
88
|
+
Puppet[:ignore_plugin_errors] = false
|
89
|
+
|
90
|
+
# --test implies these, set them so we don't fall back to a cached catalog
|
91
|
+
Puppet[:use_cached_catalog] = false
|
92
|
+
Puppet[:usecacheonfailure] = false
|
93
|
+
|
94
|
+
body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
|
95
|
+
stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(
|
96
|
+
status: 404, body: body, headers: {'Content-Type' => 'application/json'}
|
97
|
+
)
|
98
|
+
stub_request(:get, %r{/puppet/v3/file_metadata/pluginfacts}).to_return(
|
99
|
+
status: 404, body: body, headers: {'Content-Type' => 'application/json'}
|
100
|
+
)
|
101
|
+
|
102
|
+
configurer.run(pluginsync: true)
|
103
|
+
|
104
|
+
expect(@logs).to include(an_object_having_attributes(level: :err, message: %r{Failed to apply catalog: Failed to retrieve pluginfacts: Could not retrieve information from environment production source\(s\) puppet:///pluginfacts}))
|
105
|
+
end
|
106
|
+
|
88
107
|
it "applies a cached catalog when it can't connect to the master" do
|
89
108
|
error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
|
90
109
|
|
@@ -96,7 +115,8 @@ describe Puppet::Configurer do
|
|
96
115
|
end
|
97
116
|
|
98
117
|
it "should initialize a transaction report if one is not provided" do
|
99
|
-
|
118
|
+
# host and settings catalogs each create a report...
|
119
|
+
expect(Puppet::Transaction::Report).to receive(:new).and_return(report).twice
|
100
120
|
|
101
121
|
configurer.run
|
102
122
|
end
|
@@ -192,22 +212,21 @@ describe Puppet::Configurer do
|
|
192
212
|
end
|
193
213
|
|
194
214
|
it "should remove the report as a log destination when the run is finished" do
|
195
|
-
|
196
|
-
|
197
|
-
configurer.run
|
215
|
+
configurer.run(report: report)
|
198
216
|
|
199
217
|
expect(Puppet::Util::Log.destinations).not_to include(report)
|
200
218
|
end
|
201
219
|
|
202
|
-
it "should return
|
203
|
-
|
204
|
-
|
220
|
+
it "should return an exit status of 2 due to the notify resource 'changing'" do
|
221
|
+
cat = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
|
222
|
+
cat.add_resource(Puppet::Type.type(:notify).new(:name => 'something changed'))
|
205
223
|
|
206
|
-
expect(configurer.run).to eq(
|
224
|
+
expect(configurer.run(catalog: cat, report: report)).to eq(2)
|
207
225
|
end
|
208
226
|
|
209
227
|
it "should return nil if catalog application fails" do
|
210
|
-
|
228
|
+
expect(catalog).to receive(:apply).and_raise(Puppet::Error, 'One or more resource dependency cycles detected in graph')
|
229
|
+
|
211
230
|
expect(configurer.run(catalog: catalog, report: report)).to be_nil
|
212
231
|
end
|
213
232
|
|
@@ -222,34 +241,28 @@ describe Puppet::Configurer do
|
|
222
241
|
end
|
223
242
|
|
224
243
|
it "should include the pre-run command failure in the report" do
|
225
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
226
|
-
|
227
244
|
Puppet.settings[:prerun_command] = "/my/command"
|
228
245
|
expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
|
229
246
|
|
230
|
-
expect(configurer.run).to be_nil
|
247
|
+
expect(configurer.run(report: report)).to be_nil
|
231
248
|
expect(report.logs.find { |x| x.message =~ /Could not run command from prerun_command/ }).to be
|
232
249
|
end
|
233
250
|
|
234
251
|
it "should send the transaction report even if the post-run command fails" do
|
235
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
236
|
-
|
237
252
|
Puppet.settings[:postrun_command] = "/my/command"
|
238
253
|
expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
|
239
254
|
expect(configurer).to receive(:send_report).with(report)
|
240
255
|
|
241
|
-
expect(configurer.run).to be_nil
|
256
|
+
expect(configurer.run(report: report)).to be_nil
|
242
257
|
end
|
243
258
|
|
244
259
|
it "should include the post-run command failure in the report" do
|
245
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
246
|
-
|
247
260
|
Puppet.settings[:postrun_command] = "/my/command"
|
248
261
|
expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
|
249
262
|
|
250
263
|
expect(report).to receive(:<<) { |log, _| expect(log.message).to match(/Could not run command from postrun_command/) }.at_least(:once)
|
251
264
|
|
252
|
-
expect(configurer.run).to be_nil
|
265
|
+
expect(configurer.run(report: report)).to be_nil
|
253
266
|
end
|
254
267
|
|
255
268
|
it "should execute post-run command even if the pre-run command fails" do
|
@@ -262,34 +275,28 @@ describe Puppet::Configurer do
|
|
262
275
|
end
|
263
276
|
|
264
277
|
it "should finalize the report" do
|
265
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
266
|
-
|
267
278
|
expect(report).to receive(:finalize_report)
|
268
|
-
configurer.run
|
279
|
+
configurer.run(report: report)
|
269
280
|
end
|
270
281
|
|
271
282
|
it "should not apply the catalog if the pre-run command fails" do
|
272
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
273
|
-
|
274
283
|
Puppet.settings[:prerun_command] = "/my/command"
|
275
284
|
expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
|
276
285
|
|
277
286
|
expect_any_instance_of(Puppet::Resource::Catalog).not_to receive(:apply)
|
278
287
|
expect(configurer).to receive(:send_report)
|
279
288
|
|
280
|
-
expect(configurer.run).to be_nil
|
289
|
+
expect(configurer.run(report: report)).to be_nil
|
281
290
|
end
|
282
291
|
|
283
292
|
it "should apply the catalog, send the report, and return nil if the post-run command fails" do
|
284
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
285
|
-
|
286
293
|
Puppet.settings[:postrun_command] = "/my/command"
|
287
294
|
expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
|
288
295
|
|
289
296
|
expect_any_instance_of(Puppet::Resource::Catalog).to receive(:apply)
|
290
297
|
expect(configurer).to receive(:send_report)
|
291
298
|
|
292
|
-
expect(configurer.run).to be_nil
|
299
|
+
expect(configurer.run(report: report)).to be_nil
|
293
300
|
end
|
294
301
|
|
295
302
|
it 'includes total time metrics in the report after successfully applying the catalog' do
|
@@ -546,6 +553,15 @@ describe Puppet::Configurer do
|
|
546
553
|
end
|
547
554
|
end
|
548
555
|
|
556
|
+
def expects_pluginsync
|
557
|
+
metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":420,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
|
558
|
+
stub_request(:get, %r{/puppet/v3/file_metadatas/(plugins|locales)}).to_return(status: 200, body: metadata, headers: {'Content-Type' => 'application/json'})
|
559
|
+
|
560
|
+
# response retains owner/group/mode due to source_permissions => use
|
561
|
+
facts_metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":500,\"group\":500,\"mode\":493,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
|
562
|
+
stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(status: 200, body: facts_metadata, headers: {'Content-Type' => 'application/json'})
|
563
|
+
end
|
564
|
+
|
549
565
|
def expects_new_catalog_only(catalog)
|
550
566
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
|
551
567
|
expect(Puppet::Resource::Catalog.indirection).not_to receive(:find).with(anything, hash_including(ignore_terminus: true))
|
@@ -562,6 +578,7 @@ describe Puppet::Configurer do
|
|
562
578
|
end
|
563
579
|
|
564
580
|
def expects_fallback_to_new_catalog(catalog)
|
581
|
+
expects_pluginsync
|
565
582
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(nil)
|
566
583
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
|
567
584
|
end
|
@@ -598,7 +615,6 @@ describe Puppet::Configurer do
|
|
598
615
|
it "should make a node request and pluginsync when a cached catalog cannot be retrieved" do
|
599
616
|
expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
|
600
617
|
expects_fallback_to_new_catalog(catalog)
|
601
|
-
expect(configurer).to receive(:download_plugins)
|
602
618
|
|
603
619
|
configurer.run
|
604
620
|
end
|
@@ -636,6 +652,7 @@ describe Puppet::Configurer do
|
|
636
652
|
it "should not attempt to retrieve a cached catalog again if the first attempt failed" do
|
637
653
|
expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
|
638
654
|
expects_neither_new_or_cached_catalog
|
655
|
+
expects_pluginsync
|
639
656
|
|
640
657
|
# after failing to use a cached catalog, we'll need to pluginsync before getting
|
641
658
|
# a new catalog, which also fails.
|
@@ -656,8 +673,7 @@ describe Puppet::Configurer do
|
|
656
673
|
end
|
657
674
|
|
658
675
|
it "applies the catalog passed as options when the catalog cache terminus is not set" do
|
659
|
-
|
660
|
-
stub_request(:get, %r{/puppet/v3/file_metadatas?/pluginfacts}).to_return(:status => 404)
|
676
|
+
expects_pluginsync
|
661
677
|
|
662
678
|
catalog.add_resource(Puppet::Resource.new('notify', 'from apply'))
|
663
679
|
configurer.run(catalog: catalog.to_ral)
|
data/spec/unit/confine_spec.rb
CHANGED
@@ -54,10 +54,11 @@ describe Puppet::Confine do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should log failing confines with the label and message" do
|
57
|
+
Puppet[:log_level] = 'debug'
|
57
58
|
allow(@confine).to receive(:pass?).and_return(false)
|
58
59
|
expect(@confine).to receive(:message).and_return("My message")
|
59
60
|
expect(@confine).to receive(:label).and_return("Mylabel")
|
60
|
-
expect(Puppet).to receive(:debug).
|
61
|
+
expect(Puppet).to receive(:debug) { |&b| expect(b.call).to eq("Mylabel: My message") }
|
61
62
|
@confine.valid?
|
62
63
|
end
|
63
64
|
end
|
@@ -234,7 +234,9 @@ trace = true
|
|
234
234
|
allow(Puppet::Settings::IniFile::Manipulator).to receive(:new).and_return(manipulator)
|
235
235
|
|
236
236
|
expect(manipulator).to receive(:delete).with('main', 'setting').and_return(' setting=value')
|
237
|
-
expect {
|
237
|
+
expect {
|
238
|
+
subject.delete('setting', {:section => 'main'})
|
239
|
+
}.to output("Deleted setting from 'main': 'setting=value'\n").to_stdout
|
238
240
|
end
|
239
241
|
|
240
242
|
it 'prints a warning when a setting is not found to delete' do
|
@@ -52,13 +52,13 @@ describe Puppet::FileServing::Mount::Locales do
|
|
52
52
|
expect(@mount.search("foo/bar", @request)).to eq(["/"])
|
53
53
|
end
|
54
54
|
|
55
|
-
it "should return
|
55
|
+
it "should return the default search module path if no modules can be found that have locales and modulepath is invalid" do
|
56
56
|
mod = double('module')
|
57
57
|
allow(mod).to receive(:locales?).and_return(false)
|
58
58
|
|
59
59
|
allow(@environment).to receive(:modules).and_return([])
|
60
60
|
allow(@environment).to receive(:modulepath).and_return([])
|
61
|
-
expect(@mount.search("foo/bar", @request)).to
|
61
|
+
expect(@mount.search("foo/bar", @request)).to eq([Puppet[:codedir]])
|
62
62
|
end
|
63
63
|
|
64
64
|
it "should return the locale paths for each module that has locales" do
|
@@ -52,13 +52,13 @@ describe Puppet::FileServing::Mount::PluginFacts do
|
|
52
52
|
expect(@mount.search("foo/bar", @request)).to eq(["/"])
|
53
53
|
end
|
54
54
|
|
55
|
-
it "should return
|
55
|
+
it "should return the default search module path if no modules can be found that have plugins and modulepath is invalid" do
|
56
56
|
mod = double('module')
|
57
57
|
allow(mod).to receive(:pluginfacts?).and_return(false)
|
58
58
|
|
59
59
|
allow(@environment).to receive(:modules).and_return([])
|
60
60
|
allow(@environment).to receive(:modulepath).and_return([])
|
61
|
-
expect(@mount.search("foo/bar", @request)).to
|
61
|
+
expect(@mount.search("foo/bar", @request)).to eq([Puppet[:codedir]])
|
62
62
|
end
|
63
63
|
|
64
64
|
it "should return the plugin paths for each module that has plugins" do
|
@@ -52,13 +52,13 @@ describe Puppet::FileServing::Mount::Plugins do
|
|
52
52
|
expect(@mount.search("foo/bar", @request)).to eq(["/"])
|
53
53
|
end
|
54
54
|
|
55
|
-
it "should return
|
55
|
+
it "should return the default search module path if no modules can be found that have plugins and modulepath is invalid" do
|
56
56
|
mod = double('module')
|
57
57
|
allow(mod).to receive(:plugins?).and_return(false)
|
58
58
|
|
59
59
|
allow(@environment).to receive(:modules).and_return([])
|
60
60
|
allow(@environment).to receive(:modulepath).and_return([])
|
61
|
-
expect(@mount.search("foo/bar", @request)).to
|
61
|
+
expect(@mount.search("foo/bar", @request)).to eq([Puppet[:codedir]])
|
62
62
|
end
|
63
63
|
|
64
64
|
it "should return the plugin paths for each module that has plugins" do
|