puppet 6.18.0-universal-darwin → 6.21.1-universal-darwin
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
@@ -663,4 +663,23 @@ class amod::bad_type {
|
|
663
663
|
end
|
664
664
|
end
|
665
665
|
end
|
666
|
+
|
667
|
+
context 'rich data' do
|
668
|
+
it "calls a deferred 4x function" do
|
669
|
+
apply.command_line.args = ['-e', 'notify { "deferred3x": message => Deferred("join", [[1,2,3], ":"]) }']
|
670
|
+
|
671
|
+
expect {
|
672
|
+
apply.run
|
673
|
+
}.to exit_with(0) # for some reason apply returns 0 instead of 2
|
674
|
+
.and output(%r{Notice: /Stage\[main\]/Main/Notify\[deferred3x\]/message: defined 'message' as '1:2:3'}).to_stdout
|
675
|
+
end
|
676
|
+
|
677
|
+
it "calls a deferred 3x function" do
|
678
|
+
apply.command_line.args = ['-e', 'notify { "deferred4x": message => Deferred("sprintf", ["%s", "I am deferred"]) }']
|
679
|
+
expect {
|
680
|
+
apply.run
|
681
|
+
}.to exit_with(0) # for some reason apply returns 0 instead of 2
|
682
|
+
.and output(%r{Notice: /Stage\[main\]/Main/Notify\[deferred4x\]/message: defined 'message' as 'I am deferred'}).to_stdout
|
683
|
+
end
|
684
|
+
end
|
666
685
|
end
|
@@ -35,7 +35,7 @@ describe "puppet filebucket", unless: Puppet::Util::Platform.jruby? do
|
|
35
35
|
|
36
36
|
it "backs up text files to the filebucket server" do
|
37
37
|
server.start_server do |port|
|
38
|
-
Puppet[:
|
38
|
+
Puppet[:serverport] = port
|
39
39
|
expect {
|
40
40
|
filebucket.command_line.args = ['backup', backup_file]
|
41
41
|
filebucket.run
|
@@ -56,7 +56,7 @@ describe "puppet filebucket", unless: Puppet::Util::Platform.jruby? do
|
|
56
56
|
File.binwrite(backup_file, binary)
|
57
57
|
|
58
58
|
server.start_server do |port|
|
59
|
-
Puppet[:
|
59
|
+
Puppet[:serverport] = port
|
60
60
|
expect {
|
61
61
|
filebucket.command_line.args = ['backup', backup_file]
|
62
62
|
filebucket.run
|
@@ -75,7 +75,7 @@ describe "puppet filebucket", unless: Puppet::Util::Platform.jruby? do
|
|
75
75
|
File.binwrite(backup_file, utf8)
|
76
76
|
|
77
77
|
server.start_server do |port|
|
78
|
-
Puppet[:
|
78
|
+
Puppet[:serverport] = port
|
79
79
|
expect {
|
80
80
|
filebucket.command_line.args = ['backup', backup_file]
|
81
81
|
filebucket.run
|
@@ -95,7 +95,7 @@ describe "puppet filebucket", unless: Puppet::Util::Platform.jruby? do
|
|
95
95
|
}
|
96
96
|
|
97
97
|
server.start_server(mounts: {filebucket: file_exists_handler}) do |port|
|
98
|
-
Puppet[:
|
98
|
+
Puppet[:serverport] = port
|
99
99
|
expect {
|
100
100
|
filebucket.command_line.args = ['backup', backup_file]
|
101
101
|
filebucket.run
|
@@ -114,7 +114,7 @@ describe "puppet filebucket", unless: Puppet::Util::Platform.jruby? do
|
|
114
114
|
}
|
115
115
|
|
116
116
|
server.start_server(mounts: {filebucket: get_handler}) do |port|
|
117
|
-
Puppet[:
|
117
|
+
Puppet[:serverport] = port
|
118
118
|
expect {
|
119
119
|
filebucket.command_line.args = ['get', 'fac251367c9e083c6b1f0f3181']
|
120
120
|
filebucket.run
|
@@ -137,7 +137,7 @@ describe "puppet filebucket", unless: Puppet::Util::Platform.jruby? do
|
|
137
137
|
}
|
138
138
|
|
139
139
|
server.start_server(mounts: {filebucket: get_handler}) do |port|
|
140
|
-
Puppet[:
|
140
|
+
Puppet[:serverport] = port
|
141
141
|
expect {
|
142
142
|
filebucket.command_line.args = ['diff', 'fac251367c9e083c6b1f0f3181', backup_file, '--remote']
|
143
143
|
filebucket.run
|
@@ -165,7 +165,7 @@ describe "puppet filebucket", unless: Puppet::Util::Platform.jruby? do
|
|
165
165
|
}
|
166
166
|
|
167
167
|
server.start_server(mounts: {filebucket: get_handler}) do |port|
|
168
|
-
Puppet[:
|
168
|
+
Puppet[:serverport] = port
|
169
169
|
expect {
|
170
170
|
filebucket.command_line.args = ['diff', 'd3b07384d113edec49eaa6238ad5ff00', "99b999207e287afffc86c053e5693247", '--remote']
|
171
171
|
filebucket.run
|
@@ -17,7 +17,7 @@ describe "puppet plugin" do
|
|
17
17
|
}
|
18
18
|
|
19
19
|
server.start_server(mounts: {file_metadatas: current_version_handler}) do |port|
|
20
|
-
Puppet[:
|
20
|
+
Puppet[:serverport] = port
|
21
21
|
expect {
|
22
22
|
plugin.command_line.args << 'download'
|
23
23
|
plugin.run
|
@@ -36,7 +36,7 @@ describe "puppet plugin" do
|
|
36
36
|
}
|
37
37
|
|
38
38
|
server.start_server(mounts: {file_metadatas: no_locales_handler}) do |port|
|
39
|
-
Puppet[:
|
39
|
+
Puppet[:serverport] = port
|
40
40
|
expect {
|
41
41
|
plugin.command_line.args << 'download'
|
42
42
|
plugin.run
|
@@ -59,7 +59,7 @@ describe "puppet plugin" do
|
|
59
59
|
|
60
60
|
server.start_server(mounts: {file_metadatas: current_version_handler}) do |port|
|
61
61
|
Puppet[:environment] = 'doesnotexistontheagent'
|
62
|
-
Puppet[:
|
62
|
+
Puppet[:serverport] = port
|
63
63
|
expect {
|
64
64
|
plugin.command_line.args << 'download'
|
65
65
|
plugin.run
|
@@ -60,6 +60,20 @@ describe Puppet::Configurer do
|
|
60
60
|
expect(summary["time"]["last_run"]).to be_between(t1, t2)
|
61
61
|
end
|
62
62
|
|
63
|
+
it "applies a cached catalog if pluginsync fails when usecacheonfailure is true" do
|
64
|
+
Puppet[:ignore_plugin_errors] = false
|
65
|
+
|
66
|
+
Puppet[:use_cached_catalog] = false
|
67
|
+
Puppet[:usecacheonfailure] = true
|
68
|
+
|
69
|
+
report = Puppet::Transaction::Report.new
|
70
|
+
expect_any_instance_of(Puppet::Configurer::Downloader).to receive(:evaluate).and_raise(Puppet::Error, 'Failed to retrieve: some file')
|
71
|
+
expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(@catalog)
|
72
|
+
|
73
|
+
@configurer.run(pluginsync: true, report: report)
|
74
|
+
expect(report.cached_catalog_status).to eq('on_failure')
|
75
|
+
end
|
76
|
+
|
63
77
|
describe 'resubmitting facts' do
|
64
78
|
context 'when resubmit_facts is set to false' do
|
65
79
|
it 'should not send data' do
|
@@ -23,6 +23,19 @@ describe "Puppet defaults" do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
describe "when setting the :masterport" do
|
27
|
+
it "should also set :serverport to the same value" do
|
28
|
+
Puppet.settings[:masterport] = 3939
|
29
|
+
expect(Puppet.settings[:serverport]).to eq(3939)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should not overwrite :serverport if explicitly set" do
|
33
|
+
Puppet.settings[:serverport] = 9000
|
34
|
+
Puppet.settings[:masterport] = 9001
|
35
|
+
expect(Puppet.settings[:serverport]).to eq(9000)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
26
39
|
describe "when setting the :factpath" do
|
27
40
|
it "should add the :factpath to Facter's search paths" do
|
28
41
|
expect(Facter).to receive(:search).with("/my/fact/path")
|
@@ -149,13 +162,18 @@ describe "Puppet defaults" do
|
|
149
162
|
expect(Puppet.settings[:report_server]).to eq("server")
|
150
163
|
end
|
151
164
|
|
165
|
+
it "should use the default serverport value when report port is unspecified" do
|
166
|
+
Puppet.settings[:serverport] = "1234"
|
167
|
+
expect(Puppet.settings[:report_port]).to eq("1234")
|
168
|
+
end
|
169
|
+
|
152
170
|
it "should use the default masterport value when report port is unspecified" do
|
153
171
|
Puppet.settings[:masterport] = "1234"
|
154
172
|
expect(Puppet.settings[:report_port]).to eq("1234")
|
155
173
|
end
|
156
174
|
|
157
175
|
it "should use report_port when set" do
|
158
|
-
Puppet.settings[:
|
176
|
+
Puppet.settings[:serverport] = "1234"
|
159
177
|
Puppet.settings[:report_port] = "5678"
|
160
178
|
expect(Puppet.settings[:report_port]).to eq("5678")
|
161
179
|
end
|
@@ -12,7 +12,7 @@ describe "setting hooks" do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it "accesses correct directory environment settings after initializing a setting with an on_write hook" do
|
15
|
-
expect(Puppet.settings.setting(:
|
15
|
+
expect(Puppet.settings.setting(:strict).call_hook).to eq(:on_write_only)
|
16
16
|
|
17
17
|
File.open(File.join(confdir, "puppet.conf"), "w:UTF-8") do |f|
|
18
18
|
f.puts("environmentpath=#{environmentpath}")
|
@@ -11,12 +11,8 @@ describe Puppet::Resource::TypeCollection do
|
|
11
11
|
@dir = tmpfile("autoload_testing")
|
12
12
|
FileUtils.mkdir_p @dir
|
13
13
|
|
14
|
-
loader =
|
15
|
-
|
16
|
-
allow(loader).to receive(:set_entry)
|
17
|
-
|
18
|
-
loaders = Object.new
|
19
|
-
expect(loaders).to receive(:runtime3_type_loader).at_most(:once).and_return(loader)
|
14
|
+
loader = double('loader', load: nil, set_entry: nil)
|
15
|
+
loaders = double('loaders', runtime3_type_loader: loader)
|
20
16
|
expect(Puppet::Pops::Loaders).to receive(:loaders).at_most(:once).and_return(loaders)
|
21
17
|
|
22
18
|
environment = Puppet::Node::Environment.create(:env, [@dir])
|
@@ -61,7 +61,7 @@ describe Puppet::Transaction do
|
|
61
61
|
|
62
62
|
transaction = Puppet::Transaction.new(catalog, nil, Puppet::Graph::SequentialPrioritizer.new)
|
63
63
|
|
64
|
-
expect(resource).not_to receive(:
|
64
|
+
expect(resource).not_to receive(:retrieve)
|
65
65
|
|
66
66
|
transaction.evaluate
|
67
67
|
end
|
@@ -86,7 +86,7 @@ describe Puppet::Transaction do
|
|
86
86
|
|
87
87
|
transaction = Puppet::Transaction.new(catalog, nil, Puppet::Graph::SequentialPrioritizer.new)
|
88
88
|
|
89
|
-
expect(resource).not_to receive(:
|
89
|
+
expect(resource).not_to receive(:retrieve)
|
90
90
|
|
91
91
|
transaction.evaluate
|
92
92
|
end
|
@@ -315,16 +315,14 @@ describe Puppet::Transaction do
|
|
315
315
|
file1 = tmpfile("file1")
|
316
316
|
file2 = tmpfile("file2")
|
317
317
|
|
318
|
+
expect(Puppet::FileSystem).to_not be_exist(file2)
|
319
|
+
|
318
320
|
exec1 = Puppet::Type.type(:exec).new(
|
319
321
|
:name => "exec1",
|
320
322
|
:path => ENV["PATH"],
|
321
323
|
:command => touch(file1),
|
322
324
|
)
|
323
325
|
|
324
|
-
allow(exec1).to receive(:eval_generate).and_return(
|
325
|
-
[ Puppet::Type.type(:notify).new(:name => "eval1_notify") ]
|
326
|
-
)
|
327
|
-
|
328
326
|
exec2 = Puppet::Type.type(:exec).new(
|
329
327
|
:name => "exec2",
|
330
328
|
:path => ENV["PATH"],
|
@@ -332,9 +330,6 @@ describe Puppet::Transaction do
|
|
332
330
|
:refreshonly => true,
|
333
331
|
:subscribe => exec1,
|
334
332
|
)
|
335
|
-
allow(exec2).to receive(:eval_generate).and_return(
|
336
|
-
[ Puppet::Type.type(:notify).new(:name => "eval2_notify") ]
|
337
|
-
)
|
338
333
|
|
339
334
|
Puppet[:tags] = "exec"
|
340
335
|
catalog = mk_catalog(exec1, exec2)
|
@@ -33,8 +33,8 @@ describe Puppet::Util::Windows::ADSI::User,
|
|
33
33
|
|
34
34
|
describe '.[]' do
|
35
35
|
it 'should return string attributes as UTF-8' do
|
36
|
-
|
37
|
-
expect(
|
36
|
+
user = Puppet::Util::Windows::ADSI::User.new('Guest')
|
37
|
+
expect(user['Description'].encoding).to eq(Encoding::UTF_8)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -157,7 +157,9 @@ describe Puppet::Util::Windows::ADSI::Group,
|
|
157
157
|
|
158
158
|
# touch the native_object member to have it lazily loaded, so COM objects can be stubbed
|
159
159
|
admins.native_object
|
160
|
-
|
160
|
+
without_partial_double_verification do
|
161
|
+
allow(admins.native_object).to receive(:Members).and_return(members)
|
162
|
+
end
|
161
163
|
|
162
164
|
# well-known NULL SID
|
163
165
|
expect(admins.members[0].sid).to eq('S-1-0-0')
|
@@ -146,16 +146,6 @@ describe Puppet::Util::Windows::Registry do
|
|
146
146
|
utf_8_bytes = ENDASH_UTF_8 + TM_UTF_8
|
147
147
|
utf_8_str = utf_8_bytes.pack('c*').force_encoding(Encoding::UTF_8)
|
148
148
|
|
149
|
-
# this problematic Ruby codepath triggers a conversion of UTF-16LE to
|
150
|
-
# a local codepage which can totally break when that codepage has no
|
151
|
-
# conversion from the given UTF-16LE characters to local codepage
|
152
|
-
# a prime example is that IBM437 has no conversion from a Unicode en-dash
|
153
|
-
expect(Win32::Registry).not_to receive(:export_string)
|
154
|
-
|
155
|
-
# also, expect that we're using our variants of keys / values, not Rubys
|
156
|
-
expect(Win32::Registry).not_to receive(:each_key)
|
157
|
-
expect(Win32::Registry).not_to receive(:each_value)
|
158
|
-
|
159
149
|
hklm.create("#{puppet_key}\\#{subkey_name}", Win32::Registry::KEY_ALL_ACCESS | regsam) do |reg|
|
160
150
|
reg.write("#{guid}", Win32::Registry::REG_SZ, utf_16_str)
|
161
151
|
|
@@ -12,7 +12,12 @@ module PuppetSpec::Settings
|
|
12
12
|
:codedir => { :type => :directory, :default => "test", :desc => "codedir" },
|
13
13
|
:vardir => { :type => :directory, :default => "test", :desc => "vardir" },
|
14
14
|
:rundir => { :type => :directory, :default => "test", :desc => "rundir" },
|
15
|
-
}
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
TEST_APP_DEFAULT_VALUES = TEST_APP_DEFAULT_DEFINITIONS.inject({}) do |memo, (key, value)|
|
18
|
+
memo[key] = value[:default]
|
19
|
+
memo
|
20
|
+
end.freeze
|
16
21
|
|
17
22
|
def set_puppet_conf(confdir, settings)
|
18
23
|
write_file(File.join(confdir, "puppet.conf"), settings)
|
@@ -187,6 +187,8 @@ shared_context 'types_setup' do
|
|
187
187
|
result << Puppet::Pops::Types::PURIType
|
188
188
|
result << Puppet::Pops::Types::PTupleType.new([tf.rich_data])
|
189
189
|
result << Puppet::Pops::Types::PObjectType
|
190
|
+
result << Puppet::Pops::Types::PTypeType
|
191
|
+
result << Puppet::Pops::Types::PTypeSetType
|
190
192
|
result
|
191
193
|
end
|
192
194
|
def rich_data_compatible_types
|
data/spec/spec_helper.rb
CHANGED
@@ -84,10 +84,7 @@ RSpec.configure do |config|
|
|
84
84
|
config.filter_run_when_matching :focus
|
85
85
|
|
86
86
|
config.mock_with :rspec do |mocks|
|
87
|
-
|
88
|
-
# need to go through and fix those tests first before it can be enabled
|
89
|
-
# for real.
|
90
|
-
mocks.verify_partial_doubles = false
|
87
|
+
mocks.verify_partial_doubles = true
|
91
88
|
end
|
92
89
|
|
93
90
|
tmpdir = Puppet::FileSystem.expand_path(Dir.mktmpdir("rspecrun"))
|
data/spec/unit/agent_spec.rb
CHANGED
@@ -3,9 +3,13 @@ require 'puppet/agent'
|
|
3
3
|
require 'puppet/configurer'
|
4
4
|
|
5
5
|
class AgentTestClient
|
6
|
-
def
|
6
|
+
def initialize(transaction_uuid = nil, job_id = nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
def run(client_args)
|
7
10
|
# no-op
|
8
11
|
end
|
12
|
+
|
9
13
|
def stop
|
10
14
|
# no-op
|
11
15
|
end
|
@@ -51,11 +55,10 @@ describe Puppet::Agent do
|
|
51
55
|
|
52
56
|
it "should create an instance of its client class and run it when asked to run" do
|
53
57
|
client = double('client')
|
54
|
-
|
55
|
-
|
56
|
-
expect(client).to receive(:run)
|
58
|
+
allow(AgentTestClient).to receive(:new).with(nil, nil).and_return(client)
|
57
59
|
|
58
60
|
allow(@agent).to receive(:disabled?).and_return(false)
|
61
|
+
expect(client).to receive(:run)
|
59
62
|
@agent.run
|
60
63
|
end
|
61
64
|
|
@@ -92,7 +95,6 @@ describe Puppet::Agent do
|
|
92
95
|
|
93
96
|
describe "when being run" do
|
94
97
|
before do
|
95
|
-
allow(AgentTestClient).to receive(:lockfile_path).and_return("/my/lock")
|
96
98
|
allow(@agent).to receive(:disabled?).and_return(false)
|
97
99
|
end
|
98
100
|
|
@@ -188,7 +190,7 @@ describe Puppet::Agent do
|
|
188
190
|
allow(lockfile).to receive(:lock).and_return(false)
|
189
191
|
end
|
190
192
|
|
191
|
-
it "should notify that a run is already in
|
193
|
+
it "should notify that a run is already in progress" do
|
192
194
|
client = AgentTestClient.new
|
193
195
|
expect(AgentTestClient).to receive(:new).and_return(client)
|
194
196
|
expect(Puppet).to receive(:notice).with(/Run of .* already in progress; skipping .* exists/)
|
@@ -202,7 +202,6 @@ describe Puppet::Application::Agent do
|
|
202
202
|
allow(Puppet::Resource::Catalog.indirection).to receive(:terminus_class=)
|
203
203
|
allow(Puppet::Resource::Catalog.indirection).to receive(:cache_class=)
|
204
204
|
allow(Puppet::Node::Facts.indirection).to receive(:terminus_class=)
|
205
|
-
allow(Puppet).to receive(:settraps)
|
206
205
|
end
|
207
206
|
|
208
207
|
it "should not run with extra arguments" do
|
@@ -1,12 +1,232 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
require 'puppet/application/config'
|
3
4
|
|
4
5
|
describe Puppet::Application::Config do
|
5
|
-
|
6
|
-
|
6
|
+
include PuppetSpec::Files
|
7
|
+
|
8
|
+
# different UTF-8 widths
|
9
|
+
# 1-byte A
|
10
|
+
# 2-byte ۿ - http://www.fileformat.info/info/unicode/char/06ff/index.htm - 0xDB 0xBF / 219 191
|
11
|
+
# 3-byte ᚠ - http://www.fileformat.info/info/unicode/char/16A0/index.htm - 0xE1 0x9A 0xA0 / 225 154 160
|
12
|
+
# 4-byte 𠜎 - http://www.fileformat.info/info/unicode/char/2070E/index.htm - 0xF0 0xA0 0x9C 0x8E / 240 160 156 142
|
13
|
+
MIXED_UTF8 = "A\u06FF\u16A0\u{2070E}" # Aۿᚠ𠜎
|
14
|
+
|
15
|
+
let(:app) { Puppet::Application[:config] }
|
16
|
+
|
17
|
+
before :each do
|
18
|
+
Puppet[:config] = tmpfile('config')
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize_app(args)
|
22
|
+
app.command_line.args = args
|
23
|
+
# ensure global defaults are initialized prior to app defaults
|
24
|
+
Puppet.initialize_settings(args)
|
25
|
+
end
|
26
|
+
|
27
|
+
def read_utf8(path)
|
28
|
+
File.read(path, :encoding => 'UTF-8')
|
29
|
+
end
|
30
|
+
|
31
|
+
def write_utf8(path, content)
|
32
|
+
File.write(path, content, 0, :encoding => 'UTF-8')
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when printing" do
|
36
|
+
it "prints a value" do
|
37
|
+
initialize_app(%w[print certname])
|
38
|
+
|
39
|
+
expect {
|
40
|
+
app.run
|
41
|
+
}.to exit_with(0)
|
42
|
+
.and output(a_string_matching(Puppet[:certname])).to_stdout
|
43
|
+
end
|
44
|
+
|
45
|
+
it "prints a value from a section" do
|
46
|
+
File.write(Puppet[:config], <<~END)
|
47
|
+
[main]
|
48
|
+
external_nodes=none
|
49
|
+
[server]
|
50
|
+
external_nodes=exec
|
51
|
+
END
|
52
|
+
|
53
|
+
initialize_app(%w[print external_nodes --section server])
|
54
|
+
|
55
|
+
expect {
|
56
|
+
app.run
|
57
|
+
}.to exit_with(0)
|
58
|
+
.and output(a_string_matching('exec')).to_stdout
|
59
|
+
end
|
60
|
+
|
61
|
+
it "doesn't require the environment to exist" do
|
62
|
+
initialize_app(%w[print certname --environment doesntexist])
|
63
|
+
|
64
|
+
expect {
|
65
|
+
app.run
|
66
|
+
}.to exit_with(0)
|
67
|
+
.and output(a_string_matching(Puppet[:certname])).to_stdout
|
68
|
+
end
|
7
69
|
end
|
8
70
|
|
9
|
-
|
10
|
-
|
71
|
+
context "when setting" do
|
72
|
+
it "sets a value in its config file" do
|
73
|
+
initialize_app(%w[set certname www.example.com])
|
74
|
+
|
75
|
+
expect {
|
76
|
+
app.run
|
77
|
+
}.to exit_with(0)
|
78
|
+
|
79
|
+
expect(File.read(Puppet[:config])).to eq("[main]\ncertname = www.example.com\n")
|
80
|
+
end
|
81
|
+
|
82
|
+
it "sets a value in the server section" do
|
83
|
+
initialize_app(%w[set external_nodes exec --section server])
|
84
|
+
|
85
|
+
expect {
|
86
|
+
app.run
|
87
|
+
}.to exit_with(0)
|
88
|
+
|
89
|
+
expect(File.read(Puppet[:config])).to eq("[server]\nexternal_nodes = exec\n")
|
90
|
+
end
|
91
|
+
|
92
|
+
{
|
93
|
+
%w[certname WWW.EXAMPLE.COM] => /Certificate names must be lower case/,
|
94
|
+
%w[log_level all] => /Invalid loglevel all/,
|
95
|
+
%w[disable_warnings true] => /Cannot disable unrecognized warning types 'true'/,
|
96
|
+
%w[strict on] => /Invalid value 'on' for parameter strict/,
|
97
|
+
%w[digest_algorithm rot13] => /Invalid value 'rot13' for parameter digest_algorithm/,
|
98
|
+
%w[http_proxy_password a#b] => /Passwords set in the http_proxy_password setting must be valid as part of a URL/,
|
99
|
+
}.each_pair do |args, message|
|
100
|
+
it "rejects #{args.join(' ')}" do
|
101
|
+
initialize_app(['set', *args])
|
102
|
+
|
103
|
+
expect {
|
104
|
+
app.run
|
105
|
+
}.to exit_with(1)
|
106
|
+
.and output(message).to_stderr
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'sets unknown settings' do
|
111
|
+
initialize_app(['set', 'notarealsetting', 'true'])
|
112
|
+
|
113
|
+
expect {
|
114
|
+
app.run
|
115
|
+
}.to exit_with(0)
|
116
|
+
|
117
|
+
expect(File.read(Puppet[:config])).to eq("[main]\nnotarealsetting = true\n")
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context "when deleting" do
|
122
|
+
it "deletes a value" do
|
123
|
+
initialize_app(%w[delete external_nodes])
|
124
|
+
|
125
|
+
File.write(Puppet[:config], <<~END)
|
126
|
+
[main]
|
127
|
+
external_nodes=none
|
128
|
+
END
|
129
|
+
|
130
|
+
expect {
|
131
|
+
app.run
|
132
|
+
}.to exit_with(0)
|
133
|
+
.and output(/Deleted setting from 'main': 'external_nodes=none'/).to_stdout
|
134
|
+
|
135
|
+
expect(File.read(Puppet[:config])).to eq("[main]\n")
|
136
|
+
end
|
137
|
+
|
138
|
+
it "warns when deleting a value that isn't set" do
|
139
|
+
initialize_app(%w[delete external_nodes])
|
140
|
+
|
141
|
+
File.write(Puppet[:config], "")
|
142
|
+
|
143
|
+
expect {
|
144
|
+
app.run
|
145
|
+
}.to exit_with(0)
|
146
|
+
.and output(a_string_matching("Warning: No setting found in configuration file for section 'main' setting name 'external_nodes'")).to_stderr
|
147
|
+
|
148
|
+
expect(File.read(Puppet[:config])).to eq("")
|
149
|
+
end
|
150
|
+
|
151
|
+
it "deletes a value from main" do
|
152
|
+
initialize_app(%w[delete external_nodes])
|
153
|
+
|
154
|
+
File.write(Puppet[:config], <<~END)
|
155
|
+
[main]
|
156
|
+
external_nodes=none
|
157
|
+
END
|
158
|
+
|
159
|
+
expect {
|
160
|
+
app.run
|
161
|
+
}.to exit_with(0)
|
162
|
+
.and output(/Deleted setting from 'main': 'external_nodes=none'/).to_stdout
|
163
|
+
|
164
|
+
expect(File.read(Puppet[:config])).to eq("[main]\n")
|
165
|
+
end
|
166
|
+
|
167
|
+
it "deletes a value from main a section" do
|
168
|
+
initialize_app(%w[delete external_nodes --section server])
|
169
|
+
|
170
|
+
File.write(Puppet[:config], <<~END)
|
171
|
+
[main]
|
172
|
+
external_nodes=none
|
173
|
+
[server]
|
174
|
+
external_nodes=exec
|
175
|
+
END
|
176
|
+
|
177
|
+
expect {
|
178
|
+
app.run
|
179
|
+
}.to exit_with(0)
|
180
|
+
.and output(/Deleted setting from 'server': 'external_nodes'/).to_stdout
|
181
|
+
|
182
|
+
expect(File.read(Puppet[:config])).to eq("[main]\nexternal_nodes=none\n[server]\n")
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
context "when managing UTF-8 values" do
|
187
|
+
it "reads a UTF-8 value" do
|
188
|
+
write_utf8(Puppet[:config], <<~EOF)
|
189
|
+
[main]
|
190
|
+
tags=#{MIXED_UTF8}
|
191
|
+
EOF
|
192
|
+
|
193
|
+
initialize_app(%w[print tags])
|
194
|
+
|
195
|
+
expect {
|
196
|
+
app.run
|
197
|
+
}.to exit_with(0)
|
198
|
+
.and output("#{MIXED_UTF8}\n").to_stdout
|
199
|
+
end
|
200
|
+
|
201
|
+
it "sets a UTF-8 value" do
|
202
|
+
initialize_app(['set', 'tags', MIXED_UTF8])
|
203
|
+
|
204
|
+
expect {
|
205
|
+
app.run
|
206
|
+
}.to exit_with(0)
|
207
|
+
|
208
|
+
expect(read_utf8(Puppet[:config])).to eq(<<~EOF)
|
209
|
+
[main]
|
210
|
+
tags = #{MIXED_UTF8}
|
211
|
+
EOF
|
212
|
+
end
|
213
|
+
|
214
|
+
it "deletes a UTF-8 value" do
|
215
|
+
initialize_app(%w[delete tags])
|
216
|
+
|
217
|
+
write_utf8(Puppet[:config], <<~EOF)
|
218
|
+
[main]
|
219
|
+
tags=#{MIXED_UTF8}
|
220
|
+
EOF
|
221
|
+
|
222
|
+
expect {
|
223
|
+
app.run
|
224
|
+
}.to exit_with(0)
|
225
|
+
.and output(/Deleted setting from 'main': 'tags=#{MIXED_UTF8}'/).to_stdout
|
226
|
+
|
227
|
+
expect(read_utf8(Puppet[:config])).to eq(<<~EOF)
|
228
|
+
[main]
|
229
|
+
EOF
|
230
|
+
end
|
11
231
|
end
|
12
232
|
end
|