puppet 7.1.0-x64-mingw32 → 7.6.1-x64-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 +38 -30
- data/ext/build_defaults.yaml +0 -1
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +1 -0
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application/ssl.rb +11 -0
- data/lib/puppet/configurer.rb +16 -3
- data/lib/puppet/defaults.rb +14 -19
- data/lib/puppet/environments.rb +16 -1
- data/lib/puppet/face/facts.rb +26 -2
- data/lib/puppet/ffi/windows/api_types.rb +1 -1
- data/lib/puppet/ffi/windows/constants.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +5 -2
- data/lib/puppet/file_system/memory_file.rb +8 -1
- data/lib/puppet/file_system/windows.rb +2 -0
- data/lib/puppet/functions.rb +1 -1
- data/lib/puppet/functions/partition.rb +8 -0
- data/lib/puppet/http/factory.rb +4 -0
- data/lib/puppet/indirector/facts/facter.rb +1 -0
- data/lib/puppet/loaders.rb +0 -4
- data/lib/puppet/module.rb +1 -0
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/formats.rb +67 -0
- data/lib/puppet/network/http.rb +5 -2
- data/lib/puppet/network/http/api.rb +10 -6
- data/lib/puppet/network/http/api/master.rb +3 -2
- data/lib/puppet/network/http/api/master/v3.rb +2 -25
- data/lib/puppet/network/http/api/master/v3/environments.rb +2 -33
- data/lib/puppet/network/http/api/server.rb +10 -0
- data/lib/puppet/network/http/api/server/v3.rb +39 -0
- data/lib/puppet/network/http/api/server/v3/environments.rb +48 -0
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/loader/base_loader.rb +42 -32
- data/lib/puppet/pops/loader/dependency_loader.rb +2 -2
- data/lib/puppet/pops/loader/loader.rb +15 -5
- data/lib/puppet/pops/loader/module_loaders.rb +8 -8
- data/lib/puppet/pops/loader/predefined_loader.rb +4 -0
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +1 -1
- data/lib/puppet/pops/loader/static_loader.rb +4 -0
- data/lib/puppet/pops/loaders.rb +4 -4
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/parser/lexer2.rb +0 -4
- data/lib/puppet/pops/types/p_type_set_type.rb +1 -1
- data/lib/puppet/pops/validation/checker4_0.rb +0 -1
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +13 -8
- data/lib/puppet/provider/package/apt.rb +34 -2
- data/lib/puppet/provider/package/aptitude.rb +6 -0
- data/lib/puppet/provider/package/dnfmodule.rb +1 -1
- data/lib/puppet/provider/package/puppet_gem.rb +12 -1
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +62 -8
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/settings.rb +36 -30
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/monkey_patches.rb +7 -0
- data/lib/puppet/util/posix.rb +1 -1
- data/lib/puppet/util/windows/adsi.rb +46 -0
- data/lib/puppet/util/windows/principal.rb +9 -2
- data/lib/puppet/util/windows/sid.rb +4 -2
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +166 -146
- data/man/man5/puppet.conf.5 +14 -6
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- 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 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +8 -2
- 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-lookup.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 +2 -2
- data/man/man8/puppet-ssl.8 +5 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +9 -0
- data/spec/integration/application/agent_spec.rb +160 -3
- data/spec/integration/application/apply_spec.rb +19 -0
- data/spec/integration/application/plugin_spec.rb +1 -1
- data/spec/integration/defaults_spec.rb +0 -7
- data/spec/integration/http/client_spec.rb +12 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
- data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
- data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
- data/spec/integration/parser/collection_spec.rb +10 -0
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/util/windows/adsi_spec.rb +21 -1
- data/spec/integration/util/windows/principal_spec.rb +21 -0
- data/spec/integration/util/windows/registry_spec.rb +6 -10
- data/spec/spec_helper.rb +12 -5
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/facts_spec.rb +58 -7
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application/ssl_spec.rb +23 -0
- data/spec/unit/application_spec.rb +17 -9
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/environments_spec.rb +164 -88
- data/spec/unit/face/node_spec.rb +0 -11
- data/spec/unit/file_serving/configuration/parser_spec.rb +8 -1
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
- data/spec/unit/file_system_spec.rb +9 -0
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/http/factory_spec.rb +19 -0
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +20 -5
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_spec.rb +1 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/network/formats_spec.rb +41 -0
- data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -4
- data/spec/unit/network/http/api/master_spec.rb +38 -0
- data/spec/unit/network/http/api/{master → server}/v3/environments_spec.rb +2 -2
- data/spec/unit/network/http/api/{master → server}/v3_spec.rb +19 -19
- data/spec/unit/network/http/api_spec.rb +11 -11
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
- data/spec/unit/pops/types/type_parser_spec.rb +2 -1
- data/spec/unit/pops/validator/validator_spec.rb +20 -43
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/group/groupadd_spec.rb +5 -2
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +28 -23
- data/spec/unit/provider/package/aptitude_spec.rb +1 -1
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/dnfmodule_spec.rb +10 -1
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/package/puppet_gem_spec.rb +28 -0
- data/spec/unit/provider/service/systemd_spec.rb +11 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/useradd_spec.rb +70 -3
- data/spec/unit/provider_spec.rb +6 -8
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/settings_spec.rb +13 -6
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/certificate_request_spec.rb +4 -10
- data/spec/unit/ssl/ssl_provider_spec.rb +5 -2
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +1 -1
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +16 -10
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util/windows/sid_spec.rb +6 -0
- data/spec/unit/util_spec.rb +13 -6
- metadata +18 -16
- data/spec/lib/matchers/include.rb +0 -27
- data/spec/lib/matchers/include_spec.rb +0 -32
- data/spec/unit/pops/parser/parse_application_spec.rb +0 -13
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -23
- data/spec/unit/pops/parser/parse_site_spec.rb +0 -43
@@ -146,16 +146,6 @@ describe Puppet::Util::Windows::Registry do
|
|
146
146
|
utf_8_bytes = ENDASH_UTF_8 + TM_UTF_8
|
147
147
|
utf_8_str = utf_8_bytes.pack('c*').force_encoding(Encoding::UTF_8)
|
148
148
|
|
149
|
-
# this problematic Ruby codepath triggers a conversion of UTF-16LE to
|
150
|
-
# a local codepage which can totally break when that codepage has no
|
151
|
-
# conversion from the given UTF-16LE characters to local codepage
|
152
|
-
# a prime example is that IBM437 has no conversion from a Unicode en-dash
|
153
|
-
expect(Win32::Registry).not_to receive(:export_string)
|
154
|
-
|
155
|
-
# also, expect that we're using our variants of keys / values, not Rubys
|
156
|
-
expect(Win32::Registry).not_to receive(:each_key)
|
157
|
-
expect(Win32::Registry).not_to receive(:each_value)
|
158
|
-
|
159
149
|
hklm.create("#{puppet_key}\\#{subkey_name}", Win32::Registry::KEY_ALL_ACCESS | regsam) do |reg|
|
160
150
|
reg.write("#{guid}", Win32::Registry::REG_SZ, utf_16_str)
|
161
151
|
|
@@ -273,6 +263,12 @@ describe Puppet::Util::Windows::Registry do
|
|
273
263
|
type: Win32::Registry::REG_EXPAND_SZ,
|
274
264
|
value: "\0\0\0reg expand string",
|
275
265
|
expected_value: ""
|
266
|
+
},
|
267
|
+
{
|
268
|
+
name: 'REG_EXPAND_SZ_2',
|
269
|
+
type: Win32::Registry::REG_EXPAND_SZ,
|
270
|
+
value: "1\x002\x003\x004\x00\x00\x00\x90\xD8UoY".force_encoding("UTF-16LE"),
|
271
|
+
expected_value: "1234"
|
276
272
|
}
|
277
273
|
].each do |pair|
|
278
274
|
it 'reads up to the first wide null' do
|
data/spec/spec_helper.rb
CHANGED
@@ -84,10 +84,7 @@ RSpec.configure do |config|
|
|
84
84
|
config.filter_run_when_matching :focus
|
85
85
|
|
86
86
|
config.mock_with :rspec do |mocks|
|
87
|
-
|
88
|
-
# need to go through and fix those tests first before it can be enabled
|
89
|
-
# for real.
|
90
|
-
mocks.verify_partial_doubles = false
|
87
|
+
mocks.verify_partial_doubles = true
|
91
88
|
end
|
92
89
|
|
93
90
|
tmpdir = Puppet::FileSystem.expand_path(Dir.mktmpdir("rspecrun"))
|
@@ -165,10 +162,20 @@ RSpec.configure do |config|
|
|
165
162
|
PUPPET_FACTER_2_GCE_URL = %r{^http://metadata/computeMetadata/v1(beta1)?}.freeze
|
166
163
|
PUPPET_FACTER_3_GCE_URL = "http://metadata.google.internal/computeMetadata/v1/?recursive=true&alt=json".freeze
|
167
164
|
|
165
|
+
# Facter azure metadata endpoint
|
166
|
+
PUPPET_FACTER_AZ_URL = "http://169.254.169.254/metadata/instance?api-version=2020-09-01"
|
167
|
+
|
168
|
+
# Facter EC2 endpoint
|
169
|
+
PUPPET_FACTER_EC2_METADATA = 'http://169.254.169.254/latest/meta-data/'
|
170
|
+
PUPPET_FACTER_EC2_USERDATA = 'http://169.254.169.254/latest/user-data/'
|
171
|
+
|
168
172
|
config.around :each do |example|
|
169
|
-
# Ignore requests from Facter
|
173
|
+
# Ignore requests from Facter to external services
|
170
174
|
stub_request(:get, PUPPET_FACTER_2_GCE_URL)
|
171
175
|
stub_request(:get, PUPPET_FACTER_3_GCE_URL)
|
176
|
+
stub_request(:get, PUPPET_FACTER_AZ_URL)
|
177
|
+
stub_request(:get, PUPPET_FACTER_EC2_METADATA)
|
178
|
+
stub_request(:get, PUPPET_FACTER_EC2_USERDATA)
|
172
179
|
|
173
180
|
# Enable VCR if the example is tagged with `:vcr` metadata.
|
174
181
|
if example.metadata[:vcr]
|
data/spec/unit/agent_spec.rb
CHANGED
@@ -3,9 +3,13 @@ require 'puppet/agent'
|
|
3
3
|
require 'puppet/configurer'
|
4
4
|
|
5
5
|
class AgentTestClient
|
6
|
-
def
|
6
|
+
def initialize(transaction_uuid = nil, job_id = nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
def run(client_args)
|
7
10
|
# no-op
|
8
11
|
end
|
12
|
+
|
9
13
|
def stop
|
10
14
|
# no-op
|
11
15
|
end
|
@@ -49,11 +53,10 @@ describe Puppet::Agent do
|
|
49
53
|
|
50
54
|
it "should create an instance of its client class and run it when asked to run" do
|
51
55
|
client = double('client')
|
52
|
-
|
53
|
-
|
54
|
-
expect(client).to receive(:run)
|
56
|
+
allow(AgentTestClient).to receive(:new).with(nil, nil).and_return(client)
|
55
57
|
|
56
58
|
allow(@agent).to receive(:disabled?).and_return(false)
|
59
|
+
expect(client).to receive(:run)
|
57
60
|
@agent.run
|
58
61
|
end
|
59
62
|
|
@@ -90,7 +93,6 @@ describe Puppet::Agent do
|
|
90
93
|
|
91
94
|
describe "when being run" do
|
92
95
|
before do
|
93
|
-
allow(AgentTestClient).to receive(:lockfile_path).and_return("/my/lock")
|
94
96
|
allow(@agent).to receive(:disabled?).and_return(false)
|
95
97
|
end
|
96
98
|
|
@@ -186,7 +188,7 @@ describe Puppet::Agent do
|
|
186
188
|
allow(lockfile).to receive(:lock).and_return(false)
|
187
189
|
end
|
188
190
|
|
189
|
-
it "should notify that a run is already in
|
191
|
+
it "should notify that a run is already in progress" do
|
190
192
|
client = AgentTestClient.new
|
191
193
|
expect(AgentTestClient).to receive(:new).and_return(client)
|
192
194
|
expect(Puppet).to receive(:notice).with(/Run of .* already in progress; skipping .* exists/)
|
@@ -202,7 +202,6 @@ describe Puppet::Application::Agent do
|
|
202
202
|
allow(Puppet::Resource::Catalog.indirection).to receive(:terminus_class=)
|
203
203
|
allow(Puppet::Resource::Catalog.indirection).to receive(:cache_class=)
|
204
204
|
allow(Puppet::Node::Facts.indirection).to receive(:terminus_class=)
|
205
|
-
allow(Puppet).to receive(:settraps)
|
206
205
|
end
|
207
206
|
|
208
207
|
it "should not run with extra arguments" do
|
@@ -3,7 +3,7 @@ require 'puppet/application/facts'
|
|
3
3
|
|
4
4
|
describe Puppet::Application::Facts do
|
5
5
|
let(:app) { Puppet::Application[:facts] }
|
6
|
-
let(:values) { {"filesystems" => "apfs,autofs,devfs", "macaddress" => "64:52:11:22:03:
|
6
|
+
let(:values) { {"filesystems" => "apfs,autofs,devfs", "macaddress" => "64:52:11:22:03:2e"} }
|
7
7
|
|
8
8
|
before :each do
|
9
9
|
Puppet::Node::Facts.indirection.terminus_class = :memory
|
@@ -21,7 +21,7 @@ describe Puppet::Application::Facts do
|
|
21
21
|
name: whatever
|
22
22
|
values:
|
23
23
|
filesystems: apfs,autofs,devfs
|
24
|
-
macaddress: "64:52:11:22:03:
|
24
|
+
macaddress: "64:52:11:22:03:2e"
|
25
25
|
END
|
26
26
|
|
27
27
|
expect {
|
@@ -42,7 +42,7 @@ describe Puppet::Application::Facts do
|
|
42
42
|
name: #{Puppet[:certname]}
|
43
43
|
values:
|
44
44
|
filesystems: apfs,autofs,devfs
|
45
|
-
macaddress: "64:52:11:22:03:
|
45
|
+
macaddress: "64:52:11:22:03:2e"
|
46
46
|
END
|
47
47
|
|
48
48
|
expect {
|
@@ -52,7 +52,12 @@ describe Puppet::Application::Facts do
|
|
52
52
|
end
|
53
53
|
|
54
54
|
context 'when show action is called' do
|
55
|
-
let(:expected) {
|
55
|
+
let(:expected) { <<~END }
|
56
|
+
{
|
57
|
+
"filesystems": "apfs,autofs,devfs",
|
58
|
+
"macaddress": "64:52:11:22:03:2e"
|
59
|
+
}
|
60
|
+
END
|
56
61
|
|
57
62
|
before :each do
|
58
63
|
Puppet::Node::Facts.indirection.terminus_class = :facter
|
@@ -64,12 +69,58 @@ describe Puppet::Application::Facts do
|
|
64
69
|
expect {
|
65
70
|
app.run
|
66
71
|
}.to exit_with(0)
|
67
|
-
|
72
|
+
.and output(expected).to_stdout
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'displays a single fact value' do
|
76
|
+
app.command_line.args << 'filesystems' << '--value-only'
|
77
|
+
expect {
|
78
|
+
app.run
|
79
|
+
}.to exit_with(0)
|
80
|
+
.and output("apfs,autofs,devfs\n").to_stdout
|
81
|
+
end
|
82
|
+
|
83
|
+
it "warns and ignores value-only when multiple fact names are specified" do
|
84
|
+
app.command_line.args << 'filesystems' << 'macaddress' << '--value-only'
|
85
|
+
expect {
|
86
|
+
app.run
|
87
|
+
}.to exit_with(0)
|
88
|
+
.and output(expected).to_stdout
|
89
|
+
.and output(/it can only be used when querying for a single fact/).to_stderr
|
90
|
+
end
|
91
|
+
|
92
|
+
{
|
93
|
+
"type_hash" => [{'a' => 2}, "{\n \"a\": 2\n}"],
|
94
|
+
"type_array" => [[], "[\n\n]"],
|
95
|
+
"type_string" => ["str", "str"],
|
96
|
+
"type_int" => [1, "1"],
|
97
|
+
"type_float" => [1.0, "1.0"],
|
98
|
+
"type_true" => [true, "true"],
|
99
|
+
"type_false" => [false, "false"],
|
100
|
+
"type_nil" => [nil, ""],
|
101
|
+
"type_sym" => [:sym, "sym"]
|
102
|
+
}.each_pair do |name, values|
|
103
|
+
it "renders '#{name}' as '#{values.last}'" do
|
104
|
+
fact_value = values.first
|
105
|
+
fact_output = values.last
|
106
|
+
|
107
|
+
allow(Facter).to receive(:resolve).and_return({name => fact_value})
|
108
|
+
|
109
|
+
app.command_line.args << name << '--value-only'
|
110
|
+
expect {
|
111
|
+
app.run
|
112
|
+
}.to exit_with(0)
|
113
|
+
.and output("#{fact_output}\n").to_stdout
|
114
|
+
end
|
68
115
|
end
|
69
116
|
end
|
70
117
|
|
71
118
|
context 'when default action is called' do
|
72
|
-
let(:expected) {
|
119
|
+
let(:expected) { <<~END }
|
120
|
+
---
|
121
|
+
filesystems: apfs,autofs,devfs
|
122
|
+
macaddress: 64:52:11:22:03:2e
|
123
|
+
END
|
73
124
|
|
74
125
|
before :each do
|
75
126
|
Puppet::Node::Facts.indirection.terminus_class = :facter
|
@@ -81,7 +132,7 @@ describe Puppet::Application::Facts do
|
|
81
132
|
expect {
|
82
133
|
app.run
|
83
134
|
}.to exit_with(0)
|
84
|
-
|
135
|
+
.and output(expected).to_stdout
|
85
136
|
expect(app.action.name).to eq(:show)
|
86
137
|
end
|
87
138
|
end
|
@@ -42,7 +42,6 @@ describe Puppet::Application::Filebucket do
|
|
42
42
|
describe "during setup" do
|
43
43
|
before :each do
|
44
44
|
allow(Puppet::Log).to receive(:newdestination)
|
45
|
-
allow(Puppet).to receive(:settraps)
|
46
45
|
allow(Puppet::FileBucket::Dipper).to receive(:new)
|
47
46
|
allow(@filebucket.options).to receive(:[])
|
48
47
|
end
|
@@ -159,7 +158,6 @@ describe Puppet::Application::Filebucket do
|
|
159
158
|
describe "when running" do
|
160
159
|
before :each do
|
161
160
|
allow(Puppet::Log).to receive(:newdestination)
|
162
|
-
allow(Puppet).to receive(:settraps)
|
163
161
|
allow(Puppet::FileBucket::Dipper).to receive(:new)
|
164
162
|
allow(@filebucket.options).to receive(:[])
|
165
163
|
|
@@ -432,4 +432,27 @@ describe Puppet::Application::Ssl, unless: Puppet::Util::Platform.jruby? do
|
|
432
432
|
expects_command_to_pass
|
433
433
|
end
|
434
434
|
end
|
435
|
+
|
436
|
+
context 'when showing' do
|
437
|
+
before do
|
438
|
+
ssl.command_line.args << 'show'
|
439
|
+
File.write(Puppet[:hostcert], @host[:cert].to_pem)
|
440
|
+
end
|
441
|
+
|
442
|
+
it 'reports if the key is missing' do
|
443
|
+
File.delete(Puppet[:hostprivkey])
|
444
|
+
|
445
|
+
expects_command_to_fail(/The private key is missing from/)
|
446
|
+
end
|
447
|
+
|
448
|
+
it 'reports if the cert is missing' do
|
449
|
+
File.delete(Puppet[:hostcert])
|
450
|
+
|
451
|
+
expects_command_to_fail(/The client certificate is missing from/)
|
452
|
+
end
|
453
|
+
|
454
|
+
it 'prints certificate information' do
|
455
|
+
expects_command_to_pass(@host[:cert].to_text)
|
456
|
+
end
|
457
|
+
end
|
435
458
|
end
|
@@ -7,8 +7,10 @@ require 'timeout'
|
|
7
7
|
|
8
8
|
describe Puppet::Application do
|
9
9
|
before(:each) do
|
10
|
-
@
|
11
|
-
|
10
|
+
@appclass = Class.new(Puppet::Application) do
|
11
|
+
def handle_unknown(opt, arg); end
|
12
|
+
end
|
13
|
+
@app = @appclass.new
|
12
14
|
|
13
15
|
allow(@app).to receive(:name).and_return("test_app")
|
14
16
|
end
|
@@ -594,13 +596,6 @@ describe Puppet::Application do
|
|
594
596
|
end
|
595
597
|
|
596
598
|
it "should raise an error if dispatch returns no command" do
|
597
|
-
allow(@app).to receive(:get_command).and_return(nil)
|
598
|
-
expect(Puppet).to receive(:send_log).with(:err, "Could not run: No valid command or main")
|
599
|
-
expect { @app.run }.to exit_with 1
|
600
|
-
end
|
601
|
-
|
602
|
-
it "should raise an error if dispatch returns an invalid command" do
|
603
|
-
allow(@app).to receive(:get_command).and_return(:this_function_doesnt_exist)
|
604
599
|
expect(Puppet).to receive(:send_log).with(:err, "Could not run: No valid command or main")
|
605
600
|
expect { @app.run }.to exit_with 1
|
606
601
|
end
|
@@ -718,5 +713,18 @@ describe Puppet::Application do
|
|
718
713
|
|
719
714
|
@app.handle_logdest_arg(nil)
|
720
715
|
end
|
716
|
+
|
717
|
+
it "accepts multiple destinations as a comma sepparated list" do
|
718
|
+
dest1 = '/tmp/path1'
|
719
|
+
dest2 = 'console'
|
720
|
+
dest3 = '/tmp/path2'
|
721
|
+
dest_args = [dest1, dest2, dest3].join(' , ')
|
722
|
+
|
723
|
+
[dest1, dest2, dest3].each do |dest|
|
724
|
+
expect(Puppet::Util::Log).to receive(:newdestination).with(dest)
|
725
|
+
end
|
726
|
+
|
727
|
+
@app.handle_logdest_arg(dest_args)
|
728
|
+
end
|
721
729
|
end
|
722
730
|
end
|
data/spec/unit/confine_spec.rb
CHANGED
@@ -2,6 +2,12 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
require 'puppet/confine'
|
4
4
|
|
5
|
+
class Puppet::TestConfine < Puppet::Confine
|
6
|
+
def pass?(value)
|
7
|
+
false
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
5
11
|
describe Puppet::Confine do
|
6
12
|
it "should require a value" do
|
7
13
|
expect { Puppet::Confine.new }.to raise_error(ArgumentError)
|
@@ -33,7 +39,7 @@ describe Puppet::Confine do
|
|
33
39
|
|
34
40
|
describe "when testing all values" do
|
35
41
|
before do
|
36
|
-
@confine = Puppet::
|
42
|
+
@confine = Puppet::TestConfine.new(%w{a b c})
|
37
43
|
@confine.label = "foo"
|
38
44
|
end
|
39
45
|
|
@@ -64,7 +70,7 @@ describe Puppet::Confine do
|
|
64
70
|
end
|
65
71
|
|
66
72
|
describe "when testing the result of the values" do
|
67
|
-
before { @confine = Puppet::
|
73
|
+
before { @confine = Puppet::TestConfine.new(%w{a b c d}) }
|
68
74
|
|
69
75
|
it "should return an array with the result of the test for each value" do
|
70
76
|
allow(@confine).to receive(:pass?).and_return(true)
|
@@ -1,13 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'puppet/environments'
|
3
3
|
require 'puppet/file_system'
|
4
|
-
require 'matchers/include'
|
5
|
-
require 'matchers/include_in_order'
|
6
4
|
|
7
|
-
module PuppetEnvironments
|
8
5
|
describe Puppet::Environments do
|
9
|
-
include Matchers::Include
|
10
|
-
|
11
6
|
FS = Puppet::FileSystem
|
12
7
|
|
13
8
|
before(:each) do
|
@@ -49,7 +44,7 @@ describe Puppet::Environments do
|
|
49
44
|
loader_from(:filesystem => [directory_tree, global_path_1, global_path_2],
|
50
45
|
:directory => directory_tree.children.first,
|
51
46
|
:modulepath => [global_path_1_location, global_path_2_location]) do |loader|
|
52
|
-
expect(loader.list).to
|
47
|
+
expect(loader.list).to contain_exactly(
|
53
48
|
environment(:an_environment).
|
54
49
|
with_manifest("#{FS.path_string(directory_tree)}/envdir/an_environment/manifests").
|
55
50
|
with_modulepath(["#{FS.path_string(directory_tree)}/envdir/an_environment/modules",
|
@@ -87,7 +82,7 @@ describe Puppet::Environments do
|
|
87
82
|
|
88
83
|
loader_from(:filesystem => [envdir],
|
89
84
|
:directory => envdir) do |loader|
|
90
|
-
expect(loader.list).to
|
85
|
+
expect(loader.list).to contain_exactly(environment(:env1), environment(:env2))
|
91
86
|
end
|
92
87
|
end
|
93
88
|
|
@@ -406,33 +401,29 @@ config_version=$vardir/random/scripts
|
|
406
401
|
]),
|
407
402
|
])
|
408
403
|
|
409
|
-
|
410
|
-
|
411
|
-
loader = Puppet::Environments::Cached.new(dir_loader)
|
412
|
-
Puppet.override(:environments => loader) do
|
413
|
-
original_env = loader.get("env3") # force the environment.conf to be read
|
414
|
-
|
415
|
-
changed_envdir = FS::MemoryFile.a_directory(base_dir, [
|
416
|
-
FS::MemoryFile.a_directory("env3", [
|
417
|
-
FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
|
418
|
-
manifest=/manifest_changed
|
419
|
-
modulepath=/modules_changed
|
420
|
-
environment_timeout=0
|
421
|
-
EOF
|
422
|
-
]),
|
423
|
-
])
|
404
|
+
cached_loader_from(:filesystem => [original_envdir], :directory => original_envdir) do |loader|
|
405
|
+
original_env = loader.get("env3") # force the environment.conf to be read
|
424
406
|
|
425
|
-
|
426
|
-
|
407
|
+
changed_envdir = FS::MemoryFile.a_directory(base_dir, [
|
408
|
+
FS::MemoryFile.a_directory("env3", [
|
409
|
+
FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
|
410
|
+
manifest=/manifest_changed
|
411
|
+
modulepath=/modules_changed
|
412
|
+
environment_timeout=0
|
413
|
+
EOF
|
414
|
+
]),
|
415
|
+
])
|
427
416
|
|
428
|
-
|
429
|
-
|
430
|
-
with_full_modulepath([File.expand_path("/modules_orig")])
|
417
|
+
FS.overlay(changed_envdir) do
|
418
|
+
changed_env = loader.get("env3")
|
431
419
|
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
420
|
+
expect(original_env).to environment(:env3).
|
421
|
+
with_manifest(File.expand_path("/manifest_orig")).
|
422
|
+
with_full_modulepath([File.expand_path("/modules_orig")])
|
423
|
+
|
424
|
+
expect(changed_env).to environment(:env3).
|
425
|
+
with_manifest(File.expand_path("/manifest_changed")).
|
426
|
+
with_full_modulepath([File.expand_path("/modules_changed")])
|
436
427
|
end
|
437
428
|
end
|
438
429
|
end
|
@@ -558,24 +549,49 @@ config_version=$vardir/random/scripts
|
|
558
549
|
|
559
550
|
describe "cached loaders" do
|
560
551
|
it "lists environments" do
|
561
|
-
|
562
|
-
expect(
|
552
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
553
|
+
expect(loader.list).to contain_exactly(
|
563
554
|
environment(:an_environment),
|
564
555
|
environment(:another_environment),
|
565
556
|
environment(:symlinked_environment))
|
566
557
|
end
|
567
558
|
end
|
568
559
|
|
560
|
+
it "returns the same cached environment object for list and get methods" do
|
561
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
562
|
+
env = loader.list.find { |e| e.name == :an_environment }
|
563
|
+
|
564
|
+
expect(env).to equal(loader.get(:an_environment)) # same object
|
565
|
+
end
|
566
|
+
end
|
567
|
+
|
568
|
+
it "returns the same cached environment object for multiple list calls" do
|
569
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
570
|
+
expect(loader.list.first).to equal(loader.list.first) # same object
|
571
|
+
end
|
572
|
+
end
|
573
|
+
|
574
|
+
it "expires environments and returns a new environment object with the same value" do
|
575
|
+
Puppet[:environment_timeout] = "0"
|
576
|
+
|
577
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
578
|
+
a = loader.list.first
|
579
|
+
b = loader.list.first
|
580
|
+
expect(a).to eq(b) # same value
|
581
|
+
expect(a).to_not equal(b) # not same object
|
582
|
+
end
|
583
|
+
end
|
584
|
+
|
569
585
|
it "has search_paths" do
|
570
|
-
|
571
|
-
expect(
|
586
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
587
|
+
expect(loader.search_paths).to eq(["file://#{directory_tree.children.first}"])
|
572
588
|
end
|
573
589
|
end
|
574
590
|
|
575
591
|
context "#get" do
|
576
592
|
it "gets an environment" do
|
577
|
-
|
578
|
-
expect(
|
593
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
594
|
+
expect(loader.get(:an_environment)).to environment(:an_environment)
|
579
595
|
end
|
580
596
|
end
|
581
597
|
|
@@ -592,16 +608,16 @@ config_version=$vardir/random/scripts
|
|
592
608
|
end
|
593
609
|
|
594
610
|
it "returns nil if env not found" do
|
595
|
-
|
596
|
-
expect(
|
611
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
612
|
+
expect(loader.get(:doesnotexist)).to be_nil
|
597
613
|
end
|
598
614
|
end
|
599
615
|
end
|
600
616
|
|
601
617
|
context "#get!" do
|
602
618
|
it "gets an environment" do
|
603
|
-
|
604
|
-
expect(
|
619
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
620
|
+
expect(loader.get!(:an_environment)).to environment(:an_environment)
|
605
621
|
end
|
606
622
|
end
|
607
623
|
|
@@ -618,14 +634,41 @@ config_version=$vardir/random/scripts
|
|
618
634
|
end
|
619
635
|
|
620
636
|
it "raises error if environment is not found" do
|
621
|
-
|
637
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
622
638
|
expect do
|
623
|
-
|
639
|
+
loader.get!(:doesnotexist)
|
624
640
|
end.to raise_error(Puppet::Environments::EnvironmentNotFound)
|
625
641
|
end
|
626
642
|
end
|
627
643
|
end
|
628
644
|
|
645
|
+
context "#get_conf" do
|
646
|
+
it "loads environment.conf" do
|
647
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
648
|
+
expect(loader.get_conf(:an_environment)).to match_environment_conf(:an_environment).
|
649
|
+
with_env_path(directory_tree.children.first).
|
650
|
+
with_global_module_path([])
|
651
|
+
end
|
652
|
+
end
|
653
|
+
|
654
|
+
it "always reloads environment.conf" do
|
655
|
+
env = Puppet::Node::Environment.create(:cached, [])
|
656
|
+
mocked_loader = double('loader')
|
657
|
+
expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).twice
|
658
|
+
|
659
|
+
cached = Puppet::Environments::Cached.new(mocked_loader)
|
660
|
+
|
661
|
+
cached.get_conf(:cached)
|
662
|
+
cached.get_conf(:cached)
|
663
|
+
end
|
664
|
+
|
665
|
+
it "returns nil if environment is not found" do
|
666
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
667
|
+
expect(loader.get_conf(:doesnotexist)).to be_nil
|
668
|
+
end
|
669
|
+
end
|
670
|
+
end
|
671
|
+
|
629
672
|
context "expiration policies" do
|
630
673
|
let(:service) { ReplayExpirationService.new }
|
631
674
|
|
@@ -647,8 +690,6 @@ config_version=$vardir/random/scripts
|
|
647
690
|
end
|
648
691
|
|
649
692
|
it "evicts an expired environment" do
|
650
|
-
service = ReplayExpirationService.new
|
651
|
-
|
652
693
|
expect(service).to receive(:expired?).and_return(true)
|
653
694
|
|
654
695
|
with_environment_loaded(service) do |cached|
|
@@ -700,13 +741,15 @@ config_version=$vardir/random/scripts
|
|
700
741
|
expect(service.created_envs).to eq([:an_environment, :an_environment])
|
701
742
|
expect(service.evicted_envs).to eq([:an_environment])
|
702
743
|
end
|
703
|
-
end
|
704
744
|
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
745
|
+
it "evicts expired environments when listing" do
|
746
|
+
expect(service).to receive(:expired?).with(:an_environment).and_return(true)
|
747
|
+
|
748
|
+
with_environment_loaded(service) do |cached|
|
749
|
+
cached.list
|
750
|
+
end
|
751
|
+
|
752
|
+
expect(service.evicted_envs).to eq([:an_environment])
|
710
753
|
end
|
711
754
|
end
|
712
755
|
|
@@ -724,6 +767,30 @@ config_version=$vardir/random/scripts
|
|
724
767
|
|
725
768
|
context '#clear_all' do
|
726
769
|
let(:service) { ReplayExpirationService.new }
|
770
|
+
let(:envdir) { File.expand_path("envdir") }
|
771
|
+
let(:default_dir) { File.join(envdir, "cached_env", "modules") }
|
772
|
+
let(:expected_dir) { File.join(envdir, "cached_env", "site") }
|
773
|
+
|
774
|
+
let(:base_dir) do
|
775
|
+
FS::MemoryFile.a_directory(envdir, [
|
776
|
+
FS::MemoryFile.a_directory("cached_env", [
|
777
|
+
FS::MemoryFile.a_missing_file("environment.conf")
|
778
|
+
])
|
779
|
+
])
|
780
|
+
end
|
781
|
+
|
782
|
+
let(:updated_dir) do
|
783
|
+
FS::MemoryFile.a_directory(envdir, [
|
784
|
+
FS::MemoryFile.a_directory("cached_env", [
|
785
|
+
FS::MemoryFile.a_directory("site"),
|
786
|
+
FS::MemoryFile.a_missing_directory("modules"),
|
787
|
+
FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
|
788
|
+
modulepath=site
|
789
|
+
environment_timeout=unlimited
|
790
|
+
EOF
|
791
|
+
])
|
792
|
+
])
|
793
|
+
end
|
727
794
|
|
728
795
|
it 'evicts all environments' do
|
729
796
|
with_environment_loaded(service) do |cached|
|
@@ -735,48 +802,44 @@ config_version=$vardir/random/scripts
|
|
735
802
|
end
|
736
803
|
end
|
737
804
|
|
738
|
-
it '
|
739
|
-
base_dir
|
740
|
-
|
741
|
-
FS::MemoryFile.a_directory("env3", [
|
742
|
-
FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
|
743
|
-
manifest=/manifest_orig
|
744
|
-
modulepath=/modules_orig
|
745
|
-
environment_timeout=60
|
746
|
-
EOF
|
747
|
-
]),
|
748
|
-
])
|
805
|
+
it "recomputes modulepath if 'get' is called before 'clear_all'" do
|
806
|
+
cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
|
807
|
+
loader.get(:cached_env)
|
749
808
|
|
750
|
-
|
751
|
-
dir_loader = Puppet::Environments::Directories.new(original_envdir, [])
|
752
|
-
loader = Puppet::Environments::Cached.new(dir_loader)
|
753
|
-
Puppet.override(:environments => loader) do
|
754
|
-
original_env = loader.get("env3") # force the environment.conf to be read
|
755
|
-
|
756
|
-
changed_envdir = FS::MemoryFile.a_directory(base_dir, [
|
757
|
-
FS::MemoryFile.a_directory("env3", [
|
758
|
-
FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
|
759
|
-
manifest=/manifest_changed
|
760
|
-
modulepath=/modules_changed
|
761
|
-
environment_timeout=60
|
762
|
-
EOF
|
763
|
-
]),
|
764
|
-
])
|
809
|
+
expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
|
765
810
|
|
766
|
-
|
811
|
+
FS.overlay(updated_dir) do
|
767
812
|
loader.clear_all
|
768
813
|
|
769
|
-
|
770
|
-
|
814
|
+
expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
|
815
|
+
end
|
816
|
+
end
|
817
|
+
end
|
818
|
+
|
819
|
+
it "recomputes modulepath if 'list' is called before 'clear_all'" do
|
820
|
+
cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
|
821
|
+
loader.list
|
771
822
|
|
772
|
-
|
773
|
-
with_manifest(File.expand_path("/manifest_orig")).
|
774
|
-
with_full_modulepath([File.expand_path("/modules_orig")])
|
823
|
+
expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
|
775
824
|
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
825
|
+
FS.overlay(updated_dir) do
|
826
|
+
loader.clear_all
|
827
|
+
|
828
|
+
expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
|
829
|
+
end
|
830
|
+
end
|
831
|
+
end
|
832
|
+
|
833
|
+
it "recomputes modulepath if 'get_conf' is called before 'clear_all'" do
|
834
|
+
cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
|
835
|
+
loader.get_conf(:cached_env)
|
836
|
+
|
837
|
+
expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
|
838
|
+
|
839
|
+
FS.overlay(updated_dir) do
|
840
|
+
loader.clear_all
|
841
|
+
|
842
|
+
expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
|
780
843
|
end
|
781
844
|
end
|
782
845
|
end
|
@@ -862,6 +925,20 @@ config_version=$vardir/random/scripts
|
|
862
925
|
end
|
863
926
|
end
|
864
927
|
|
928
|
+
def cached_loader_from(options, &block)
|
929
|
+
FS.overlay(*options[:filesystem]) do
|
930
|
+
environments = Puppet::Environments::Cached.new(
|
931
|
+
Puppet::Environments::Directories.new(
|
932
|
+
options[:directory],
|
933
|
+
options[:modulepath] || []
|
934
|
+
)
|
935
|
+
)
|
936
|
+
Puppet.override(:environments => environments) do
|
937
|
+
yield environments
|
938
|
+
end
|
939
|
+
end
|
940
|
+
end
|
941
|
+
|
865
942
|
def loader_from(options, &block)
|
866
943
|
FS.overlay(*options[:filesystem]) do
|
867
944
|
environments = Puppet::Environments::Directories.new(
|
@@ -914,4 +991,3 @@ config_version=$vardir/random/scripts
|
|
914
991
|
end
|
915
992
|
end
|
916
993
|
end
|
917
|
-
end
|