puppet 7.9.0-x64-mingw32 → 7.12.1-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/Gemfile.lock +12 -12
- data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
- data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
- data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
- data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
- data/{ext → examples}/nagios/check_puppet.rb +2 -2
- data/ext/README.md +13 -0
- data/lib/puppet/application/agent.rb +4 -0
- data/lib/puppet/application/apply.rb +20 -2
- data/lib/puppet/application/resource.rb +15 -13
- data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
- data/lib/puppet/configurer.rb +236 -58
- data/lib/puppet/confine/variable.rb +1 -1
- data/lib/puppet/defaults.rb +66 -29
- data/lib/puppet/environments.rb +66 -26
- data/lib/puppet/facter_impl.rb +96 -0
- data/lib/puppet/file_serving/configuration/parser.rb +2 -0
- data/lib/puppet/file_serving/configuration.rb +2 -0
- data/lib/puppet/file_serving/mount/file.rb +4 -4
- data/lib/puppet/file_serving/mount/scripts.rb +24 -0
- data/lib/puppet/file_system/file_impl.rb +3 -1
- data/lib/puppet/file_system.rb +2 -1
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/functions/find_template.rb +2 -2
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/http/redirector.rb +5 -0
- data/lib/puppet/http/service/compiler.rb +6 -1
- data/lib/puppet/indirector/catalog/compiler.rb +24 -6
- data/lib/puppet/indirector/catalog/rest.rb +1 -0
- data/lib/puppet/indirector/facts/facter.rb +6 -6
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/terminus.rb +4 -0
- data/lib/puppet/module/plan.rb +0 -1
- data/lib/puppet/module/task.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +8 -4
- data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
- data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/node/environment.rb +10 -11
- data/lib/puppet/pal/pal_impl.rb +1 -1
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/scope.rb +8 -7
- data/lib/puppet/parser/templatewrapper.rb +1 -0
- data/lib/puppet/pops/evaluator/closure.rb +7 -5
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +1 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
- data/lib/puppet/pops/model/ast.rb +1 -0
- data/lib/puppet/pops/model/factory.rb +14 -13
- data/lib/puppet/pops/parser/egrammar.ra +2 -2
- data/lib/puppet/pops/parser/eparser.rb +752 -753
- data/lib/puppet/pops/parser/lexer2.rb +69 -68
- data/lib/puppet/pops/parser/slurp_support.rb +1 -0
- data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
- data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
- data/lib/puppet/pops/types/type_formatter.rb +7 -6
- data/lib/puppet/pops/types/types.rb +1 -1
- data/lib/puppet/provider/aix_object.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +5 -2
- data/lib/puppet/provider/package/pkg.rb +19 -2
- data/lib/puppet/provider/package/puppet_gem.rb +1 -1
- data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/init.rb +5 -5
- data/lib/puppet/provider/service/launchd.rb +2 -2
- data/lib/puppet/provider/service/redhat.rb +1 -1
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +2 -2
- data/lib/puppet/provider/service/upstart.rb +5 -5
- data/lib/puppet/provider/user/aix.rb +44 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +72 -16
- data/lib/puppet/provider.rb +1 -1
- data/lib/puppet/reference/providers.rb +2 -2
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/resource/type_collection.rb +2 -1
- data/lib/puppet/resource.rb +38 -5
- data/lib/puppet/runtime.rb +11 -1
- data/lib/puppet/settings/file_setting.rb +3 -8
- data/lib/puppet/settings.rb +2 -2
- data/lib/puppet/test/test_helper.rb +4 -1
- data/lib/puppet/transaction/persistence.rb +11 -1
- data/lib/puppet/transaction/report.rb +15 -1
- data/lib/puppet/type/exec.rb +19 -2
- data/lib/puppet/type/file.rb +6 -6
- data/lib/puppet/type/filebucket.rb +2 -2
- data/lib/puppet/type/group.rb +0 -1
- data/lib/puppet/type/resources.rb +1 -1
- data/lib/puppet/type/service.rb +8 -3
- data/lib/puppet/type/user.rb +0 -1
- data/lib/puppet/type.rb +1 -1
- data/lib/puppet/util/autoload.rb +1 -1
- data/lib/puppet/util/command_line.rb +1 -1
- data/lib/puppet/util/filetype.rb +2 -2
- data/lib/puppet/util/json.rb +3 -0
- data/lib/puppet/util/log.rb +1 -2
- data/lib/puppet/util/logging.rb +1 -25
- data/lib/puppet/util/pidlock.rb +1 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
- data/lib/puppet/util/suidmanager.rb +1 -2
- data/lib/puppet/util/tagging.rb +1 -0
- data/lib/puppet/util/windows/service.rb +0 -5
- data/lib/puppet/util/windows/user.rb +0 -1
- data/lib/puppet/util/windows.rb +3 -0
- data/lib/puppet/util.rb +4 -3
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +2 -6
- data/locales/puppet.pot +265 -221
- data/man/man5/puppet.conf.5 +73 -25
- data/man/man8/puppet-agent.8 +4 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-module.8 +3 -3
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +2 -1
- data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
- data/spec/integration/application/agent_spec.rb +146 -52
- data/spec/integration/application/filebucket_spec.rb +5 -0
- data/spec/integration/configurer_spec.rb +18 -2
- data/spec/integration/indirector/facts/facter_spec.rb +3 -3
- data/spec/integration/l10n/compiler_spec.rb +37 -0
- data/spec/integration/parser/pcore_resource_spec.rb +10 -0
- data/spec/integration/transaction/report_spec.rb +1 -1
- data/spec/integration/type/file_spec.rb +2 -2
- data/spec/integration/type/package_spec.rb +6 -6
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/windows/process_spec.rb +1 -9
- data/spec/lib/puppet_spec/modules.rb +13 -2
- data/spec/lib/puppet_spec/puppetserver.rb +15 -0
- data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
- data/spec/shared_contexts/l10n.rb +27 -0
- data/spec/spec_helper.rb +1 -10
- data/spec/unit/application/apply_spec.rb +76 -56
- data/spec/unit/application/resource_spec.rb +29 -0
- data/spec/unit/configurer_spec.rb +353 -57
- data/spec/unit/environments_spec.rb +150 -1
- data/spec/unit/facter_impl_spec.rb +31 -0
- data/spec/unit/file_bucket/dipper_spec.rb +2 -2
- data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
- data/spec/unit/file_serving/configuration_spec.rb +12 -4
- data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
- data/spec/unit/file_system_spec.rb +7 -0
- data/spec/unit/functions/logging_spec.rb +1 -0
- data/spec/unit/functions/lookup_spec.rb +64 -0
- data/spec/unit/http/client_spec.rb +58 -1
- data/spec/unit/http/service/compiler_spec.rb +8 -0
- data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
- data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
- data/spec/unit/indirector/indirection_spec.rb +10 -3
- data/spec/unit/interface/action_spec.rb +0 -9
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/installer_spec.rb +39 -12
- data/spec/unit/network/formats_spec.rb +6 -0
- data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
- data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
- data/spec/unit/provider/package/gem_spec.rb +1 -1
- data/spec/unit/provider/package/pip2_spec.rb +1 -1
- data/spec/unit/provider/package/pip3_spec.rb +1 -1
- data/spec/unit/provider/package/pip_spec.rb +1 -1
- data/spec/unit/provider/package/pkg_spec.rb +34 -5
- data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
- data/spec/unit/provider/service/launchd_spec.rb +11 -0
- data/spec/unit/provider/service/systemd_spec.rb +1 -1
- data/spec/unit/provider/user/aix_spec.rb +100 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
- data/spec/unit/provider/user/useradd_spec.rb +43 -2
- data/spec/unit/provider_spec.rb +4 -4
- data/spec/unit/puppet_spec.rb +12 -4
- data/spec/unit/resource/catalog_spec.rb +14 -1
- data/spec/unit/resource_spec.rb +58 -2
- data/spec/unit/settings/file_setting_spec.rb +10 -7
- data/spec/unit/type/service_spec.rb +27 -0
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +25 -8
- data/spec/unit/util/logging_spec.rb +2 -0
- data/tasks/parallel.rake +3 -3
- metadata +37 -94
- data/ext/README.environment +0 -8
- data/ext/dbfix.sql +0 -132
- data/ext/debian/README.Debian +0 -8
- data/ext/debian/README.source +0 -2
- data/ext/debian/TODO.Debian +0 -1
- data/ext/debian/changelog.erb +0 -1122
- data/ext/debian/compat +0 -1
- data/ext/debian/control +0 -144
- data/ext/debian/copyright +0 -339
- data/ext/debian/docs +0 -1
- data/ext/debian/fileserver.conf +0 -41
- data/ext/debian/puppet-common.dirs +0 -13
- data/ext/debian/puppet-common.install +0 -3
- data/ext/debian/puppet-common.lintian-overrides +0 -5
- data/ext/debian/puppet-common.manpages +0 -28
- data/ext/debian/puppet-common.postinst +0 -35
- data/ext/debian/puppet-common.postrm +0 -33
- data/ext/debian/puppet-el.dirs +0 -1
- data/ext/debian/puppet-el.emacsen-install +0 -25
- data/ext/debian/puppet-el.emacsen-remove +0 -11
- data/ext/debian/puppet-el.emacsen-startup +0 -9
- data/ext/debian/puppet-el.install +0 -1
- data/ext/debian/puppet-testsuite.install +0 -2
- data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
- data/ext/debian/puppet.lintian-overrides +0 -3
- data/ext/debian/puppet.logrotate +0 -20
- data/ext/debian/puppet.postinst +0 -20
- data/ext/debian/puppet.postrm +0 -20
- data/ext/debian/puppet.preinst +0 -20
- data/ext/debian/puppetmaster-common.install +0 -2
- data/ext/debian/puppetmaster-common.manpages +0 -2
- data/ext/debian/puppetmaster-common.postinst +0 -6
- data/ext/debian/puppetmaster-passenger.dirs +0 -4
- data/ext/debian/puppetmaster-passenger.postinst +0 -162
- data/ext/debian/puppetmaster-passenger.postrm +0 -61
- data/ext/debian/puppetmaster.README.debian +0 -17
- data/ext/debian/puppetmaster.default +0 -14
- data/ext/debian/puppetmaster.init +0 -137
- data/ext/debian/puppetmaster.lintian-overrides +0 -3
- data/ext/debian/puppetmaster.postinst +0 -20
- data/ext/debian/puppetmaster.postrm +0 -5
- data/ext/debian/puppetmaster.preinst +0 -22
- data/ext/debian/rules +0 -132
- data/ext/debian/source/format +0 -1
- data/ext/debian/source/options +0 -1
- data/ext/debian/vim-puppet.README.Debian +0 -13
- data/ext/debian/vim-puppet.dirs +0 -5
- data/ext/debian/vim-puppet.yaml +0 -7
- data/ext/debian/watch +0 -2
- data/ext/freebsd/puppetd +0 -26
- data/ext/freebsd/puppetmasterd +0 -26
- data/ext/gentoo/conf.d/puppet +0 -5
- data/ext/gentoo/conf.d/puppetmaster +0 -12
- data/ext/gentoo/init.d/puppet +0 -38
- data/ext/gentoo/init.d/puppetmaster +0 -51
- data/ext/gentoo/puppet/fileserver.conf +0 -41
- data/ext/ips/puppet-agent +0 -44
- data/ext/ips/puppet-master +0 -44
- data/ext/ips/puppet.p5m.erb +0 -12
- data/ext/ips/puppetagent.xml +0 -42
- data/ext/ips/puppetmaster.xml +0 -42
- data/ext/ips/rules +0 -19
- data/ext/ips/transforms +0 -34
- data/ext/ldap/puppet.schema +0 -24
- data/ext/logcheck/puppet +0 -23
- data/ext/osx/file_mapping.yaml +0 -28
- data/ext/osx/postflight.erb +0 -109
- data/ext/osx/preflight.erb +0 -52
- data/ext/osx/prototype.plist.erb +0 -38
- data/ext/redhat/fileserver.conf +0 -41
- data/ext/redhat/logrotate +0 -21
- data/ext/redhat/puppet.spec.erb +0 -841
- data/ext/redhat/server.init +0 -128
- data/ext/redhat/server.sysconfig +0 -13
- data/ext/solaris/pkginfo +0 -6
- data/ext/solaris/smf/puppetd.xml +0 -77
- data/ext/solaris/smf/puppetmasterd.xml +0 -77
- data/ext/solaris/smf/svc-puppetd +0 -71
- data/ext/solaris/smf/svc-puppetmasterd +0 -67
- data/ext/suse/puppet.spec +0 -310
- data/ext/suse/server.init +0 -173
- data/ext/yaml_nodes.rb +0 -105
- data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -2,11 +2,27 @@ require 'spec_helper'
|
|
2
2
|
require 'puppet/configurer'
|
3
3
|
|
4
4
|
describe Puppet::Configurer do
|
5
|
+
include PuppetSpec::Files
|
6
|
+
|
5
7
|
before do
|
6
8
|
Puppet[:server] = "puppetmaster"
|
7
9
|
Puppet[:report] = true
|
8
10
|
|
9
11
|
catalog.add_resource(resource)
|
12
|
+
allow_any_instance_of(described_class).to(
|
13
|
+
receive(:valid_server_environment?).and_return(true)
|
14
|
+
)
|
15
|
+
|
16
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
17
|
+
---
|
18
|
+
version:
|
19
|
+
config: 1624882680
|
20
|
+
puppet: #{Puppet.version}
|
21
|
+
application:
|
22
|
+
initial_environment: #{Puppet[:environment]}
|
23
|
+
converged_environment: #{Puppet[:environment]}
|
24
|
+
run_mode: agent
|
25
|
+
SUMMARY
|
10
26
|
end
|
11
27
|
|
12
28
|
let(:node_name) { Puppet[:node_name_value] }
|
@@ -78,10 +94,10 @@ describe Puppet::Configurer do
|
|
78
94
|
configurer.run(:pluginsync => false)
|
79
95
|
end
|
80
96
|
|
81
|
-
it "
|
82
|
-
|
83
|
-
expect(
|
84
|
-
|
97
|
+
it "does not download plugins when specified environment is not vaild on server" do
|
98
|
+
expect(configurer).to receive(:valid_server_environment?).and_return(false)
|
99
|
+
expect(configurer).not_to receive(:download_plugins)
|
100
|
+
configurer.run(:pluginsync => true)
|
85
101
|
end
|
86
102
|
|
87
103
|
it "fails the run if pluginsync fails when usecacheonfailure is false" do
|
@@ -125,7 +141,6 @@ describe Puppet::Configurer do
|
|
125
141
|
it "applies a cached catalog when it can't connect to the master" do
|
126
142
|
error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
|
127
143
|
|
128
|
-
expect(Puppet::Node.indirection).to receive(:find).and_raise(error)
|
129
144
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_cache => true)).and_raise(error)
|
130
145
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_terminus => true)).and_return(catalog)
|
131
146
|
|
@@ -149,6 +164,126 @@ describe Puppet::Configurer do
|
|
149
164
|
expect(report.host).to eq('node_name_from_fact')
|
150
165
|
end
|
151
166
|
|
167
|
+
it "should warn the user when the fact value length limits are exceeded" do
|
168
|
+
Puppet[:fact_name_length_soft_limit] = 0
|
169
|
+
Puppet[:fact_value_length_soft_limit] = 1
|
170
|
+
Puppet[:top_level_facts_soft_limit] = 0
|
171
|
+
Puppet[:number_of_facts_soft_limit] = 0
|
172
|
+
Puppet[:payload_soft_limit] = 0
|
173
|
+
|
174
|
+
facts.values = { 'processors' => {
|
175
|
+
'cores' => 1,
|
176
|
+
'count' => 2,
|
177
|
+
'isa' => "i386",
|
178
|
+
'models' => [
|
179
|
+
"CPU1 @ 2.80GHz"
|
180
|
+
],
|
181
|
+
'physicalcount' => 4 }
|
182
|
+
}
|
183
|
+
Puppet::Node::Facts.indirection.save(facts)
|
184
|
+
|
185
|
+
expect(Puppet).to receive(:warning).with(/Fact value '.+' with the value length: '[1-9]*' exceeds the value length limit: [1-9]*/).twice
|
186
|
+
configurer.run
|
187
|
+
end
|
188
|
+
|
189
|
+
it "should warn the user when the payload limits are exceeded" do
|
190
|
+
Puppet[:fact_name_length_soft_limit] = 0
|
191
|
+
Puppet[:fact_value_length_soft_limit] = 0
|
192
|
+
Puppet[:top_level_facts_soft_limit] = 0
|
193
|
+
Puppet[:number_of_facts_soft_limit] = 0
|
194
|
+
Puppet[:payload_soft_limit] = 1
|
195
|
+
|
196
|
+
facts.values = { 'processors' => {
|
197
|
+
'cores' => 1,
|
198
|
+
'count' => 2,
|
199
|
+
'isa' => "i386",
|
200
|
+
'models' => [
|
201
|
+
"CPU1 @ 2.80GHz"
|
202
|
+
],
|
203
|
+
'physicalcount' => 4 }
|
204
|
+
}
|
205
|
+
Puppet::Node::Facts.indirection.save(facts)
|
206
|
+
|
207
|
+
expect(Puppet).to receive(:warning).with(/Payload with the current size of: '\d*' exceeds the payload size limit: \d*/)
|
208
|
+
configurer.run
|
209
|
+
end
|
210
|
+
|
211
|
+
it "should warn the user when the total number of facts limit is exceeded" do
|
212
|
+
Puppet[:fact_name_length_soft_limit] = 0
|
213
|
+
Puppet[:fact_value_length_soft_limit] = 0
|
214
|
+
Puppet[:top_level_facts_soft_limit] = 0
|
215
|
+
Puppet[:number_of_facts_soft_limit] = 1
|
216
|
+
Puppet[:payload_soft_limit] = 0
|
217
|
+
|
218
|
+
facts.values = {
|
219
|
+
'processors' => {
|
220
|
+
'cores' => 1,
|
221
|
+
'count' => 2,
|
222
|
+
'isa' => "i386",
|
223
|
+
'models' => [
|
224
|
+
"CPU1 @ 2.80GHz",
|
225
|
+
"CPU1 @ 2.80GHz",
|
226
|
+
"CPU1 @ 2.80GHz",
|
227
|
+
"CPU1 @ 2.80GHz",
|
228
|
+
"CPU1 @ 2.80GHz",
|
229
|
+
{
|
230
|
+
'processors' => {
|
231
|
+
'cores' => [1,2]
|
232
|
+
}
|
233
|
+
}
|
234
|
+
],
|
235
|
+
'physicalcount' => 4
|
236
|
+
}
|
237
|
+
}
|
238
|
+
Puppet::Node::Facts.indirection.save(facts)
|
239
|
+
|
240
|
+
expect(Puppet).to receive(:warning).with(/The current total number of facts: [1-9]* exceeds the number of facts limit: [1-9]*/)
|
241
|
+
configurer.run
|
242
|
+
end
|
243
|
+
|
244
|
+
it "should warn the user when the top level facts size limits are exceeded" do
|
245
|
+
Puppet[:fact_name_length_soft_limit] = 0
|
246
|
+
Puppet[:fact_value_length_soft_limit] = 0
|
247
|
+
Puppet[:top_level_facts_soft_limit] = 1
|
248
|
+
Puppet[:number_of_facts_soft_limit] = 0
|
249
|
+
Puppet[:payload_soft_limit] = 0
|
250
|
+
|
251
|
+
facts.values = {'my_new_fact_name' => 'my_new_fact_value',
|
252
|
+
'my_new_fact_name2' => 'my_new_fact_value2'}
|
253
|
+
Puppet::Node::Facts.indirection.save(facts)
|
254
|
+
|
255
|
+
expect(Puppet).to receive(:warning).with(/The current number of top level facts: [1-9]* exceeds the top facts limit: [1-9]*/)
|
256
|
+
configurer.run
|
257
|
+
end
|
258
|
+
|
259
|
+
it "should warn the user when the fact name length limits are exceeded" do
|
260
|
+
Puppet[:fact_name_length_soft_limit] = 1
|
261
|
+
Puppet[:fact_value_length_soft_limit] = 0
|
262
|
+
Puppet[:top_level_facts_soft_limit] = 0
|
263
|
+
Puppet[:number_of_facts_soft_limit] = 0
|
264
|
+
Puppet[:payload_soft_limit] = 0
|
265
|
+
|
266
|
+
facts.values = {'my_new_fact_name' => 'my_new_fact_value'}
|
267
|
+
Puppet::Node::Facts.indirection.save(facts)
|
268
|
+
|
269
|
+
expect(Puppet).to receive(:warning).with(/Fact .+ with length: '[1-9]*' exceeds the length limit: [1-9]*/)
|
270
|
+
configurer.run
|
271
|
+
end
|
272
|
+
|
273
|
+
it "shouldn't warn the user when the fact limit settings are set to 0" do
|
274
|
+
Puppet[:fact_name_length_soft_limit] = 0
|
275
|
+
Puppet[:fact_value_length_soft_limit] = 0
|
276
|
+
Puppet[:top_level_facts_soft_limit] = 0
|
277
|
+
Puppet[:number_of_facts_soft_limit] = 0
|
278
|
+
Puppet[:payload_soft_limit] = 0
|
279
|
+
|
280
|
+
facts.values = {'my_new_fact_name' => 'my_new_fact_value'}
|
281
|
+
Puppet::Node::Facts.indirection.save(facts)
|
282
|
+
|
283
|
+
expect(Puppet).not_to receive(:warning)
|
284
|
+
configurer.run
|
285
|
+
end
|
286
|
+
|
152
287
|
it "creates a new report when applying the catalog" do
|
153
288
|
options = {}
|
154
289
|
configurer.run(options)
|
@@ -461,7 +596,7 @@ describe Puppet::Configurer do
|
|
461
596
|
it "should save the report if reporting is enabled" do
|
462
597
|
Puppet.settings[:report] = true
|
463
598
|
|
464
|
-
expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, instance_of(Hash))
|
599
|
+
expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, instance_of(Hash)).twice
|
465
600
|
configurer.send_report(report)
|
466
601
|
end
|
467
602
|
|
@@ -489,12 +624,22 @@ describe Puppet::Configurer do
|
|
489
624
|
it "should log but not fail if saving the report fails" do
|
490
625
|
Puppet.settings[:report] = true
|
491
626
|
|
492
|
-
expect(Puppet::Transaction::Report.indirection).to receive(:save).and_raise("whatever")
|
627
|
+
expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_cache: true)).and_raise("whatever")
|
628
|
+
expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_terminus: true))
|
493
629
|
|
494
630
|
configurer.send_report(report)
|
495
631
|
|
496
632
|
expect(@logs).to include(an_object_having_attributes(level: :err, message: 'Could not send report: whatever'))
|
497
633
|
end
|
634
|
+
|
635
|
+
it "should save the cached report if fails to send the report" do
|
636
|
+
allow(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_terminus: true)).and_call_original
|
637
|
+
allow(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_cache: true)).and_raise("whatever")
|
638
|
+
|
639
|
+
expect(File).to_not be_exist(Puppet[:lastrunfile])
|
640
|
+
configurer.send_report(report)
|
641
|
+
expect(File.read(Puppet[:lastrunfile])).to match(/puppet: #{Puppet::PUPPETVERSION}/)
|
642
|
+
end
|
498
643
|
end
|
499
644
|
|
500
645
|
describe "when saving the summary report file" do
|
@@ -553,24 +698,6 @@ describe Puppet::Configurer do
|
|
553
698
|
end
|
554
699
|
end
|
555
700
|
|
556
|
-
describe "when requesting a node" do
|
557
|
-
it "uses the transaction uuid in the request" do
|
558
|
-
expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(transaction_uuid: anything)).twice
|
559
|
-
configurer.run
|
560
|
-
end
|
561
|
-
|
562
|
-
it "sends an explicitly configured environment request" do
|
563
|
-
expect(Puppet.settings).to receive(:set_by_config?).with(:environment).and_return(true)
|
564
|
-
expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(configured_environment: Puppet[:environment])).twice
|
565
|
-
configurer.run
|
566
|
-
end
|
567
|
-
|
568
|
-
it "does not send a configured_environment when using the default" do
|
569
|
-
expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(configured_environment: nil)).twice
|
570
|
-
configurer.run
|
571
|
-
end
|
572
|
-
end
|
573
|
-
|
574
701
|
def expects_pluginsync
|
575
702
|
metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":420,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
|
576
703
|
stub_request(:get, %r{/puppet/v3/file_metadatas/(plugins|locales)}).to_return(status: 200, body: metadata, headers: {'Content-Type' => 'application/json'})
|
@@ -581,7 +708,7 @@ describe Puppet::Configurer do
|
|
581
708
|
end
|
582
709
|
|
583
710
|
def expects_new_catalog_only(catalog)
|
584
|
-
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
|
711
|
+
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true, check_environment: true)).and_return(catalog)
|
585
712
|
expect(Puppet::Resource::Catalog.indirection).not_to receive(:find).with(anything, hash_including(ignore_terminus: true))
|
586
713
|
end
|
587
714
|
|
@@ -598,7 +725,7 @@ describe Puppet::Configurer do
|
|
598
725
|
def expects_fallback_to_new_catalog(catalog)
|
599
726
|
expects_pluginsync
|
600
727
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(nil)
|
601
|
-
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
|
728
|
+
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true, check_environment: true)).and_return(catalog)
|
602
729
|
end
|
603
730
|
|
604
731
|
def expects_neither_new_or_cached_catalog
|
@@ -622,21 +749,13 @@ describe Puppet::Configurer do
|
|
622
749
|
configurer.run
|
623
750
|
end
|
624
751
|
|
625
|
-
it "should not
|
626
|
-
expect(Puppet::Node.indirection).not_to receive(:find)
|
752
|
+
it "should not pluginsync when a cached catalog is successfully retrieved" do
|
627
753
|
expects_cached_catalog_only(catalog)
|
628
754
|
expect(configurer).not_to receive(:download_plugins)
|
629
755
|
|
630
756
|
configurer.run
|
631
757
|
end
|
632
758
|
|
633
|
-
it "should make a node request and pluginsync when a cached catalog cannot be retrieved" do
|
634
|
-
expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
|
635
|
-
expects_fallback_to_new_catalog(catalog)
|
636
|
-
|
637
|
-
configurer.run
|
638
|
-
end
|
639
|
-
|
640
759
|
it "should set its cached_catalog_status to 'explicitly_requested'" do
|
641
760
|
expects_cached_catalog_only(catalog)
|
642
761
|
|
@@ -672,7 +791,6 @@ describe Puppet::Configurer do
|
|
672
791
|
it "should not attempt to retrieve a cached catalog again if the first attempt failed" do
|
673
792
|
Puppet[:ignore_plugin_errors] = true
|
674
793
|
|
675
|
-
expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
|
676
794
|
expects_neither_new_or_cached_catalog
|
677
795
|
expects_pluginsync
|
678
796
|
|
@@ -728,16 +846,6 @@ describe Puppet::Configurer do
|
|
728
846
|
Puppet.settings[:strict_environment_mode] = true
|
729
847
|
end
|
730
848
|
|
731
|
-
it "should not make a node request" do
|
732
|
-
stub_request(:get, %r{/puppet/v3/file_metadatas?/plugins}).to_return(:status => 404)
|
733
|
-
stub_request(:get, %r{/puppet/v3/file_metadatas?/pluginfacts}).to_return(:status => 404)
|
734
|
-
expects_new_catalog_only(catalog)
|
735
|
-
|
736
|
-
expect(Puppet::Node.indirection).not_to receive(:find)
|
737
|
-
|
738
|
-
configurer.run
|
739
|
-
end
|
740
|
-
|
741
849
|
it "should return nil when the catalog's environment doesn't match the agent specified environment" do
|
742
850
|
Puppet[:environment] = 'second_env'
|
743
851
|
configurer = Puppet::Configurer.new
|
@@ -771,7 +879,7 @@ describe Puppet::Configurer do
|
|
771
879
|
expect(configurer.run).to be_nil
|
772
880
|
end
|
773
881
|
|
774
|
-
it "should proceed with the cached catalog if its environment
|
882
|
+
it "should proceed with the cached catalog if its environment matches the local environment" do
|
775
883
|
expects_cached_catalog_only(catalog)
|
776
884
|
|
777
885
|
expect(configurer.run).to eq(0)
|
@@ -951,9 +1059,23 @@ describe Puppet::Configurer do
|
|
951
1059
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(apple, banana, banana)
|
952
1060
|
|
953
1061
|
allow(Puppet).to receive(:notice)
|
1062
|
+
allow(Puppet).to receive(:push_context)
|
954
1063
|
expect(Puppet).to receive(:notice).with("Local environment: 'production' doesn't match server specified environment 'apple', restarting agent run with environment 'apple'")
|
955
1064
|
expect(Puppet).to receive(:notice).with("Local environment: 'apple' doesn't match server specified environment 'banana', restarting agent run with environment 'banana'")
|
956
1065
|
|
1066
|
+
expect(Puppet).to receive(:push_context).with(
|
1067
|
+
hash_including(current_environment: an_object_having_attributes(name: :production)),
|
1068
|
+
'Local node environment production for configurer transaction'
|
1069
|
+
)
|
1070
|
+
expect(Puppet).to receive(:push_context).with(
|
1071
|
+
hash_including(current_environment: an_object_having_attributes(name: :apple)),
|
1072
|
+
'Local node environment apple for configurer transaction'
|
1073
|
+
)
|
1074
|
+
expect(Puppet).to receive(:push_context).with(
|
1075
|
+
hash_including(current_environment: an_object_having_attributes(name: :banana)),
|
1076
|
+
'Local node environment banana for configurer transaction'
|
1077
|
+
)
|
1078
|
+
|
957
1079
|
configurer.run
|
958
1080
|
end
|
959
1081
|
|
@@ -1110,20 +1232,194 @@ describe Puppet::Configurer do
|
|
1110
1232
|
expect(configurer.run(options)).to eq(0)
|
1111
1233
|
expect(options[:report].server_used).to be_nil
|
1112
1234
|
end
|
1235
|
+
end
|
1113
1236
|
|
1114
|
-
|
1115
|
-
|
1237
|
+
describe "when selecting an environment" do
|
1238
|
+
include PuppetSpec::Settings
|
1116
1239
|
|
1117
|
-
|
1118
|
-
|
1240
|
+
describe "when the last used environment is available" do
|
1241
|
+
let(:last_server_specified_environment) { 'development' }
|
1119
1242
|
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1243
|
+
before do
|
1244
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
1245
|
+
---
|
1246
|
+
version:
|
1247
|
+
config: 1624882680
|
1248
|
+
puppet: 6.24.0
|
1249
|
+
application:
|
1250
|
+
initial_environment: #{Puppet[:environment]}
|
1251
|
+
converged_environment: #{last_server_specified_environment}
|
1252
|
+
run_mode: agent
|
1253
|
+
SUMMARY
|
1123
1254
|
|
1124
|
-
|
1255
|
+
expect(Puppet::Node.indirection).not_to receive(:find)
|
1256
|
+
.with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
|
1257
|
+
end
|
1258
|
+
|
1259
|
+
it "prefers the environment set via cli" do
|
1260
|
+
Puppet.settings.handlearg('--environment', 'usethis')
|
1261
|
+
configurer.run
|
1262
|
+
|
1263
|
+
expect(configurer.environment).to eq('usethis')
|
1264
|
+
end
|
1265
|
+
|
1266
|
+
it "prefers the environment set via lastrunfile over config" do
|
1267
|
+
FileUtils.mkdir_p(Puppet[:confdir])
|
1268
|
+
set_puppet_conf(Puppet[:confdir], <<~CONF)
|
1269
|
+
[main]
|
1270
|
+
environment = usethis
|
1271
|
+
lastrunfile = #{Puppet[:lastrunfile]}
|
1272
|
+
CONF
|
1273
|
+
|
1274
|
+
Puppet.initialize_settings
|
1275
|
+
configurer.run
|
1276
|
+
|
1277
|
+
expect(configurer.environment).to eq(last_server_specified_environment)
|
1278
|
+
end
|
1279
|
+
|
1280
|
+
it "uses the environment from Puppet[:environment] if given a catalog" do
|
1281
|
+
configurer.run(catalog: catalog)
|
1282
|
+
|
1283
|
+
expect(configurer.environment).to eq(Puppet[:environment])
|
1284
|
+
end
|
1285
|
+
|
1286
|
+
it "uses the environment from Puppet[:environment] if use_cached_catalog = true" do
|
1287
|
+
Puppet[:use_cached_catalog] = true
|
1288
|
+
expects_cached_catalog_only(catalog)
|
1289
|
+
configurer.run
|
1290
|
+
|
1291
|
+
expect(configurer.environment).to eq(Puppet[:environment])
|
1292
|
+
end
|
1293
|
+
|
1294
|
+
describe "when the environment is not set via CLI" do
|
1295
|
+
it "uses the environment found in lastrunfile if the key exists" do
|
1296
|
+
configurer.run
|
1297
|
+
|
1298
|
+
expect(configurer.environment).to eq(last_server_specified_environment)
|
1299
|
+
end
|
1300
|
+
|
1301
|
+
it "pushes the converged environment found in lastrunfile over the existing context" do
|
1302
|
+
initial_env = Puppet::Node::Environment.remote('production')
|
1303
|
+
Puppet.push_context(
|
1304
|
+
current_environment: initial_env,
|
1305
|
+
loaders: Puppet::Pops::Loaders.new(initial_env, true))
|
1306
|
+
|
1307
|
+
expect(Puppet).to receive(:push_context).with(
|
1308
|
+
hash_including(:current_environment, :loaders),
|
1309
|
+
"Local node environment #{last_server_specified_environment} for configurer transaction"
|
1310
|
+
).once.and_call_original
|
1311
|
+
|
1312
|
+
configurer.run
|
1313
|
+
end
|
1125
1314
|
|
1126
|
-
|
1315
|
+
it "uses the environment from Puppet[:environment] if strict_environment_mode is set" do
|
1316
|
+
Puppet[:strict_environment_mode] = true
|
1317
|
+
configurer.run
|
1318
|
+
|
1319
|
+
expect(configurer.environment).to eq(Puppet[:environment])
|
1320
|
+
end
|
1321
|
+
|
1322
|
+
it "uses the environment from Puppet[:environment] if initial_environment is the same as converged_environment" do
|
1323
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
1324
|
+
---
|
1325
|
+
version:
|
1326
|
+
config: 1624882680
|
1327
|
+
puppet: 6.24.0
|
1328
|
+
application:
|
1329
|
+
initial_environment: development
|
1330
|
+
converged_environment: development
|
1331
|
+
run_mode: agent
|
1332
|
+
SUMMARY
|
1333
|
+
configurer.run
|
1334
|
+
|
1335
|
+
expect(configurer.environment).to eq(Puppet[:environment])
|
1336
|
+
end
|
1337
|
+
end
|
1338
|
+
end
|
1339
|
+
|
1340
|
+
describe "when the last used environment is not available" do
|
1341
|
+
describe "when the node request succeeds" do
|
1342
|
+
let(:node_environment) { Puppet::Node::Environment.remote(:salam) }
|
1343
|
+
let(:node) { Puppet::Node.new(Puppet[:node_name_value]) }
|
1344
|
+
let(:last_server_specified_environment) { 'development' }
|
1345
|
+
|
1346
|
+
before do
|
1347
|
+
node.environment = node_environment
|
1348
|
+
|
1349
|
+
allow(Puppet::Node.indirection).to receive(:find)
|
1350
|
+
allow(Puppet::Node.indirection).to receive(:find)
|
1351
|
+
.with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
|
1352
|
+
.and_return(node)
|
1353
|
+
end
|
1354
|
+
|
1355
|
+
it "uses the environment from the node request if the run mode doesn't match" do
|
1356
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
1357
|
+
---
|
1358
|
+
version:
|
1359
|
+
config: 1624882680
|
1360
|
+
puppet: 6.24.0
|
1361
|
+
application:
|
1362
|
+
initial_environment: #{Puppet[:environment]}
|
1363
|
+
converged_environment: #{last_server_specified_environment}
|
1364
|
+
run_mode: user
|
1365
|
+
SUMMARY
|
1366
|
+
configurer.run
|
1367
|
+
|
1368
|
+
expect(configurer.environment).to eq(node_environment.name.to_s)
|
1369
|
+
end
|
1370
|
+
|
1371
|
+
it "uses the environment from the node request if lastrunfile does not contain the expected keys" do
|
1372
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
1373
|
+
---
|
1374
|
+
version:
|
1375
|
+
config: 1624882680
|
1376
|
+
puppet: 6.24.0
|
1377
|
+
SUMMARY
|
1378
|
+
configurer.run
|
1379
|
+
|
1380
|
+
expect(configurer.environment).to eq(node_environment.name.to_s)
|
1381
|
+
end
|
1382
|
+
|
1383
|
+
it "uses the environment from the node request if lastrunfile is invalid YAML" do
|
1384
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
1385
|
+
Key: 'this is my very very very ' +
|
1386
|
+
'long string'
|
1387
|
+
SUMMARY
|
1388
|
+
configurer.run
|
1389
|
+
|
1390
|
+
expect(configurer.environment).to eq(node_environment.name.to_s)
|
1391
|
+
end
|
1392
|
+
|
1393
|
+
it "uses the environment from the node request if lastrunfile exists but is empty" do
|
1394
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', '')
|
1395
|
+
configurer.run
|
1396
|
+
|
1397
|
+
expect(configurer.environment).to eq(node_environment.name.to_s)
|
1398
|
+
end
|
1399
|
+
|
1400
|
+
it "uses the environment from the node request if the last used one cannot be found" do
|
1401
|
+
Puppet[:lastrunfile] = tmpfile('last_run_summary.yaml')
|
1402
|
+
configurer.run
|
1403
|
+
|
1404
|
+
expect(configurer.environment).to eq(node_environment.name.to_s)
|
1405
|
+
end
|
1406
|
+
end
|
1407
|
+
|
1408
|
+
describe "when the node request fails" do
|
1409
|
+
before do
|
1410
|
+
allow(Puppet::Node.indirection).to receive(:find).and_call_original
|
1411
|
+
allow(Puppet::Node.indirection).to receive(:find)
|
1412
|
+
.with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
|
1413
|
+
.and_raise(Puppet::Error)
|
1414
|
+
end
|
1415
|
+
|
1416
|
+
it "uses the environment from Puppet[:environment] if the last used one cannot be found" do
|
1417
|
+
Puppet[:lastrunfile] = tmpfile('last_run_summary.yaml')
|
1418
|
+
configurer.run
|
1419
|
+
|
1420
|
+
expect(configurer.environment).to eq(Puppet[:environment])
|
1421
|
+
end
|
1422
|
+
end
|
1127
1423
|
end
|
1128
1424
|
end
|
1129
1425
|
end
|