puppet 6.18.0-x86-mingw32 → 6.21.1-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/CODEOWNERS +2 -16
- data/Gemfile +2 -0
- data/Gemfile.lock +37 -34
- data/README.md +1 -2
- data/Rakefile +4 -12
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +9 -3
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +2 -2
- data/lib/puppet/application/lookup.rb +5 -5
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +50 -8
- data/lib/puppet/defaults.rb +67 -35
- data/lib/puppet/environments.rb +84 -59
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +56 -16
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +60 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/file_bucket/dipper.rb +1 -1
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/http.rb +1 -0
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/http/resolver.rb +5 -8
- data/lib/puppet/http/resolver/server_list.rb +18 -36
- data/lib/puppet/http/resolver/settings.rb +4 -4
- data/lib/puppet/http/resolver/srv.rb +5 -5
- data/lib/puppet/http/service.rb +3 -1
- data/lib/puppet/http/service/compiler.rb +1 -1
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/session.rb +5 -4
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/yaml.rb +4 -59
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/indirector/request.rb +4 -4
- data/lib/puppet/indirector/yaml.rb +1 -1
- 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 +2 -1
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/pal_impl.rb +70 -17
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- 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/dpkg.rb +1 -1
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +1 -0
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +62 -8
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/resource/type.rb +2 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/settings.rb +62 -20
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/transaction/report.rb +11 -7
- data/lib/puppet/type/file/source.rb +1 -1
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/connection.rb +8 -8
- data/lib/puppet/util/fact_dif.rb +62 -0
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows/service.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +289 -268
- data/man/man5/puppet.conf.5 +33 -17
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- 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 +32 -1
- data/man/man8/puppet-filebucket.8 +3 -3
- 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 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +7 -4
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +2 -2
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +183 -22
- data/spec/integration/application/apply_spec.rb +19 -0
- data/spec/integration/application/filebucket_spec.rb +7 -7
- data/spec/integration/application/plugin_spec.rb +3 -3
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/defaults_spec.rb +19 -1
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- 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 +5 -3
- data/spec/integration/util/windows/registry_spec.rb +0 -10
- data/spec/lib/puppet_spec/settings.rb +6 -1
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/spec_helper.rb +1 -4
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/facts_spec.rb +3 -1
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application_spec.rb +60 -13
- data/spec/unit/configurer_spec.rb +39 -6
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/defaults_spec.rb +20 -1
- data/spec/unit/environments_spec.rb +176 -32
- data/spec/unit/face/config_spec.rb +62 -11
- data/spec/unit/face/node_spec.rb +2 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +0 -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 +1 -2
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/http/resolver_spec.rb +24 -4
- data/spec/unit/http/service/ca_spec.rb +2 -2
- data/spec/unit/http/service/compiler_spec.rb +51 -2
- data/spec/unit/http/service/file_server_spec.rb +2 -2
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +2 -2
- data/spec/unit/http/service_spec.rb +1 -1
- data/spec/unit/http/session_spec.rb +8 -20
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +0 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- 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/json_spec.rb +8 -8
- data/spec/unit/indirector/key/file_spec.rb +0 -1
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector/request_spec.rb +4 -4
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/network/authconfig_spec.rb +0 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/exec_spec.rb +4 -3
- 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/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- 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/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +31 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +4 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +1 -1
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +3 -1
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- data/spec/unit/provider/user/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +56 -3
- data/spec/unit/provider_spec.rb +8 -10
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/resource/capability_finder_spec.rb +6 -1
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +576 -239
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
- 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/report_spec.rb +2 -0
- 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/source_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/filebucket_spec.rb +1 -1
- 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 +363 -15
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +6 -6
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util_spec.rb +13 -6
- metadata +32 -10
- data/spec/integration/application/config_spec.rb +0 -74
- data/spec/unit/face/catalog_spec.rb +0 -6
- data/spec/unit/face/module_spec.rb +0 -3
@@ -234,8 +234,8 @@ describe Puppet::Application::Doc do
|
|
234
234
|
end
|
235
235
|
end
|
236
236
|
|
237
|
-
it "should operate in
|
238
|
-
expect(@doc.class.run_mode.name).to eq(:
|
237
|
+
it "should operate in server run_mode" do
|
238
|
+
expect(@doc.class.run_mode.name).to eq(:server)
|
239
239
|
|
240
240
|
@doc.setup_rdoc
|
241
241
|
end
|
@@ -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"} }
|
6
|
+
let(:values) { {"filesystems" => "apfs,autofs,devfs", "macaddress" => "64:52:11:22:03:25"} }
|
7
7
|
|
8
8
|
before :each do
|
9
9
|
Puppet::Node::Facts.indirection.terminus_class = :memory
|
@@ -21,6 +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:25"
|
24
25
|
END
|
25
26
|
|
26
27
|
expect {
|
@@ -41,6 +42,7 @@ describe Puppet::Application::Facts do
|
|
41
42
|
name: #{Puppet[:certname]}
|
42
43
|
values:
|
43
44
|
filesystems: apfs,autofs,devfs
|
45
|
+
macaddress: "64:52:11:22:03:25"
|
44
46
|
END
|
45
47
|
|
46
48
|
expect {
|
@@ -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
|
@@ -157,7 +156,6 @@ describe Puppet::Application::Filebucket do
|
|
157
156
|
describe "when running" do
|
158
157
|
before :each do
|
159
158
|
allow(Puppet::Log).to receive(:newdestination)
|
160
|
-
allow(Puppet).to receive(:settraps)
|
161
159
|
allow(Puppet::FileBucket::Dipper).to receive(:new)
|
162
160
|
allow(@filebucket.options).to receive(:[])
|
163
161
|
|
@@ -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
|
@@ -118,6 +120,11 @@ describe Puppet::Application do
|
|
118
120
|
@appclass.run_mode :agent
|
119
121
|
expect(@appclass.run_mode.name).to eq(:agent)
|
120
122
|
end
|
123
|
+
|
124
|
+
it "considers :server to be master" do
|
125
|
+
@appclass.run_mode :server
|
126
|
+
expect(@appclass.run_mode).to be_master
|
127
|
+
end
|
121
128
|
end
|
122
129
|
|
123
130
|
describe ".environment_mode" do
|
@@ -147,7 +154,7 @@ describe Puppet::Application do
|
|
147
154
|
describe "when dealing with run_mode" do
|
148
155
|
|
149
156
|
class TestApp < Puppet::Application
|
150
|
-
run_mode :
|
157
|
+
run_mode :server
|
151
158
|
def run_command
|
152
159
|
# no-op
|
153
160
|
end
|
@@ -159,16 +166,16 @@ describe Puppet::Application do
|
|
159
166
|
app = TestApp.new
|
160
167
|
app.initialize_app_defaults
|
161
168
|
|
162
|
-
expect(Puppet.run_mode).to
|
169
|
+
expect(Puppet.run_mode).to be_server
|
163
170
|
end
|
164
171
|
|
165
172
|
it "should sadly and frighteningly allow run_mode to change at runtime via #run" do
|
166
173
|
app = TestApp.new
|
167
174
|
app.run
|
168
175
|
|
169
|
-
expect(app.class.run_mode.name).to eq(:
|
176
|
+
expect(app.class.run_mode.name).to eq(:server)
|
170
177
|
|
171
|
-
expect(Puppet.run_mode).to
|
178
|
+
expect(Puppet.run_mode).to be_server
|
172
179
|
end
|
173
180
|
end
|
174
181
|
|
@@ -506,6 +513,40 @@ describe Puppet::Application do
|
|
506
513
|
|
507
514
|
expect { @app.configure_indirector_routes }.to raise_error(Puppet::Error, /mapping values are not allowed/)
|
508
515
|
end
|
516
|
+
|
517
|
+
it "should treat master routes on server application" do
|
518
|
+
allow(@app).to receive(:name).and_return("server")
|
519
|
+
|
520
|
+
Puppet[:route_file] = tmpfile('routes')
|
521
|
+
File.open(Puppet[:route_file], 'w') do |f|
|
522
|
+
f.print <<-ROUTES
|
523
|
+
master:
|
524
|
+
node:
|
525
|
+
terminus: exec
|
526
|
+
ROUTES
|
527
|
+
end
|
528
|
+
|
529
|
+
@app.configure_indirector_routes
|
530
|
+
|
531
|
+
expect(Puppet::Node.indirection.terminus_class).to eq('exec')
|
532
|
+
end
|
533
|
+
|
534
|
+
it "should treat server routes on master application" do
|
535
|
+
allow(@app).to receive(:name).and_return("master")
|
536
|
+
|
537
|
+
Puppet[:route_file] = tmpfile('routes')
|
538
|
+
File.open(Puppet[:route_file], 'w') do |f|
|
539
|
+
f.print <<-ROUTES
|
540
|
+
server:
|
541
|
+
node:
|
542
|
+
terminus: exec
|
543
|
+
ROUTES
|
544
|
+
end
|
545
|
+
|
546
|
+
@app.configure_indirector_routes
|
547
|
+
|
548
|
+
expect(Puppet::Node.indirection.terminus_class).to eq('exec')
|
549
|
+
end
|
509
550
|
end
|
510
551
|
|
511
552
|
describe "when running" do
|
@@ -555,13 +596,6 @@ describe Puppet::Application do
|
|
555
596
|
end
|
556
597
|
|
557
598
|
it "should raise an error if dispatch returns no command" do
|
558
|
-
allow(@app).to receive(:get_command).and_return(nil)
|
559
|
-
expect(Puppet).to receive(:send_log).with(:err, "Could not run: No valid command or main")
|
560
|
-
expect { @app.run }.to exit_with 1
|
561
|
-
end
|
562
|
-
|
563
|
-
it "should raise an error if dispatch returns an invalid command" do
|
564
|
-
allow(@app).to receive(:get_command).and_return(:this_function_doesnt_exist)
|
565
599
|
expect(Puppet).to receive(:send_log).with(:err, "Could not run: No valid command or main")
|
566
600
|
expect { @app.run }.to exit_with 1
|
567
601
|
end
|
@@ -679,5 +713,18 @@ describe Puppet::Application do
|
|
679
713
|
|
680
714
|
@app.handle_logdest_arg(nil)
|
681
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
|
682
729
|
end
|
683
730
|
end
|
@@ -104,6 +104,24 @@ describe Puppet::Configurer do
|
|
104
104
|
expect(@logs).to include(an_object_having_attributes(level: :err, message: %r{Failed to apply catalog: Failed to retrieve pluginfacts: Could not retrieve information from environment production source\(s\) puppet:///pluginfacts}))
|
105
105
|
end
|
106
106
|
|
107
|
+
it "applies a cached catalog if pluginsync fails when usecacheonfailure is true" do
|
108
|
+
Puppet[:ignore_plugin_errors] = false
|
109
|
+
|
110
|
+
Puppet[:use_cached_catalog] = false
|
111
|
+
Puppet[:usecacheonfailure] = true
|
112
|
+
|
113
|
+
body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
|
114
|
+
stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(
|
115
|
+
status: 404, body: body, headers: {'Content-Type' => 'application/json'}
|
116
|
+
)
|
117
|
+
stub_request(:get, %r{/puppet/v3/file_metadata/pluginfacts}).to_return(
|
118
|
+
status: 404, body: body, headers: {'Content-Type' => 'application/json'}
|
119
|
+
)
|
120
|
+
|
121
|
+
expect(configurer.run(pluginsync: true, :report => report)).to eq(0)
|
122
|
+
expect(report.cached_catalog_status).to eq('on_failure')
|
123
|
+
end
|
124
|
+
|
107
125
|
it "applies a cached catalog when it can't connect to the master" do
|
108
126
|
error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
|
109
127
|
|
@@ -1026,30 +1044,45 @@ describe Puppet::Configurer do
|
|
1026
1044
|
options = {}
|
1027
1045
|
configurer.run(options)
|
1028
1046
|
expect(options[:report].master_used).to eq('myserver:123')
|
1047
|
+
expect(options[:report].server_used).to eq('myserver:123')
|
1029
1048
|
end
|
1030
1049
|
|
1031
|
-
it "should report when
|
1050
|
+
it "should report when usecacheonfailure is false and server is unavailable" do
|
1032
1051
|
Puppet.settings[:server_list] = ["myserver:123"]
|
1052
|
+
Puppet[:usecacheonfailure] = false
|
1033
1053
|
|
1034
1054
|
stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: [500, "Internal Server Error"])
|
1035
1055
|
|
1036
|
-
allow(Puppet).to receive(:debug)
|
1037
|
-
expect(Puppet).to receive(:debug).with("Puppet server myserver:123 is unavailable: 500 Internal Server Error")
|
1038
|
-
|
1039
1056
|
expect {
|
1040
1057
|
configurer.run
|
1041
|
-
}.to raise_error(Puppet::Error, /Could not select a functional puppet
|
1058
|
+
}.to raise_error(Puppet::Error, /Could not select a functional puppet server from server_list:/)
|
1059
|
+
|
1060
|
+
expect(@logs).to include(an_object_having_attributes(level: :err, message: /Puppet server myserver:123 is unavailable: 500 Internal Server Error/))
|
1042
1061
|
end
|
1043
1062
|
|
1044
1063
|
it "should error when no servers in 'server_list' are reachable" do
|
1045
1064
|
Puppet.settings[:server_list] = "myserver:123,someotherservername"
|
1065
|
+
Puppet[:usecacheonfailure] = false
|
1046
1066
|
|
1047
1067
|
stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 400)
|
1048
1068
|
stub_request(:get, 'https://someotherservername:8140/status/v1/simple/master').to_return(status: 400)
|
1049
1069
|
|
1050
1070
|
expect{
|
1051
1071
|
configurer.run
|
1052
|
-
}.to raise_error(Puppet::Error, /Could not select a functional puppet
|
1072
|
+
}.to raise_error(Puppet::Error, /Could not select a functional puppet server from server_list: 'myserver:123,someotherservername'/)
|
1073
|
+
end
|
1074
|
+
|
1075
|
+
it "should not error when usecacheonfailure is true and no servers in 'server_list' are reachable" do
|
1076
|
+
Puppet.settings[:server_list] = "myserver:123,someotherservername"
|
1077
|
+
Puppet[:usecacheonfailure] = true
|
1078
|
+
|
1079
|
+
stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 400)
|
1080
|
+
stub_request(:get, 'https://someotherservername:8140/status/v1/simple/master').to_return(status: 400)
|
1081
|
+
|
1082
|
+
options = {}
|
1083
|
+
|
1084
|
+
expect(configurer.run(options)).to eq(0)
|
1085
|
+
expect(options[:report].server_used).to be_nil
|
1053
1086
|
end
|
1054
1087
|
|
1055
1088
|
it "should not make multiple node requests when the server is found" do
|
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)
|
data/spec/unit/defaults_spec.rb
CHANGED
@@ -189,6 +189,7 @@ describe "Defaults" do
|
|
189
189
|
|
190
190
|
it "raises an exception if facter-ng could not be loaded" do
|
191
191
|
allow_any_instance_of(Puppet::Settings::BooleanSetting).to receive(:require).with('facter-ng').and_raise(LoadError)
|
192
|
+
allow(Facter).to receive(:value).with('facterversion').and_return('3.11.4')
|
192
193
|
|
193
194
|
expect{ Puppet.settings[:facterng] = true }.to raise_exception ArgumentError, 'facter-ng could not be loaded'
|
194
195
|
end
|
@@ -198,7 +199,9 @@ describe "Defaults" do
|
|
198
199
|
@original_facter = Object.const_get(:Facter)
|
199
200
|
|
200
201
|
Object.send(:remove_const, :Facter)
|
201
|
-
|
202
|
+
facter = double('facter')
|
203
|
+
allow(facter).to receive(:value).with('facterversion').and_return('3.11.4')
|
204
|
+
Object.const_set(:Facter, facter)
|
202
205
|
|
203
206
|
allow_any_instance_of(Puppet::Settings::BooleanSetting).to receive(:require).with('facter-ng').and_return(true)
|
204
207
|
allow(Facter).to receive(:respond_to?).and_return(false)
|
@@ -215,4 +218,20 @@ describe "Defaults" do
|
|
215
218
|
end
|
216
219
|
end
|
217
220
|
end
|
221
|
+
|
222
|
+
describe "deprecated settings" do
|
223
|
+
it 'does not issue a deprecation warning by default' do
|
224
|
+
expect(Puppet).to receive(:deprecation_warning).never
|
225
|
+
|
226
|
+
Puppet.initialize_settings
|
227
|
+
end
|
228
|
+
|
229
|
+
it 'issues a deprecation warning when func3x_check is disabled' do
|
230
|
+
Puppet[:func3x_check] = false
|
231
|
+
|
232
|
+
expect(Puppet).to receive(:deprecation_warning).with("The 'func3x_check' setting is deprecated and will be removed in a future release.")
|
233
|
+
|
234
|
+
Puppet.initialize_settings
|
235
|
+
end
|
236
|
+
end
|
218
237
|
end
|
@@ -436,25 +436,6 @@ config_version=$vardir/random/scripts
|
|
436
436
|
end
|
437
437
|
end
|
438
438
|
end
|
439
|
-
|
440
|
-
context "custom cache expiration service" do
|
441
|
-
it "consults the custom service to expire the cache" do
|
442
|
-
loader_from(:filesystem => [directory_tree],
|
443
|
-
:directory => directory_tree.children.first) do |loader|
|
444
|
-
service = ReplayExpirationService.new([true])
|
445
|
-
using_expiration_service(service) do
|
446
|
-
|
447
|
-
cached = Puppet::Environments::Cached.new(loader)
|
448
|
-
cached.get(:an_environment)
|
449
|
-
cached.get(:an_environment)
|
450
|
-
|
451
|
-
expect(service.created_envs).to include(:an_environment)
|
452
|
-
expect(service.expired_envs).to include(:an_environment)
|
453
|
-
expect(service.evicted_envs).to include(:an_environment)
|
454
|
-
end
|
455
|
-
end
|
456
|
-
end
|
457
|
-
end
|
458
439
|
end
|
459
440
|
end
|
460
441
|
|
@@ -645,6 +626,85 @@ config_version=$vardir/random/scripts
|
|
645
626
|
end
|
646
627
|
end
|
647
628
|
|
629
|
+
context "expiration policies" do
|
630
|
+
let(:service) { ReplayExpirationService.new }
|
631
|
+
|
632
|
+
it "notifies when the environment is first created" do
|
633
|
+
with_environment_loaded(service)
|
634
|
+
|
635
|
+
expect(service.created_envs).to eq([:an_environment])
|
636
|
+
end
|
637
|
+
|
638
|
+
it "does not evict an unexpired environment" do
|
639
|
+
Puppet[:environment_timeout] = 'unlimited'
|
640
|
+
|
641
|
+
with_environment_loaded(service) do |cached|
|
642
|
+
cached.get!(:an_environment)
|
643
|
+
end
|
644
|
+
|
645
|
+
expect(service.created_envs).to eq([:an_environment])
|
646
|
+
expect(service.evicted_envs).to eq([])
|
647
|
+
end
|
648
|
+
|
649
|
+
it "evicts an expired environment" do
|
650
|
+
service = ReplayExpirationService.new
|
651
|
+
|
652
|
+
expect(service).to receive(:expired?).and_return(true)
|
653
|
+
|
654
|
+
with_environment_loaded(service) do |cached|
|
655
|
+
cached.get!(:an_environment)
|
656
|
+
end
|
657
|
+
|
658
|
+
expect(service.created_envs).to eq([:an_environment, :an_environment])
|
659
|
+
expect(service.evicted_envs).to eq([:an_environment])
|
660
|
+
end
|
661
|
+
|
662
|
+
it "evicts an environment that hasn't been recently touched" do
|
663
|
+
Puppet[:environment_timeout] = 1
|
664
|
+
Puppet[:environment_timeout_mode] = :from_last_used
|
665
|
+
|
666
|
+
with_environment_loaded(service) do |cached|
|
667
|
+
future = Time.now + 60
|
668
|
+
expect(Time).to receive(:now).and_return(future).at_least(:once)
|
669
|
+
|
670
|
+
# this should cause the cached environment to be evicted and a new one created
|
671
|
+
cached.get!(:an_environment)
|
672
|
+
end
|
673
|
+
|
674
|
+
expect(service.created_envs).to eq([:an_environment, :an_environment])
|
675
|
+
expect(service.evicted_envs).to eq([:an_environment])
|
676
|
+
|
677
|
+
end
|
678
|
+
|
679
|
+
it "reuses an environment that was recently touched" do
|
680
|
+
Puppet[:environment_timeout] = 60
|
681
|
+
Puppet[:environment_timeout_mode] = :from_last_used
|
682
|
+
|
683
|
+
with_environment_loaded(service) do |cached|
|
684
|
+
# reuse the already cached environment
|
685
|
+
cached.get!(:an_environment)
|
686
|
+
end
|
687
|
+
|
688
|
+
expect(service.created_envs).to eq([:an_environment])
|
689
|
+
expect(service.evicted_envs).to eq([])
|
690
|
+
end
|
691
|
+
|
692
|
+
it "evicts a recently touched environment" do
|
693
|
+
Puppet[:environment_timeout] = 60
|
694
|
+
Puppet[:environment_timeout_mode] = :from_last_used
|
695
|
+
|
696
|
+
expect(service).to receive(:expired?).and_return(true)
|
697
|
+
|
698
|
+
with_environment_loaded(service) do |cached|
|
699
|
+
# even though the environment was recently touched, it's been expired
|
700
|
+
cached.get!(:an_environment)
|
701
|
+
end
|
702
|
+
|
703
|
+
expect(service.created_envs).to eq([:an_environment, :an_environment])
|
704
|
+
expect(service.evicted_envs).to eq([:an_environment])
|
705
|
+
end
|
706
|
+
end
|
707
|
+
|
648
708
|
it "gets an environment.conf" do
|
649
709
|
loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
650
710
|
expect(Puppet::Environments::Cached.new(loader).get_conf(:an_environment)).to match_environment_conf(:an_environment).
|
@@ -652,6 +712,87 @@ config_version=$vardir/random/scripts
|
|
652
712
|
with_global_module_path([])
|
653
713
|
end
|
654
714
|
end
|
715
|
+
|
716
|
+
context '#clear' do
|
717
|
+
let(:service) { ReplayExpirationService.new }
|
718
|
+
|
719
|
+
it "evicts an environment" do
|
720
|
+
with_environment_loaded(service) do |cached|
|
721
|
+
cached.clear(:an_environment)
|
722
|
+
end
|
723
|
+
|
724
|
+
expect(service.evicted_envs).to eq([:an_environment])
|
725
|
+
end
|
726
|
+
end
|
727
|
+
|
728
|
+
context '#clear_all' do
|
729
|
+
let(:service) { ReplayExpirationService.new }
|
730
|
+
|
731
|
+
it 'evicts all environments' do
|
732
|
+
with_environment_loaded(service) do |cached|
|
733
|
+
cached.get(:an_environment)
|
734
|
+
cached.get(:another_environment)
|
735
|
+
cached.clear_all
|
736
|
+
|
737
|
+
expect(service.evicted_envs).to match([:an_environment, :another_environment])
|
738
|
+
end
|
739
|
+
end
|
740
|
+
|
741
|
+
it 'clears cached environment settings' do
|
742
|
+
base_dir = File.expand_path("envdir")
|
743
|
+
original_envdir = FS::MemoryFile.a_directory(base_dir, [
|
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
|
+
])
|
752
|
+
|
753
|
+
FS.overlay(original_envdir) do
|
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
|
+
])
|
768
|
+
|
769
|
+
#Clear all cached environments
|
770
|
+
loader.clear_all
|
771
|
+
|
772
|
+
FS.overlay(changed_envdir) do
|
773
|
+
changed_env = loader.get("env3")
|
774
|
+
|
775
|
+
expect(original_env).to environment(:env3).
|
776
|
+
with_manifest(File.expand_path("/manifest_orig")).
|
777
|
+
with_full_modulepath([File.expand_path("/modules_orig")])
|
778
|
+
|
779
|
+
expect(changed_env).to environment(:env3).
|
780
|
+
with_manifest(File.expand_path("/manifest_changed")).
|
781
|
+
with_full_modulepath([File.expand_path("/modules_changed")])
|
782
|
+
end
|
783
|
+
end
|
784
|
+
end
|
785
|
+
end
|
786
|
+
|
787
|
+
it 'deletes environment text domains' do
|
788
|
+
with_environment_loaded(service) do |cached|
|
789
|
+
cached.get(:an_environment)
|
790
|
+
cached.clear_all
|
791
|
+
|
792
|
+
expect(FastGettext.text_domain).to eq(Puppet::GettextConfig::DEFAULT_TEXT_DOMAIN)
|
793
|
+
end
|
794
|
+
end
|
795
|
+
end
|
655
796
|
end
|
656
797
|
|
657
798
|
RSpec::Matchers.define :environment do |name|
|
@@ -746,31 +887,34 @@ config_version=$vardir/random/scripts
|
|
746
887
|
end
|
747
888
|
end
|
748
889
|
|
749
|
-
|
750
|
-
|
890
|
+
# The environment named `:an_environment` will already be loaded when the
|
891
|
+
# block is yielded to
|
892
|
+
def with_environment_loaded(service, &block)
|
893
|
+
loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
894
|
+
using_expiration_service(service) do
|
895
|
+
cached = Puppet::Environments::Cached.new(loader)
|
896
|
+
cached.get!(:an_environment)
|
751
897
|
|
752
|
-
|
898
|
+
yield cached if block_given?
|
899
|
+
end
|
900
|
+
end
|
901
|
+
end
|
902
|
+
|
903
|
+
class ReplayExpirationService < Puppet::Environments::Cached::DefaultCacheExpirationService
|
904
|
+
attr_reader :created_envs, :evicted_envs
|
905
|
+
|
906
|
+
def initialize
|
753
907
|
@created_envs = []
|
754
|
-
@expired_envs = []
|
755
908
|
@evicted_envs = []
|
756
|
-
@expiration_sequence = expiration_sequence
|
757
909
|
end
|
758
910
|
|
759
911
|
def created(env)
|
760
912
|
@created_envs << env.name
|
761
913
|
end
|
762
914
|
|
763
|
-
def expired?(env_name)
|
764
|
-
# make expired? idempotent
|
765
|
-
return true if @expired_envs.include? (env_name)
|
766
|
-
@expired_envs << env_name
|
767
|
-
@expiration_sequence.pop
|
768
|
-
end
|
769
|
-
|
770
915
|
def evicted(env_name)
|
771
916
|
@evicted_envs << env_name
|
772
917
|
end
|
773
918
|
end
|
774
|
-
|
775
919
|
end
|
776
920
|
end
|