puppet 6.21.0-x64-mingw32 → 6.24.0-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/CONTRIBUTING.md +5 -5
- data/Gemfile +1 -1
- data/Gemfile.lock +29 -23
- data/README.md +4 -4
- data/ext/osx/puppet.plist +2 -0
- data/ext/project_data.yaml +3 -2
- data/lib/puppet.rb +3 -3
- data/lib/puppet/application/agent.rb +12 -5
- data/lib/puppet/application/apply.rb +2 -1
- data/lib/puppet/application/device.rb +2 -1
- data/lib/puppet/application/filebucket.rb +1 -0
- data/lib/puppet/application/resource.rb +17 -3
- data/lib/puppet/application/script.rb +2 -1
- data/lib/puppet/application/ssl.rb +12 -0
- data/lib/puppet/configurer/downloader.rb +2 -1
- data/lib/puppet/defaults.rb +27 -5
- data/lib/puppet/environments.rb +26 -1
- data/lib/puppet/face/facts.rb +128 -30
- data/lib/puppet/face/help/action.erb +1 -0
- data/lib/puppet/face/help/face.erb +1 -0
- data/lib/puppet/face/node/clean.rb +11 -0
- data/lib/puppet/file_serving/fileset.rb +14 -2
- data/lib/puppet/file_system/file_impl.rb +1 -1
- data/lib/puppet/file_system/memory_file.rb +8 -1
- data/lib/puppet/file_system/windows.rb +4 -2
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/functions/all.rb +1 -1
- data/lib/puppet/functions/camelcase.rb +1 -1
- data/lib/puppet/functions/capitalize.rb +2 -2
- data/lib/puppet/functions/downcase.rb +2 -2
- data/lib/puppet/functions/empty.rb +8 -0
- data/lib/puppet/functions/get.rb +5 -5
- data/lib/puppet/functions/group_by.rb +13 -5
- data/lib/puppet/functions/lest.rb +1 -1
- data/lib/puppet/functions/new.rb +100 -100
- data/lib/puppet/functions/partition.rb +12 -4
- data/lib/puppet/functions/require.rb +5 -5
- data/lib/puppet/functions/sort.rb +3 -3
- data/lib/puppet/functions/strftime.rb +1 -0
- data/lib/puppet/functions/tree_each.rb +7 -9
- data/lib/puppet/functions/type.rb +4 -4
- data/lib/puppet/functions/unwrap.rb +17 -2
- data/lib/puppet/functions/upcase.rb +2 -2
- data/lib/puppet/http/resolver/server_list.rb +15 -4
- data/lib/puppet/http/service/compiler.rb +69 -0
- data/lib/puppet/http/service/file_server.rb +2 -1
- data/lib/puppet/indirector/catalog/compiler.rb +1 -0
- data/lib/puppet/indirector/facts/facter.rb +24 -3
- data/lib/puppet/indirector/file_metadata/rest.rb +1 -0
- data/lib/puppet/indirector/resource/ral.rb +6 -1
- data/lib/puppet/interface/documentation.rb +1 -0
- data/lib/puppet/module_tool/applications/installer.rb +4 -0
- data/lib/puppet/module_tool/errors/shared.rb +17 -0
- data/lib/puppet/network/formats.rb +67 -0
- data/lib/puppet/network/http/factory.rb +4 -0
- data/lib/puppet/parser/functions/fqdn_rand.rb +14 -6
- data/lib/puppet/pops/types/p_sem_ver_type.rb +8 -2
- data/lib/puppet/pops/types/p_sensitive_type.rb +10 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
- data/lib/puppet/provider/exec/posix.rb +16 -4
- data/lib/puppet/provider/package/dnfmodule.rb +1 -1
- data/lib/puppet/provider/package/nim.rb +11 -6
- data/lib/puppet/provider/package/pip.rb +15 -3
- data/lib/puppet/provider/parsedfile.rb +3 -0
- data/lib/puppet/provider/service/systemd.rb +14 -4
- data/lib/puppet/provider/service/windows.rb +38 -0
- data/lib/puppet/provider/user/directoryservice.rb +25 -12
- data/lib/puppet/provider/user/useradd.rb +9 -2
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/settings.rb +30 -7
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
- data/lib/puppet/type/exec.rb +16 -3
- data/lib/puppet/type/file.rb +19 -1
- data/lib/puppet/type/file/mode.rb +6 -0
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/service.rb +18 -38
- data/lib/puppet/type/tidy.rb +22 -3
- data/lib/puppet/type/user.rb +38 -20
- data/lib/puppet/util/fact_dif.rb +36 -17
- data/lib/puppet/util/monkey_patches.rb +7 -0
- data/lib/puppet/util/selinux.rb +30 -4
- data/lib/puppet/util/symbolic_file_mode.rb +29 -17
- data/lib/puppet/util/windows/adsi.rb +46 -0
- data/lib/puppet/util/windows/api_types.rb +1 -1
- data/lib/puppet/util/windows/principal.rb +9 -2
- data/lib/puppet/util/windows/sid.rb +6 -2
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +360 -280
- data/man/man5/puppet.conf.5 +279 -251
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +9 -9
- 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 +65 -7
- 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 +7 -7
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +5 -5
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +5 -5
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +5 -1
- data/man/man8/puppet-status.8 +4 -4
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/ssl/127.0.0.1-key.pem +107 -57
- data/spec/fixtures/ssl/127.0.0.1.pem +52 -31
- data/spec/fixtures/ssl/bad-basic-constraints.pem +57 -35
- data/spec/fixtures/ssl/bad-int-basic-constraints.pem +57 -35
- data/spec/fixtures/ssl/ca.pem +57 -35
- data/spec/fixtures/ssl/crl.pem +28 -18
- data/spec/fixtures/ssl/ec-key.pem +11 -11
- data/spec/fixtures/ssl/ec.pem +33 -24
- data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
- data/spec/fixtures/ssl/encrypted-key.pem +108 -58
- data/spec/fixtures/ssl/intermediate-agent-crl.pem +28 -19
- data/spec/fixtures/ssl/intermediate-agent.pem +57 -36
- data/spec/fixtures/ssl/intermediate-crl.pem +31 -21
- data/spec/fixtures/ssl/intermediate.pem +57 -36
- data/spec/fixtures/ssl/oid-key.pem +117 -0
- data/spec/fixtures/ssl/oid.pem +69 -0
- data/spec/fixtures/ssl/pluto-key.pem +107 -57
- data/spec/fixtures/ssl/pluto.pem +52 -30
- data/spec/fixtures/ssl/request-key.pem +107 -57
- data/spec/fixtures/ssl/request.pem +47 -26
- data/spec/fixtures/ssl/revoked-key.pem +107 -57
- data/spec/fixtures/ssl/revoked.pem +52 -30
- data/spec/fixtures/ssl/signed-key.pem +107 -57
- data/spec/fixtures/ssl/signed.pem +52 -30
- data/spec/fixtures/ssl/tampered-cert.pem +52 -30
- data/spec/fixtures/ssl/tampered-csr.pem +47 -26
- data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +107 -57
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +50 -29
- data/spec/fixtures/ssl/unknown-ca-key.pem +107 -57
- data/spec/fixtures/ssl/unknown-ca.pem +55 -33
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +9 -0
- data/spec/integration/application/filebucket_spec.rb +11 -0
- data/spec/integration/application/module_spec.rb +21 -0
- data/spec/integration/application/plugin_spec.rb +1 -1
- data/spec/integration/application/resource_spec.rb +64 -0
- data/spec/integration/application/ssl_spec.rb +20 -0
- data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
- data/spec/integration/http/client_spec.rb +12 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
- data/spec/integration/indirector/facts/facter_spec.rb +90 -36
- data/spec/integration/type/exec_spec.rb +70 -45
- data/spec/integration/util/windows/adsi_spec.rb +18 -0
- data/spec/integration/util/windows/principal_spec.rb +21 -0
- data/spec/integration/util/windows/registry_spec.rb +6 -0
- data/spec/lib/puppet/test_ca.rb +7 -2
- data/spec/lib/puppet_spec/settings.rb +1 -0
- data/spec/spec_helper.rb +11 -1
- data/spec/unit/application/agent_spec.rb +7 -2
- data/spec/unit/application/facts_spec.rb +482 -3
- data/spec/unit/application/ssl_spec.rb +23 -0
- data/spec/unit/configurer/downloader_spec.rb +6 -0
- data/spec/unit/configurer_spec.rb +23 -0
- data/spec/unit/defaults_spec.rb +16 -0
- data/spec/unit/environments_spec.rb +199 -88
- data/spec/unit/face/facts_spec.rb +4 -0
- data/spec/unit/file_serving/fileset_spec.rb +60 -0
- data/spec/unit/file_system_spec.rb +15 -0
- data/spec/unit/functions/assert_type_spec.rb +1 -1
- data/spec/unit/functions/empty_spec.rb +10 -0
- data/spec/unit/functions/unwrap_spec.rb +8 -0
- data/spec/unit/functions4_spec.rb +2 -2
- data/spec/unit/gettext/config_spec.rb +12 -0
- data/spec/unit/http/service/compiler_spec.rb +123 -0
- data/spec/unit/indirector/catalog/compiler_spec.rb +14 -10
- data/spec/unit/indirector/facts/facter_spec.rb +95 -0
- data/spec/unit/indirector/resource/ral_spec.rb +40 -75
- data/spec/unit/module_tool/applications/installer_spec.rb +12 -0
- data/spec/unit/network/formats_spec.rb +41 -0
- data/spec/unit/network/http/factory_spec.rb +19 -0
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +15 -1
- data/spec/unit/parser/templatewrapper_spec.rb +12 -2
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +18 -0
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +18 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +10 -1
- data/spec/unit/provider/package/nim_spec.rb +42 -0
- data/spec/unit/provider/package/pip_spec.rb +37 -0
- data/spec/unit/provider/parsedfile_spec.rb +10 -0
- data/spec/unit/provider/service/init_spec.rb +1 -0
- data/spec/unit/provider/service/openwrt_spec.rb +3 -1
- data/spec/unit/provider/service/systemd_spec.rb +53 -8
- data/spec/unit/provider/service/windows_spec.rb +202 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +67 -35
- data/spec/unit/provider/user/useradd_spec.rb +21 -6
- data/spec/unit/resource/catalog_spec.rb +1 -1
- data/spec/unit/settings_spec.rb +97 -56
- data/spec/unit/ssl/state_machine_spec.rb +19 -5
- data/spec/unit/transaction/additional_resource_generator_spec.rb +0 -2
- data/spec/unit/transaction_spec.rb +18 -20
- data/spec/unit/type/exec_spec.rb +76 -29
- data/spec/unit/type/file/selinux_spec.rb +3 -3
- data/spec/unit/type/file/source_spec.rb +4 -4
- data/spec/unit/type/service_spec.rb +59 -188
- data/spec/unit/type/tidy_spec.rb +24 -7
- data/spec/unit/type/user_spec.rb +45 -0
- data/spec/unit/util/selinux_spec.rb +87 -16
- data/spec/unit/util/windows/sid_spec.rb +41 -0
- data/tasks/generate_cert_fixtures.rake +12 -3
- metadata +24 -9
- data/spec/lib/matchers/include.rb +0 -27
- data/spec/lib/matchers/include_spec.rb +0 -32
@@ -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
|
@@ -81,6 +81,12 @@ describe Puppet::Configurer::Downloader do
|
|
81
81
|
expect(file[:source_permissions]).to eq(:ignore)
|
82
82
|
end
|
83
83
|
|
84
|
+
it "should ignore the max file limit" do
|
85
|
+
file = generate_file_resource
|
86
|
+
|
87
|
+
expect(file[:max_files]).to eq(-1)
|
88
|
+
end
|
89
|
+
|
84
90
|
describe "on POSIX", :if => Puppet.features.posix? do
|
85
91
|
it "should allow source_permissions to be overridden" do
|
86
92
|
file = generate_file_resource(:source_permissions => :use)
|
@@ -1072,6 +1072,29 @@ describe Puppet::Configurer do
|
|
1072
1072
|
}.to raise_error(Puppet::Error, /Could not select a functional puppet server from server_list: 'myserver:123,someotherservername'/)
|
1073
1073
|
end
|
1074
1074
|
|
1075
|
+
it "should warn when servers in 'server_list' are unreachable" do
|
1076
|
+
Puppet.settings[:server_list] = "mybadserver1:123,mybadserver2:123,mygoodserver"
|
1077
|
+
Puppet[:usecacheonfailure] = false
|
1078
|
+
|
1079
|
+
stub_request(:get, 'https://mybadserver1:123/status/v1/simple/master').and_raise(Puppet::HTTP::HTTPError)
|
1080
|
+
stub_request(:get, 'https://mybadserver2:123/status/v1/simple/master').and_raise(Puppet::HTTP::HTTPError)
|
1081
|
+
stub_request(:get, 'https://mygoodserver:8140/status/v1/simple/master').to_return(status: 200)
|
1082
|
+
|
1083
|
+
expect(Puppet).to receive(:warning).with(/^Unable to connect to server from server_list setting:.*Trying with next server from server_list.$/).twice
|
1084
|
+
configurer.run
|
1085
|
+
end
|
1086
|
+
|
1087
|
+
it "should warn when servers in 'server_list' respond with error" do
|
1088
|
+
Puppet.settings[:server_list] = "mybadserver:123,someotherservername"
|
1089
|
+
Puppet[:usecacheonfailure] = false
|
1090
|
+
|
1091
|
+
stub_request(:get, 'https://mybadserver:123/status/v1/simple/master').to_return(status: 400)
|
1092
|
+
stub_request(:get, 'https://someotherservername:8140/status/v1/simple/master').to_return(status: 200)
|
1093
|
+
|
1094
|
+
expect(Puppet).to receive(:warning).with(/^Puppet server mybadserver:123 is unavailable: 400 Trying with next server from server_list.$/)
|
1095
|
+
configurer.run
|
1096
|
+
end
|
1097
|
+
|
1075
1098
|
it "should not error when usecacheonfailure is true and no servers in 'server_list' are reachable" do
|
1076
1099
|
Puppet.settings[:server_list] = "myserver:123,someotherservername"
|
1077
1100
|
Puppet[:usecacheonfailure] = true
|
data/spec/unit/defaults_spec.rb
CHANGED
@@ -234,4 +234,20 @@ describe "Defaults" do
|
|
234
234
|
Puppet.initialize_settings
|
235
235
|
end
|
236
236
|
end
|
237
|
+
|
238
|
+
describe "the default cadir", :unless => Puppet::Util::Platform.windows? do
|
239
|
+
it 'defaults to inside the ssldir if not migrated' do
|
240
|
+
expect(File).to receive(:exist?).with('/etc/puppetlabs/puppetserver/ca/ca_crt.pem').and_return(false)
|
241
|
+
expect(Puppet.default_cadir).to eq("#{Puppet[:ssldir]}/ca")
|
242
|
+
end
|
243
|
+
|
244
|
+
it 'returns the new location if there is CA content there' do
|
245
|
+
expect(File).to receive(:exist?).with('/etc/puppetlabs/puppetserver/ca/ca_crt.pem').and_return(true)
|
246
|
+
expect(Puppet.default_cadir).to eq('/etc/puppetlabs/puppetserver/ca')
|
247
|
+
end
|
248
|
+
|
249
|
+
it 'returns an empty string for Windows platforms', :if => Puppet::Util::Platform.windows? do
|
250
|
+
expect(Puppet.default_cadir).to eq("")
|
251
|
+
end
|
252
|
+
end
|
237
253
|
end
|
@@ -1,15 +1,18 @@
|
|
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
|
|
8
|
+
module FsRemove
|
9
|
+
def remove
|
10
|
+
@properties[:directory?] = false
|
11
|
+
@properties[:exist?] = false
|
12
|
+
@properties[:executable?] = false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
13
16
|
before(:each) do
|
14
17
|
Puppet.settings.initialize_global_settings
|
15
18
|
Puppet[:environment_timeout] = "unlimited"
|
@@ -49,7 +52,7 @@ describe Puppet::Environments do
|
|
49
52
|
loader_from(:filesystem => [directory_tree, global_path_1, global_path_2],
|
50
53
|
:directory => directory_tree.children.first,
|
51
54
|
:modulepath => [global_path_1_location, global_path_2_location]) do |loader|
|
52
|
-
expect(loader.list).to
|
55
|
+
expect(loader.list).to contain_exactly(
|
53
56
|
environment(:an_environment).
|
54
57
|
with_manifest("#{FS.path_string(directory_tree)}/envdir/an_environment/manifests").
|
55
58
|
with_modulepath(["#{FS.path_string(directory_tree)}/envdir/an_environment/modules",
|
@@ -87,7 +90,7 @@ describe Puppet::Environments do
|
|
87
90
|
|
88
91
|
loader_from(:filesystem => [envdir],
|
89
92
|
:directory => envdir) do |loader|
|
90
|
-
expect(loader.list).to
|
93
|
+
expect(loader.list).to contain_exactly(environment(:env1), environment(:env2))
|
91
94
|
end
|
92
95
|
end
|
93
96
|
|
@@ -406,33 +409,29 @@ config_version=$vardir/random/scripts
|
|
406
409
|
]),
|
407
410
|
])
|
408
411
|
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
EOF
|
422
|
-
]),
|
423
|
-
])
|
412
|
+
cached_loader_from(:filesystem => [original_envdir], :directory => original_envdir) do |loader|
|
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
|
+
])
|
424
424
|
|
425
|
-
|
426
|
-
|
425
|
+
FS.overlay(changed_envdir) do
|
426
|
+
changed_env = loader.get("env3")
|
427
427
|
|
428
|
-
|
429
|
-
|
430
|
-
|
428
|
+
expect(original_env).to environment(:env3).
|
429
|
+
with_manifest(File.expand_path("/manifest_orig")).
|
430
|
+
with_full_modulepath([File.expand_path("/modules_orig")])
|
431
431
|
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
end
|
432
|
+
expect(changed_env).to environment(:env3).
|
433
|
+
with_manifest(File.expand_path("/manifest_changed")).
|
434
|
+
with_full_modulepath([File.expand_path("/modules_changed")])
|
436
435
|
end
|
437
436
|
end
|
438
437
|
end
|
@@ -558,24 +557,49 @@ config_version=$vardir/random/scripts
|
|
558
557
|
|
559
558
|
describe "cached loaders" do
|
560
559
|
it "lists environments" do
|
561
|
-
|
562
|
-
expect(
|
560
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
561
|
+
expect(loader.list).to contain_exactly(
|
563
562
|
environment(:an_environment),
|
564
563
|
environment(:another_environment),
|
565
564
|
environment(:symlinked_environment))
|
566
565
|
end
|
567
566
|
end
|
568
567
|
|
568
|
+
it "returns the same cached environment object for list and get methods" do
|
569
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
570
|
+
env = loader.list.find { |e| e.name == :an_environment }
|
571
|
+
|
572
|
+
expect(env).to equal(loader.get(:an_environment)) # same object
|
573
|
+
end
|
574
|
+
end
|
575
|
+
|
576
|
+
it "returns the same cached environment object for multiple list calls" do
|
577
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
578
|
+
expect(loader.list.first).to equal(loader.list.first) # same object
|
579
|
+
end
|
580
|
+
end
|
581
|
+
|
582
|
+
it "expires environments and returns a new environment object with the same value" do
|
583
|
+
Puppet[:environment_timeout] = "0"
|
584
|
+
|
585
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
586
|
+
a = loader.list.first
|
587
|
+
b = loader.list.first
|
588
|
+
expect(a).to eq(b) # same value
|
589
|
+
expect(a).to_not equal(b) # not same object
|
590
|
+
end
|
591
|
+
end
|
592
|
+
|
569
593
|
it "has search_paths" do
|
570
|
-
|
571
|
-
expect(
|
594
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
595
|
+
expect(loader.search_paths).to eq(["file://#{directory_tree.children.first}"])
|
572
596
|
end
|
573
597
|
end
|
574
598
|
|
575
599
|
context "#get" do
|
576
600
|
it "gets an environment" do
|
577
|
-
|
578
|
-
expect(
|
601
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
602
|
+
expect(loader.get(:an_environment)).to environment(:an_environment)
|
579
603
|
end
|
580
604
|
end
|
581
605
|
|
@@ -591,17 +615,44 @@ config_version=$vardir/random/scripts
|
|
591
615
|
cached.get(:cached)
|
592
616
|
end
|
593
617
|
|
618
|
+
it "does not list deleted environments" do
|
619
|
+
env3 = FS::MemoryFile.a_directory("env3", [
|
620
|
+
FS::MemoryFile.a_regular_file_containing("environment.conf", '')
|
621
|
+
])
|
622
|
+
|
623
|
+
envdir = FS::MemoryFile.a_directory(File.expand_path("envdir"), [
|
624
|
+
FS::MemoryFile.a_directory("env1", [
|
625
|
+
FS::MemoryFile.a_regular_file_containing("environment.conf", '')
|
626
|
+
]),
|
627
|
+
FS::MemoryFile.a_directory("env2", [
|
628
|
+
FS::MemoryFile.a_regular_file_containing("environment.conf", '')
|
629
|
+
]),
|
630
|
+
env3
|
631
|
+
])
|
632
|
+
|
633
|
+
loader_from(:filesystem => [envdir], :directory => envdir) do |loader|
|
634
|
+
cached = Puppet::Environments::Cached.new(loader)
|
635
|
+
cached.get(:env1)
|
636
|
+
cached.get(:env2)
|
637
|
+
cached.get(:env3)
|
638
|
+
env3.extend(FsRemove).remove
|
639
|
+
|
640
|
+
expect(cached.list).to contain_exactly(environment(:env1),environment(:env2))
|
641
|
+
expect(cached.get(:env3)).to be_nil
|
642
|
+
end
|
643
|
+
end
|
644
|
+
|
594
645
|
it "returns nil if env not found" do
|
595
|
-
|
596
|
-
expect(
|
646
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
647
|
+
expect(loader.get(:doesnotexist)).to be_nil
|
597
648
|
end
|
598
649
|
end
|
599
650
|
end
|
600
651
|
|
601
652
|
context "#get!" do
|
602
653
|
it "gets an environment" do
|
603
|
-
|
604
|
-
expect(
|
654
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
655
|
+
expect(loader.get!(:an_environment)).to environment(:an_environment)
|
605
656
|
end
|
606
657
|
end
|
607
658
|
|
@@ -618,14 +669,41 @@ config_version=$vardir/random/scripts
|
|
618
669
|
end
|
619
670
|
|
620
671
|
it "raises error if environment is not found" do
|
621
|
-
|
672
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
622
673
|
expect do
|
623
|
-
|
674
|
+
loader.get!(:doesnotexist)
|
624
675
|
end.to raise_error(Puppet::Environments::EnvironmentNotFound)
|
625
676
|
end
|
626
677
|
end
|
627
678
|
end
|
628
679
|
|
680
|
+
context "#get_conf" do
|
681
|
+
it "loads environment.conf" do
|
682
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
683
|
+
expect(loader.get_conf(:an_environment)).to match_environment_conf(:an_environment).
|
684
|
+
with_env_path(directory_tree.children.first).
|
685
|
+
with_global_module_path([])
|
686
|
+
end
|
687
|
+
end
|
688
|
+
|
689
|
+
it "always reloads environment.conf" do
|
690
|
+
env = Puppet::Node::Environment.create(:cached, [])
|
691
|
+
mocked_loader = double('loader')
|
692
|
+
expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).twice
|
693
|
+
|
694
|
+
cached = Puppet::Environments::Cached.new(mocked_loader)
|
695
|
+
|
696
|
+
cached.get_conf(:cached)
|
697
|
+
cached.get_conf(:cached)
|
698
|
+
end
|
699
|
+
|
700
|
+
it "returns nil if environment is not found" do
|
701
|
+
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
702
|
+
expect(loader.get_conf(:doesnotexist)).to be_nil
|
703
|
+
end
|
704
|
+
end
|
705
|
+
end
|
706
|
+
|
629
707
|
context "expiration policies" do
|
630
708
|
let(:service) { ReplayExpirationService.new }
|
631
709
|
|
@@ -647,8 +725,6 @@ config_version=$vardir/random/scripts
|
|
647
725
|
end
|
648
726
|
|
649
727
|
it "evicts an expired environment" do
|
650
|
-
service = ReplayExpirationService.new
|
651
|
-
|
652
728
|
expect(service).to receive(:expired?).and_return(true)
|
653
729
|
|
654
730
|
with_environment_loaded(service) do |cached|
|
@@ -703,13 +779,15 @@ config_version=$vardir/random/scripts
|
|
703
779
|
expect(service.created_envs).to eq([:an_environment, :an_environment])
|
704
780
|
expect(service.evicted_envs).to eq([:an_environment])
|
705
781
|
end
|
706
|
-
end
|
707
782
|
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
783
|
+
it "evicts expired environments when listing" do
|
784
|
+
expect(service).to receive(:expired?).with(:an_environment).and_return(true)
|
785
|
+
|
786
|
+
with_environment_loaded(service) do |cached|
|
787
|
+
cached.list
|
788
|
+
end
|
789
|
+
|
790
|
+
expect(service.evicted_envs).to eq([:an_environment])
|
713
791
|
end
|
714
792
|
end
|
715
793
|
|
@@ -727,6 +805,30 @@ config_version=$vardir/random/scripts
|
|
727
805
|
|
728
806
|
context '#clear_all' do
|
729
807
|
let(:service) { ReplayExpirationService.new }
|
808
|
+
let(:envdir) { File.expand_path("envdir") }
|
809
|
+
let(:default_dir) { File.join(envdir, "cached_env", "modules") }
|
810
|
+
let(:expected_dir) { File.join(envdir, "cached_env", "site") }
|
811
|
+
|
812
|
+
let(:base_dir) do
|
813
|
+
FS::MemoryFile.a_directory(envdir, [
|
814
|
+
FS::MemoryFile.a_directory("cached_env", [
|
815
|
+
FS::MemoryFile.a_missing_file("environment.conf")
|
816
|
+
])
|
817
|
+
])
|
818
|
+
end
|
819
|
+
|
820
|
+
let(:updated_dir) do
|
821
|
+
FS::MemoryFile.a_directory(envdir, [
|
822
|
+
FS::MemoryFile.a_directory("cached_env", [
|
823
|
+
FS::MemoryFile.a_directory("site"),
|
824
|
+
FS::MemoryFile.a_missing_directory("modules"),
|
825
|
+
FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
|
826
|
+
modulepath=site
|
827
|
+
environment_timeout=unlimited
|
828
|
+
EOF
|
829
|
+
])
|
830
|
+
])
|
831
|
+
end
|
730
832
|
|
731
833
|
it 'evicts all environments' do
|
732
834
|
with_environment_loaded(service) do |cached|
|
@@ -738,48 +840,44 @@ config_version=$vardir/random/scripts
|
|
738
840
|
end
|
739
841
|
end
|
740
842
|
|
741
|
-
it '
|
742
|
-
base_dir
|
743
|
-
|
744
|
-
FS::MemoryFile.a_directory("env3", [
|
745
|
-
FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
|
746
|
-
manifest=/manifest_orig
|
747
|
-
modulepath=/modules_orig
|
748
|
-
environment_timeout=60
|
749
|
-
EOF
|
750
|
-
]),
|
751
|
-
])
|
843
|
+
it "recomputes modulepath if 'get' is called before 'clear_all'" do
|
844
|
+
cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
|
845
|
+
loader.get(:cached_env)
|
752
846
|
|
753
|
-
|
754
|
-
dir_loader = Puppet::Environments::Directories.new(original_envdir, [])
|
755
|
-
loader = Puppet::Environments::Cached.new(dir_loader)
|
756
|
-
Puppet.override(:environments => loader) do
|
757
|
-
original_env = loader.get("env3") # force the environment.conf to be read
|
758
|
-
|
759
|
-
changed_envdir = FS::MemoryFile.a_directory(base_dir, [
|
760
|
-
FS::MemoryFile.a_directory("env3", [
|
761
|
-
FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
|
762
|
-
manifest=/manifest_changed
|
763
|
-
modulepath=/modules_changed
|
764
|
-
environment_timeout=60
|
765
|
-
EOF
|
766
|
-
]),
|
767
|
-
])
|
847
|
+
expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
|
768
848
|
|
769
|
-
|
849
|
+
FS.overlay(updated_dir) do
|
770
850
|
loader.clear_all
|
771
851
|
|
772
|
-
|
773
|
-
|
852
|
+
expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
|
853
|
+
end
|
854
|
+
end
|
855
|
+
end
|
774
856
|
|
775
|
-
|
776
|
-
|
777
|
-
|
857
|
+
it "recomputes modulepath if 'list' is called before 'clear_all'" do
|
858
|
+
cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
|
859
|
+
loader.list
|
860
|
+
|
861
|
+
expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
|
862
|
+
|
863
|
+
FS.overlay(updated_dir) do
|
864
|
+
loader.clear_all
|
778
865
|
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
866
|
+
expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
|
867
|
+
end
|
868
|
+
end
|
869
|
+
end
|
870
|
+
|
871
|
+
it "recomputes modulepath if 'get_conf' is called before 'clear_all'" do
|
872
|
+
cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
|
873
|
+
loader.get_conf(:cached_env)
|
874
|
+
|
875
|
+
expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
|
876
|
+
|
877
|
+
FS.overlay(updated_dir) do
|
878
|
+
loader.clear_all
|
879
|
+
|
880
|
+
expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
|
783
881
|
end
|
784
882
|
end
|
785
883
|
end
|
@@ -865,6 +963,20 @@ config_version=$vardir/random/scripts
|
|
865
963
|
end
|
866
964
|
end
|
867
965
|
|
966
|
+
def cached_loader_from(options, &block)
|
967
|
+
FS.overlay(*options[:filesystem]) do
|
968
|
+
environments = Puppet::Environments::Cached.new(
|
969
|
+
Puppet::Environments::Directories.new(
|
970
|
+
options[:directory],
|
971
|
+
options[:modulepath] || []
|
972
|
+
)
|
973
|
+
)
|
974
|
+
Puppet.override(:environments => environments) do
|
975
|
+
yield environments
|
976
|
+
end
|
977
|
+
end
|
978
|
+
end
|
979
|
+
|
868
980
|
def loader_from(options, &block)
|
869
981
|
FS.overlay(*options[:filesystem]) do
|
870
982
|
environments = Puppet::Environments::Directories.new(
|
@@ -917,4 +1029,3 @@ config_version=$vardir/random/scripts
|
|
917
1029
|
end
|
918
1030
|
end
|
919
1031
|
end
|
920
|
-
end
|