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
data/lib/puppet/face/catalog.rb
CHANGED
@@ -97,7 +97,7 @@ Puppet::Indirector::Face.define(:catalog, '0.0.1') do
|
|
97
97
|
A serialized catalog.
|
98
98
|
EOT
|
99
99
|
when_invoked do |*args|
|
100
|
-
Puppet.settings.preferred_run_mode = :
|
100
|
+
Puppet.settings.preferred_run_mode = :server
|
101
101
|
Puppet::Face[:catalog, :current].find(*args)
|
102
102
|
end
|
103
103
|
end
|
data/lib/puppet/face/config.rb
CHANGED
@@ -20,10 +20,10 @@ Puppet::Face.define(:config, '0.0.1') do
|
|
20
20
|
description <<-EOT
|
21
21
|
The section of the puppet.conf configuration file to interact with.
|
22
22
|
|
23
|
-
The three most commonly used sections are 'main', '
|
23
|
+
The three most commonly used sections are 'main', 'server', and 'agent'.
|
24
24
|
'Main' is the default, and is used by all Puppet applications. Other
|
25
25
|
sections can override 'main' values for specific applications --- the
|
26
|
-
'
|
26
|
+
'server' section affects Puppet Server, and the 'agent'
|
27
27
|
section affects puppet agent.
|
28
28
|
|
29
29
|
Less commonly used is the 'user' section, which affects puppet apply. Any
|
@@ -52,9 +52,9 @@ Puppet::Face.define(:config, '0.0.1') do
|
|
52
52
|
|
53
53
|
$ puppet config print rundir
|
54
54
|
|
55
|
-
Get a list of important directories from the
|
55
|
+
Get a list of important directories from the server's config:
|
56
56
|
|
57
|
-
$ puppet config print all --section
|
57
|
+
$ puppet config print all --section server | grep -E "(path|dir)"
|
58
58
|
EOT
|
59
59
|
|
60
60
|
when_invoked do |*args|
|
@@ -144,7 +144,7 @@ Puppet::Face.define(:config, '0.0.1') do
|
|
144
144
|
|
145
145
|
if name == 'environment' && options[:section] == 'main'
|
146
146
|
Puppet.warning _(<<-EOM).chomp
|
147
|
-
The environment should be set in either the `[user]`, `[agent]`, or `[
|
147
|
+
The environment should be set in either the `[user]`, `[agent]`, or `[server]`
|
148
148
|
section. Variables set in the `[agent]` section are used when running
|
149
149
|
`puppet agent`. Variables set in the `[user]` section are used when running
|
150
150
|
various other puppet subcommands, like `puppet apply` and `puppet module`; these
|
@@ -159,11 +159,38 @@ https://puppet.com/docs/puppet/latest/configuration.html#environment
|
|
159
159
|
report_section_and_environment(options[:section], Puppet.settings[:environment])
|
160
160
|
end
|
161
161
|
|
162
|
+
# only validate settings we recognize
|
163
|
+
setting = Puppet.settings.setting(name.to_sym)
|
164
|
+
if setting
|
165
|
+
# set the value, which will call `on_*_and_write` hooks, if any
|
166
|
+
Puppet.settings[setting.name] = value
|
167
|
+
|
168
|
+
# read the value to trigger interpolation and munge validation logic
|
169
|
+
Puppet.settings[setting.name]
|
170
|
+
end
|
171
|
+
|
162
172
|
path = Puppet::FileSystem.pathname(Puppet.settings.which_configuration_file)
|
163
173
|
Puppet::FileSystem.touch(path)
|
164
174
|
Puppet::FileSystem.open(path, nil, 'r+:UTF-8') do |file|
|
165
175
|
Puppet::Settings::IniFile.update(file) do |config|
|
166
|
-
|
176
|
+
if options[:section] == "master"
|
177
|
+
# delete requested master section if it exists,
|
178
|
+
# as server section should be used
|
179
|
+
setting_string = config.delete("master", name)
|
180
|
+
if setting_string
|
181
|
+
|
182
|
+
if Puppet::Util::Log.sendlevel?(:info)
|
183
|
+
report_section_and_environment(options[:section], Puppet.settings[:environment])
|
184
|
+
end
|
185
|
+
|
186
|
+
puts(_("Deleted setting from '%{section_name}': '%{setting_string}', and adding it to 'server' section") %
|
187
|
+
{ section_name: options[:section], name: name, setting_string: setting_string.strip })
|
188
|
+
end
|
189
|
+
# add the setting to the to server section instead of master section
|
190
|
+
config.set("server", name, value)
|
191
|
+
else
|
192
|
+
config.set(options[:section], name, value)
|
193
|
+
end
|
167
194
|
end
|
168
195
|
end
|
169
196
|
nil
|
@@ -185,9 +212,9 @@ https://puppet.com/docs/puppet/latest/configuration.html#environment
|
|
185
212
|
|
186
213
|
$ puppet config delete setting_name
|
187
214
|
|
188
|
-
Delete the setting 'setting_name' from the '
|
215
|
+
Delete the setting 'setting_name' from the 'server' configuration domain:
|
189
216
|
|
190
|
-
$ puppet config delete setting_name --section
|
217
|
+
$ puppet config delete setting_name --section server
|
191
218
|
EOT
|
192
219
|
|
193
220
|
when_invoked do |name, options|
|
@@ -202,18 +229,31 @@ https://puppet.com/docs/puppet/latest/configuration.html#environment
|
|
202
229
|
if Puppet::FileSystem.exist?(path)
|
203
230
|
Puppet::FileSystem.open(path, nil, 'r+:UTF-8') do |file|
|
204
231
|
Puppet::Settings::IniFile.update(file) do |config|
|
205
|
-
setting_string = config.delete(options[:section], name)
|
206
|
-
if setting_string
|
207
232
|
|
208
|
-
|
209
|
-
|
210
|
-
|
233
|
+
# delete from both master section and server section
|
234
|
+
if options[:section] == "master" || options[:section] == "server"
|
235
|
+
master_setting_string = config.delete("master", name)
|
236
|
+
puts(_("Deleted setting from '%{section_name}': '%{setting_string}'") %
|
237
|
+
{ section_name: 'master', name: name, setting_string: master_setting_string.strip[/[^=]+/] }) if master_setting_string
|
211
238
|
|
239
|
+
server_setting_string = config.delete("server", name)
|
212
240
|
puts(_("Deleted setting from '%{section_name}': '%{setting_string}'") %
|
213
|
-
|
241
|
+
{ section_name: 'server', name: name, setting_string: server_setting_string.strip[/[^=]+/] }) if server_setting_string
|
242
|
+
|
214
243
|
else
|
215
|
-
|
216
|
-
|
244
|
+
setting_string = config.delete(options[:section], name)
|
245
|
+
if setting_string
|
246
|
+
|
247
|
+
if Puppet::Util::Log.sendlevel?(:info)
|
248
|
+
report_section_and_environment(options[:section], Puppet.settings[:environment])
|
249
|
+
end
|
250
|
+
|
251
|
+
puts(_("Deleted setting from '%{section_name}': '%{setting_string}'") %
|
252
|
+
{ section_name: options[:section], name: name, setting_string: setting_string.strip })
|
253
|
+
else
|
254
|
+
Puppet.warning(_("No setting found in configuration file for section '%{section_name}' setting name '%{name}'") %
|
255
|
+
{ section_name: options[:section], name: name })
|
256
|
+
end
|
217
257
|
end
|
218
258
|
end
|
219
259
|
end
|
data/lib/puppet/face/epp.rb
CHANGED
@@ -440,7 +440,12 @@ Puppet::Face.define(:epp, '0.0.1') do
|
|
440
440
|
|
441
441
|
def render_inline(epp_source, compiler, options)
|
442
442
|
template_args = get_values(compiler, options)
|
443
|
-
Puppet::Pops::Evaluator::EppEvaluator.inline_epp(compiler.topscope, epp_source, template_args)
|
443
|
+
result = Puppet::Pops::Evaluator::EppEvaluator.inline_epp(compiler.topscope, epp_source, template_args)
|
444
|
+
if result.instance_of?(Puppet::Pops::Types::PSensitiveType::Sensitive)
|
445
|
+
result.unwrap
|
446
|
+
else
|
447
|
+
result
|
448
|
+
end
|
444
449
|
end
|
445
450
|
|
446
451
|
def render_file(epp_template_name, compiler, options, show_filename, file_nbr)
|
@@ -457,7 +462,12 @@ Puppet::Face.define(:epp, '0.0.1') do
|
|
457
462
|
if template_file.nil? && Puppet::FileSystem.exist?(epp_template_name)
|
458
463
|
epp_template_name = File.expand_path(epp_template_name)
|
459
464
|
end
|
460
|
-
|
465
|
+
result = Puppet::Pops::Evaluator::EppEvaluator.epp(compiler.topscope, epp_template_name, compiler.environment, template_args)
|
466
|
+
if result.instance_of?(Puppet::Pops::Types::PSensitiveType::Sensitive)
|
467
|
+
output << result.unwrap
|
468
|
+
else
|
469
|
+
output << result
|
470
|
+
end
|
461
471
|
rescue Puppet::ParseError => detail
|
462
472
|
Puppet.err("--- #{epp_template_name}") if show_filename
|
463
473
|
raise detail
|
data/lib/puppet/face/facts.rb
CHANGED
@@ -1,5 +1,29 @@
|
|
1
1
|
require 'puppet/indirector/face'
|
2
2
|
require 'puppet/node/facts'
|
3
|
+
require 'puppet/util/fact_dif'
|
4
|
+
|
5
|
+
EXCLUDE_LIST = %w[facterversion
|
6
|
+
swapfree_mb swapsize_mb
|
7
|
+
load_averages\.*
|
8
|
+
memory\.swap\.available_bytes memory\.swap\.capacity memory\.swap\.total_bytes
|
9
|
+
memory\.swap\.used_bytes memory\.swap\.available
|
10
|
+
memory\.system\.available memory\.system\.available_bytes memory\.system\.capacity memory\.swap\.used
|
11
|
+
memory\.system\.total_bytes memory\.system\.used memory\.system\.used_bytes
|
12
|
+
memoryfree memoryfree_mb memorysize_mb
|
13
|
+
mountpoints\..* mtu_.* mountpoints\..*\.capacity
|
14
|
+
networking\.interfaces\..*\.mtu networking\.mtu partitions\..*\.filesystem
|
15
|
+
partitions\..*\.size_bytes partitions\..*\.mount partitions\..*\.uuid
|
16
|
+
disks\..*\.size_bytes
|
17
|
+
hypervisors\.lpar\.partition_number hypervisors\.xen\.privileged hypervisors\.zone\..* hypervisors\.ldom\..*
|
18
|
+
processors\.speed
|
19
|
+
ldom_.*
|
20
|
+
boardassettag dmi\.board\.asset_tag
|
21
|
+
blockdevice_.*_vendor blockdevice_.*_size
|
22
|
+
system_uptime\.days system_uptime\.hours system_uptime\.seconds system_uptime\.uptime
|
23
|
+
uptime_days uptime_hours uptime_seconds
|
24
|
+
system_profiler\.uptime
|
25
|
+
sp_uptime
|
26
|
+
uptime]
|
3
27
|
|
4
28
|
Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
5
29
|
copyright "Puppet Inc.", 2011
|
@@ -87,4 +111,40 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
|
87
111
|
nil
|
88
112
|
end
|
89
113
|
end
|
114
|
+
|
115
|
+
action(:diff) do
|
116
|
+
summary _("Compare Facter 3 output with Facter 4 output")
|
117
|
+
description <<-'EOT'
|
118
|
+
Compares output from facter 3 with Facter 4 and prints the differences
|
119
|
+
EOT
|
120
|
+
returns "Differences between Facter 3 and Facter 4 output as an array."
|
121
|
+
notes <<-'EOT'
|
122
|
+
EOT
|
123
|
+
examples <<-'EOT'
|
124
|
+
get differences between facter versions:
|
125
|
+
$ puppet facts diff
|
126
|
+
EOT
|
127
|
+
|
128
|
+
render_as :json
|
129
|
+
|
130
|
+
when_invoked do |*args|
|
131
|
+
Puppet.settings.preferred_run_mode = :agent
|
132
|
+
Puppet::Node::Facts.indirection.terminus_class = :facter
|
133
|
+
|
134
|
+
if Puppet::Util::Package.versioncmp(Facter.value('facterversion'), '4.0.0') < 0
|
135
|
+
facter3_result = Puppet::Node::Facts.indirection.find(Puppet.settings[:certname])
|
136
|
+
begin
|
137
|
+
require 'facter-ng'
|
138
|
+
facter4_result = Puppet::Node::Facts.indirection.find(Puppet.settings[:certname])
|
139
|
+
rescue LoadError
|
140
|
+
raise ArgumentError, 'facter-ng could not be loaded'
|
141
|
+
end
|
142
|
+
fact_diff = FactDif.new(facter3_result.to_json, facter4_result.to_json, EXCLUDE_LIST)
|
143
|
+
fact_diff.difs
|
144
|
+
else
|
145
|
+
Puppet.warning _("Already using Facter 4. To use `puppet facts diff` remove facterng from the .conf file or run `puppet config set facterng false`.")
|
146
|
+
exit 0
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
90
150
|
end
|
data/lib/puppet/face/node.rb
CHANGED
@@ -32,11 +32,11 @@ Puppet::Indirector::Face.define(:node, '0.0.1') do
|
|
32
32
|
|
33
33
|
$ puppet node find somenode.puppetlabs.lan --terminus plain --render-as yaml
|
34
34
|
|
35
|
-
Retrieve a node using the
|
35
|
+
Retrieve a node using the Puppet Server's configured ENC:
|
36
36
|
|
37
|
-
$ puppet node find somenode.puppetlabs.lan --terminus exec --run_mode
|
37
|
+
$ puppet node find somenode.puppetlabs.lan --terminus exec --run_mode server --render-as yaml
|
38
38
|
|
39
|
-
Retrieve the same node from the
|
39
|
+
Retrieve the same node from the Puppet Server:
|
40
40
|
|
41
41
|
$ puppet node find somenode.puppetlabs.lan --terminus rest --render-as yaml
|
42
42
|
EOT
|
@@ -26,9 +26,9 @@ Puppet::Face.define(:node, '0.0.1') do
|
|
26
26
|
# definition, and should not be modifiable beyond that. This is one of
|
27
27
|
# the only places left in the code that tries to manipulate it. Other
|
28
28
|
# parts of code that handle certificates behave differently if the
|
29
|
-
# run_mode is
|
29
|
+
# run_mode is server. Those other behaviors are needed for cleaning the
|
30
30
|
# certificates correctly.
|
31
|
-
Puppet.settings.preferred_run_mode = "
|
31
|
+
Puppet.settings.preferred_run_mode = "server"
|
32
32
|
|
33
33
|
Puppet::Node::Facts.indirection.terminus_class = :yaml
|
34
34
|
Puppet::Node::Facts.indirection.cache_class = :yaml
|
data/lib/puppet/face/status.rb
CHANGED
@@ -26,7 +26,7 @@ Puppet::Indirector::Face.define(:status, '0.0.1') do
|
|
26
26
|
|
27
27
|
Over REST, this action will query the configured puppet master by default.
|
28
28
|
To query other servers, including puppet agent nodes started with the
|
29
|
-
<--listen> option, you can set the global <--server> and <--
|
29
|
+
<--listen> option, you can set the global <--server> and <--serverport>
|
30
30
|
options on the command line; note that agent nodes listen on port 8139.
|
31
31
|
EOT
|
32
32
|
find.short_description <<-EOT
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'puppet/ffi/posix'
|
2
|
+
|
3
|
+
module Puppet::FFI::POSIX
|
4
|
+
module Constants
|
5
|
+
extend FFI::Library
|
6
|
+
|
7
|
+
# Maximum number of supplementary groups (groups
|
8
|
+
# that a user can be in plus its primary group)
|
9
|
+
# (64 + 1 primary group)
|
10
|
+
# Chosen a reasonable middle number from the list
|
11
|
+
# https://www.j3e.de/ngroups.html
|
12
|
+
MAXIMUM_NUMBER_OF_GROUPS = 65
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'puppet/ffi/posix'
|
2
|
+
|
3
|
+
module Puppet::FFI::POSIX
|
4
|
+
module Functions
|
5
|
+
|
6
|
+
extend FFI::Library
|
7
|
+
|
8
|
+
ffi_convention :stdcall
|
9
|
+
|
10
|
+
# https://man7.org/linux/man-pages/man3/getgrouplist.3.html
|
11
|
+
# int getgrouplist (
|
12
|
+
# const char *user,
|
13
|
+
# gid_t group,
|
14
|
+
# gid_t *groups,
|
15
|
+
# int *ngroups
|
16
|
+
# );
|
17
|
+
begin
|
18
|
+
ffi_lib FFI::Library::LIBC
|
19
|
+
attach_function :getgrouplist, [:string, :uint, :pointer, :pointer], :int
|
20
|
+
rescue FFI::NotFoundError
|
21
|
+
# Do nothing
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -16,7 +16,7 @@ class Puppet::FileBucket::Dipper
|
|
16
16
|
def initialize(hash = {})
|
17
17
|
# Emulate the XMLRPC client
|
18
18
|
server = hash[:Server]
|
19
|
-
port = hash[:Port] || Puppet[:
|
19
|
+
port = hash[:Port] || Puppet[:serverport]
|
20
20
|
|
21
21
|
if hash.include?(:Path)
|
22
22
|
@local_path = hash[:Path]
|
data/lib/puppet/functions/epp.rb
CHANGED
@@ -40,6 +40,7 @@ Puppet::Functions.create_function(:epp, Puppet::Functions::InternalFunction) do
|
|
40
40
|
scope_param
|
41
41
|
param 'String', :path
|
42
42
|
optional_param 'Hash[Pattern[/^\w+$/], Any]', :parameters
|
43
|
+
return_type 'Variant[String, Sensitive[String]]'
|
43
44
|
end
|
44
45
|
|
45
46
|
def epp(scope, path, parameters = nil)
|
@@ -51,6 +51,7 @@ Puppet::Functions.create_function(:inline_epp, Puppet::Functions::InternalFuncti
|
|
51
51
|
scope_param()
|
52
52
|
param 'String', :template
|
53
53
|
optional_param 'Hash[Pattern[/^\w+$/], Any]', :parameters
|
54
|
+
return_type 'Variant[String, Sensitive[String]]'
|
54
55
|
end
|
55
56
|
|
56
57
|
def inline_epp(scope, template, parameters = nil)
|
data/lib/puppet/functions/new.rb
CHANGED
@@ -991,12 +991,17 @@ Puppet::Functions.create_function(:new, Puppet::Functions::InternalFunction) do
|
|
991
991
|
|
992
992
|
def new_instance(scope, t, *args)
|
993
993
|
return args[0] if args.size == 1 && !t.is_a?(Puppet::Pops::Types::PInitType) && t.instance?(args[0])
|
994
|
-
result = assert_type(t, new_function_for_type(t
|
994
|
+
result = assert_type(t, new_function_for_type(t).call(scope, *args))
|
995
995
|
return block_given? ? yield(result) : result
|
996
996
|
end
|
997
997
|
|
998
|
-
def new_function_for_type(t
|
999
|
-
@new_function_cache ||=
|
998
|
+
def new_function_for_type(t)
|
999
|
+
@new_function_cache ||= {}
|
1000
|
+
|
1001
|
+
unless @new_function_cache.key?(t)
|
1002
|
+
@new_function_cache[t] = t.new_function.new(nil, loader)
|
1003
|
+
end
|
1004
|
+
|
1000
1005
|
@new_function_cache[t]
|
1001
1006
|
end
|
1002
1007
|
|
data/lib/puppet/http.rb
CHANGED
@@ -22,6 +22,7 @@ module Puppet
|
|
22
22
|
require 'puppet/http/service/ca'
|
23
23
|
require 'puppet/http/service/compiler'
|
24
24
|
require 'puppet/http/service/file_server'
|
25
|
+
require 'puppet/http/service/puppetserver'
|
25
26
|
require 'puppet/http/service/report'
|
26
27
|
require 'puppet/http/session'
|
27
28
|
require 'puppet/http/resolver'
|
data/lib/puppet/http/client.rb
CHANGED
@@ -438,7 +438,7 @@ class Puppet::HTTP::Client
|
|
438
438
|
services.delete(:report)
|
439
439
|
end
|
440
440
|
|
441
|
-
resolvers << Puppet::HTTP::Resolver::ServerList.new(self, server_list_setting: server_list_setting, default_port: Puppet[:
|
441
|
+
resolvers << Puppet::HTTP::Resolver::ServerList.new(self, server_list_setting: server_list_setting, default_port: Puppet[:serverport], services: services)
|
442
442
|
end
|
443
443
|
|
444
444
|
resolvers << Puppet::HTTP::Resolver::Settings.new(self)
|
data/lib/puppet/http/resolver.rb
CHANGED
@@ -28,12 +28,12 @@ class Puppet::HTTP::Resolver
|
|
28
28
|
# @param [Symbol] name the service to resolve
|
29
29
|
# @param [Puppet::SSL::SSLContext] ssl_context (nil) optional ssl context to
|
30
30
|
# use when creating a connection
|
31
|
-
# @param [Proc]
|
32
|
-
#
|
31
|
+
# @param [Proc] canceled_handler (nil) optional callback allowing a resolver
|
32
|
+
# to cancel resolution.
|
33
33
|
#
|
34
34
|
# @raise [NotImplementedError] this base class is not implemented
|
35
35
|
#
|
36
|
-
def resolve(session, name, ssl_context: nil,
|
36
|
+
def resolve(session, name, ssl_context: nil, canceled_handler: nil)
|
37
37
|
raise NotImplementedError
|
38
38
|
end
|
39
39
|
|
@@ -45,17 +45,14 @@ class Puppet::HTTP::Resolver
|
|
45
45
|
# @param [Puppet::HTTP::Session] session
|
46
46
|
# @param [Puppet::HTTP::Service] service
|
47
47
|
# @param [Puppet::SSL::SSLContext] ssl_context
|
48
|
-
# @param [Proc] error_handler (nil) optional callback for each error
|
49
|
-
# encountered while resolving a route.
|
50
48
|
#
|
51
49
|
# @return [Boolean] Returns true if a connection is successful, false otherwise
|
52
50
|
#
|
53
|
-
def check_connection?(session, service, ssl_context: nil
|
51
|
+
def check_connection?(session, service, ssl_context: nil)
|
54
52
|
service.connect(ssl_context: ssl_context)
|
55
53
|
return true
|
56
54
|
rescue Puppet::HTTP::ConnectionError => e
|
57
|
-
|
58
|
-
Puppet.debug("Connection to #{service.url} failed, trying next route: #{e.message}")
|
55
|
+
Puppet.log_exception(e, "Connection to #{service.url} failed, trying next route: #{e.message}")
|
59
56
|
return false
|
60
57
|
end
|
61
58
|
end
|
@@ -22,7 +22,6 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
|
|
22
22
|
@server_list_setting = server_list_setting
|
23
23
|
@default_port = default_port
|
24
24
|
@services = services
|
25
|
-
@resolved_url = nil
|
26
25
|
end
|
27
26
|
|
28
27
|
#
|
@@ -33,8 +32,8 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
|
|
33
32
|
# @param [Puppet::HTTP::Session] session <description>
|
34
33
|
# @param [Symbol] name the name of the service being resolved
|
35
34
|
# @param [Puppet::SSL::SSLContext] ssl_context
|
36
|
-
# @param [Proc]
|
37
|
-
#
|
35
|
+
# @param [Proc] canceled_handler (nil) optional callback allowing a resolver
|
36
|
+
# to cancel resolution.
|
38
37
|
#
|
39
38
|
# @return [nil] return nil if the service to be resolved does not support
|
40
39
|
# server_list
|
@@ -44,7 +43,7 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
|
|
44
43
|
# @raise [Puppet::Error] raise if none of the servers defined in server_list
|
45
44
|
# are available
|
46
45
|
#
|
47
|
-
def resolve(session, name, ssl_context: nil,
|
46
|
+
def resolve(session, name, ssl_context: nil, canceled_handler: nil)
|
48
47
|
# If we're configured to use an explicit service host, e.g. report_server
|
49
48
|
# then don't use server_list to resolve the `:report` service.
|
50
49
|
return nil unless @services.include?(name)
|
@@ -58,41 +57,24 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
|
|
58
57
|
@server_list_setting.value.each do |server|
|
59
58
|
host = server[0]
|
60
59
|
port = server[1] || @default_port
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
60
|
+
|
61
|
+
service = Puppet::HTTP::Service.create_service(@client, session, :puppetserver, host, port)
|
62
|
+
begin
|
63
|
+
service.get_simple_status(ssl_context: ssl_context)
|
64
|
+
@resolved_url = service.url
|
65
|
+
return Puppet::HTTP::Service.create_service(@client, session, name, @resolved_url.host, @resolved_url.port)
|
66
|
+
rescue Puppet::HTTP::ResponseError => detail
|
67
|
+
Puppet.log_exception(detail, _("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
|
68
|
+
{ host: service.url.host, port: service.url.port, code: detail.response.code, reason: detail.response.reason })
|
69
|
+
rescue Puppet::HTTP::HTTPError => detail
|
70
|
+
Puppet.log_exception(detail, _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail})
|
65
71
|
end
|
66
72
|
end
|
67
73
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
#
|
72
|
-
# @api private
|
73
|
-
#
|
74
|
-
# Check if a server and port is available
|
75
|
-
#
|
76
|
-
# @param [URI] uri A URI created from the server and port to test
|
77
|
-
# @param [Puppet::HTTP::Session] session
|
78
|
-
# @param [Puppet::SSL::SSLContext] ssl_context
|
79
|
-
# @param [Proc] error_handler (nil) optional callback for each error
|
80
|
-
# encountered while resolving a route.
|
81
|
-
#
|
82
|
-
# @return [Boolean] true if a successful response is returned by the server,
|
83
|
-
# false otherwise
|
84
|
-
#
|
85
|
-
def get_success?(uri, session, ssl_context: nil, error_handler: nil)
|
86
|
-
response = @client.get(uri, options: {ssl_context: ssl_context})
|
87
|
-
return true if response.success?
|
74
|
+
# don't fallback to other resolvers
|
75
|
+
canceled_handler.call(true) if canceled_handler
|
88
76
|
|
89
|
-
|
90
|
-
|
91
|
-
return false
|
92
|
-
rescue => detail
|
93
|
-
error_handler.call(detail) if error_handler
|
94
|
-
#TRANSLATORS 'server_list' is the name of a setting and should not be translated
|
95
|
-
Puppet.debug _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail}
|
96
|
-
return false
|
77
|
+
# not found
|
78
|
+
nil
|
97
79
|
end
|
98
80
|
end
|