puppet 6.17.0-x86-mingw32 → 6.18.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.
- 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
Binary file
|
@@ -25,11 +25,10 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
25
25
|
server.start_server do |port|
|
26
26
|
Puppet[:masterport] = port
|
27
27
|
expect {
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
}.to output(%r{HTTP GET https://127.0.0.1:#{port}/status/v1/simple/master returned 200 OK}).to_stdout
|
28
|
+
agent.command_line.args << '--test'
|
29
|
+
agent.run
|
30
|
+
}.to exit_with(0)
|
31
|
+
.and output(%r{HTTP GET https://127.0.0.1:#{port}/status/v1/simple/master returned 200 OK}).to_stdout
|
33
32
|
end
|
34
33
|
end
|
35
34
|
|
@@ -39,11 +38,10 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
39
38
|
server.start_server do |port|
|
40
39
|
Puppet[:masterport] = port
|
41
40
|
expect {
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
}.to output(%r{Unable to connect to server from server_list setting: Request to https://puppet.example.com:#{port}/status/v1/simple/master failed}).to_stdout
|
41
|
+
agent.command_line.args << '--test'
|
42
|
+
agent.run
|
43
|
+
}.to exit_with(0)
|
44
|
+
.and output(%r{Unable to connect to server from server_list setting: Request to https://puppet.example.com:#{port}/status/v1/simple/master failed}).to_stdout
|
47
45
|
|
48
46
|
report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
|
49
47
|
expect(report.master_used).to eq("127.0.0.1:#{port}")
|
@@ -54,13 +52,11 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
54
52
|
Puppet[:server_list] = "puppet.example.com"
|
55
53
|
|
56
54
|
expect {
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
}.to output(%r{Unable to connect to server from server_list setting: Could not select a functional puppet master from server_list: 'puppet.example.com'}).to_stdout
|
63
|
-
}.to output(/Error: Could not run Puppet configuration client: Could not select a functional puppet master from server_list: 'puppet.example.com'/).to_stderr
|
55
|
+
agent.command_line.args << '--test'
|
56
|
+
agent.run
|
57
|
+
}.to exit_with(1)
|
58
|
+
.and output(%r{Unable to connect to server from server_list setting: Could not select a functional puppet master from server_list: 'puppet.example.com'}).to_stdout
|
59
|
+
.and output(/Error: Could not run Puppet configuration client: Could not select a functional puppet master from server_list: 'puppet.example.com'/).to_stderr
|
64
60
|
|
65
61
|
# I'd expect puppet to update the last run report even if the server_list was
|
66
62
|
# exhausted, but it doesn't work that way currently, see PUP-6708
|
@@ -71,11 +67,10 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
71
67
|
server.start_server do |port|
|
72
68
|
Puppet[:masterport] = port
|
73
69
|
expect {
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
}.to output(%r{Resolved service 'puppet' to https://127.0.0.1:#{port}/puppet/v3}).to_stdout
|
70
|
+
agent.command_line.args << '--test'
|
71
|
+
agent.run
|
72
|
+
}.to exit_with(0)
|
73
|
+
.and output(%r{Resolved service 'puppet' to https://127.0.0.1:#{port}/puppet/v3}).to_stdout
|
79
74
|
end
|
80
75
|
|
81
76
|
report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
|
@@ -116,11 +111,10 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
116
111
|
server.start_server(mounts: {catalog: catalog_handler}) do |port|
|
117
112
|
Puppet[:masterport] = port
|
118
113
|
expect {
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
}.to output(%r{Notice: /Stage\[main\]/Main/Notify\[deferred\]/message: defined 'message' as '1:2:3'}).to_stdout
|
114
|
+
agent.command_line.args << '--test'
|
115
|
+
agent.run
|
116
|
+
}.to exit_with(2)
|
117
|
+
.and output(%r{Notice: /Stage\[main\]/Main/Notify\[deferred\]/message: defined 'message' as '1:2:3'}).to_stdout
|
124
118
|
end
|
125
119
|
end
|
126
120
|
|
@@ -139,11 +133,10 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
139
133
|
server.start_server(mounts: {catalog: catalog_handler}) do |port|
|
140
134
|
Puppet[:masterport] = port
|
141
135
|
expect {
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
}.to output(a_string_matching(
|
136
|
+
agent.command_line.args << '--test'
|
137
|
+
agent.run
|
138
|
+
}.to exit_with(2)
|
139
|
+
.and output(a_string_matching(
|
147
140
|
/Notice: Sensitive \[value redacted\]/
|
148
141
|
).and matching(
|
149
142
|
/Notify\[sensitive\]\/message: changed \[redacted\] to \[redacted\]/
|
@@ -249,11 +242,10 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
249
242
|
server.start_server(mounts: mounts) do |port|
|
250
243
|
Puppet[:masterport] = port
|
251
244
|
expect {
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
}.to output(/content changed '{md5}d41d8cd98f00b204e9800998ecf8427e' to '{md5}4cf49285ae567157ebfba72bd04ccf32'/).to_stdout
|
245
|
+
agent.command_line.args << '--test'
|
246
|
+
agent.run
|
247
|
+
}.to exit_with(2)
|
248
|
+
.and output(/content changed '{md5}d41d8cd98f00b204e9800998ecf8427e' to '{md5}4cf49285ae567157ebfba72bd04ccf32'/).to_stdout
|
257
249
|
|
258
250
|
# verify puppet restored binary content
|
259
251
|
expect(File.binread(path)).to eq(binary_content)
|
@@ -6,6 +6,8 @@ require 'puppet_spec/https'
|
|
6
6
|
describe "apply", unless: Puppet::Util::Platform.jruby? do
|
7
7
|
include PuppetSpec::Files
|
8
8
|
|
9
|
+
let(:apply) { Puppet::Application[:apply] }
|
10
|
+
|
9
11
|
before :each do
|
10
12
|
Puppet[:reports] = "none"
|
11
13
|
# Let exceptions be raised instead of exiting
|
@@ -19,76 +21,51 @@ describe "apply", unless: Puppet::Util::Platform.jruby? do
|
|
19
21
|
resource = Puppet::Resource.new(:file, file_to_create, :parameters => {:content => "my stuff"})
|
20
22
|
catalog.add_resource resource
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
puppet.apply
|
24
|
+
apply.command_line.args = ['--catalog', file_containing("manifest", catalog.to_json)]
|
25
|
+
expect {
|
26
|
+
apply.run
|
27
|
+
}.to output(/ensure: defined content as/).to_stdout
|
28
28
|
|
29
29
|
expect(Puppet::FileSystem.exist?(file_to_create)).to be_truthy
|
30
30
|
expect(File.read(file_to_create)).to eq("my stuff")
|
31
31
|
end
|
32
32
|
|
33
|
-
context '
|
34
|
-
|
35
|
-
|
36
|
-
let!(:envdir) { tmpdir('environments') }
|
33
|
+
context 'and pcore types are available' do
|
34
|
+
let(:envdir) { my_fixture('environments') }
|
37
35
|
let(:env_name) { 'spec' }
|
38
|
-
let(:dir_structure) {
|
39
|
-
{
|
40
|
-
'.resource_types' => {
|
41
|
-
'applytest.pp' => <<-CODE
|
42
|
-
Puppet::Resource::ResourceType3.new(
|
43
|
-
'applytest',
|
44
|
-
[Puppet::Resource::Param.new(String, 'message')],
|
45
|
-
[Puppet::Resource::Param.new(String, 'name', true)])
|
46
|
-
CODE
|
47
|
-
},
|
48
|
-
'modules' => {
|
49
|
-
'amod' => {
|
50
|
-
'lib' => {
|
51
|
-
'puppet' => {
|
52
|
-
'type' => { 'applytest.rb' => <<-CODE
|
53
|
-
Puppet::Type.newtype(:applytest) do
|
54
|
-
newproperty(:message) do
|
55
|
-
def sync
|
56
|
-
Puppet.send(@resource[:loglevel], self.should)
|
57
|
-
end
|
58
36
|
|
59
|
-
|
60
|
-
|
61
|
-
|
37
|
+
before(:each) do
|
38
|
+
Puppet[:environmentpath] = envdir
|
39
|
+
Puppet[:environment] = env_name
|
40
|
+
end
|
62
41
|
|
63
|
-
|
64
|
-
|
65
|
-
|
42
|
+
it 'does not load the pcore type' do
|
43
|
+
apply = Puppet::Application[:apply]
|
44
|
+
apply.command_line.args = [ '-e', "Applytest { message => 'the default'} applytest { 'applytest was here': }" ]
|
66
45
|
|
67
|
-
|
68
|
-
|
46
|
+
expect {
|
47
|
+
apply.run
|
48
|
+
}.to exit_with(0)
|
49
|
+
.and output(a_string_matching(
|
50
|
+
/the Puppet::Type says hello/
|
51
|
+
).and matching(
|
52
|
+
/applytest was here/
|
53
|
+
)).to_stdout
|
54
|
+
end
|
55
|
+
end
|
69
56
|
|
70
|
-
|
71
|
-
|
72
|
-
Puppet.notice('the Puppet::Type says hello')
|
73
|
-
isnamevar
|
74
|
-
end
|
75
|
-
end
|
76
|
-
CODE
|
77
|
-
}
|
78
|
-
}
|
79
|
-
}
|
80
|
-
}
|
81
|
-
}
|
82
|
-
}
|
83
|
-
}
|
57
|
+
context 'from environment with a pcore defined resource type' do
|
58
|
+
include PuppetSpec::Compiler
|
84
59
|
|
60
|
+
let(:envdir) { my_fixture('environments') }
|
61
|
+
let(:env_name) { 'spec' }
|
85
62
|
let(:environments) { Puppet::Environments::Directories.new(envdir, []) }
|
86
63
|
let(:env) { Puppet::Node::Environment.create(:'spec', [File.join(envdir, 'spec', 'modules')]) }
|
87
64
|
let(:node) { Puppet::Node.new('test', :environment => env) }
|
65
|
+
|
88
66
|
around(:each) do |example|
|
89
67
|
Puppet::Type.rmtype(:applytest)
|
90
68
|
Puppet[:environment] = env_name
|
91
|
-
dir_contained_in(envdir, env_name => dir_structure)
|
92
69
|
Puppet.override(:environments => environments, :current_environment => env) do
|
93
70
|
example.run
|
94
71
|
end
|
@@ -96,12 +73,13 @@ end
|
|
96
73
|
|
97
74
|
it 'does not load the pcore type' do
|
98
75
|
catalog = compile_to_catalog('applytest { "applytest was here":}', node)
|
99
|
-
apply =
|
100
|
-
apply.options[:catalog] = file_containing('manifest', catalog.to_json)
|
76
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', catalog.to_json)]
|
101
77
|
|
102
78
|
Puppet[:environmentpath] = envdir
|
103
79
|
expect_any_instance_of(Puppet::Pops::Loader::Runtime3TypeLoader).not_to receive(:find)
|
104
|
-
expect {
|
80
|
+
expect {
|
81
|
+
apply.run
|
82
|
+
}.to output(/the Puppet::Type says hello.*applytest was here/m).to_stdout
|
105
83
|
end
|
106
84
|
|
107
85
|
# Test just to verify that the Pcore Resource Type and not the Ruby one is produced when the catalog is produced
|
@@ -113,7 +91,9 @@ end
|
|
113
91
|
|
114
92
|
expect(compiler.loaders.runtime3_type_loader.instance_variable_get(:@resource_3x_loader)).to receive(:set_entry).once.with(tn, rt, instance_of(String))
|
115
93
|
.and_return(Puppet::Pops::Loader::Loader::NamedEntry.new(tn, rt, nil))
|
116
|
-
expect {
|
94
|
+
expect {
|
95
|
+
compiler.compile
|
96
|
+
}.not_to output(/the Puppet::Type says hello/).to_stdout
|
117
97
|
end
|
118
98
|
|
119
99
|
it "does not fail when pcore type is loaded twice" do
|
@@ -226,36 +206,36 @@ end
|
|
226
206
|
catalog = compile_to_catalog('include mod', node)
|
227
207
|
|
228
208
|
Puppet[:environment] = env_name
|
229
|
-
apply =
|
230
|
-
|
231
|
-
expect {
|
232
|
-
|
209
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', catalog.to_json)]
|
210
|
+
|
211
|
+
expect {
|
212
|
+
apply.run
|
213
|
+
}.to output(%r{Notify\[The Street 23\]/message: defined 'message' as 'The Street 23'}).to_stdout
|
233
214
|
end
|
234
215
|
end
|
235
216
|
|
236
|
-
it "
|
217
|
+
it "raises if the environment directory does not exist" do
|
237
218
|
manifest = file_containing("manifest.pp", "notice('it was applied')")
|
219
|
+
apply.command_line.args = [manifest]
|
238
220
|
|
239
221
|
special = Puppet::Node::Environment.create(:special, [])
|
240
222
|
Puppet.override(:current_environment => special) do
|
241
223
|
Puppet[:environment] = 'special'
|
242
|
-
|
243
|
-
|
244
|
-
|
224
|
+
expect {
|
225
|
+
apply.run
|
226
|
+
}.to raise_error(Puppet::Environments::EnvironmentNotFound,
|
227
|
+
/Could not find a directory environment named 'special' anywhere in the path/)
|
245
228
|
end
|
246
|
-
|
247
|
-
expect(@logs.map(&:to_s)).to include('it was applied')
|
248
229
|
end
|
249
230
|
|
250
231
|
it "adds environment to the $server_facts variable" do
|
251
232
|
manifest = file_containing("manifest.pp", "notice(\"$server_facts\")")
|
233
|
+
apply.command_line.args = [manifest]
|
252
234
|
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
expect(@logs.map(&:to_s)).to include(/{environment =>.*/)
|
235
|
+
expect {
|
236
|
+
apply.run
|
237
|
+
}.to exit_with(0)
|
238
|
+
.and output(/{environment => production}/).to_stdout
|
259
239
|
end
|
260
240
|
|
261
241
|
it "applies a given file even when an ENC is configured", :unless => Puppet::Util::Platform.windows? || Puppet::Util::Platform.jruby? do
|
@@ -271,48 +251,36 @@ end
|
|
271
251
|
Puppet[:environment] = 'special'
|
272
252
|
Puppet[:node_terminus] = 'exec'
|
273
253
|
Puppet[:external_nodes] = enc
|
274
|
-
|
275
|
-
|
276
|
-
|
254
|
+
apply.command_line.args = [manifest]
|
255
|
+
expect {
|
256
|
+
apply.run
|
257
|
+
}.to exit_with(0)
|
258
|
+
.and output(/Notice: Scope\(Class\[main\]\): specific manifest applied/).to_stdout
|
277
259
|
end
|
278
|
-
|
279
|
-
expect(@logs.map(&:to_s)).to include('specific manifest applied')
|
280
260
|
end
|
281
261
|
|
282
262
|
context "handles errors" do
|
283
263
|
it "logs compile errors once" do
|
284
|
-
|
285
|
-
|
286
|
-
apply.options[:code] = '08'
|
287
|
-
|
288
|
-
msg = 'valid octal'
|
289
|
-
callback = Proc.new do |actual|
|
290
|
-
expect(actual.scan(Regexp.new(msg))).to eq([msg])
|
291
|
-
end
|
292
|
-
|
293
|
-
expect do
|
264
|
+
apply.command_line.args = ['-e', '08']
|
265
|
+
expect {
|
294
266
|
apply.run
|
295
|
-
|
267
|
+
}.to exit_with(1)
|
268
|
+
.and output(/Not a valid octal number/).to_stderr
|
296
269
|
end
|
297
270
|
|
298
271
|
it "logs compile post processing errors once" do
|
299
|
-
Puppet.initialize_settings([])
|
300
|
-
apply = Puppet::Application.find(:apply).new(double('command_line', :subcommand_name => :apply, :args => []))
|
301
272
|
path = File.expand_path('/tmp/content_file_test.Q634Dlmtime')
|
302
|
-
apply.
|
273
|
+
apply.command_line.args = ['-e', "file { '#{path}':
|
303
274
|
content => 'This is the test file content',
|
304
275
|
ensure => present,
|
305
276
|
checksum => mtime
|
306
|
-
}"
|
277
|
+
}"]
|
307
278
|
|
308
|
-
|
309
|
-
callback = Proc.new do |actual|
|
310
|
-
expect(actual.scan(Regexp.new(msg))).to eq([msg])
|
311
|
-
end
|
312
|
-
|
313
|
-
expect do
|
279
|
+
expect {
|
314
280
|
apply.run
|
315
|
-
|
281
|
+
}.to exit_with(1)
|
282
|
+
.and output(/Compiled catalog/).to_stdout
|
283
|
+
.and output(/You cannot specify content when using checksum/).to_stderr
|
316
284
|
end
|
317
285
|
end
|
318
286
|
|
@@ -337,51 +305,42 @@ end
|
|
337
305
|
Puppet[:environmentpath] = envdir
|
338
306
|
end
|
339
307
|
|
340
|
-
|
341
|
-
|
342
|
-
puppet = Puppet::Application.find(:apply).new(double('command_line', :subcommand_name => :apply, :args => args))
|
343
|
-
puppet.options[:code] = execute
|
344
|
-
return puppet
|
345
|
-
end
|
308
|
+
context "given a modulepath" do
|
309
|
+
let(:args) { ['-e', execute] }
|
346
310
|
|
347
|
-
|
348
|
-
|
311
|
+
before :each do
|
312
|
+
Puppet[:modulepath] = modulepath
|
349
313
|
|
350
|
-
|
351
|
-
|
314
|
+
apply.command_line.args = args
|
315
|
+
end
|
352
316
|
|
353
|
-
|
354
|
-
|
355
|
-
|
317
|
+
it "looks in modulepath even when the default directory environment exists" do
|
318
|
+
expect {
|
319
|
+
apply.run
|
320
|
+
}.to exit_with(0)
|
321
|
+
.and output(/amod class included/).to_stdout
|
356
322
|
end
|
357
323
|
|
358
|
-
it "looks in
|
359
|
-
args << '--environment' << 'production'
|
360
|
-
apply = init_cli_args_and_apply_app(args, execute)
|
324
|
+
it "looks in modulepath even when given a specific directory --environment" do
|
325
|
+
apply.command_line.args = args << '--environment' << 'production'
|
361
326
|
|
362
|
-
expect
|
363
|
-
|
364
|
-
|
327
|
+
expect {
|
328
|
+
apply.run
|
329
|
+
}.to exit_with(0)
|
330
|
+
.and output(/amod class included/).to_stdout
|
365
331
|
end
|
366
332
|
|
367
|
-
it "looks in
|
368
|
-
|
369
|
-
apply = init_cli_args_and_apply_app(args, execute)
|
333
|
+
it "looks in modulepath when given multiple paths in modulepath" do
|
334
|
+
Puppet[:modulepath] = [tmpdir('notmodulepath'), modulepath].join(File::PATH_SEPARATOR)
|
370
335
|
|
371
|
-
expect
|
372
|
-
|
373
|
-
|
336
|
+
expect {
|
337
|
+
apply.run
|
338
|
+
}.to exit_with(0)
|
339
|
+
.and output(/amod class included/).to_stdout
|
374
340
|
end
|
375
341
|
end
|
376
342
|
|
377
|
-
# When executing an ENC script, output cannot be captured using
|
378
|
-
# expect { }.to have_printed(...)
|
379
|
-
# External node script execution will fail, likely due to the tampering
|
380
|
-
# with the basic file descriptors.
|
381
|
-
# Workaround: Define a log destination and merely inspect logs.
|
382
343
|
context "with an ENC" do
|
383
|
-
let(:logdest) { tmpfile('logdest') }
|
384
|
-
let(:args) { ['-e', execute, '--logdest', logdest ] }
|
385
344
|
let(:enc) do
|
386
345
|
script_containing('enc_script',
|
387
346
|
:windows => '@echo environment: spec',
|
@@ -394,17 +353,23 @@ end
|
|
394
353
|
end
|
395
354
|
|
396
355
|
it "should use the environment that the ENC mandates" do
|
397
|
-
apply =
|
398
|
-
|
399
|
-
expect
|
356
|
+
apply.command_line.args = ['-e', execute]
|
357
|
+
|
358
|
+
expect {
|
359
|
+
apply.run
|
360
|
+
}.to exit_with(0)
|
361
|
+
.and output(a_string_matching(/amod class included/)
|
362
|
+
.and matching(/Compiled catalog for .* in environment spec/)).to_stdout
|
400
363
|
end
|
401
364
|
|
402
365
|
it "should prefer the ENC environment over the configured one and emit a warning" do
|
403
|
-
apply =
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
366
|
+
apply.command_line.args = ['-e', execute, '--environment', 'production']
|
367
|
+
|
368
|
+
expect {
|
369
|
+
apply.run
|
370
|
+
}.to exit_with(0)
|
371
|
+
.and output(a_string_matching('amod class included')
|
372
|
+
.and matching(/doesn't match server specified environment/)).to_stdout
|
408
373
|
end
|
409
374
|
end
|
410
375
|
end
|
@@ -475,8 +440,7 @@ class amod::bad_type {
|
|
475
440
|
context 'and the file is not serialized with rich_data' do
|
476
441
|
it 'will notify a string that is the result of Regexp#inspect (from Runtime3xConverter)' do
|
477
442
|
catalog = compile_to_catalog(execute, node)
|
478
|
-
apply =
|
479
|
-
apply.options[:catalog] = file_containing('manifest', catalog.to_json)
|
443
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', catalog.to_json)]
|
480
444
|
expect(apply).to receive(:apply_catalog) do |cat|
|
481
445
|
expect(cat.resource(:notify, 'rx')['message']).to be_a(String)
|
482
446
|
expect(cat.resource(:notify, 'bin')['message']).to be_a(String)
|
@@ -491,8 +455,7 @@ class amod::bad_type {
|
|
491
455
|
|
492
456
|
it 'will notify a string that is the result of to_s on uknown data types' do
|
493
457
|
json = compile_to_catalog('include amod::bad_type', node).to_json
|
494
|
-
apply =
|
495
|
-
apply.options[:catalog] = file_containing('manifest', json)
|
458
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', json)]
|
496
459
|
expect(apply).to receive(:apply_catalog) do |catalog|
|
497
460
|
expect(catalog.resource(:notify, 'bogus')['message']).to be_a(String)
|
498
461
|
end
|
@@ -514,11 +477,10 @@ class amod::bad_type {
|
|
514
477
|
context 'and the file is serialized with rich_data' do
|
515
478
|
it 'will notify a regexp using Regexp#to_s' do
|
516
479
|
catalog = compile_to_catalog(execute, node)
|
517
|
-
apply = Puppet::Application[:apply]
|
518
480
|
serialized_catalog = Puppet.override(rich_data: true) do
|
519
481
|
catalog.to_json
|
520
482
|
end
|
521
|
-
apply.
|
483
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', serialized_catalog)]
|
522
484
|
expect(apply).to receive(:apply_catalog) do |cat|
|
523
485
|
expect(cat.resource(:notify, 'rx')['message']).to be_a(Regexp)
|
524
486
|
# The resource return in this expect is a String, but since it was a Binary type that
|
@@ -541,7 +503,6 @@ class amod::bad_type {
|
|
541
503
|
let(:env_dir) { File.join(Puppet[:environmentpath], env_name) }
|
542
504
|
let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(env_dir, 'modules')]) }
|
543
505
|
let(:node) { Puppet::Node.new(Puppet[:certname], environment: environment) }
|
544
|
-
let(:apply) { Puppet::Application[:apply] }
|
545
506
|
|
546
507
|
before :each do
|
547
508
|
Puppet[:environment] = env_name
|
@@ -564,7 +525,7 @@ class amod::bad_type {
|
|
564
525
|
|
565
526
|
expect {
|
566
527
|
apply.command_line.args << manifest
|
567
|
-
|
528
|
+
apply.run
|
568
529
|
}.to exit_with(0)
|
569
530
|
.and output(a_string_matching(
|
570
531
|
/dir1\]\/ensure: created/
|
@@ -579,6 +540,46 @@ class amod::bad_type {
|
|
579
540
|
end
|
580
541
|
end
|
581
542
|
|
543
|
+
context 'http file sources' do
|
544
|
+
include_context 'https client'
|
545
|
+
|
546
|
+
it "requires the caller to URL encode special characters in the request path and query" do
|
547
|
+
Puppet[:server] = '127.0.0.1'
|
548
|
+
request = nil
|
549
|
+
|
550
|
+
response_proc = -> (req, res) {
|
551
|
+
request = req
|
552
|
+
|
553
|
+
res['Content-Type'] = 'text/plain'
|
554
|
+
res.body = "from the server"
|
555
|
+
}
|
556
|
+
|
557
|
+
https = PuppetSpec::HTTPSServer.new
|
558
|
+
https.start_server(response_proc: response_proc) do |https_port|
|
559
|
+
dest = tmpfile('http_file_source')
|
560
|
+
|
561
|
+
# spaces in path are encoded as %20 and '[' in query is encoded as %5B,
|
562
|
+
# but ':', '=', '-' are not encoded
|
563
|
+
manifest = file_containing("manifest.pp", <<~MANIFEST)
|
564
|
+
file { "#{dest}":
|
565
|
+
ensure => file,
|
566
|
+
source => "https://#{Puppet[:server]}:#{https_port}/path%20to%20file?x=b%5Bc&sv=2019-02-02&st=2020-07-28T20:18:53Z&se=2020-07-28T21:03:00Z&sr=b&sp=r&sig=JaZhcqxT4akJcOwUdUGrQB2m1geUoh89iL8WMag8a8c=",
|
567
|
+
}
|
568
|
+
MANIFEST
|
569
|
+
|
570
|
+
expect {
|
571
|
+
apply.command_line.args << manifest
|
572
|
+
apply.run
|
573
|
+
}.to exit_with(0)
|
574
|
+
.and output(%r{Main/File\[#{dest}\]/ensure: defined content as}).to_stdout
|
575
|
+
|
576
|
+
expect(request.path).to eq('/path to file')
|
577
|
+
expect(request.query).to include('x' => 'b[c')
|
578
|
+
expect(request.query).to include('sig' => 'JaZhcqxT4akJcOwUdUGrQB2m1geUoh89iL8WMag8a8c=')
|
579
|
+
end
|
580
|
+
end
|
581
|
+
end
|
582
|
+
|
582
583
|
context 'http report processor' do
|
583
584
|
include_context 'https client'
|
584
585
|
|
@@ -586,7 +587,6 @@ class amod::bad_type {
|
|
586
587
|
Puppet[:reports] = 'http'
|
587
588
|
end
|
588
589
|
|
589
|
-
let(:apply) { Puppet::Application[:apply] }
|
590
590
|
let(:unknown_server) do
|
591
591
|
unknown_ca_cert = cert_fixture('unknown-ca.pem')
|
592
592
|
PuppetSpec::HTTPSServer.new(
|