puppet 6.4.4-universal-darwin → 6.4.5-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 +1 -1
- data/Gemfile +4 -4
- data/Gemfile.lock +38 -32
- data/ext/build_defaults.yaml +1 -0
- data/ext/cert_inspector +3 -3
- data/ext/puppet-test +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +4 -4
- data/ext/windows/service/daemon.rb +38 -8
- data/install.rb +6 -6
- data/lib/puppet/application.rb +1 -1
- data/lib/puppet/application/apply.rb +2 -2
- data/lib/puppet/application/describe.rb +3 -9
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/lookup.rb +1 -1
- data/lib/puppet/application/script.rb +2 -2
- data/lib/puppet/application/ssl.rb +4 -1
- data/lib/puppet/configurer.rb +86 -30
- data/lib/puppet/configurer/downloader.rb +2 -6
- data/lib/puppet/defaults.rb +32 -6
- data/lib/puppet/error.rb +9 -1
- data/lib/puppet/face/module/list.rb +5 -5
- data/lib/puppet/face/module/search.rb +1 -1
- data/lib/puppet/face/module/uninstall.rb +1 -1
- data/lib/puppet/face/module/upgrade.rb +1 -1
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_system.rb +0 -8
- data/lib/puppet/file_system/memory_file.rb +1 -1
- data/lib/puppet/file_system/posix.rb +3 -2
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/functions.rb +1 -2
- data/lib/puppet/functions/camelcase.rb +2 -2
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/find_file.rb +9 -9
- data/lib/puppet/functions/inline_epp.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +1 -1
- data/lib/puppet/graph/rb_tree_map.rb +2 -2
- data/lib/puppet/graph/simple_graph.rb +4 -3
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/hiera.rb +2 -0
- data/lib/puppet/indirector/resource/ral.rb +1 -3
- data/lib/puppet/indirector/resource/validator.rb +1 -1
- data/lib/puppet/interface.rb +2 -1
- data/lib/puppet/loaders.rb +0 -1
- data/lib/puppet/metatype/manager.rb +1 -1
- data/lib/puppet/module.rb +1 -1
- data/lib/puppet/module/task.rb +20 -4
- data/lib/puppet/module_tool/applications/installer.rb +1 -1
- data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
- data/lib/puppet/module_tool/tar/mini.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +12 -11
- data/lib/puppet/network/http/connection.rb +10 -12
- data/lib/puppet/network/http/pool.rb +2 -0
- data/lib/puppet/network/http/site.rb +1 -1
- data/lib/puppet/network/resolver.rb +2 -2
- data/lib/puppet/node/environment.rb +4 -2
- data/lib/puppet/pal/pal_impl.rb +2 -2
- data/lib/puppet/parser/ast.rb +1 -1
- data/lib/puppet/parser/ast/resourceparam.rb +1 -1
- data/lib/puppet/parser/functions.rb +1 -1
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/parser/scope.rb +8 -7
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
- data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
- data/lib/puppet/pops/loader/task_instantiator.rb +4 -0
- data/lib/puppet/pops/loaders.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
- data/lib/puppet/pops/merge_strategy.rb +22 -18
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
- data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/pn_parser.rb +17 -16
- data/lib/puppet/pops/puppet_stack.rb +51 -49
- data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
- data/lib/puppet/pops/types/string_converter.rb +10 -10
- data/lib/puppet/pops/types/types.rb +3 -3
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/ensure.rb +1 -1
- data/lib/puppet/provider/exec.rb +6 -2
- data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
- data/lib/puppet/provider/nameservice/pw.rb +2 -2
- data/lib/puppet/provider/package/apt.rb +5 -1
- data/lib/puppet/provider/package/dnfmodule.rb +87 -0
- data/lib/puppet/provider/package/dpkg.rb +34 -18
- data/lib/puppet/provider/package/openbsd.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +34 -9
- data/lib/puppet/provider/package/portage.rb +4 -4
- data/lib/puppet/provider/package/rpm.rb +5 -5
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/service/daemontools.rb +9 -9
- data/lib/puppet/provider/service/openbsd.rb +1 -1
- data/lib/puppet/provider/service/rcng.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +2 -8
- data/lib/puppet/provider/service/systemd.rb +9 -9
- data/lib/puppet/provider/user/directoryservice.rb +1 -1
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +22 -13
- data/lib/puppet/provider/user/windows_adsi.rb +4 -5
- data/lib/puppet/reference/indirection.rb +2 -2
- data/lib/puppet/reference/metaparameter.rb +1 -3
- data/lib/puppet/reference/providers.rb +1 -3
- data/lib/puppet/reference/type.rb +3 -9
- data/lib/puppet/reports.rb +1 -1
- data/lib/puppet/resource.rb +1 -1
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/settings.rb +3 -3
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/ssl/host.rb +1 -1
- data/lib/puppet/ssl/oids.rb +1 -1
- data/lib/puppet/transaction.rb +33 -11
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/type.rb +2 -4
- data/lib/puppet/type/exec.rb +7 -3
- data/lib/puppet/type/file.rb +1 -2
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/group.rb +4 -2
- data/lib/puppet/type/notify.rb +3 -2
- data/lib/puppet/type/package.rb +10 -3
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/service.rb +1 -1
- data/lib/puppet/type/user.rb +4 -2
- data/lib/puppet/util.rb +35 -12
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +8 -14
- data/lib/puppet/util/log.rb +2 -2
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/logging.rb +32 -20
- data/lib/puppet/util/metric.rb +2 -2
- data/lib/puppet/util/provider_features.rb +2 -4
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/selinux.rb +3 -1
- data/lib/puppet/util/windows/adsi.rb +48 -18
- data/lib/puppet/util/windows/registry.rb +7 -5
- data/lib/puppet/vendor.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509/cert_provider.rb +13 -6
- data/locales/puppet.pot +199 -159
- data/man/man5/puppet.conf.5 +35 -5
- data/man/man8/puppet-agent.8 +1 -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-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 +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-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list-installed.txt +11 -0
- data/spec/integration/configurer_spec.rb +52 -0
- data/spec/integration/type/notify_spec.rb +46 -0
- data/spec/lib/puppet/certificate_factory.rb +2 -2
- data/spec/spec_helper.rb +28 -0
- data/spec/unit/application/ssl_spec.rb +4 -7
- data/spec/unit/configurer_spec.rb +394 -398
- data/spec/unit/defaults_spec.rb +4 -4
- data/spec/unit/forge/forge_spec.rb +1 -3
- data/spec/unit/forge/repository_spec.rb +1 -3
- data/spec/unit/indirector/resource/ral_spec.rb +4 -4
- data/spec/unit/network/http/connection_spec.rb +119 -145
- data/spec/unit/parser/scope_spec.rb +10 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/pops/loaders/module_loaders_spec.rb +37 -0
- data/spec/unit/provider/exec_spec.rb +209 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +186 -0
- data/spec/unit/provider/package/dpkg_spec.rb +238 -78
- data/spec/unit/provider/package/pip_spec.rb +51 -6
- data/spec/unit/provider/package/portage_spec.rb +4 -4
- data/spec/unit/provider/package_targetable_spec.rb +60 -0
- data/spec/unit/provider/service/daemontools_spec.rb +24 -0
- data/spec/unit/provider/service/runit_spec.rb +24 -0
- data/spec/unit/provider/service/systemd_spec.rb +25 -25
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/provider/user/useradd_spec.rb +46 -0
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/state_machine_spec.rb +0 -6
- data/spec/unit/transaction_spec.rb +46 -0
- data/spec/unit/type/exec_spec.rb +6 -12
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/type/file_spec.rb +9 -4
- data/spec/unit/type/package_spec.rb +5 -0
- data/spec/unit/util/execution_spec.rb +16 -0
- data/spec/unit/util/http_proxy_spec.rb +118 -27
- data/spec/unit/util/log/destinations_spec.rb +7 -3
- data/spec/unit/util/log_spec.rb +0 -138
- data/spec/unit/util/logging_spec.rb +200 -0
- data/spec/unit/util/windows/adsi_spec.rb +51 -0
- data/spec/unit/x509/cert_provider_spec.rb +24 -4
- data/tasks/manpages.rake +1 -0
- metadata +12 -10
- data/lib/puppet/pops/loader/null_loader.rb +0 -60
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +0 -24
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +0 -24
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +0 -24
@@ -14,11 +14,12 @@ class Puppet::FileSystem::Posix < Puppet::FileSystem::FileImpl
|
|
14
14
|
bsize = stream_blksize(this, stream)
|
15
15
|
sa = "".force_encoding('ASCII-8BIT')
|
16
16
|
sb = "".force_encoding('ASCII-8BIT')
|
17
|
-
|
17
|
+
loop do
|
18
18
|
this.read(bsize, sa)
|
19
19
|
stream.read(bsize, sb)
|
20
20
|
return true if sa.empty? && sb.empty?
|
21
|
-
|
21
|
+
break if sa != sb
|
22
|
+
end
|
22
23
|
false
|
23
24
|
end
|
24
25
|
end
|
data/lib/puppet/forge.rb
CHANGED
@@ -58,7 +58,7 @@ class Puppet::Forge < SemanticPuppet::Dependency::Source
|
|
58
58
|
matches = []
|
59
59
|
uri = "/v3/modules?query=#{term}"
|
60
60
|
if Puppet[:module_groups]
|
61
|
-
uri += "&module_groups=#{Puppet[:module_groups].
|
61
|
+
uri += "&module_groups=#{Puppet[:module_groups].tr('+', ' ')}"
|
62
62
|
end
|
63
63
|
|
64
64
|
while uri
|
@@ -94,7 +94,7 @@ class Puppet::Forge < SemanticPuppet::Dependency::Source
|
|
94
94
|
name = input.tr('/', '-')
|
95
95
|
uri = "/v3/releases?module=#{name}&sort_by=version&exclude_fields=#{MODULE_RELEASE_EXCLUSIONS}"
|
96
96
|
if Puppet[:module_groups]
|
97
|
-
uri += "&module_groups=#{Puppet[:module_groups].
|
97
|
+
uri += "&module_groups=#{Puppet[:module_groups].tr('+', ' ')}"
|
98
98
|
end
|
99
99
|
releases = []
|
100
100
|
|
@@ -239,6 +239,6 @@ class Puppet::Forge < SemanticPuppet::Dependency::Source
|
|
239
239
|
def decode_uri(uri)
|
240
240
|
return if uri.nil?
|
241
241
|
|
242
|
-
URI.decode(uri.
|
242
|
+
URI.decode(uri.tr('+', ' '))
|
243
243
|
end
|
244
244
|
end
|
data/lib/puppet/functions.rb
CHANGED
@@ -624,8 +624,7 @@ module Puppet::Functions
|
|
624
624
|
# Get location to use in case of error - this produces ruby filename and where call to 'type' occurred
|
625
625
|
# but strips off the rest of the internal "where" as it is not meaningful to user.
|
626
626
|
#
|
627
|
-
rb_location = caller
|
628
|
-
|
627
|
+
rb_location = caller(1, 1).first
|
629
628
|
begin
|
630
629
|
result = parser.parse_string("type #{assignment_string}", nil)
|
631
630
|
rescue StandardError => e
|
@@ -23,8 +23,8 @@
|
|
23
23
|
#
|
24
24
|
# @example Camelcase of strings in an Array
|
25
25
|
# ```puppet
|
26
|
-
# ['abc_def', 'bcd_xyz'].
|
27
|
-
#
|
26
|
+
# ['abc_def', 'bcd_xyz'].camelcase()
|
27
|
+
# camelcase(['abc_def', 'bcd_xyz'])
|
28
28
|
# ```
|
29
29
|
# Would both result in `['AbcDef', 'BcdXyz']`
|
30
30
|
#
|
data/lib/puppet/functions/epp.rb
CHANGED
@@ -6,12 +6,12 @@
|
|
6
6
|
# The first argument to this function should be a `<MODULE NAME>/<TEMPLATE FILE>`
|
7
7
|
# reference, which loads `<TEMPLATE FILE>` from `<MODULE NAME>`'s `templates`
|
8
8
|
# directory. In most cases, the last argument is optional; if used, it should be a
|
9
|
-
# [hash](/puppet/latest/
|
9
|
+
# [hash](https://puppet.com/docs/puppet/latest/lang_data_hash.html) that contains parameters to
|
10
10
|
# pass to the template.
|
11
11
|
#
|
12
|
-
# - See the [template](/puppet/latest/
|
13
|
-
# for general template usage information.
|
14
|
-
# - See the [EPP syntax](/puppet/latest/
|
12
|
+
# - See the [template](https://puppet.com/docs/puppet/latest/lang_template.html)
|
13
|
+
# documentation for general template usage information.
|
14
|
+
# - See the [EPP syntax](https://puppet.com/docs/puppet/latest/lang_template_epp.html)
|
15
15
|
# documentation for examples of EPP.
|
16
16
|
#
|
17
17
|
# For example, to call the apache module's `templates/vhost/_docroot.epp`
|
@@ -1,19 +1,19 @@
|
|
1
1
|
# Finds an existing file from a module and returns its path.
|
2
2
|
#
|
3
|
-
#
|
4
|
-
# reference, which
|
3
|
+
# This function accepts an argument that is a String as a `<MODULE NAME>/<FILE>`
|
4
|
+
# reference, which searches for `<FILE>` relative to a module's `files`
|
5
5
|
# directory. (For example, the reference `mysql/mysqltuner.pl` will search for the
|
6
6
|
# file `<MODULES DIRECTORY>/mysql/files/mysqltuner.pl`.)
|
7
7
|
#
|
8
8
|
# This function can also accept:
|
9
|
-
#
|
10
|
-
# * An absolute String path, which will check for the existence of a file from anywhere on disk.
|
11
|
-
# * Multiple String arguments, which will return the path of the **first** file
|
12
|
-
# found, skipping non existing files.
|
13
|
-
# * An array of string paths, which will return the path of the **first** file
|
14
|
-
# found from the given paths in the array, skipping non existing files.
|
15
9
|
#
|
16
|
-
#
|
10
|
+
# * An absolute String path, which checks for the existence of a file from anywhere on disk.
|
11
|
+
# * Multiple String arguments, which returns the path of the **first** file
|
12
|
+
# found, skipping nonexistent files.
|
13
|
+
# * An array of string paths, which returns the path of the **first** file
|
14
|
+
# found from the given paths in the array, skipping nonexistent files.
|
15
|
+
#
|
16
|
+
# The function returns `undef` if none of the given paths were found.
|
17
17
|
#
|
18
18
|
# @since 4.8.0
|
19
19
|
#
|
@@ -5,12 +5,12 @@
|
|
5
5
|
#
|
6
6
|
# The first argument to this function should be a string containing an EPP
|
7
7
|
# template. In most cases, the last argument is optional; if used, it should be a
|
8
|
-
# [hash](/puppet/latest/
|
8
|
+
# [hash](https://puppet.com/docs/puppet/latest/lang_data_hash.html) that contains parameters to
|
9
9
|
# pass to the template.
|
10
10
|
#
|
11
|
-
# - See the [template](/puppet/latest/
|
12
|
-
# for general template usage information.
|
13
|
-
# - See the [EPP syntax](/puppet/latest/
|
11
|
+
# - See the [template](https://puppet.com/docs/puppet/latest/lang_template.html)
|
12
|
+
# documentation for general template usage information.
|
13
|
+
# - See the [EPP syntax](https://puppet.com/docs/puppet/latest/lang_template_epp.html)
|
14
14
|
# documentation for examples of EPP.
|
15
15
|
#
|
16
16
|
# For example, to evaluate an inline EPP template and pass it the `docroot` and
|
@@ -28,7 +28,7 @@
|
|
28
28
|
# `inline_epp` function fails to pass any required parameter.
|
29
29
|
#
|
30
30
|
# An inline EPP template should be written as a single-quoted string or
|
31
|
-
# [heredoc](/puppet/latest/
|
31
|
+
# [heredoc](https://puppet.com/docs/puppet/latest/lang_data_string.html#heredocs).
|
32
32
|
# A double-quoted string is subject to expression interpolation before the string
|
33
33
|
# is parsed as an EPP template.
|
34
34
|
#
|
@@ -11,7 +11,7 @@ module Puppet::ModuleTranslations
|
|
11
11
|
modules.each do |mod|
|
12
12
|
next unless mod.forge_name && mod.has_translations?(Puppet::GettextConfig.current_locale)
|
13
13
|
|
14
|
-
module_name = mod.forge_name.
|
14
|
+
module_name = mod.forge_name.tr('/', '-')
|
15
15
|
if Puppet::GettextConfig.load_translations(module_name, mod.locale_directory, :po)
|
16
16
|
Puppet.debug "Loaded translations for #{module_name}."
|
17
17
|
elsif Puppet::GettextConfig.gettext_loaded?
|
@@ -213,8 +213,8 @@ class Puppet::Graph::RbTreeMap
|
|
213
213
|
:color => @color,
|
214
214
|
}
|
215
215
|
}
|
216
|
-
h
|
217
|
-
h
|
216
|
+
h[:left] = left.to_hash if @left
|
217
|
+
h[:right] = right.to_hash if @right
|
218
218
|
h
|
219
219
|
end
|
220
220
|
|
@@ -133,11 +133,12 @@ class Puppet::Graph::SimpleGraph
|
|
133
133
|
else
|
134
134
|
if s[:lowlink][vertex] == s[:index][vertex] then
|
135
135
|
this_scc = []
|
136
|
-
|
136
|
+
loop do
|
137
137
|
top = s[:stack].pop
|
138
138
|
s[:seen][top] = false
|
139
139
|
this_scc << top
|
140
|
-
|
140
|
+
break if top == vertex
|
141
|
+
end
|
141
142
|
s[:scc] << this_scc
|
142
143
|
end
|
143
144
|
recur.pop # done with this node, finally.
|
@@ -437,7 +438,7 @@ class Puppet::Graph::SimpleGraph
|
|
437
438
|
# rdot.rb. If an edge or vertex label is a kind of Hash then the keys
|
438
439
|
# which match +dot+ properties will be used as well.
|
439
440
|
def to_dot_graph(params = {})
|
440
|
-
params['name'] ||= self.class.name.
|
441
|
+
params['name'] ||= self.class.name.tr(':','_')
|
441
442
|
fontsize = params['fontsize'] ? params['fontsize'] : '8'
|
442
443
|
graph = (directed? ? DOT::DOTDigraph : DOT::DOTSubgraph).new(params)
|
443
444
|
edge_klass = directed? ? DOT::DOTDirectedEdge : DOT::DOTEdge
|
@@ -15,7 +15,7 @@ module Puppet::FileBucketFile
|
|
15
15
|
request.options[:bucket_path] ||= Puppet[:bucketdir]
|
16
16
|
# If filebucket mode is 'list'
|
17
17
|
if request.options[:list_all]
|
18
|
-
return nil unless ::File.
|
18
|
+
return nil unless ::File.exist?(request.options[:bucket_path])
|
19
19
|
return list(request)
|
20
20
|
end
|
21
21
|
checksum, files_original_path = request_to_checksum_and_path(request)
|
@@ -25,9 +25,7 @@ class Puppet::Resource::Ral < Puppet::Indirector::Code
|
|
25
25
|
res.to_resource
|
26
26
|
end.find_all do |res|
|
27
27
|
conditions.all? {|property, value| res.to_resource[property].to_s == value.to_s}
|
28
|
-
end.
|
29
|
-
a.title <=> b.title
|
30
|
-
end
|
28
|
+
end.sort_by(&:title)
|
31
29
|
end
|
32
30
|
|
33
31
|
def save( request )
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Puppet::Resource::Validator
|
2
2
|
def validate_key(request)
|
3
3
|
type, title = request.key.split('/', 2)
|
4
|
-
unless type.
|
4
|
+
unless type.casecmp(request.instance.type).zero? and title == request.instance.title
|
5
5
|
raise Puppet::Indirector::ValidationError, _("Resource instance does not match request key")
|
6
6
|
end
|
7
7
|
end
|
data/lib/puppet/interface.rb
CHANGED
@@ -96,7 +96,7 @@ class Puppet::Interface
|
|
96
96
|
if Puppet::Interface::FaceCollection[name, :current]
|
97
97
|
raise Puppet::Error, "Could not find version #{version} of #{name}"
|
98
98
|
else
|
99
|
-
raise Puppet::Error, "Could not find Puppet Face #{name
|
99
|
+
raise Puppet::Error, "Could not find Puppet Face #{name}"
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
@@ -234,4 +234,5 @@ class Puppet::Interface
|
|
234
234
|
define_method(name, proc)
|
235
235
|
instance_method(name)
|
236
236
|
end
|
237
|
+
private_class_method :__add_method
|
237
238
|
end
|
data/lib/puppet/loaders.rb
CHANGED
@@ -9,7 +9,6 @@ module Puppet
|
|
9
9
|
require 'puppet/pops/loader/gem_support'
|
10
10
|
require 'puppet/pops/loader/module_loaders'
|
11
11
|
require 'puppet/pops/loader/dependency_loader'
|
12
|
-
require 'puppet/pops/loader/null_loader'
|
13
12
|
require 'puppet/pops/loader/static_loader'
|
14
13
|
require 'puppet/pops/loader/runtime3_type_loader'
|
15
14
|
require 'puppet/pops/loader/ruby_function_instantiator'
|
@@ -121,7 +121,7 @@ module Manager
|
|
121
121
|
|
122
122
|
# Now set up autoload any providers that might exist for this type.
|
123
123
|
|
124
|
-
klass.providerloader = Puppet::Util::Autoload.new(klass, "puppet/provider/#{klass.name
|
124
|
+
klass.providerloader = Puppet::Util::Autoload.new(klass, "puppet/provider/#{klass.name}")
|
125
125
|
|
126
126
|
# We have to load everything so that we can figure out the default provider.
|
127
127
|
klass.providerloader.loadall(Puppet.lookup(:current_environment))
|
data/lib/puppet/module.rb
CHANGED
@@ -203,7 +203,7 @@ class Puppet::Module
|
|
203
203
|
@metadata = data = read_metadata
|
204
204
|
return if data.empty?
|
205
205
|
|
206
|
-
@forge_name = data['name'].
|
206
|
+
@forge_name = data['name'].tr('-', '/') if data['name']
|
207
207
|
|
208
208
|
[:source, :author, :version, :license, :dependencies].each do |attr|
|
209
209
|
value = data[attr.to_s]
|
data/lib/puppet/module/task.rb
CHANGED
@@ -76,11 +76,23 @@ class Puppet::Module
|
|
76
76
|
# Find task's required lib files and retrieve paths for both 'files' and 'implementation:files' metadata keys
|
77
77
|
def self.find_extra_files(metadata, envname = nil)
|
78
78
|
return [] if metadata.nil?
|
79
|
+
|
80
|
+
files = metadata.fetch('files', [])
|
81
|
+
unless files.is_a?(Array)
|
82
|
+
msg = _("The 'files' task metadata expects an array, got %{files}.") % {files: files}
|
83
|
+
raise InvalidMetadata.new(msg, 'puppet.tasks/invalid-metadata')
|
84
|
+
end
|
85
|
+
impl_files = metadata.fetch('implementations', []).flat_map do |impl|
|
86
|
+
file_array = impl.fetch('files', [])
|
87
|
+
unless file_array.is_a?(Array)
|
88
|
+
msg = _("The 'files' task metadata expects an array, got %{files}.") % {files: file_array}
|
89
|
+
raise InvalidMetadata.new(msg, 'puppet.tasks/invalid-metadata')
|
90
|
+
end
|
91
|
+
file_array
|
92
|
+
end
|
79
93
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
files.uniq.flat_map do |file|
|
94
|
+
combined_files = files + impl_files
|
95
|
+
combined_files.uniq.flat_map do |file|
|
84
96
|
module_name, mount, endpath = file.split("/", 3)
|
85
97
|
# If there's a mount directory with no trailing slash this will be nil
|
86
98
|
# We want it to be empty to construct a path
|
@@ -142,6 +154,10 @@ class Puppet::Module
|
|
142
154
|
end
|
143
155
|
|
144
156
|
implementations = metadata['implementations'].map do |impl|
|
157
|
+
unless impl['requirements'].is_a?(Array) || impl['requirements'].nil?
|
158
|
+
msg = _("Task metadata for task %{name} does not specify requirements as an array" % { name: name })
|
159
|
+
raise InvalidMetadata.new(msg, 'puppet.tasks/invalid-metadata')
|
160
|
+
end
|
145
161
|
path = executables.find { |real_impl| File.basename(real_impl) == impl['name'] }
|
146
162
|
unless path
|
147
163
|
msg = _("Task metadata for task %{name} specifies missing implementation %{implementation}" % { name: name, implementation: impl['name'] })
|
@@ -303,7 +303,7 @@ module Puppet::ModuleTool
|
|
303
303
|
@environment.modules_by_path[options[:target_dir]].each do |mod|
|
304
304
|
if mod.has_metadata?
|
305
305
|
metadata = {
|
306
|
-
:name => mod.forge_name.
|
306
|
+
:name => mod.forge_name.tr('/', '-'),
|
307
307
|
:version => mod.version
|
308
308
|
}
|
309
309
|
next if release[:module] == metadata[:name]
|
@@ -52,7 +52,7 @@ module Puppet::ModuleTool
|
|
52
52
|
|
53
53
|
def find_installed_module
|
54
54
|
@environment.modules_by_path.values.flatten.each do |mod|
|
55
|
-
mod_name = (mod.forge_name || mod.name).
|
55
|
+
mod_name = (mod.forge_name || mod.name).tr('/', '-')
|
56
56
|
if mod_name == @name
|
57
57
|
@unfiltered << {
|
58
58
|
:name => mod_name,
|
@@ -101,7 +101,7 @@ module Puppet::ModuleTool
|
|
101
101
|
if mod.has_metadata? && !changes.empty?
|
102
102
|
raise LocalChangesError,
|
103
103
|
:action => :uninstall,
|
104
|
-
:module_name => (mod.forge_name || mod.name).
|
104
|
+
:module_name => (mod.forge_name || mod.name).tr('/', '-'),
|
105
105
|
:requested_version => @options[:version],
|
106
106
|
:installed_version => mod.version
|
107
107
|
end
|
@@ -109,7 +109,7 @@ module Puppet::ModuleTool
|
|
109
109
|
|
110
110
|
if !@options[:force] && !mod.required_by.empty?
|
111
111
|
raise ModuleIsRequiredError,
|
112
|
-
:module_name => (mod.forge_name || mod.name).
|
112
|
+
:module_name => (mod.forge_name || mod.name).tr('/', '-'),
|
113
113
|
:required_by => mod.required_by,
|
114
114
|
:requested_version => @options[:version],
|
115
115
|
:installed_version => mod.version
|
@@ -102,7 +102,7 @@ module Puppet::ModuleTool
|
|
102
102
|
|
103
103
|
contents = data.keys.map do |k|
|
104
104
|
value = (Puppet::Util::Json.dump(data[k], :pretty => true) rescue data[k].to_json)
|
105
|
-
%Q("#{k
|
105
|
+
%Q("#{k}": #{value})
|
106
106
|
end
|
107
107
|
|
108
108
|
"{\n" + contents.join(",\n").gsub(/^/, ' ') + "\n}\n"
|
@@ -8,12 +8,12 @@ module Puppet::ModuleTool::Shared
|
|
8
8
|
@installed = Hash.new { |h,k| h[k] = [] }
|
9
9
|
|
10
10
|
@environment.modules_by_path.values.flatten.each do |mod|
|
11
|
-
mod_name = (mod.forge_name || mod.name).
|
11
|
+
mod_name = (mod.forge_name || mod.name).tr('/', '-')
|
12
12
|
@installed[mod_name] << mod
|
13
13
|
d = @local["#{mod_name}@#{mod.version}"]
|
14
14
|
(mod.dependencies || []).each do |hash|
|
15
15
|
name, conditions = hash['name'], hash['version_requirement']
|
16
|
-
name = name.
|
16
|
+
name = name.tr('/', '-')
|
17
17
|
d[name] = conditions
|
18
18
|
@conditions[name] << {
|
19
19
|
:module => mod_name,
|
@@ -34,7 +34,7 @@ module Puppet::ModuleTool::Shared
|
|
34
34
|
info = forge.remote_dependency_info(author, modname, @options[:version])
|
35
35
|
info.each do |pair|
|
36
36
|
mod_name, releases = pair
|
37
|
-
mod_name = mod_name.
|
37
|
+
mod_name = mod_name.tr('/', '-')
|
38
38
|
releases.each do |rel|
|
39
39
|
semver = SemanticPuppet::Version.parse(rel['version']) rescue SemanticPuppet::Version::MIN
|
40
40
|
@versions[mod_name] << { :vstring => rel['version'], :semver => semver }
|
@@ -42,7 +42,7 @@ module Puppet::ModuleTool::Shared
|
|
42
42
|
@urls["#{mod_name}@#{rel['version']}"] = rel['file']
|
43
43
|
d = @remote["#{mod_name}@#{rel['version']}"]
|
44
44
|
(rel['dependencies'] || []).each do |name, conditions|
|
45
|
-
d[name.
|
45
|
+
d[name.tr('/', '-')] = conditions
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -93,7 +93,7 @@ class Puppet::ModuleTool::Tar::Mini
|
|
93
93
|
def find_valid_files(tarfile)
|
94
94
|
Archive::Tar::Minitar.open(tarfile).collect do |entry|
|
95
95
|
flag = entry.typeflag
|
96
|
-
if flag.nil? || flag =~ /[[:digit:]]/ && (0..7).
|
96
|
+
if flag.nil? || flag =~ /[[:digit:]]/ && (0..7).cover?(flag.to_i)
|
97
97
|
entry.full_name
|
98
98
|
else
|
99
99
|
Puppet.debug "Invalid tar flag '#{flag}' will not be extracted: #{entry.name}"
|
@@ -120,6 +120,17 @@ class Puppet::Network::HTTP::API::IndirectedRoutes
|
|
120
120
|
[indirection, method, key, params]
|
121
121
|
end
|
122
122
|
|
123
|
+
def self.request_to_uri(request)
|
124
|
+
uri, body = request_to_uri_and_body(request)
|
125
|
+
"#{uri}?#{body}"
|
126
|
+
end
|
127
|
+
|
128
|
+
def self.request_to_uri_and_body(request)
|
129
|
+
url_prefix = IndirectionType.url_prefix_for(request.indirection_name.to_s)
|
130
|
+
indirection = request.method == :search ? pluralize(request.indirection_name.to_s) : request.indirection_name.to_s
|
131
|
+
["#{url_prefix}/#{indirection}/#{Puppet::Util.uri_encode(request.key)}", "environment=#{request.environment.name}&#{request.query_string}"]
|
132
|
+
end
|
133
|
+
|
123
134
|
private
|
124
135
|
|
125
136
|
# Execute our find.
|
@@ -253,20 +264,10 @@ class Puppet::Network::HTTP::API::IndirectedRoutes
|
|
253
264
|
method
|
254
265
|
end
|
255
266
|
|
256
|
-
def self.request_to_uri(request)
|
257
|
-
uri, body = request_to_uri_and_body(request)
|
258
|
-
"#{uri}?#{body}"
|
259
|
-
end
|
260
|
-
|
261
|
-
def self.request_to_uri_and_body(request)
|
262
|
-
url_prefix = IndirectionType.url_prefix_for(request.indirection_name.to_s)
|
263
|
-
indirection = request.method == :search ? pluralize(request.indirection_name.to_s) : request.indirection_name.to_s
|
264
|
-
["#{url_prefix}/#{indirection}/#{Puppet::Util.uri_encode(request.key)}", "environment=#{request.environment.name}&#{request.query_string}"]
|
265
|
-
end
|
266
|
-
|
267
267
|
def self.pluralize(indirection)
|
268
268
|
return(indirection == "status" ? "statuses" : indirection + "s")
|
269
269
|
end
|
270
|
+
private_class_method :pluralize
|
270
271
|
|
271
272
|
def plurality(indirection)
|
272
273
|
# NOTE These specific hooks for paths are ridiculous, but it's a *many*-line
|
@@ -325,19 +325,17 @@ module Puppet::Network::HTTP
|
|
325
325
|
rescue => exception
|
326
326
|
elapsed = (Time.now - start).to_f.round(3)
|
327
327
|
uri = [@site.addr, request.path.split('?')[0]].join('/')
|
328
|
-
eclass = exception.class
|
329
|
-
|
330
|
-
err = case exception
|
331
|
-
when EOFError
|
332
|
-
eclass.new(_('request %{uri} interrupted after %{elapsed} seconds') % {uri: uri, elapsed: elapsed})
|
333
|
-
when Timeout::Error
|
334
|
-
eclass.new(_('request %{uri} timed out after %{elapsed} seconds') % {uri: uri, elapsed: elapsed})
|
335
|
-
else
|
336
|
-
eclass.new(_('request %{uri} failed: %{msg}') % {uri: uri, msg: exception.message})
|
337
|
-
end
|
338
328
|
|
339
|
-
|
340
|
-
|
329
|
+
case exception
|
330
|
+
when EOFError
|
331
|
+
Puppet.log_exception(exception, _('request %{uri} interrupted after %{elapsed} seconds') % {uri: uri, elapsed: elapsed})
|
332
|
+
when Timeout::Error
|
333
|
+
Puppet.log_exception(exception, _('request %{uri} timed out after %{elapsed} seconds') % {uri: uri, elapsed: elapsed})
|
334
|
+
else
|
335
|
+
Puppet.log_exception(exception, _('request %{uri} failed: %{msg}') % {uri: uri, msg: exception.message})
|
336
|
+
end
|
337
|
+
|
338
|
+
raise exception
|
341
339
|
end
|
342
340
|
|
343
341
|
def with_connection(site, &block)
|