puppet 6.18.0-x86-mingw32 → 6.21.1-x86-mingw32
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
@@ -13,14 +13,14 @@ class Puppet::HTTP::Resolver::Settings < Puppet::HTTP::Resolver
|
|
13
13
|
# @param [Puppet::HTTP::Session] session
|
14
14
|
# @param [Symbol] name the name of the service to be resolved
|
15
15
|
# @param [Puppet::SSL::SSLContext] ssl_context
|
16
|
-
# @param [Proc]
|
17
|
-
#
|
16
|
+
# @param [Proc] canceled_handler (nil) optional callback allowing a resolver
|
17
|
+
# to cancel resolution.
|
18
18
|
#
|
19
19
|
# @return [Puppet::HTTP::Service] if the service successfully connects,
|
20
20
|
# return it. Otherwise, return nil.
|
21
21
|
#
|
22
|
-
def resolve(session, name, ssl_context: nil,
|
22
|
+
def resolve(session, name, ssl_context: nil, canceled_handler: nil)
|
23
23
|
service = Puppet::HTTP::Service.create_service(@client, session, name)
|
24
|
-
check_connection?(session, service, ssl_context: ssl_context
|
24
|
+
check_connection?(session, service, ssl_context: ssl_context) ? service : nil
|
25
25
|
end
|
26
26
|
end
|
@@ -25,21 +25,21 @@ class Puppet::HTTP::Resolver::SRV < Puppet::HTTP::Resolver
|
|
25
25
|
# @param [Puppet::HTTP::Session] session
|
26
26
|
# @param [Symbol] name the service being resolved
|
27
27
|
# @param [Puppet::SSL::SSLContext] ssl_context
|
28
|
-
# @param [Proc]
|
29
|
-
#
|
28
|
+
# @param [Proc] canceled_handler (nil) optional callback allowing a resolver
|
29
|
+
# to cancel resolution.
|
30
30
|
#
|
31
31
|
# @return [Puppet::HTTP::Service] if an available service is found, return
|
32
32
|
# it. Return nil otherwise.
|
33
33
|
#
|
34
|
-
def resolve(session, name, ssl_context: nil,
|
34
|
+
def resolve(session, name, ssl_context: nil, canceled_handler: nil)
|
35
35
|
# Here we pass our HTTP service name as the DNS SRV service name
|
36
36
|
# This is fine for :ca, but note that :puppet and :file are handled
|
37
37
|
# specially in `each_srv_record`.
|
38
38
|
@delegate.each_srv_record(@srv_domain, name) do |server, port|
|
39
39
|
service = Puppet::HTTP::Service.create_service(@client, session, name, server, port)
|
40
|
-
return service if check_connection?(session, service, ssl_context: ssl_context
|
40
|
+
return service if check_connection?(session, service, ssl_context: ssl_context)
|
41
41
|
end
|
42
42
|
|
43
|
-
|
43
|
+
nil
|
44
44
|
end
|
45
45
|
end
|
data/lib/puppet/http/service.rb
CHANGED
@@ -10,7 +10,7 @@ class Puppet::HTTP::Service
|
|
10
10
|
|
11
11
|
# @api private
|
12
12
|
# @return [Array<Symbol>] available services
|
13
|
-
SERVICE_NAMES = [:ca, :fileserver, :puppet, :report].freeze
|
13
|
+
SERVICE_NAMES = [:ca, :fileserver, :puppet, :puppetserver, :report].freeze
|
14
14
|
|
15
15
|
# @api private
|
16
16
|
# @return [Array<Symbol>] format types that are unsupported
|
@@ -43,6 +43,8 @@ class Puppet::HTTP::Service
|
|
43
43
|
Puppet::HTTP::Service::FileServer.new(client, session, server, port)
|
44
44
|
when :puppet
|
45
45
|
::Puppet::HTTP::Service::Compiler.new(client, session, server, port)
|
46
|
+
when :puppetserver
|
47
|
+
::Puppet::HTTP::Service::Puppetserver.new(client, session, server, port)
|
46
48
|
when :report
|
47
49
|
Puppet::HTTP::Service::Report.new(client, session, server, port)
|
48
50
|
else
|
@@ -22,7 +22,7 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
|
|
22
22
|
# create the service.
|
23
23
|
#
|
24
24
|
def initialize(client, session, server, port)
|
25
|
-
url = build_url(API, server || Puppet[:server], port || Puppet[:
|
25
|
+
url = build_url(API, server || Puppet[:server], port || Puppet[:serverport])
|
26
26
|
super(client, session, url)
|
27
27
|
end
|
28
28
|
|
@@ -27,7 +27,7 @@ class Puppet::HTTP::Service::FileServer < Puppet::HTTP::Service
|
|
27
27
|
# create the service.
|
28
28
|
#
|
29
29
|
def initialize(client, session, server, port)
|
30
|
-
url = build_url(API, server || Puppet[:server], port || Puppet[:
|
30
|
+
url = build_url(API, server || Puppet[:server], port || Puppet[:serverport])
|
31
31
|
super(client, session, url)
|
32
32
|
end
|
33
33
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# The puppetserver service.
|
2
|
+
#
|
3
|
+
# @api private
|
4
|
+
#
|
5
|
+
class Puppet::HTTP::Service::Puppetserver < Puppet::HTTP::Service
|
6
|
+
# @param [Puppet::HTTP::Client] client
|
7
|
+
# @param [Puppet::HTTP::Session] session
|
8
|
+
# @param [String] server If an explicit server is given,
|
9
|
+
# create a service using that server. If server is nil, the default value
|
10
|
+
# is used to create the service.
|
11
|
+
# @param [Integer] port If an explicit port is given, create
|
12
|
+
# a service using that port. If port is nil, the default value is used to
|
13
|
+
# create the service.
|
14
|
+
# @api private
|
15
|
+
#
|
16
|
+
def initialize(client, session, server, port)
|
17
|
+
url = build_url('', server || Puppet[:server], port || Puppet[:serverport])
|
18
|
+
super(client, session, url)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Request the puppetserver's simple status
|
22
|
+
#
|
23
|
+
# @param [Puppet::SSL::SSLContext] ssl_context to use when establishing
|
24
|
+
# the connection.
|
25
|
+
# @return Puppet::HTTP::Response The HTTP response
|
26
|
+
# @api private
|
27
|
+
#
|
28
|
+
def get_simple_status(ssl_context: nil)
|
29
|
+
response = @client.get(
|
30
|
+
with_base_url("/status/v1/simple/master"),
|
31
|
+
headers: add_puppet_headers({}),
|
32
|
+
options: {ssl_context: ssl_context}
|
33
|
+
)
|
34
|
+
|
35
|
+
process_response(response)
|
36
|
+
|
37
|
+
[response, response.body.to_s]
|
38
|
+
end
|
39
|
+
end
|
data/lib/puppet/http/session.rb
CHANGED
@@ -64,20 +64,21 @@ class Puppet::HTTP::Session
|
|
64
64
|
cached = @resolved_services[name]
|
65
65
|
return cached if cached
|
66
66
|
|
67
|
-
|
68
|
-
|
67
|
+
canceled = false
|
68
|
+
canceled_handler = lambda { |cancel| canceled = cancel }
|
69
69
|
|
70
70
|
@resolvers.each do |resolver|
|
71
71
|
Puppet.debug("Resolving service '#{name}' using #{resolver.class}")
|
72
|
-
service = resolver.resolve(self, name, ssl_context: ssl_context,
|
72
|
+
service = resolver.resolve(self, name, ssl_context: ssl_context, canceled_handler: canceled_handler)
|
73
73
|
if service
|
74
74
|
@resolved_services[name] = service
|
75
75
|
Puppet.debug("Resolved service '#{name}' to #{service.url}")
|
76
76
|
return service
|
77
|
+
elsif canceled
|
78
|
+
break
|
77
79
|
end
|
78
80
|
end
|
79
81
|
|
80
|
-
resolution_exceptions.each { |e| Puppet.log_exception(e) }
|
81
82
|
raise Puppet::HTTP::RouteError, "No more routes to #{name}"
|
82
83
|
end
|
83
84
|
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# module containing common methods used by json and yaml facts indirection terminus
|
2
|
+
module Puppet::Indirector::FactSearch
|
3
|
+
def node_matches?(facts, options)
|
4
|
+
options.each do |key, value|
|
5
|
+
type, name, operator = key.to_s.split(".")
|
6
|
+
operator ||= 'eq'
|
7
|
+
|
8
|
+
return false unless node_matches_option?(type, name, operator, value, facts)
|
9
|
+
end
|
10
|
+
return true
|
11
|
+
end
|
12
|
+
|
13
|
+
def node_matches_option?(type, name, operator, value, facts)
|
14
|
+
case type
|
15
|
+
when "meta"
|
16
|
+
case name
|
17
|
+
when "timestamp"
|
18
|
+
compare_timestamp(operator, facts.timestamp, Time.parse(value))
|
19
|
+
end
|
20
|
+
when "facts"
|
21
|
+
compare_facts(operator, facts.values[name], value)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def compare_facts(operator, value1, value2)
|
26
|
+
return false unless value1
|
27
|
+
|
28
|
+
case operator
|
29
|
+
when "eq"
|
30
|
+
value1.to_s == value2.to_s
|
31
|
+
when "le"
|
32
|
+
value1.to_f <= value2.to_f
|
33
|
+
when "ge"
|
34
|
+
value1.to_f >= value2.to_f
|
35
|
+
when "lt"
|
36
|
+
value1.to_f < value2.to_f
|
37
|
+
when "gt"
|
38
|
+
value1.to_f > value2.to_f
|
39
|
+
when "ne"
|
40
|
+
value1.to_s != value2.to_s
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def compare_timestamp(operator, value1, value2)
|
45
|
+
case operator
|
46
|
+
when "eq"
|
47
|
+
value1 == value2
|
48
|
+
when "le"
|
49
|
+
value1 <= value2
|
50
|
+
when "ge"
|
51
|
+
value1 >= value2
|
52
|
+
when "lt"
|
53
|
+
value1 < value2
|
54
|
+
when "gt"
|
55
|
+
value1 > value2
|
56
|
+
when "ne"
|
57
|
+
value1 != value2
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'puppet/node/facts'
|
2
|
+
require 'puppet/indirector/json'
|
3
|
+
require 'puppet/indirector/fact_search'
|
4
|
+
|
5
|
+
class Puppet::Node::Facts::Json < Puppet::Indirector::JSON
|
6
|
+
desc "Store client facts as flat files, serialized using JSON, or
|
7
|
+
return deserialized facts from disk."
|
8
|
+
|
9
|
+
include Puppet::Indirector::FactSearch
|
10
|
+
|
11
|
+
def search(request)
|
12
|
+
node_names = []
|
13
|
+
Dir.glob(json_dir_path).each do |file|
|
14
|
+
facts = load_json_from_file(file, '')
|
15
|
+
if facts && node_matches?(facts, request.options)
|
16
|
+
node_names << facts.name
|
17
|
+
end
|
18
|
+
end
|
19
|
+
node_names
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def json_dir_path
|
25
|
+
self.path("*")
|
26
|
+
end
|
27
|
+
end
|
@@ -1,10 +1,13 @@
|
|
1
1
|
require 'puppet/node/facts'
|
2
2
|
require 'puppet/indirector/yaml'
|
3
|
+
require 'puppet/indirector/fact_search'
|
3
4
|
|
4
5
|
class Puppet::Node::Facts::Yaml < Puppet::Indirector::Yaml
|
5
6
|
desc "Store client facts as flat files, serialized using YAML, or
|
6
7
|
return deserialized facts from disk."
|
7
8
|
|
9
|
+
include Puppet::Indirector::FactSearch
|
10
|
+
|
8
11
|
def search(request)
|
9
12
|
node_names = []
|
10
13
|
Dir.glob(yaml_dir_path).each do |file|
|
@@ -20,65 +23,7 @@ class Puppet::Node::Facts::Yaml < Puppet::Indirector::Yaml
|
|
20
23
|
|
21
24
|
# Return the path to a given node's file.
|
22
25
|
def yaml_dir_path
|
23
|
-
base = Puppet.run_mode.
|
26
|
+
base = Puppet.run_mode.server? ? Puppet[:yamldir] : Puppet[:clientyamldir]
|
24
27
|
File.join(base, 'facts', '*.yaml')
|
25
28
|
end
|
26
|
-
|
27
|
-
def node_matches?(facts, options)
|
28
|
-
options.each do |key, value|
|
29
|
-
type, name, operator = key.to_s.split(".")
|
30
|
-
operator ||= 'eq'
|
31
|
-
|
32
|
-
return false unless node_matches_option?(type, name, operator, value, facts)
|
33
|
-
end
|
34
|
-
return true
|
35
|
-
end
|
36
|
-
|
37
|
-
def node_matches_option?(type, name, operator, value, facts)
|
38
|
-
case type
|
39
|
-
when "meta"
|
40
|
-
case name
|
41
|
-
when "timestamp"
|
42
|
-
compare_timestamp(operator, facts.timestamp, Time.parse(value))
|
43
|
-
end
|
44
|
-
when "facts"
|
45
|
-
compare_facts(operator, facts.values[name], value)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def compare_facts(operator, value1, value2)
|
50
|
-
return false unless value1
|
51
|
-
|
52
|
-
case operator
|
53
|
-
when "eq"
|
54
|
-
value1.to_s == value2.to_s
|
55
|
-
when "le"
|
56
|
-
value1.to_f <= value2.to_f
|
57
|
-
when "ge"
|
58
|
-
value1.to_f >= value2.to_f
|
59
|
-
when "lt"
|
60
|
-
value1.to_f < value2.to_f
|
61
|
-
when "gt"
|
62
|
-
value1.to_f > value2.to_f
|
63
|
-
when "ne"
|
64
|
-
value1.to_s != value2.to_s
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def compare_timestamp(operator, value1, value2)
|
69
|
-
case operator
|
70
|
-
when "eq"
|
71
|
-
value1 == value2
|
72
|
-
when "le"
|
73
|
-
value1 <= value2
|
74
|
-
when "ge"
|
75
|
-
value1 >= value2
|
76
|
-
when "lt"
|
77
|
-
value1 < value2
|
78
|
-
when "gt"
|
79
|
-
value1 > value2
|
80
|
-
when "ne"
|
81
|
-
value1 != value2
|
82
|
-
end
|
83
|
-
end
|
84
29
|
end
|
@@ -41,12 +41,16 @@ class Puppet::Indirector::JSON < Puppet::Indirector::Terminus
|
|
41
41
|
raise ArgumentError, _("invalid key")
|
42
42
|
end
|
43
43
|
|
44
|
-
base =
|
44
|
+
base = data_dir
|
45
45
|
File.join(base, self.class.indirection_name.to_s, name.to_s + ext)
|
46
46
|
end
|
47
47
|
|
48
48
|
private
|
49
49
|
|
50
|
+
def data_dir()
|
51
|
+
Puppet.run_mode.server? ? Puppet[:server_datadir] : Puppet[:client_datadir]
|
52
|
+
end
|
53
|
+
|
50
54
|
def load_json_from_file(file, key)
|
51
55
|
json = nil
|
52
56
|
|
@@ -48,7 +48,7 @@ class Puppet::Indirector::Msgpack < Puppet::Indirector::Terminus
|
|
48
48
|
raise ArgumentError, _("invalid key")
|
49
49
|
end
|
50
50
|
|
51
|
-
base = Puppet.run_mode.
|
51
|
+
base = Puppet.run_mode.server? ? Puppet[:server_datadir] : Puppet[:client_datadir]
|
52
52
|
File.join(base, self.class.indirection_name.to_s, name.to_s + ext)
|
53
53
|
end
|
54
54
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'puppet/transaction/report'
|
2
|
+
require 'puppet/indirector/json'
|
3
|
+
|
4
|
+
class Puppet::Transaction::Report::Json < Puppet::Indirector::JSON
|
5
|
+
include Puppet::Util::SymbolicFileMode
|
6
|
+
|
7
|
+
desc "Store last report as a flat file, serialized using JSON."
|
8
|
+
|
9
|
+
# Force report to be saved there
|
10
|
+
def path(name,ext='.json')
|
11
|
+
Puppet[:lastrunreport]
|
12
|
+
end
|
13
|
+
|
14
|
+
def save(request)
|
15
|
+
filename = path(request.key)
|
16
|
+
mode = Puppet.settings.setting(:lastrunreport).mode
|
17
|
+
|
18
|
+
unless valid_symbolic_mode?(mode)
|
19
|
+
raise Puppet::DevError, _("replace_file mode: %{mode} is invalid") % { mode: mode }
|
20
|
+
end
|
21
|
+
|
22
|
+
mode = symbolic_mode_to_int(normalize_symbolic_mode(mode))
|
23
|
+
|
24
|
+
FileUtils.mkdir_p(File.dirname(filename))
|
25
|
+
|
26
|
+
begin
|
27
|
+
Puppet::FileSystem.replace_file(filename, mode) do |fh|
|
28
|
+
fh.print JSON.dump(request.instance)
|
29
|
+
end
|
30
|
+
rescue TypeError => detail
|
31
|
+
Puppet.err _("Could not save %{indirection} %{request}: %{detail}") % { indirection: self.name, request: request.key, detail: detail }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -231,9 +231,9 @@ class Puppet::Indirector::Request
|
|
231
231
|
debug_once _("Selected port from the first entry of the `server_list` setting: %{port}") % {port: primary_server[1]}
|
232
232
|
primary_server[1]
|
233
233
|
else
|
234
|
-
#TRANSLATORS '
|
235
|
-
debug_once _("Selected port from the `
|
236
|
-
Puppet.settings[:
|
234
|
+
#TRANSLATORS 'serverport' is the name of a setting and should not be translated
|
235
|
+
debug_once _("Selected port from the `serverport` setting: %{port}") % {port: Puppet.settings[:serverport]}
|
236
|
+
Puppet.settings[:serverport]
|
237
237
|
end
|
238
238
|
end
|
239
239
|
end
|
@@ -277,7 +277,7 @@ class Puppet::Indirector::Request
|
|
277
277
|
# If the URI class can look up the scheme, it will provide a port,
|
278
278
|
# otherwise it will default to '0'.
|
279
279
|
if uri.port.to_i == 0 and uri.scheme == "puppet"
|
280
|
-
@port = Puppet.settings[:
|
280
|
+
@port = Puppet.settings[:serverport].to_i
|
281
281
|
else
|
282
282
|
@port = uri.port.to_i
|
283
283
|
end
|
@@ -40,7 +40,7 @@ class Puppet::Indirector::Yaml < Puppet::Indirector::Terminus
|
|
40
40
|
raise ArgumentError, _("invalid key")
|
41
41
|
end
|
42
42
|
|
43
|
-
base = Puppet.run_mode.
|
43
|
+
base = Puppet.run_mode.server? ? Puppet[:yamldir] : Puppet[:clientyamldir]
|
44
44
|
File.join(base, self.class.indirection_name.to_s, name.to_s + ext)
|
45
45
|
end
|
46
46
|
|
@@ -131,8 +131,54 @@ module Puppet::ModuleTool
|
|
131
131
|
begin
|
132
132
|
Puppet.info _("Resolving dependencies ...")
|
133
133
|
releases = SemanticPuppet::Dependency.resolve(graph)
|
134
|
-
rescue SemanticPuppet::Dependency::UnsatisfiableGraph
|
135
|
-
|
134
|
+
rescue SemanticPuppet::Dependency::UnsatisfiableGraph => e
|
135
|
+
unsatisfied = nil
|
136
|
+
|
137
|
+
if e.respond_to?(:unsatisfied)
|
138
|
+
constraints = {}
|
139
|
+
# If the module we're installing satisfies all its
|
140
|
+
# dependencies, but would break an already installed
|
141
|
+
# module that depends on it, show what would break.
|
142
|
+
if name == e.unsatisfied
|
143
|
+
graph.constraints[name].each do |mod, range, _|
|
144
|
+
next unless mod.split.include?('constraint')
|
145
|
+
|
146
|
+
# If the user requested a specific version or range,
|
147
|
+
# only show the modules with non-intersecting ranges
|
148
|
+
if options[:version]
|
149
|
+
requested_range = SemanticPuppet::VersionRange.parse(options[:version])
|
150
|
+
constraint_range = SemanticPuppet::VersionRange.parse(range)
|
151
|
+
|
152
|
+
if requested_range.intersection(constraint_range) == SemanticPuppet::VersionRange::EMPTY_RANGE
|
153
|
+
constraints[mod.split.first] = range
|
154
|
+
end
|
155
|
+
else
|
156
|
+
constraints[mod.split.first] = range
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
# If the module fails to satisfy one of its
|
161
|
+
# dependencies, show the unsatisfiable module
|
162
|
+
else
|
163
|
+
unsatisfied_range = graph.dependencies[name].max.constraints[e.unsatisfied].first[1]
|
164
|
+
constraints[e.unsatisfied] = unsatisfied_range
|
165
|
+
end
|
166
|
+
|
167
|
+
installed_module = @environment.module_by_forge_name(e.unsatisfied.tr('-', '/'))
|
168
|
+
current_version = installed_module.version if installed_module
|
169
|
+
|
170
|
+
unsatisfied = {
|
171
|
+
:name => e.unsatisfied,
|
172
|
+
:constraints => constraints,
|
173
|
+
:current_version => current_version
|
174
|
+
}
|
175
|
+
end
|
176
|
+
|
177
|
+
raise NoVersionsSatisfyError, results.merge(
|
178
|
+
:requested_name => name,
|
179
|
+
:requested_version => options[:version] || graph.dependencies[name].max.version.to_s,
|
180
|
+
:unsatisfied => unsatisfied
|
181
|
+
)
|
136
182
|
end
|
137
183
|
|
138
184
|
unless forced?
|