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
@@ -138,7 +138,7 @@ trace = true
|
|
138
138
|
Puppet[:log_level] = 'info'
|
139
139
|
allow(Puppet::FileSystem).to receive(:open).with(path, anything, anything).and_yield(StringIO.new)
|
140
140
|
expect {
|
141
|
-
subject.set('
|
141
|
+
subject.set('certname', 'bar')
|
142
142
|
}.to output("\e[1;33mResolving settings from section 'main' in environment 'production'\e[0m\n").to_stderr
|
143
143
|
end
|
144
144
|
|
@@ -146,19 +146,19 @@ trace = true
|
|
146
146
|
Puppet[:log_level] = 'info'
|
147
147
|
allow(Puppet::FileSystem).to receive(:open).with(path, anything, anything).and_yield(StringIO.new)
|
148
148
|
expect {
|
149
|
-
subject.set('
|
149
|
+
subject.set('certname', 'bar', {:section => "baz"})
|
150
150
|
}.to output("\e[1;33mResolving settings from section 'baz' in environment 'production'\e[0m\n").to_stderr
|
151
151
|
end
|
152
152
|
|
153
153
|
it "writes to the correct puppet config file" do
|
154
154
|
expect(Puppet::FileSystem).to receive(:open).with(path, anything, anything)
|
155
|
-
subject.set('
|
155
|
+
subject.set('certname', 'bar')
|
156
156
|
end
|
157
157
|
|
158
158
|
it "creates a config file if one does not exist" do
|
159
159
|
allow(Puppet::FileSystem).to receive(:open).with(path, anything, anything).and_yield(StringIO.new)
|
160
160
|
expect(Puppet::FileSystem).to receive(:touch).with(path)
|
161
|
-
subject.set('
|
161
|
+
subject.set('certname', 'bar')
|
162
162
|
end
|
163
163
|
|
164
164
|
it "sets the supplied config/value in the default section (main)" do
|
@@ -167,8 +167,8 @@ trace = true
|
|
167
167
|
manipulator = Puppet::Settings::IniFile::Manipulator.new(config)
|
168
168
|
allow(Puppet::Settings::IniFile::Manipulator).to receive(:new).and_return(manipulator)
|
169
169
|
|
170
|
-
expect(manipulator).to receive(:set).with("main", "
|
171
|
-
subject.set('
|
170
|
+
expect(manipulator).to receive(:set).with("main", "certname", "bar")
|
171
|
+
subject.set('certname', 'bar')
|
172
172
|
end
|
173
173
|
|
174
174
|
it "sets the value in the supplied section" do
|
@@ -177,8 +177,8 @@ trace = true
|
|
177
177
|
manipulator = Puppet::Settings::IniFile::Manipulator.new(config)
|
178
178
|
allow(Puppet::Settings::IniFile::Manipulator).to receive(:new).and_return(manipulator)
|
179
179
|
|
180
|
-
expect(manipulator).to receive(:set).with("baz", "
|
181
|
-
subject.set('
|
180
|
+
expect(manipulator).to receive(:set).with("baz", "certname", "bar")
|
181
|
+
subject.set('certname', 'bar', {:section => "baz"})
|
182
182
|
end
|
183
183
|
|
184
184
|
it "does not duplicate an existing default section when a section is not specified" do
|
@@ -190,15 +190,48 @@ trace = true
|
|
190
190
|
myfile = StringIO.new(contents)
|
191
191
|
allow(Puppet::FileSystem).to receive(:open).with(path, anything, anything).and_yield(myfile)
|
192
192
|
|
193
|
-
subject.set('
|
193
|
+
subject.set('certname', 'bar')
|
194
194
|
|
195
|
-
expect(myfile.string).to match(/
|
195
|
+
expect(myfile.string).to match(/certname = bar/)
|
196
196
|
expect(myfile.string).not_to match(/main.*main/)
|
197
197
|
end
|
198
198
|
|
199
199
|
it "opens the file with UTF-8 encoding" do
|
200
200
|
expect(Puppet::FileSystem).to receive(:open).with(path, nil, 'r+:UTF-8')
|
201
|
-
subject.set('
|
201
|
+
subject.set('certname', 'bar')
|
202
|
+
end
|
203
|
+
|
204
|
+
it "sets settings into the [server] section when setting [master] section settings" do
|
205
|
+
initial_contents = <<~CONFIG
|
206
|
+
[master]
|
207
|
+
node_terminus = none
|
208
|
+
reports = log
|
209
|
+
CONFIG
|
210
|
+
|
211
|
+
myinitialfile = StringIO.new(initial_contents)
|
212
|
+
allow(Puppet::FileSystem).to receive(:open).with(path, anything, anything).and_yield(myinitialfile)
|
213
|
+
|
214
|
+
expect {
|
215
|
+
subject.set('node_terminus', 'exec', {:section => 'master'})
|
216
|
+
}.to output("Deleted setting from 'master': 'node_terminus = none', and adding it to 'server' section\n").to_stdout
|
217
|
+
|
218
|
+
expect(myinitialfile.string).to match(<<~CONFIG)
|
219
|
+
[master]
|
220
|
+
reports = log
|
221
|
+
[server]
|
222
|
+
node_terminus = exec
|
223
|
+
CONFIG
|
224
|
+
end
|
225
|
+
|
226
|
+
it "setting [master] section settings, sets settings into [server] section instead" do
|
227
|
+
myinitialfile = StringIO.new("")
|
228
|
+
allow(Puppet::FileSystem).to receive(:open).with(path, anything, anything).and_yield(myinitialfile)
|
229
|
+
subject.set('node_terminus', 'exec', {:section => 'master'})
|
230
|
+
|
231
|
+
expect(myinitialfile.string).to match(<<~CONFIG)
|
232
|
+
[server]
|
233
|
+
node_terminus = exec
|
234
|
+
CONFIG
|
202
235
|
end
|
203
236
|
end
|
204
237
|
|
@@ -249,6 +282,24 @@ trace = true
|
|
249
282
|
expect(Puppet).to receive(:warning).with("No setting found in configuration file for section 'main' setting name 'setting'")
|
250
283
|
subject.delete('setting', {:section => 'main'})
|
251
284
|
end
|
285
|
+
|
286
|
+
['master', 'server'].each do |section|
|
287
|
+
describe "when deleting from [#{section}] section" do
|
288
|
+
it "deletes section values from both [server] and [master] sections" do
|
289
|
+
allow(Puppet::FileSystem).to receive(:open).with(path, anything, anything).and_yield(StringIO.new)
|
290
|
+
config = Puppet::Settings::IniFile.new([Puppet::Settings::IniFile::DefaultSection.new])
|
291
|
+
manipulator = Puppet::Settings::IniFile::Manipulator.new(config)
|
292
|
+
allow(Puppet::Settings::IniFile::Manipulator).to receive(:new).and_return(manipulator)
|
293
|
+
|
294
|
+
expect(manipulator).to receive(:delete).with('master', 'setting').and_return('setting=value')
|
295
|
+
expect(manipulator).to receive(:delete).with('server', 'setting').and_return('setting=value')
|
296
|
+
expect {
|
297
|
+
subject.delete('setting', {:section => section})
|
298
|
+
}.to output(/Deleted setting from 'master': 'setting'\nDeleted setting from 'server': 'setting'\n/).to_stdout
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
252
303
|
end
|
253
304
|
|
254
305
|
shared_examples_for :config_printing_a_section do |section|
|
data/spec/unit/face/node_spec.rb
CHANGED
@@ -15,13 +15,6 @@ describe Puppet::Face[:node, '0.0.1'] do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
describe 'when running #clean' do
|
18
|
-
before :each do
|
19
|
-
allow(Puppet::Node::Facts.indirection).to receive(:terminus_class=)
|
20
|
-
allow(Puppet::Node::Facts.indirection).to receive(:cache_class=)
|
21
|
-
allow(Puppet::Node).to receive(:terminus_class=)
|
22
|
-
allow(Puppet::Node).to receive(:cache_class=)
|
23
|
-
end
|
24
|
-
|
25
18
|
it 'should invoke #cleanup' do
|
26
19
|
expect(subject).to receive(:cleanup).with('hostname')
|
27
20
|
subject.clean('hostname')
|
@@ -30,10 +23,6 @@ describe Puppet::Face[:node, '0.0.1'] do
|
|
30
23
|
|
31
24
|
describe "clean action" do
|
32
25
|
before :each do
|
33
|
-
allow(Puppet::Node::Facts.indirection).to receive(:terminus_class=)
|
34
|
-
allow(Puppet::Node::Facts.indirection).to receive(:cache_class=)
|
35
|
-
allow(Puppet::Node).to receive(:terminus_class=)
|
36
|
-
allow(Puppet::Node).to receive(:cache_class=)
|
37
26
|
allow(subject).to receive(:cleanup)
|
38
27
|
end
|
39
28
|
|
@@ -74,9 +63,9 @@ describe Puppet::Face[:node, '0.0.1'] do
|
|
74
63
|
subject.clean('hostname')
|
75
64
|
end
|
76
65
|
|
77
|
-
it "should run in
|
66
|
+
it "should run in server mode" do
|
78
67
|
subject.clean('hostname')
|
79
|
-
expect(Puppet.run_mode).to
|
68
|
+
expect(Puppet.run_mode).to be_server
|
80
69
|
end
|
81
70
|
|
82
71
|
it "should set node cache as yaml" do
|
@@ -87,7 +87,6 @@ describe Puppet::FileServing::Configuration::Parser do
|
|
87
87
|
before do
|
88
88
|
@mount = double('testmount', :name => "one", :validate => true)
|
89
89
|
expect(Puppet::FileServing::Mount::File).to receive(:new).with("one").and_return(@mount)
|
90
|
-
allow(@parser).to receive(:add_modules_mount)
|
91
90
|
end
|
92
91
|
|
93
92
|
it "should set the mount path to the path attribute from that section" do
|
@@ -266,9 +266,9 @@ describe Puppet::FileServing::Metadata, :uses_checksums => true do
|
|
266
266
|
path = tmpfile('bar')
|
267
267
|
FileUtils.touch(path)
|
268
268
|
|
269
|
-
allow(Puppet::Util::Windows::Security).to receive(:get_owner).with(path
|
270
|
-
allow(Puppet::Util::Windows::Security).to receive(:get_group).with(path
|
271
|
-
allow(Puppet::Util::Windows::Security).to receive(:get_mode).with(path
|
269
|
+
allow(Puppet::Util::Windows::Security).to receive(:get_owner).with(path).and_raise(invalid_error)
|
270
|
+
allow(Puppet::Util::Windows::Security).to receive(:get_group).with(path).and_raise(invalid_error)
|
271
|
+
allow(Puppet::Util::Windows::Security).to receive(:get_mode).with(path).and_raise(invalid_error)
|
272
272
|
|
273
273
|
stat = Puppet::FileSystem.stat(path)
|
274
274
|
|
@@ -2,13 +2,20 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
require 'puppet/file_serving/terminus_helper'
|
4
4
|
|
5
|
+
class Puppet::FileServing::TestHelper
|
6
|
+
include Puppet::FileServing::TerminusHelper
|
7
|
+
|
8
|
+
attr_reader :model
|
9
|
+
|
10
|
+
def initialize(model)
|
11
|
+
@model = model
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
5
15
|
describe Puppet::FileServing::TerminusHelper do
|
6
16
|
before do
|
7
|
-
@helper = Object.new
|
8
|
-
@helper.extend(Puppet::FileServing::TerminusHelper)
|
9
|
-
|
10
17
|
@model = double('model')
|
11
|
-
|
18
|
+
@helper = Puppet::FileServing::TestHelper.new(@model)
|
12
19
|
|
13
20
|
@request = double('request', :key => "url", :options => {})
|
14
21
|
|
@@ -872,8 +872,7 @@ describe "Puppet::FileSystem" do
|
|
872
872
|
|
873
873
|
# regardless of slash direction, return value is drive letter
|
874
874
|
expanded = Puppet::FileSystem.expand_path(slash)
|
875
|
-
expect(expanded).to
|
876
|
-
expect(expanded).to eq(File.expand_path(slash))
|
875
|
+
expect(expanded).to match(/^[a-z]:/i)
|
877
876
|
end
|
878
877
|
end
|
879
878
|
|
@@ -22,13 +22,8 @@ describe Puppet::Forge::ModuleRelease do
|
|
22
22
|
let(:uri) { " "}
|
23
23
|
let(:release) { Puppet::Forge::ModuleRelease.new(ssl_repository, JSON.parse(release_json)) }
|
24
24
|
|
25
|
-
let(:mock_file) {
|
26
|
-
|
27
|
-
allow(mock_io).to receive(:path).and_return('/dev/null')
|
28
|
-
mock_io
|
29
|
-
}
|
30
|
-
|
31
|
-
let(:mock_dir) { '/tmp' }
|
25
|
+
let(:mock_file) { double('file', path: '/dev/null') }
|
26
|
+
let(:mock_dir) { tmpdir('dir') }
|
32
27
|
|
33
28
|
let(:destination) { tmpfile('forge_module_release') }
|
34
29
|
|
@@ -1,8 +1,10 @@
|
|
1
|
-
|
2
1
|
require 'spec_helper'
|
3
2
|
|
3
|
+
require 'puppet_spec/compiler'
|
4
|
+
|
4
5
|
describe "the inline_epp function" do
|
5
6
|
include PuppetSpec::Files
|
7
|
+
include PuppetSpec::Compiler
|
6
8
|
|
7
9
|
let :node do Puppet::Node.new('localhost') end
|
8
10
|
let :compiler do Puppet::Parser::Compiler.new(node) end
|
@@ -73,6 +75,29 @@ describe "the inline_epp function" do
|
|
73
75
|
expect(eval_template("string was: <%= $string %>")).to eq("string was: the string value")
|
74
76
|
end
|
75
77
|
|
78
|
+
context "when using Sensitive" do
|
79
|
+
it "returns an unwrapped sensitive value as a String" do
|
80
|
+
expect(eval_and_collect_notices(<<~END)).to eq(["opensesame"])
|
81
|
+
notice(inline_epp("<%= Sensitive('opensesame').unwrap %>"))
|
82
|
+
END
|
83
|
+
end
|
84
|
+
|
85
|
+
it "rewraps a sensitive value" do
|
86
|
+
# note entire result is redacted, not just sensitive part
|
87
|
+
expect(eval_and_collect_notices(<<~END)).to eq(["Sensitive [value redacted]"])
|
88
|
+
notice(inline_epp("This is sensitive <%= Sensitive('opensesame') %>"))
|
89
|
+
END
|
90
|
+
end
|
91
|
+
|
92
|
+
it "can be double wrapped" do
|
93
|
+
catalog = compile_to_catalog(<<~END)
|
94
|
+
notify { 'title':
|
95
|
+
message => Sensitive(inline_epp("<%= Sensitive('opensesame') %>"))
|
96
|
+
}
|
97
|
+
END
|
98
|
+
expect(catalog.resource(:notify, 'title')['message']).to eq('opensesame')
|
99
|
+
end
|
100
|
+
end
|
76
101
|
|
77
102
|
def eval_template_with_args(content, args_hash)
|
78
103
|
epp_function.call(scope, content, args_hash)
|
@@ -43,9 +43,25 @@ describe Puppet::HTTP::Resolver do
|
|
43
43
|
expect(service.url.to_s).to eq("https://ca.example.com:8141/puppet-ca/v1")
|
44
44
|
end
|
45
45
|
|
46
|
-
it '
|
47
|
-
Puppet[:
|
46
|
+
it 'includes extra http headers' do
|
47
|
+
Puppet[:http_extra_headers] = 'region:us-west'
|
48
|
+
|
49
|
+
stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master")
|
50
|
+
.with(headers: {'Region' => 'us-west'})
|
51
|
+
|
52
|
+
subject.resolve(session, :ca)
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'uses the provided ssl context during resolution' do
|
56
|
+
stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: 200)
|
57
|
+
|
58
|
+
other_ctx = Puppet::SSL::SSLContext.new
|
59
|
+
expect(client).to receive(:connect).with(URI("https://ca.example.com:8141/status/v1/simple/master"), options: {ssl_context: other_ctx}).and_call_original
|
60
|
+
|
61
|
+
subject.resolve(session, :ca, ssl_context: other_ctx)
|
62
|
+
end
|
48
63
|
|
64
|
+
it 'logs unsuccessful HTTP 500 responses' do
|
49
65
|
stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: [500, 'Internal Server Error'])
|
50
66
|
stub_request(:get, "https://apple.example.com:8142/status/v1/simple/master").to_return(status: 200)
|
51
67
|
|
@@ -54,11 +70,15 @@ describe Puppet::HTTP::Resolver do
|
|
54
70
|
expect(@logs.map(&:message)).to include(/Puppet server ca.example.com:8141 is unavailable: 500 Internal Server Error/)
|
55
71
|
end
|
56
72
|
|
57
|
-
it '
|
73
|
+
it 'cancels resolution if no servers in server_list are accessible' do
|
58
74
|
stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: 503)
|
59
75
|
stub_request(:get, "https://apple.example.com:8142/status/v1/simple/master").to_return(status: 503)
|
60
76
|
|
61
|
-
|
77
|
+
canceled = false
|
78
|
+
canceled_handler = lambda { |cancel| canceled = cancel }
|
79
|
+
|
80
|
+
expect(subject.resolve(session, :ca, canceled_handler: canceled_handler)).to eq(nil)
|
81
|
+
expect(canceled).to eq(true)
|
62
82
|
end
|
63
83
|
|
64
84
|
it 'cycles through server_list until a valid server is found' do
|
@@ -38,11 +38,11 @@ describe Puppet::HTTP::Service::Ca do
|
|
38
38
|
subject.get_certificate('ca')
|
39
39
|
end
|
40
40
|
|
41
|
-
it 'fallbacks to server and
|
41
|
+
it 'fallbacks to server and serverport' do
|
42
42
|
Puppet[:ca_server] = nil
|
43
43
|
Puppet[:ca_port] = nil
|
44
44
|
Puppet[:server] = 'ca2.example.com'
|
45
|
-
Puppet[:
|
45
|
+
Puppet[:serverport] = 8142
|
46
46
|
|
47
47
|
stub_request(:get, "https://ca2.example.com:8142/puppet-ca/v1/certificate/ca").to_return(body: pem)
|
48
48
|
|
@@ -16,7 +16,7 @@ describe Puppet::HTTP::Service::Compiler do
|
|
16
16
|
|
17
17
|
before :each do
|
18
18
|
Puppet[:server] = 'compiler.example.com'
|
19
|
-
Puppet[:
|
19
|
+
Puppet[:serverport] = 8140
|
20
20
|
|
21
21
|
Puppet::Node::Facts.indirection.terminus_class = :memory
|
22
22
|
end
|
@@ -37,7 +37,7 @@ describe Puppet::HTTP::Service::Compiler do
|
|
37
37
|
context 'when routing to the compiler service' do
|
38
38
|
it 'defaults the server and port based on settings' do
|
39
39
|
Puppet[:server] = 'compiler2.example.com'
|
40
|
-
Puppet[:
|
40
|
+
Puppet[:serverport] = 8141
|
41
41
|
|
42
42
|
stub_request(:post, "https://compiler2.example.com:8141/puppet/v3/catalog/ziggy?environment=testing")
|
43
43
|
.to_return(body: formatter.render(catalog), headers: {'Content-Type' => formatter.mime })
|
@@ -131,6 +131,26 @@ describe Puppet::HTTP::Service::Compiler do
|
|
131
131
|
subject.post_catalog(certname, environment: 'production', facts: facts, checksum_type: %w[sha256 sha384])
|
132
132
|
end
|
133
133
|
|
134
|
+
it 'does not accept msgpack by default' do
|
135
|
+
stub_request(:post, uri)
|
136
|
+
.with(headers: {'Accept' => 'application/vnd.puppet.rich+json, application/json, text/pson'})
|
137
|
+
.to_return(**catalog_response)
|
138
|
+
|
139
|
+
allow(Puppet.features).to receive(:msgpack?).and_return(false)
|
140
|
+
|
141
|
+
subject.post_catalog(certname, environment: environment, facts: facts)
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'accepts msgpack & rich_json_msgpack if the gem is present' do
|
145
|
+
stub_request(:post, uri)
|
146
|
+
.with(headers: {'Accept' => 'application/vnd.puppet.rich+json, application/json, application/vnd.puppet.rich+msgpack, application/x-msgpack, text/pson'})
|
147
|
+
.to_return(**catalog_response)
|
148
|
+
|
149
|
+
allow(Puppet.features).to receive(:msgpack?).and_return(true)
|
150
|
+
|
151
|
+
subject.post_catalog(certname, environment: environment, facts: facts)
|
152
|
+
end
|
153
|
+
|
134
154
|
it 'returns a deserialized catalog' do
|
135
155
|
stub_request(:post, uri)
|
136
156
|
.to_return(**catalog_response)
|
@@ -140,6 +160,35 @@ describe Puppet::HTTP::Service::Compiler do
|
|
140
160
|
expect(cat.name).to eq(certname)
|
141
161
|
end
|
142
162
|
|
163
|
+
it 'deserializes the catalog from msgpack', if: Puppet.features.msgpack? do
|
164
|
+
body = catalog.to_msgpack
|
165
|
+
formatter = Puppet::Network::FormatHandler.format(:msgpack)
|
166
|
+
catalog_response = { body: body, headers: {'Content-Type' => formatter.mime }}
|
167
|
+
|
168
|
+
stub_request(:post, uri)
|
169
|
+
.to_return(**catalog_response)
|
170
|
+
|
171
|
+
_, cat = subject.post_catalog(certname, environment: 'production', facts: facts)
|
172
|
+
expect(cat).to be_a(Puppet::Resource::Catalog)
|
173
|
+
expect(cat.name).to eq(certname)
|
174
|
+
end
|
175
|
+
|
176
|
+
it 'deserializes the catalog from rich msgpack', if: Puppet.features.msgpack? do
|
177
|
+
body = Puppet.override(rich_data: true) do
|
178
|
+
catalog.to_msgpack
|
179
|
+
end
|
180
|
+
|
181
|
+
formatter = Puppet::Network::FormatHandler.format(:rich_data_msgpack)
|
182
|
+
catalog_response = { body: body, headers: {'Content-Type' => formatter.mime }}
|
183
|
+
|
184
|
+
stub_request(:post, uri)
|
185
|
+
.to_return(**catalog_response)
|
186
|
+
|
187
|
+
_, cat = subject.post_catalog(certname, environment: 'production', facts: facts)
|
188
|
+
expect(cat).to be_a(Puppet::Resource::Catalog)
|
189
|
+
expect(cat.name).to eq(certname)
|
190
|
+
end
|
191
|
+
|
143
192
|
it 'returns the request response' do
|
144
193
|
stub_request(:post, uri)
|
145
194
|
.to_return(**catalog_response)
|
@@ -12,7 +12,7 @@ describe Puppet::HTTP::Service::FileServer do
|
|
12
12
|
|
13
13
|
before :each do
|
14
14
|
Puppet[:server] = 'www.example.com'
|
15
|
-
Puppet[:
|
15
|
+
Puppet[:serverport] = 443
|
16
16
|
end
|
17
17
|
|
18
18
|
context 'when making requests' do
|
@@ -31,7 +31,7 @@ describe Puppet::HTTP::Service::FileServer do
|
|
31
31
|
context 'when routing to the file service' do
|
32
32
|
it 'defaults the server and port based on settings' do
|
33
33
|
Puppet[:server] = 'file.example.com'
|
34
|
-
Puppet[:
|
34
|
+
Puppet[:serverport] = 8141
|
35
35
|
|
36
36
|
stub_request(:get, "https://file.example.com:8141/puppet/v3/file_content/:mount/:path?environment=testing")
|
37
37
|
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/http'
|
3
|
+
|
4
|
+
describe Puppet::HTTP::Service::Puppetserver do
|
5
|
+
let(:ssl_context) { Puppet::SSL::SSLContext.new }
|
6
|
+
let(:client) { Puppet::HTTP::Client.new(ssl_context: ssl_context) }
|
7
|
+
let(:subject) { client.create_session.route_to(:puppetserver) }
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
Puppet[:server] = 'puppetserver.example.com'
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when making requests' do
|
14
|
+
it 'includes default HTTP headers' do
|
15
|
+
stub_request(:get, "https://puppetserver.example.com:8140/status/v1/simple/master").with do |request|
|
16
|
+
expect(request.headers).to include({'X-Puppet-Version' => /./, 'User-Agent' => /./})
|
17
|
+
expect(request.headers).to_not include('X-Puppet-Profiling')
|
18
|
+
end.to_return(body: "running", headers: {'Content-Type' => 'text/plain;charset=utf-8'})
|
19
|
+
|
20
|
+
subject.get_simple_status
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'includes extra headers' do
|
24
|
+
Puppet[:http_extra_headers] = 'region:us-west'
|
25
|
+
|
26
|
+
stub_request(:get, "https://puppetserver.example.com:8140/status/v1/simple/master")
|
27
|
+
.with(headers: {'Region' => 'us-west'})
|
28
|
+
.to_return(body: "running", headers: {'Content-Type' => 'text/plain;charset=utf-8'})
|
29
|
+
|
30
|
+
subject.get_simple_status
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'when routing to the puppetserver service' do
|
35
|
+
it 'defaults the server and port based on settings' do
|
36
|
+
Puppet[:server] = 'compiler2.example.com'
|
37
|
+
Puppet[:serverport] = 8141
|
38
|
+
|
39
|
+
stub_request(:get, "https://compiler2.example.com:8141/status/v1/simple/master")
|
40
|
+
.to_return(body: "running", headers: {'Content-Type' => 'text/plain;charset=utf-8'})
|
41
|
+
|
42
|
+
subject.get_simple_status
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when getting puppetserver status' do
|
47
|
+
let(:url) { "https://puppetserver.example.com:8140/status/v1/simple/master" }
|
48
|
+
|
49
|
+
it 'returns the request response and status' do
|
50
|
+
stub_request(:get, url)
|
51
|
+
.to_return(body: "running", headers: {'Content-Type' => 'text/plain;charset=utf-8'})
|
52
|
+
|
53
|
+
resp, status = subject.get_simple_status
|
54
|
+
expect(resp).to be_a(Puppet::HTTP::Response)
|
55
|
+
expect(status).to eq('running')
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'raises a response error if unsuccessful' do
|
59
|
+
stub_request(:get, url).to_return(status: [500, 'Internal Server Error'])
|
60
|
+
|
61
|
+
expect {
|
62
|
+
subject.get_simple_status
|
63
|
+
}.to raise_error do |err|
|
64
|
+
expect(err).to be_an_instance_of(Puppet::HTTP::ResponseError)
|
65
|
+
expect(err.message).to eq("Internal Server Error")
|
66
|
+
expect(err.response.code).to eq(500)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'accepts an ssl context' do
|
71
|
+
stub_request(:get, url)
|
72
|
+
.to_return(body: "running", headers: {'Content-Type' => 'text/plain;charset=utf-8'})
|
73
|
+
|
74
|
+
other_ctx = Puppet::SSL::SSLContext.new
|
75
|
+
expect(client).to receive(:connect).with(URI(url), options: {ssl_context: other_ctx}).and_call_original
|
76
|
+
|
77
|
+
session = client.create_session
|
78
|
+
service = Puppet::HTTP::Service.create_service(client, session, :puppetserver, 'puppetserver.example.com', 8140)
|
79
|
+
service.get_simple_status(ssl_context: other_ctx)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|