puppet 7.9.0-x86-mingw32 → 7.12.1-x86-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
data/lib/puppet/forge.rb
CHANGED
@@ -213,7 +213,7 @@ class Puppet::Forge < SemanticPuppet::Dependency::Source
|
|
213
213
|
end
|
214
214
|
|
215
215
|
def validate_checksum(file, checksum, digest_class)
|
216
|
-
if
|
216
|
+
if Puppet.runtime[:facter].value(:fips_enabled) && digest_class == Digest::MD5
|
217
217
|
raise _("Module install using MD5 is prohibited in FIPS mode.")
|
218
218
|
end
|
219
219
|
|
@@ -2,11 +2,11 @@
|
|
2
2
|
#
|
3
3
|
# This function accepts an argument that is a String as a `<MODULE NAME>/<TEMPLATE>`
|
4
4
|
# reference, which searches for `<TEMPLATE>` relative to a module's `templates`
|
5
|
-
# directory on the
|
5
|
+
# directory on the primary server. (For example, the reference `mymod/secret.conf.epp`
|
6
6
|
# will search for the file `<MODULES DIRECTORY>/mymod/templates/secret.conf.epp`.)
|
7
7
|
#
|
8
8
|
# The primary use case is for agent-side template rendering with late-bound variables
|
9
|
-
# resolved, such as from secret stores inaccessible to the
|
9
|
+
# resolved, such as from secret stores inaccessible to the primary server, such as
|
10
10
|
#
|
11
11
|
# ```
|
12
12
|
# $variables = {
|
data/lib/puppet/http/client.rb
CHANGED
@@ -346,7 +346,7 @@ class Puppet::HTTP::Client
|
|
346
346
|
|
347
347
|
while !done do
|
348
348
|
connect(request.uri, options: options) do |http|
|
349
|
-
apply_auth(request, basic_auth)
|
349
|
+
apply_auth(request, basic_auth) if redirects.zero?
|
350
350
|
|
351
351
|
# don't call return within the `request` block
|
352
352
|
http.request(request) do |nethttp|
|
@@ -49,6 +49,11 @@ class Puppet::HTTP::Redirector
|
|
49
49
|
new_request = request.class.new(url)
|
50
50
|
new_request.body = request.body
|
51
51
|
request.each do |header, value|
|
52
|
+
unless Puppet[:location_trusted]
|
53
|
+
# skip adding potentially sensitive header to other hosts
|
54
|
+
next if header.casecmp('Authorization').zero? && request.uri.host.casecmp(location.host) != 0
|
55
|
+
next if header.casecmp('Cookie').zero? && request.uri.host.casecmp(location.host) != 0
|
56
|
+
end
|
52
57
|
new_request[header] = value
|
53
58
|
end
|
54
59
|
|
@@ -60,6 +60,10 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
|
|
60
60
|
# @param [String] environment The name of the environment we are operating in
|
61
61
|
# @param [String] configured_environment Optional, the name of the configured
|
62
62
|
# environment. If unset, `environment` is used.
|
63
|
+
# @param [Boolean] check_environment If true, request that the server check if
|
64
|
+
# our `environment` matches the server-specified environment. If they do not
|
65
|
+
# match, then the server may return an empty catalog in the server-specified
|
66
|
+
# environment.
|
63
67
|
# @param [String] transaction_uuid An agent generated transaction uuid, used
|
64
68
|
# for connecting catalogs and reports.
|
65
69
|
# @param [String] job_uuid A unique job identifier defined when the orchestrator
|
@@ -75,7 +79,7 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
|
|
75
79
|
# the server
|
76
80
|
#
|
77
81
|
# @api public
|
78
|
-
def post_catalog(name, facts:, environment:, configured_environment: nil, transaction_uuid: nil, job_uuid: nil, static_catalog: true, checksum_type: Puppet[:supported_checksum_types])
|
82
|
+
def post_catalog(name, facts:, environment:, configured_environment: nil, check_environment: false, transaction_uuid: nil, job_uuid: nil, static_catalog: true, checksum_type: Puppet[:supported_checksum_types])
|
79
83
|
if Puppet[:preferred_serialization_format] == "pson"
|
80
84
|
formatter = Puppet::Network::FormatHandler.format_for(:pson)
|
81
85
|
# must use 'pson' instead of 'text/pson'
|
@@ -93,6 +97,7 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
|
|
93
97
|
facts: Puppet::Util.uri_query_encode(facts_as_string),
|
94
98
|
environment: environment,
|
95
99
|
configured_environment: configured_environment || environment,
|
100
|
+
check_environment: !!check_environment,
|
96
101
|
transaction_uuid: transaction_uuid,
|
97
102
|
job_uuid: job_uuid,
|
98
103
|
static_catalog: static_catalog,
|
@@ -53,8 +53,22 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
|
|
53
53
|
node.trusted_data = Puppet.lookup(:trusted_information) { Puppet::Context::TrustedInformation.local(node) }.to_h
|
54
54
|
|
55
55
|
if node.environment
|
56
|
+
# If the requested environment doesn't match the server specified environment,
|
57
|
+
# as determined by the node terminus, and the request wants us to check for an
|
58
|
+
# environment mismatch, then return an empty catalog with the server-specified
|
59
|
+
# enviroment.
|
60
|
+
if request.remote? && request.options[:check_environment] && node.environment != request.environment
|
61
|
+
return Puppet::Resource::Catalog.new(node.name, node.environment)
|
62
|
+
end
|
63
|
+
|
56
64
|
node.environment.with_text_domain do
|
57
|
-
|
65
|
+
envs = Puppet.lookup(:environments)
|
66
|
+
envs.guard(node.environment.name)
|
67
|
+
begin
|
68
|
+
compile(node, request.options)
|
69
|
+
ensure
|
70
|
+
envs.unguard(node.environment.name)
|
71
|
+
end
|
58
72
|
end
|
59
73
|
else
|
60
74
|
compile(node, request.options)
|
@@ -78,6 +92,10 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
|
|
78
92
|
Puppet.run_mode.server?
|
79
93
|
end
|
80
94
|
|
95
|
+
def require_environment?
|
96
|
+
false
|
97
|
+
end
|
98
|
+
|
81
99
|
private
|
82
100
|
|
83
101
|
# @param facts [String] facts in a wire format for decoding
|
@@ -154,7 +172,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
|
|
154
172
|
location = Puppet::Module::FILETYPES['files']
|
155
173
|
|
156
174
|
!!(source_as_uri.path =~ /^\/modules\// &&
|
157
|
-
metadata.full_path =~ /#{environment_path}[^\/]+\/[^\/]+\/#{location}\/.+/)
|
175
|
+
metadata.full_path =~ /#{environment_path}\/[^\/]+\/[^\/]+\/#{location}\/.+/)
|
158
176
|
end
|
159
177
|
|
160
178
|
# Helper method to log file resources that could not be inlined because they
|
@@ -173,7 +191,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
|
|
173
191
|
# Inline file metadata for static catalogs
|
174
192
|
# Initially restricted to files sourced from codedir via puppet:/// uri.
|
175
193
|
def inline_metadata(catalog, checksum_type)
|
176
|
-
environment_path = Pathname.new File.join(Puppet[:environmentpath], catalog.environment
|
194
|
+
environment_path = Pathname.new File.join(Puppet[:environmentpath], catalog.environment)
|
177
195
|
environment_path = Puppet::Environments::Directories.real_path(environment_path)
|
178
196
|
list_of_resources = catalog.resources.find_all { |res| res.type == "File" }
|
179
197
|
|
@@ -415,17 +433,17 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
|
|
415
433
|
"serverip" => "ipaddress",
|
416
434
|
"serverip6" => "ipaddress6"
|
417
435
|
}.each do |var, fact|
|
418
|
-
value =
|
436
|
+
value = Puppet.runtime[:facter].value(fact)
|
419
437
|
if !value.nil?
|
420
438
|
@server_facts[var] = value
|
421
439
|
end
|
422
440
|
end
|
423
441
|
|
424
442
|
if @server_facts["servername"].nil?
|
425
|
-
host =
|
443
|
+
host = Puppet.runtime[:facter].value(:hostname)
|
426
444
|
if host.nil?
|
427
445
|
Puppet.warning _("Could not retrieve fact servername")
|
428
|
-
elsif domain =
|
446
|
+
elsif domain = Puppet.runtime[:facter].value(:domain) #rubocop:disable Lint/AssignmentInCondition
|
429
447
|
@server_facts["servername"] = [host, domain].join(".")
|
430
448
|
else
|
431
449
|
@server_facts["servername"] = host
|
@@ -18,6 +18,7 @@ class Puppet::Resource::Catalog::Rest < Puppet::Indirector::REST
|
|
18
18
|
facts: request.options[:facts_for_catalog],
|
19
19
|
environment: request.environment.to_s,
|
20
20
|
configured_environment: request.options[:configured_environment],
|
21
|
+
check_environment: request.options[:check_environment],
|
21
22
|
transaction_uuid: request.options[:transaction_uuid],
|
22
23
|
job_uuid: request.options[:job_id],
|
23
24
|
static_catalog: request.options[:static_catalog],
|
@@ -20,10 +20,10 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
|
|
20
20
|
|
21
21
|
# Lookup a host's facts up in Facter.
|
22
22
|
def find(request)
|
23
|
-
|
23
|
+
Puppet.runtime[:facter].reset
|
24
24
|
|
25
25
|
# Note: we need to setup puppet's external search paths before adding the puppetversion
|
26
|
-
# fact. This is because in Facter 2.x, the first `
|
26
|
+
# fact. This is because in Facter 2.x, the first `Puppet.runtime[:facter].add` causes Facter to create
|
27
27
|
# its directory loaders which cannot be changed, meaning other external facts won't
|
28
28
|
# be resolved. (PUP-4607)
|
29
29
|
self.class.setup_external_search_paths(request)
|
@@ -36,7 +36,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
|
|
36
36
|
raise(Puppet::Error, _("puppet facts show requires version 4.0.40 or greater of Facter.")) unless Facter.respond_to?(:resolve)
|
37
37
|
find_with_options(request)
|
38
38
|
else
|
39
|
-
Puppet::Node::Facts.new(request.key,
|
39
|
+
Puppet::Node::Facts.new(request.key, Puppet.runtime[:facter].to_hash)
|
40
40
|
end
|
41
41
|
|
42
42
|
result.add_local_facts unless request.options[:resolve_options]
|
@@ -68,7 +68,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
|
|
68
68
|
true
|
69
69
|
end
|
70
70
|
dirs << request.options[:custom_dir] if request.options[:custom_dir]
|
71
|
-
|
71
|
+
Puppet.runtime[:facter].search(*dirs)
|
72
72
|
end
|
73
73
|
|
74
74
|
def self.setup_external_search_paths(request)
|
@@ -90,7 +90,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
|
|
90
90
|
end
|
91
91
|
|
92
92
|
dirs << request.options[:external_dir] if request.options[:external_dir]
|
93
|
-
|
93
|
+
Puppet.runtime[:facter].search_external dirs
|
94
94
|
end
|
95
95
|
|
96
96
|
private
|
@@ -105,6 +105,6 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
|
|
105
105
|
options_for_facter += " --no-cache" if options[:no_cache] == false
|
106
106
|
options_for_facter += " --timing" if options[:timing]
|
107
107
|
|
108
|
-
Puppet::Node::Facts.new(request.key,
|
108
|
+
Puppet::Node::Facts.new(request.key, Puppet.runtime[:facter].resolve(options_for_facter))
|
109
109
|
end
|
110
110
|
end
|
@@ -313,7 +313,7 @@ class Puppet::Indirector::Indirection
|
|
313
313
|
request = request(:save, key, instance, options)
|
314
314
|
terminus = prepare(request)
|
315
315
|
|
316
|
-
result = terminus.save(request)
|
316
|
+
result = terminus.save(request) if !request.ignore_terminus?
|
317
317
|
|
318
318
|
# If caching is enabled, save our document there
|
319
319
|
cache.save(request) if cache? && !request.ignore_cache_save?
|
data/lib/puppet/module/plan.rb
CHANGED
@@ -50,7 +50,6 @@ class Puppet::Module
|
|
50
50
|
RESERVED_DATA_TYPES = %w{any array boolean catalogentry class collection
|
51
51
|
callable data default enum float hash integer numeric optional pattern
|
52
52
|
resource runtime scalar string struct tuple type undef variant}
|
53
|
-
MOUNTS = %w[lib files plans]
|
54
53
|
|
55
54
|
def self.is_plan_name?(name)
|
56
55
|
return true if name =~ /^[a-z][a-z0-9_]*$/
|
data/lib/puppet/module/task.rb
CHANGED
@@ -138,7 +138,7 @@ module Puppet::ModuleTool
|
|
138
138
|
rescue SemanticPuppet::Dependency::UnsatisfiableGraph => e
|
139
139
|
unsatisfied = nil
|
140
140
|
|
141
|
-
if e.respond_to?(:unsatisfied)
|
141
|
+
if e.respond_to?(:unsatisfied) && e.unsatisfied
|
142
142
|
constraints = {}
|
143
143
|
# If the module we're installing satisfies all its
|
144
144
|
# dependencies, but would break an already installed
|
@@ -164,8 +164,12 @@ module Puppet::ModuleTool
|
|
164
164
|
# If the module fails to satisfy one of its
|
165
165
|
# dependencies, show the unsatisfiable module
|
166
166
|
else
|
167
|
-
|
168
|
-
|
167
|
+
dep_constraints = graph.dependencies[name].max.constraints
|
168
|
+
|
169
|
+
if dep_constraints.key?(e.unsatisfied)
|
170
|
+
unsatisfied_range = dep_constraints[e.unsatisfied].first[1]
|
171
|
+
constraints[e.unsatisfied] = unsatisfied_range
|
172
|
+
end
|
169
173
|
end
|
170
174
|
|
171
175
|
installed_module = @environment.module_by_forge_name(e.unsatisfied.tr('-', '/'))
|
@@ -175,7 +179,7 @@ module Puppet::ModuleTool
|
|
175
179
|
:name => e.unsatisfied,
|
176
180
|
:constraints => constraints,
|
177
181
|
:current_version => current_version
|
178
|
-
}
|
182
|
+
} if constraints.any?
|
179
183
|
end
|
180
184
|
|
181
185
|
raise NoVersionsSatisfyError, results.merge(
|
@@ -89,7 +89,7 @@ module Puppet::ModuleTool
|
|
89
89
|
mod = @installed.first
|
90
90
|
|
91
91
|
unless @ignore_changes
|
92
|
-
raise _("Either the `--ignore_changes` or `--force` argument must be specified to uninstall modules when running in FIPS mode.") if
|
92
|
+
raise _("Either the `--ignore_changes` or `--force` argument must be specified to uninstall modules when running in FIPS mode.") if Puppet.runtime[:facter].value(:fips_enabled)
|
93
93
|
|
94
94
|
changes = begin
|
95
95
|
Puppet::ModuleTool::Applications::Checksummer.run(mod.path)
|
@@ -27,7 +27,7 @@ module Puppet::ModuleTool
|
|
27
27
|
|
28
28
|
def run
|
29
29
|
# Disallow anything that invokes md5 to avoid un-friendly termination due to FIPS
|
30
|
-
raise _("Module upgrade is prohibited in FIPS mode.") if
|
30
|
+
raise _("Module upgrade is prohibited in FIPS mode.") if Puppet.runtime[:facter].value(:fips_enabled)
|
31
31
|
|
32
32
|
name = @name.tr('/', '-')
|
33
33
|
version = options[:version] || '>= 0.0.0'
|
@@ -98,7 +98,7 @@ class Puppet::Network::HTTP::API::IndirectedRoutes
|
|
98
98
|
params[:environment] = configured_environment
|
99
99
|
end
|
100
100
|
|
101
|
-
if configured_environment.nil?
|
101
|
+
if configured_environment.nil? && indirection.terminus.require_environment?
|
102
102
|
raise Puppet::Network::HTTP::Error::HTTPNotFoundError.new(
|
103
103
|
_("Could not find environment '%{environment}'") % { environment: environment })
|
104
104
|
end
|
@@ -312,7 +312,9 @@ class Puppet::Node::Environment
|
|
312
312
|
{}
|
313
313
|
end
|
314
314
|
modulepath.each do |path|
|
315
|
-
|
315
|
+
Puppet::FileSystem.children(path).map do |p|
|
316
|
+
Puppet::FileSystem.basename_string(p)
|
317
|
+
end.each do |name|
|
316
318
|
next unless Puppet::Module.is_module_directory?(name, path)
|
317
319
|
warn_about_mistaken_path(path, name)
|
318
320
|
if not seen_modules[name]
|
@@ -357,9 +359,6 @@ class Puppet::Node::Environment
|
|
357
359
|
|
358
360
|
# Modules broken out by directory in the modulepath
|
359
361
|
#
|
360
|
-
# @note This method _changes_ the current working directory while enumerating
|
361
|
-
# the modules. This seems rather dangerous.
|
362
|
-
#
|
363
362
|
# @api public
|
364
363
|
#
|
365
364
|
# @return [Hash<String, Array<Puppet::Module>>] A hash whose keys are file
|
@@ -368,13 +367,13 @@ class Puppet::Node::Environment
|
|
368
367
|
modules_by_path = {}
|
369
368
|
modulepath.each do |path|
|
370
369
|
if Puppet::FileSystem.exist?(path)
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
370
|
+
module_names = Puppet::FileSystem.children(path).map do |p|
|
371
|
+
Puppet::FileSystem.basename_string(p)
|
372
|
+
end.select do |name|
|
373
|
+
Puppet::Module.is_module_directory?(name, path)
|
374
|
+
end
|
375
|
+
modules_by_path[path] = module_names.sort.map do |name|
|
376
|
+
Puppet::Module.new(name, File.join(path, name), self)
|
378
377
|
end
|
379
378
|
else
|
380
379
|
modules_by_path[path] = []
|
data/lib/puppet/pal/pal_impl.rb
CHANGED
@@ -415,7 +415,7 @@ module Pal
|
|
415
415
|
|
416
416
|
# Puppet requires Facter, which initializes its lookup paths. Reset Facter to
|
417
417
|
# pickup the new $LOAD_PATH.
|
418
|
-
|
418
|
+
Puppet.runtime[:facter].reset
|
419
419
|
|
420
420
|
node = Puppet.lookup(:pal_current_node)
|
421
421
|
pal_facts = Puppet.lookup(:pal_facts)
|
@@ -13,7 +13,7 @@ class Puppet::Parser::Resource < Puppet::Resource
|
|
13
13
|
|
14
14
|
attr_accessor :source, :scope, :collector_id
|
15
15
|
attr_accessor :virtual, :override, :translated, :catalog, :evaluated
|
16
|
-
attr_accessor :file, :line
|
16
|
+
attr_accessor :file, :line, :kind
|
17
17
|
|
18
18
|
attr_reader :exported, :parameters
|
19
19
|
|
data/lib/puppet/parser/scope.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# The scope class, which handles storing and retrieving variables and types and
|
2
3
|
# such.
|
3
4
|
require 'forwardable'
|
@@ -15,7 +16,7 @@ class Puppet::Parser::Scope
|
|
15
16
|
extend Forwardable
|
16
17
|
|
17
18
|
# Variables that always exist with nil value even if not set
|
18
|
-
BUILT_IN_VARS = ['module_name'
|
19
|
+
BUILT_IN_VARS = ['module_name', 'caller_module_name'].freeze
|
19
20
|
EMPTY_HASH = {}.freeze
|
20
21
|
|
21
22
|
Puppet::Util.logmethods(self)
|
@@ -512,7 +513,7 @@ class Puppet::Parser::Scope
|
|
512
513
|
end
|
513
514
|
end
|
514
515
|
|
515
|
-
UNDEFINED_VARIABLES_KIND = 'undefined_variables'
|
516
|
+
UNDEFINED_VARIABLES_KIND = 'undefined_variables'
|
516
517
|
|
517
518
|
# The exception raised when a throw is uncaught is different in different versions
|
518
519
|
# of ruby. In >=2.2.0 it is UncaughtThrowError (which did not exist prior to this)
|
@@ -746,12 +747,12 @@ class Puppet::Parser::Scope
|
|
746
747
|
end
|
747
748
|
private :transform_setting
|
748
749
|
|
749
|
-
VARNAME_TRUSTED = 'trusted'
|
750
|
-
VARNAME_FACTS = 'facts'
|
751
|
-
VARNAME_SERVER_FACTS = 'server_facts'
|
750
|
+
VARNAME_TRUSTED = 'trusted'
|
751
|
+
VARNAME_FACTS = 'facts'
|
752
|
+
VARNAME_SERVER_FACTS = 'server_facts'
|
752
753
|
RESERVED_VARIABLE_NAMES = [VARNAME_TRUSTED, VARNAME_FACTS].freeze
|
753
|
-
TYPENAME_CLASS = 'Class'
|
754
|
-
TYPENAME_NODE = 'Node'
|
754
|
+
TYPENAME_CLASS = 'Class'
|
755
|
+
TYPENAME_NODE = 'Node'
|
755
756
|
|
756
757
|
# Set a variable in the current scope. This will override settings
|
757
758
|
# in scopes above, but will not allow variables in the current scope
|
@@ -219,16 +219,15 @@ class Closure < CallableSignature
|
|
219
219
|
def call_with_scope(scope, args)
|
220
220
|
variable_bindings = combine_values_with_parameters(scope, args)
|
221
221
|
|
222
|
-
|
223
|
-
final_args = tc.infer_set(parameters.reduce([]) do |tmp_args, param|
|
222
|
+
final_args = parameters.reduce([]) do |tmp_args, param|
|
224
223
|
if param.captures_rest
|
225
224
|
tmp_args.concat(variable_bindings[param.name])
|
226
225
|
else
|
227
226
|
tmp_args << variable_bindings[param.name]
|
228
227
|
end
|
229
|
-
end
|
228
|
+
end
|
230
229
|
|
231
|
-
if type.
|
230
|
+
if type.callable_with?(final_args, block_type)
|
232
231
|
result = catch(:next) do
|
233
232
|
@evaluator.evaluate_block_with_bindings(scope, variable_bindings, @model.body)
|
234
233
|
end
|
@@ -236,7 +235,9 @@ class Closure < CallableSignature
|
|
236
235
|
"value returned from #{closure_name}"
|
237
236
|
end
|
238
237
|
else
|
239
|
-
|
238
|
+
tc = Types::TypeCalculator.singleton
|
239
|
+
args_type = tc.infer_set(final_args)
|
240
|
+
raise ArgumentError, Types::TypeMismatchDescriber.describe_signatures(closure_name, [self], args_type)
|
240
241
|
end
|
241
242
|
end
|
242
243
|
|
@@ -309,6 +310,7 @@ class Closure < CallableSignature
|
|
309
310
|
to += param_range[1]
|
310
311
|
end
|
311
312
|
param_types = Types::PTupleType.new(types, Types::PIntegerType.new(from, to))
|
313
|
+
# The block_type for a Closure is always nil for now, see comment in block_name above
|
312
314
|
Types::PCallableType.new(param_types, nil, return_type)
|
313
315
|
end
|
314
316
|
|
@@ -40,6 +40,7 @@ module Runtime3ResourceSupport
|
|
40
40
|
:parameters => evaluated_parameters,
|
41
41
|
:file => file,
|
42
42
|
:line => line,
|
43
|
+
:kind => Puppet::Resource.to_kind(resolved_type),
|
43
44
|
:exported => exported,
|
44
45
|
:virtual => virtual,
|
45
46
|
# WTF is this? Which source is this? The file? The name of the context ?
|
@@ -292,7 +292,8 @@ class LookupAdapter < DataAdapter
|
|
292
292
|
PROVIDER_STACK = [:lookup_global, :lookup_in_environment, :lookup_in_module].freeze
|
293
293
|
|
294
294
|
def validate_lookup_options(options, module_name)
|
295
|
-
|
295
|
+
return nil if options.nil?
|
296
|
+
raise Puppet::DataBinding::LookupError.new(_("value of %{opts} must be a hash") % { opts: LOOKUP_OPTIONS }) unless options.is_a?(Hash)
|
296
297
|
return options if module_name.nil?
|
297
298
|
|
298
299
|
pfx = "#{module_name}::"
|
@@ -352,7 +353,7 @@ class LookupAdapter < DataAdapter
|
|
352
353
|
module_opts = validate_lookup_options(lookup_in_module(LookupKey::LOOKUP_OPTIONS, meta_invocation, merge_strategy), module_name)
|
353
354
|
opts = if opts.nil?
|
354
355
|
module_opts
|
355
|
-
|
356
|
+
elsif module_opts
|
356
357
|
merge_strategy.lookup([GLOBAL_ENV_MERGE, "Module #{lookup_invocation.module_name}"], meta_invocation) do |n|
|
357
358
|
meta_invocation.with(:scope, n) { meta_invocation.report_found(LOOKUP_OPTIONS, n == GLOBAL_ENV_MERGE ? opts : module_opts) }
|
358
359
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Factory is a helper class that makes construction of a Pops Model
|
2
3
|
# much more convenient. It can be viewed as a small internal DSL for model
|
3
4
|
# constructions.
|
@@ -11,19 +12,19 @@ module Model
|
|
11
12
|
class Factory
|
12
13
|
# Shared build_visitor, since there are many instances of Factory being used
|
13
14
|
|
14
|
-
KEY_LENGTH = 'length'
|
15
|
-
KEY_OFFSET = 'offset'
|
16
|
-
KEY_LOCATOR = 'locator'
|
17
|
-
KEY_OPERATOR = 'operator'
|
15
|
+
KEY_LENGTH = 'length'
|
16
|
+
KEY_OFFSET = 'offset'
|
17
|
+
KEY_LOCATOR = 'locator'
|
18
|
+
KEY_OPERATOR = 'operator'
|
18
19
|
|
19
|
-
KEY_VALUE = 'value'
|
20
|
-
KEY_KEYS = 'keys'
|
21
|
-
KEY_NAME = 'name'
|
22
|
-
KEY_BODY = 'body'
|
23
|
-
KEY_EXPR = 'expr'
|
24
|
-
KEY_LEFT_EXPR = 'left_expr'
|
25
|
-
KEY_RIGHT_EXPR = 'right_expr'
|
26
|
-
KEY_PARAMETERS = 'parameters'
|
20
|
+
KEY_VALUE = 'value'
|
21
|
+
KEY_KEYS = 'keys'
|
22
|
+
KEY_NAME = 'name'
|
23
|
+
KEY_BODY = 'body'
|
24
|
+
KEY_EXPR = 'expr'
|
25
|
+
KEY_LEFT_EXPR = 'left_expr'
|
26
|
+
KEY_RIGHT_EXPR = 'right_expr'
|
27
|
+
KEY_PARAMETERS = 'parameters'
|
27
28
|
|
28
29
|
BUILD_VISITOR = Visitor.new(self, 'build')
|
29
30
|
INFER_VISITOR = Visitor.new(self, 'infer')
|
@@ -1111,7 +1112,7 @@ class Factory
|
|
1111
1112
|
end
|
1112
1113
|
|
1113
1114
|
def self.concat(*args)
|
1114
|
-
result = ''
|
1115
|
+
result = ''.dup
|
1115
1116
|
args.each do |e|
|
1116
1117
|
if e.instance_of?(Factory) && e.model_class <= LiteralString
|
1117
1118
|
result << e[KEY_VALUE]
|