puppet 6.18.0-x64-mingw32 → 6.21.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/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
@@ -11,24 +11,24 @@ describe Puppet::Indirector::JSON do
|
|
11
11
|
|
12
12
|
context "#path" do
|
13
13
|
before :each do
|
14
|
-
Puppet[:server_datadir] = '/sample/datadir/
|
14
|
+
Puppet[:server_datadir] = '/sample/datadir/server'
|
15
15
|
Puppet[:client_datadir] = '/sample/datadir/client'
|
16
16
|
end
|
17
17
|
|
18
|
-
it "uses the :server_datadir setting if this is the
|
19
|
-
allow(Puppet.run_mode).to receive(:
|
18
|
+
it "uses the :server_datadir setting if this is the server" do
|
19
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(true)
|
20
20
|
expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.json')
|
21
21
|
expect(subject.path('testing')).to eq(expected)
|
22
22
|
end
|
23
23
|
|
24
|
-
it "uses the :client_datadir setting if this is not the
|
25
|
-
allow(Puppet.run_mode).to receive(:
|
24
|
+
it "uses the :client_datadir setting if this is not the server" do
|
25
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(false)
|
26
26
|
expected = File.join(Puppet[:client_datadir], 'indirector_testing', 'testing.json')
|
27
27
|
expect(subject.path('testing')).to eq(expected)
|
28
28
|
end
|
29
29
|
|
30
30
|
it "overrides the default extension with a supplied value" do
|
31
|
-
allow(Puppet.run_mode).to receive(:
|
31
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(true)
|
32
32
|
expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.not-json')
|
33
33
|
expect(subject.path('testing', '.not-json')).to eq(expected)
|
34
34
|
end
|
@@ -50,7 +50,7 @@ describe Puppet::Indirector::JSON do
|
|
50
50
|
|
51
51
|
context "handling requests" do
|
52
52
|
before :each do
|
53
|
-
allow(Puppet.run_mode).to receive(:
|
53
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(true)
|
54
54
|
Puppet[:server_datadir] = tmpdir('jsondir')
|
55
55
|
FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
|
56
56
|
end
|
@@ -158,7 +158,7 @@ describe Puppet::Indirector::JSON do
|
|
158
158
|
|
159
159
|
context "#search" do
|
160
160
|
before :each do
|
161
|
-
allow(Puppet.run_mode).to receive(:
|
161
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(true)
|
162
162
|
Puppet[:server_datadir] = tmpdir('jsondir')
|
163
163
|
FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
|
164
164
|
end
|
@@ -19,7 +19,6 @@ describe Puppet::SSL::Key::File do
|
|
19
19
|
allow(Puppet.settings).to receive(:use)
|
20
20
|
|
21
21
|
@searcher = Puppet::SSL::Key::File.new
|
22
|
-
allow(@searcher).to receive(:ca?).and_return(false)
|
23
22
|
expect(@searcher.public_key_path("whatever")).to eq(File.expand_path("/public/key/dir/whatever.pem"))
|
24
23
|
end
|
25
24
|
end
|
@@ -11,24 +11,24 @@ describe Puppet::Indirector::Msgpack, :if => Puppet.features.msgpack? do
|
|
11
11
|
|
12
12
|
context "#path" do
|
13
13
|
before :each do
|
14
|
-
Puppet[:server_datadir] = '/sample/datadir/
|
14
|
+
Puppet[:server_datadir] = '/sample/datadir/server'
|
15
15
|
Puppet[:client_datadir] = '/sample/datadir/client'
|
16
16
|
end
|
17
17
|
|
18
|
-
it "uses the :server_datadir setting if this is the
|
19
|
-
allow(Puppet.run_mode).to receive(:
|
18
|
+
it "uses the :server_datadir setting if this is the server" do
|
19
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(true)
|
20
20
|
expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.msgpack')
|
21
21
|
expect(subject.path('testing')).to eq(expected)
|
22
22
|
end
|
23
23
|
|
24
|
-
it "uses the :client_datadir setting if this is not the
|
25
|
-
allow(Puppet.run_mode).to receive(:
|
24
|
+
it "uses the :client_datadir setting if this is not the server" do
|
25
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(false)
|
26
26
|
expected = File.join(Puppet[:client_datadir], 'indirector_testing', 'testing.msgpack')
|
27
27
|
expect(subject.path('testing')).to eq(expected)
|
28
28
|
end
|
29
29
|
|
30
30
|
it "overrides the default extension with a supplied value" do
|
31
|
-
allow(Puppet.run_mode).to receive(:
|
31
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(true)
|
32
32
|
expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.not-msgpack')
|
33
33
|
expect(subject.path('testing', '.not-msgpack')).to eq(expected)
|
34
34
|
end
|
@@ -50,7 +50,7 @@ describe Puppet::Indirector::Msgpack, :if => Puppet.features.msgpack? do
|
|
50
50
|
|
51
51
|
context "handling requests" do
|
52
52
|
before :each do
|
53
|
-
allow(Puppet.run_mode).to receive(:
|
53
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(true)
|
54
54
|
Puppet[:server_datadir] = tmpdir('msgpackdir')
|
55
55
|
FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
|
56
56
|
end
|
@@ -158,7 +158,7 @@ describe Puppet::Indirector::Msgpack, :if => Puppet.features.msgpack? do
|
|
158
158
|
|
159
159
|
context "#search" do
|
160
160
|
before :each do
|
161
|
-
allow(Puppet.run_mode).to receive(:
|
161
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(true)
|
162
162
|
Puppet[:server_datadir] = tmpdir('msgpackdir')
|
163
163
|
FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
|
164
164
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/node'
|
3
|
+
require 'puppet/indirector/node/json'
|
4
|
+
|
5
|
+
describe Puppet::Node::Json do
|
6
|
+
describe '#save' do
|
7
|
+
subject(:indirection) { described_class.indirection }
|
8
|
+
|
9
|
+
let(:env) { Puppet::Node::Environment.create(:testing, []) }
|
10
|
+
let(:node) { Puppet::Node.new('node_name', :environment => env) }
|
11
|
+
let(:file) { File.join(Puppet[:client_datadir], "node", "node_name.json") }
|
12
|
+
|
13
|
+
before do
|
14
|
+
indirection.terminus_class = :json
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'saves the instance of the node as JSON to disk' do
|
18
|
+
indirection.save(node)
|
19
|
+
json = Puppet::FileSystem.read(file, :encoding => 'bom|utf-8')
|
20
|
+
content = Puppet::Util::Json.load(json)
|
21
|
+
expect(content["name"]).to eq('node_name')
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when node cannot be saved' do
|
25
|
+
it 'raises Errno::EISDIR' do
|
26
|
+
FileUtils.mkdir_p(file)
|
27
|
+
expect {
|
28
|
+
indirection.save(node)
|
29
|
+
}.to raise_error(Errno::EISDIR, /node_name.json/)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
require 'puppet/transaction/report'
|
4
|
-
require 'puppet/indirector/report/
|
4
|
+
require 'puppet/indirector/report/json'
|
5
5
|
|
6
|
-
describe Puppet::Transaction::Report::
|
6
|
+
describe Puppet::Transaction::Report::Json do
|
7
|
+
include PuppetSpec::Files
|
7
8
|
describe '#save' do
|
8
9
|
subject(:indirection) { described_class.indirection }
|
9
10
|
|
@@ -17,19 +18,17 @@ describe Puppet::Transaction::Report::Yaml do
|
|
17
18
|
let(:file) { request.path(:me) }
|
18
19
|
|
19
20
|
before do
|
20
|
-
|
21
|
-
end
|
21
|
+
Puppet[:lastrunreport] = File.join(Puppet[:statedir], "last_run_report.json")
|
22
22
|
|
23
|
-
|
24
|
-
indirection.save(report)
|
23
|
+
indirection.terminus_class = :json
|
25
24
|
end
|
26
25
|
|
27
|
-
it 'saves the instance of the report as
|
26
|
+
it 'saves the instance of the report as JSON to disk' do
|
27
|
+
|
28
28
|
indirection.save(report)
|
29
|
-
|
30
|
-
|
31
|
-
)
|
32
|
-
expect(content.host).to eq(certname)
|
29
|
+
json = Puppet::FileSystem.read(Puppet[:lastrunreport], :encoding => 'bom|utf-8')
|
30
|
+
content = Puppet::Util::Json.load(json)
|
31
|
+
expect(content["host"]).to eq(certname)
|
33
32
|
end
|
34
33
|
|
35
34
|
it 'allows mode overwrite' do
|
@@ -37,8 +36,7 @@ describe Puppet::Transaction::Report::Yaml do
|
|
37
36
|
indirection.save(report)
|
38
37
|
|
39
38
|
if Puppet::Util::Platform.windows?
|
40
|
-
|
41
|
-
mode = Puppet::Util::Windows::Security.get_mode(file)
|
39
|
+
mode = File.stat(file).mode
|
42
40
|
else
|
43
41
|
mode = Puppet::FileSystem.stat(file).mode
|
44
42
|
end
|
@@ -62,21 +60,12 @@ describe Puppet::Transaction::Report::Yaml do
|
|
62
60
|
end
|
63
61
|
end
|
64
62
|
|
65
|
-
context 'when repport is invalid' do
|
66
|
-
it 'logs error' do
|
67
|
-
expect(Puppet).to receive(:send_log).with(:err, /Could not save yaml ziggy: can't dump anonymous class/)
|
68
|
-
|
69
|
-
report.configuration_version = Class.new
|
70
|
-
indirection.save(report)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
63
|
context 'when report cannot be saved' do
|
75
|
-
it 'raises
|
64
|
+
it 'raises Error' do
|
76
65
|
FileUtils.mkdir_p(file)
|
77
66
|
expect {
|
78
67
|
indirection.save(report)
|
79
|
-
}.to raise_error(Errno::EISDIR, /last_run_report.
|
68
|
+
}.to raise_error(Errno::EISDIR, /last_run_report.json/)
|
80
69
|
end
|
81
70
|
end
|
82
71
|
end
|
@@ -4,14 +4,6 @@ require 'puppet/transaction/report'
|
|
4
4
|
require 'puppet/indirector/report/yaml'
|
5
5
|
|
6
6
|
describe Puppet::Transaction::Report::Yaml do
|
7
|
-
it "should be a subclass of the Yaml terminus" do
|
8
|
-
expect(Puppet::Transaction::Report::Yaml.superclass).to equal(Puppet::Indirector::Yaml)
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should have documentation" do
|
12
|
-
expect(Puppet::Transaction::Report::Yaml.doc).not_to be_nil
|
13
|
-
end
|
14
|
-
|
15
7
|
it "should be registered with the report indirection" do
|
16
8
|
indirection = Puppet::Indirector::Indirection.instance(:report)
|
17
9
|
expect(Puppet::Transaction::Report::Yaml.indirection).to equal(indirection)
|
@@ -24,4 +16,76 @@ describe Puppet::Transaction::Report::Yaml do
|
|
24
16
|
it "should unconditionally save/load from the --lastrunreport setting" do
|
25
17
|
expect(subject.path(:me)).to eq(Puppet[:lastrunreport])
|
26
18
|
end
|
19
|
+
|
20
|
+
describe '#save' do
|
21
|
+
subject(:indirection) { described_class.indirection }
|
22
|
+
|
23
|
+
let(:request) { described_class.new }
|
24
|
+
let(:certname) { 'ziggy' }
|
25
|
+
let(:report) do
|
26
|
+
report = Puppet::Transaction::Report.new
|
27
|
+
report.host = certname
|
28
|
+
report
|
29
|
+
end
|
30
|
+
let(:file) { request.path(:me) }
|
31
|
+
|
32
|
+
before do
|
33
|
+
indirection.terminus_class = :yaml
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'saves the instance of the report as YAML to disk' do
|
37
|
+
indirection.save(report)
|
38
|
+
content = Puppet::Util::Yaml.safe_load_file(
|
39
|
+
Puppet[:lastrunreport], [Puppet::Transaction::Report]
|
40
|
+
)
|
41
|
+
expect(content.host).to eq(certname)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'allows mode overwrite' do
|
45
|
+
Puppet.settings.setting(:lastrunreport).mode = '0644'
|
46
|
+
indirection.save(report)
|
47
|
+
|
48
|
+
if Puppet::Util::Platform.windows?
|
49
|
+
mode = File.stat(file).mode
|
50
|
+
else
|
51
|
+
mode = Puppet::FileSystem.stat(file).mode
|
52
|
+
end
|
53
|
+
|
54
|
+
expect(mode & 07777).to eq(0644)
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'when mode is invalid' do
|
58
|
+
before do
|
59
|
+
Puppet.settings.setting(:lastrunreport).mode = '9999'
|
60
|
+
end
|
61
|
+
|
62
|
+
after do
|
63
|
+
Puppet.settings.setting(:lastrunreport).mode = '0644'
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'raises Puppet::DevError ' do
|
67
|
+
expect{
|
68
|
+
indirection.save(report)
|
69
|
+
}.to raise_error(Puppet::DevError, "replace_file mode: 9999 is invalid")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when repport is invalid' do
|
74
|
+
it 'logs error' do
|
75
|
+
expect(Puppet).to receive(:send_log).with(:err, /Could not save yaml ziggy: can't dump anonymous class/)
|
76
|
+
|
77
|
+
report.configuration_version = Class.new
|
78
|
+
indirection.save(report)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'when report cannot be saved' do
|
83
|
+
it 'raises Error' do
|
84
|
+
FileUtils.mkdir_p(file)
|
85
|
+
expect {
|
86
|
+
indirection.save(report)
|
87
|
+
}.to raise_error(Errno::EISDIR, /last_run_report.yaml/)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
27
91
|
end
|
@@ -126,8 +126,8 @@ describe Puppet::Indirector::Request do
|
|
126
126
|
expect(Puppet::Indirector::Request.new(:ind, :method, "http://host:543/", nil).port).to eq(543)
|
127
127
|
end
|
128
128
|
|
129
|
-
it "should default to the
|
130
|
-
Puppet[:
|
129
|
+
it "should default to the serverport if the URI scheme is 'puppet'" do
|
130
|
+
Puppet[:serverport] = "321"
|
131
131
|
expect(Puppet::Indirector::Request.new(:ind, :method, "puppet://host/", nil).port).to eq(321)
|
132
132
|
end
|
133
133
|
|
@@ -534,7 +534,7 @@ describe Puppet::Indirector::Request do
|
|
534
534
|
expect(request.server).to be_nil
|
535
535
|
expect(request.port).to be_nil
|
536
536
|
expect(Puppet.settings[:server]).not_to be_nil
|
537
|
-
expect(Puppet.settings[:
|
537
|
+
expect(Puppet.settings[:serverport]).not_to be_nil
|
538
538
|
end
|
539
539
|
end
|
540
540
|
end
|
@@ -552,7 +552,7 @@ describe Puppet::Indirector::Request do
|
|
552
552
|
req = Puppet::Indirector::Request.new('node', 'find', 'localhost', nil)
|
553
553
|
req.do_request() do |request|
|
554
554
|
expect(request.server).to eq(Puppet.settings[:server])
|
555
|
-
expect(request.port).to eq(Puppet.settings[:
|
555
|
+
expect(request.port).to eq(Puppet.settings[:serverport])
|
556
556
|
end
|
557
557
|
end
|
558
558
|
end
|
@@ -249,7 +249,7 @@ describe Puppet::Indirector::REST do
|
|
249
249
|
|
250
250
|
it "should default to :port for the port setting" do
|
251
251
|
expect(terminus_class).to receive(:port_setting).and_return(nil)
|
252
|
-
Puppet[:
|
252
|
+
Puppet[:serverport] = "543"
|
253
253
|
expect(terminus_class.port).to eq(543)
|
254
254
|
end
|
255
255
|
|
@@ -38,30 +38,30 @@ describe Puppet::Indirector::Yaml do
|
|
38
38
|
|
39
39
|
before :each do
|
40
40
|
Puppet[:clientyamldir] = dir
|
41
|
-
allow(Puppet.run_mode).to receive(:
|
41
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(false)
|
42
42
|
end
|
43
43
|
|
44
44
|
describe "when choosing file location" do
|
45
|
-
it "should use the server_datadir if the run_mode is
|
46
|
-
allow(Puppet.run_mode).to receive(:
|
45
|
+
it "should use the server_datadir if the run_mode is server" do
|
46
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(true)
|
47
47
|
Puppet[:yamldir] = serverdir
|
48
48
|
expect(terminus.path(:me)).to match(/^#{serverdir}/)
|
49
49
|
end
|
50
50
|
|
51
|
-
it "should use the client yamldir if the run_mode is not
|
52
|
-
allow(Puppet.run_mode).to receive(:
|
51
|
+
it "should use the client yamldir if the run_mode is not server" do
|
52
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(false)
|
53
53
|
Puppet[:clientyamldir] = clientdir
|
54
54
|
expect(terminus.path(:me)).to match(/^#{clientdir}/)
|
55
55
|
end
|
56
56
|
|
57
57
|
it "should use the extension if one is specified" do
|
58
|
-
allow(Puppet.run_mode).to receive(:
|
58
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(true)
|
59
59
|
Puppet[:yamldir] = serverdir
|
60
60
|
expect(terminus.path(:me,'.farfignewton')).to match(%r{\.farfignewton$})
|
61
61
|
end
|
62
62
|
|
63
63
|
it "should assume an extension of .yaml if none is specified" do
|
64
|
-
allow(Puppet.run_mode).to receive(:
|
64
|
+
allow(Puppet.run_mode).to receive(:server?).and_return(true)
|
65
65
|
Puppet[:yamldir] = serverdir
|
66
66
|
expect(terminus.path(:me)).to match(%r{\.yaml$})
|
67
67
|
end
|
@@ -112,8 +112,8 @@ describe Puppet::Indirector, "when registering an indirection" do
|
|
112
112
|
end
|
113
113
|
|
114
114
|
it "should pass any provided options to the indirection during initialization" do
|
115
|
-
expect(Puppet::Indirector::Indirection).to receive(:new).with(@thingie, :first, {:
|
116
|
-
@indirection = @thingie.indirects :first, :
|
115
|
+
expect(Puppet::Indirector::Indirection).to receive(:new).with(@thingie, :first, {:doc => 'some docs', :indirected_class => 'Thingie'})
|
116
|
+
@indirection = @thingie.indirects :first, :doc => 'some docs'
|
117
117
|
end
|
118
118
|
|
119
119
|
it "should extend the class to handle serialization" do
|
@@ -247,6 +247,21 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM =
|
|
247
247
|
expect(subject).to include :result => :success
|
248
248
|
graph_should_include 'pmtacceptance-mysql', nil => v('0.8.0')
|
249
249
|
end
|
250
|
+
|
251
|
+
context 'with an already installed dependency' do
|
252
|
+
before { preinstall('pmtacceptance-stdlib', '2.6.0') }
|
253
|
+
|
254
|
+
def options
|
255
|
+
super.merge(:version => '0.7.0')
|
256
|
+
end
|
257
|
+
|
258
|
+
it 'installs given version without errors and does not change version of dependency' do
|
259
|
+
expect(subject).to include :result => :success
|
260
|
+
graph_should_include 'pmtacceptance-mysql', nil => v('0.7.0')
|
261
|
+
expect(subject[:error]).to be_nil
|
262
|
+
graph_should_include 'pmtacceptance-stdlib', v('2.6.0') => v('2.6.0')
|
263
|
+
end
|
264
|
+
end
|
250
265
|
end
|
251
266
|
|
252
267
|
context 'with a --version that cannot satisfy' do
|
@@ -258,6 +273,20 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM =
|
|
258
273
|
expect(subject).to include :result => :failure
|
259
274
|
end
|
260
275
|
|
276
|
+
it 'prints a detailed error containing the modules that would not be satisfied' do
|
277
|
+
graph = double(SemanticPuppet::Dependency::Graph, :modules => ['pmtacceptance-mysql'])
|
278
|
+
exception = SemanticPuppet::Dependency::UnsatisfiableGraph.new(graph)
|
279
|
+
allow(exception).to receive(:respond_to?).and_return(true)
|
280
|
+
allow(exception).to receive(:unsatisfied).and_return('pmtacceptance-mysql')
|
281
|
+
allow(SemanticPuppet::Dependency).to receive(:resolve).and_raise(exception)
|
282
|
+
|
283
|
+
expect(subject[:error]).to include(:multiline)
|
284
|
+
expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (> 1.0.0)")
|
285
|
+
expect(subject[:error][:multiline]).to include("The requested version cannot satisfy one or more of the following installed modules:")
|
286
|
+
expect(subject[:error][:multiline]).to include("pmtacceptance-keystone, expects 'pmtacceptance-mysql': >=0.6.1 <1.0.0")
|
287
|
+
expect(subject[:error][:multiline]).to include("Use `puppet module install 'pmtacceptance-mysql' --ignore-dependencies` to install only this module")
|
288
|
+
end
|
289
|
+
|
261
290
|
context 'with --ignore-dependencies' do
|
262
291
|
def options
|
263
292
|
super.merge(:ignore_dependencies => true)
|
@@ -278,6 +307,43 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM =
|
|
278
307
|
graph_should_include 'pmtacceptance-mysql', nil => v('2.1.0')
|
279
308
|
end
|
280
309
|
end
|
310
|
+
|
311
|
+
context 'with an already installed dependency' do
|
312
|
+
let(:graph) {
|
313
|
+
double(SemanticPuppet::Dependency::Graph,
|
314
|
+
:dependencies => {
|
315
|
+
'pmtacceptance-mysql' => {
|
316
|
+
:version => '2.1.0'
|
317
|
+
}
|
318
|
+
},
|
319
|
+
:modules => ['pmtacceptance-mysql'],
|
320
|
+
:unsatisfied => 'pmtacceptance-stdlib'
|
321
|
+
)
|
322
|
+
}
|
323
|
+
|
324
|
+
let(:unsatisfiable_graph_exception) { SemanticPuppet::Dependency::UnsatisfiableGraph.new(graph) }
|
325
|
+
|
326
|
+
before do
|
327
|
+
allow(SemanticPuppet::Dependency).to receive(:resolve).and_raise(unsatisfiable_graph_exception)
|
328
|
+
allow(unsatisfiable_graph_exception).to receive(:respond_to?).and_return(true)
|
329
|
+
allow(unsatisfiable_graph_exception).to receive(:unsatisfied).and_return(graph.unsatisfied)
|
330
|
+
|
331
|
+
preinstall('pmtacceptance-stdlib', '2.6.0')
|
332
|
+
end
|
333
|
+
|
334
|
+
def options
|
335
|
+
super.merge(:version => '2.1.0')
|
336
|
+
end
|
337
|
+
|
338
|
+
it 'fails to install and outputs a multiline error containing the versions, expectations and workaround' do
|
339
|
+
expect(subject).to include :result => :failure
|
340
|
+
expect(subject[:error]).to include(:multiline)
|
341
|
+
expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (v2.1.0)")
|
342
|
+
expect(subject[:error][:multiline]).to include("The requested version cannot satisfy one or more of the following installed modules:")
|
343
|
+
expect(subject[:error][:multiline]).to include("pmtacceptance-stdlib, installed: 2.6.0, expected: >= 2.2.1")
|
344
|
+
expect(subject[:error][:multiline]).to include("Use `puppet module install 'pmtacceptance-mysql' --ignore-dependencies` to install only this module")
|
345
|
+
end
|
346
|
+
end
|
281
347
|
end
|
282
348
|
end
|
283
349
|
|