puppet 4.9.4 → 4.10.0
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 +7 -0
- data/Rakefile +6 -0
- data/ext/project_data.yaml +2 -2
- data/lib/hiera/puppet_function.rb +1 -1
- data/lib/puppet.rb +1 -0
- data/lib/puppet/application.rb +14 -0
- data/lib/puppet/application/inspect.rb +3 -0
- data/lib/puppet/defaults.rb +12 -2
- data/lib/puppet/etc.rb +125 -0
- data/lib/puppet/face/help.rb +1 -1
- data/lib/puppet/functions.rb +49 -4
- data/lib/puppet/functions/eyaml_lookup_key.rb +12 -3
- data/lib/puppet/functions/hocon_data.rb +9 -0
- data/lib/puppet/functions/json_data.rb +9 -0
- data/lib/puppet/functions/yaml_data.rb +9 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +69 -22
- data/lib/puppet/indirector/key/file.rb +2 -1
- data/lib/puppet/indirector/ssl_file.rb +24 -3
- data/lib/puppet/module.rb +28 -22
- data/lib/puppet/network/http/compression.rb +2 -1
- data/lib/puppet/parser/compiler.rb +15 -38
- data/lib/puppet/parser/functions/hiera.rb +1 -1
- data/lib/puppet/parser/functions/hiera_array.rb +1 -1
- data/lib/puppet/parser/functions/hiera_hash.rb +1 -1
- data/lib/puppet/parser/functions/hiera_include.rb +1 -1
- data/lib/puppet/parser/scope.rb +59 -17
- data/lib/puppet/pops/evaluator/callable_signature.rb +7 -0
- data/lib/puppet/pops/functions/dispatch.rb +18 -5
- data/lib/puppet/pops/functions/dispatcher.rb +7 -13
- data/lib/puppet/pops/issue_reporter.rb +1 -1
- data/lib/puppet/pops/issues.rb +84 -0
- data/lib/puppet/pops/loader/base_loader.rb +13 -5
- data/lib/puppet/pops/lookup/configured_data_provider.rb +8 -2
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +109 -19
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +19 -4
- data/lib/puppet/pops/lookup/data_provider.rb +43 -29
- data/lib/puppet/pops/lookup/environment_data_provider.rb +1 -1
- data/lib/puppet/pops/lookup/explainer.rb +1 -0
- data/lib/puppet/pops/lookup/function_provider.rb +36 -11
- data/lib/puppet/pops/lookup/global_data_provider.rb +18 -5
- data/lib/puppet/pops/lookup/hiera_config.rb +203 -84
- data/lib/puppet/pops/lookup/interpolation.rb +21 -6
- data/lib/puppet/pops/lookup/invocation.rb +14 -9
- data/lib/puppet/pops/lookup/location_resolver.rb +27 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +59 -6
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +9 -77
- data/lib/puppet/pops/lookup/module_data_provider.rb +27 -4
- data/lib/puppet/pops/parser/lexer2.rb +1 -1
- data/lib/puppet/pops/pcore.rb +3 -3
- data/lib/puppet/pops/types/p_object_type.rb +4 -6
- data/lib/puppet/pops/types/ruby_generator.rb +2 -2
- data/lib/puppet/pops/types/type_asserter.rb +3 -3
- data/lib/puppet/pops/types/type_mismatch_describer.rb +25 -7
- data/lib/puppet/pops/types/types.rb +20 -29
- data/lib/puppet/provider/exec.rb +4 -2
- data/lib/puppet/provider/nameservice.rb +8 -8
- data/lib/puppet/provider/selmodule/semodule.rb +20 -16
- data/lib/puppet/provider/service/src.rb +39 -39
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +7 -2
- data/lib/puppet/settings.rb +30 -17
- data/lib/puppet/ssl/base.rb +14 -1
- data/lib/puppet/ssl/certificate_authority.rb +4 -2
- data/lib/puppet/ssl/configuration.rb +4 -1
- data/lib/puppet/ssl/inventory.rb +10 -3
- data/lib/puppet/ssl/key.rb +7 -3
- data/lib/puppet/test/test_helper.rb +3 -0
- data/lib/puppet/type.rb +13 -1
- data/lib/puppet/type/exec.rb +16 -1
- data/lib/puppet/type/group.rb +17 -11
- data/lib/puppet/type/user.rb +3 -1
- data/lib/puppet/util.rb +1 -0
- data/lib/puppet/util/character_encoding.rb +95 -0
- data/lib/puppet/util/execution.rb +9 -6
- data/lib/puppet/util/reference.rb +4 -2
- data/lib/puppet/util/windows/file.rb +5 -1
- data/lib/puppet/version.rb +6 -2
- data/locales/config.yaml +1 -1
- data/locales/puppet.pot +18 -4
- data/spec/integration/ssl/autosign_spec.rb +18 -3
- data/spec/integration/ssl/key_spec.rb +104 -0
- data/spec/integration/type/user_spec.rb +13 -6
- data/spec/spec_helper.rb +7 -0
- data/spec/unit/application/inspect_spec.rb +9 -2
- data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
- data/spec/unit/etc_spec.rb +234 -0
- data/spec/unit/face/certificate_spec.rb +10 -2
- data/spec/unit/functions/dig_spec.rb +1 -1
- data/spec/unit/functions/hiera_spec.rb +40 -1
- data/spec/unit/functions/lookup_fixture_spec.rb +10 -10
- data/spec/unit/functions/lookup_spec.rb +1217 -357
- data/spec/unit/functions4_spec.rb +37 -1
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +33 -2
- data/spec/unit/indirector/key/file_spec.rb +1 -1
- data/spec/unit/indirector/ssl_file_spec.rb +3 -3
- data/spec/unit/module_spec.rb +52 -59
- data/spec/unit/network/http/compression_spec.rb +39 -8
- data/spec/unit/parser/compiler_spec.rb +14 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +21 -3
- data/spec/unit/pops/loaders/module_loaders_spec.rb +61 -0
- data/spec/unit/pops/lookup/context_spec.rb +56 -8
- data/spec/unit/pops/lookup/lookup_spec.rb +32 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +8 -0
- data/spec/unit/pops/types/ruby_generator_spec.rb +48 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +12 -3
- data/spec/unit/pops/types/types_spec.rb +6 -7
- data/spec/unit/provider/nameservice_spec.rb +12 -12
- data/spec/unit/provider/package/pkg_spec.rb +2 -0
- data/spec/unit/provider/service/src_spec.rb +5 -0
- data/spec/unit/ssl/base_spec.rb +9 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +2 -2
- data/spec/unit/ssl/certificate_request_attributes_spec.rb +6 -0
- data/spec/unit/ssl/certificate_request_spec.rb +1 -1
- data/spec/unit/ssl/certificate_spec.rb +1 -1
- data/spec/unit/ssl/configuration_spec.rb +11 -2
- data/spec/unit/ssl/inventory_spec.rb +27 -3
- data/spec/unit/ssl/key_spec.rb +7 -7
- data/spec/unit/type/exec_spec.rb +41 -4
- data/spec/unit/type/file_spec.rb +4 -1
- data/spec/unit/util/character_encoding_spec.rb +88 -0
- data/spec/unit/util/execution_spec.rb +12 -0
- data/spec/unit/version_spec.rb +4 -0
- metadata +3803 -3808
- data/tasks/i18n.rake +0 -20
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 66d908f990904667f0bbdf26bd54808905882ab5
|
4
|
+
data.tar.gz: 42292b5c1448af0dfa713eb6d4843e2f0b9bc98a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 67f91f562c07ab4aaf09d7db51769ab1ee169fd432a134fd7c0a32417d6c3b02a176192b724af3ab2c7f3461f1e7008c69f69aa592726da36ef7dfe814b69f1c
|
7
|
+
data.tar.gz: 163fd0b9accc9f76749b96a66c60dbbff2e3ffd66de97179f5c5859b2ce5b474fc70a91125985ba780d97b6a5f39983fe1dfddd861fc8cf8b7eec0071c2c81f6
|
data/Rakefile
CHANGED
@@ -104,3 +104,9 @@ task(:commits) do
|
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
+
begin
|
108
|
+
spec = Gem::Specification.find_by_name 'gettext-setup'
|
109
|
+
load "#{spec.gem_dir}/lib/tasks/gettext.rake"
|
110
|
+
GettextSetup.initialize(File.absolute_path('locales', File.dirname(__FILE__)))
|
111
|
+
rescue LoadError
|
112
|
+
end
|
data/ext/project_data.yaml
CHANGED
@@ -45,7 +45,7 @@ gem_platform_dependencies:
|
|
45
45
|
# Use of win32-security is deprecated
|
46
46
|
win32-security: '= 0.2.5'
|
47
47
|
win32-service: '= 0.8.8'
|
48
|
-
minitar: '~> 0.
|
48
|
+
minitar: '~> 0.6.1'
|
49
49
|
x64-mingw32:
|
50
50
|
gem_runtime_dependencies:
|
51
51
|
ffi: '~> 1.9.6'
|
@@ -56,7 +56,7 @@ gem_platform_dependencies:
|
|
56
56
|
# Use of win32-security is deprecated
|
57
57
|
win32-security: '= 0.2.5'
|
58
58
|
win32-service: '= 0.8.8'
|
59
|
-
minitar: '~> 0.
|
59
|
+
minitar: '~> 0.6.1'
|
60
60
|
bundle_platforms:
|
61
61
|
universal-darwin: all
|
62
62
|
x86-mingw32: mingw
|
@@ -61,7 +61,7 @@ class Hiera::PuppetFunction < Puppet::Functions::InternalFunction
|
|
61
61
|
def lookup(scope, key, default, has_default, override, &default_block)
|
62
62
|
unless Puppet[:strict] == :off
|
63
63
|
Puppet.warn_once(:deprecation, self.class.name,
|
64
|
-
"The function '#{self.class.name}' is deprecated in favor of using 'lookup'. See https://docs.puppet.com/puppet/#{Puppet.
|
64
|
+
"The function '#{self.class.name}' is deprecated in favor of using 'lookup'. See https://docs.puppet.com/puppet/#{Puppet.minor_version}/reference/deprecated_language.html")
|
65
65
|
end
|
66
66
|
lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {})
|
67
67
|
adapter = lookup_invocation.lookup_adapter
|
data/lib/puppet.rb
CHANGED
data/lib/puppet/application.rb
CHANGED
@@ -322,6 +322,15 @@ class Application
|
|
322
322
|
@options = {}
|
323
323
|
end
|
324
324
|
|
325
|
+
# call in setup of subclass to deprecate an application
|
326
|
+
def deprecate
|
327
|
+
@deprecated = true
|
328
|
+
end
|
329
|
+
|
330
|
+
def deprecated?
|
331
|
+
@deprecated
|
332
|
+
end
|
333
|
+
|
325
334
|
# Execute the application.
|
326
335
|
# @api public
|
327
336
|
# @return [void]
|
@@ -339,6 +348,11 @@ class Application
|
|
339
348
|
exit_on_fail("initialize") { preinit }
|
340
349
|
exit_on_fail("parse application options") { parse_options }
|
341
350
|
exit_on_fail("prepare for execution") { setup }
|
351
|
+
|
352
|
+
if deprecated?
|
353
|
+
Puppet.deprecation_warning(_("`puppet %{name}` is deprecated and will be removed in a future release.") % { name: name })
|
354
|
+
end
|
355
|
+
|
342
356
|
exit_on_fail("configure routes from #{Puppet[:route_file]}") { configure_indirector_routes }
|
343
357
|
exit_on_fail("log runtime debug info") { log_runtime_environment }
|
344
358
|
exit_on_fail("run") { run_command }
|
@@ -19,6 +19,7 @@ puppet-inspect(8) -- Send an inspection report
|
|
19
19
|
|
20
20
|
SYNOPSIS
|
21
21
|
--------
|
22
|
+
Note: this command is deprecated
|
22
23
|
|
23
24
|
Prepares and submits an inspection report to the puppet master.
|
24
25
|
|
@@ -74,6 +75,8 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
|
|
74
75
|
end
|
75
76
|
|
76
77
|
def setup
|
78
|
+
deprecate
|
79
|
+
|
77
80
|
exit(Puppet.settings.print_configs ? 0 : 1) if Puppet.settings.print_configs?
|
78
81
|
|
79
82
|
raise "Inspect requires reporting to be enabled. Set report=true in puppet.conf to enable reporting." unless Puppet[:report]
|
data/lib/puppet/defaults.rb
CHANGED
@@ -1692,11 +1692,21 @@ EOT
|
|
1692
1692
|
:archive_files => {
|
1693
1693
|
:type => :boolean,
|
1694
1694
|
:default => false,
|
1695
|
-
:desc => "During an inspect run, whether to archive files whose contents are audited to a file bucket.",
|
1695
|
+
:desc => "During an inspect run, whether to archive files whose contents are audited to a file bucket. Note that the `inspect` command is deprecated.",
|
1696
|
+
:hook => proc { |value|
|
1697
|
+
if Puppet[:strict] != :off
|
1698
|
+
Puppet.deprecation_warning(_("Setting 'archive_files' is deprecated. It will be removed in a future release along with the `inspect` command."))
|
1699
|
+
end
|
1700
|
+
}
|
1696
1701
|
},
|
1697
1702
|
:archive_file_server => {
|
1698
1703
|
:default => "$server",
|
1699
|
-
:desc => "During an inspect run, the file bucket server to archive files to if archive_files is set.",
|
1704
|
+
:desc => "During an inspect run, the file bucket server to archive files to if archive_files is set. Note that the `inspect` command is deprecated.",
|
1705
|
+
:hook => proc { |value|
|
1706
|
+
if Puppet[:strict] != :off
|
1707
|
+
Puppet.deprecation_warning(_("Setting 'archive_file_server' is deprecated. It will be removed in a future release along with the `inspect` command."))
|
1708
|
+
end
|
1709
|
+
}
|
1700
1710
|
}
|
1701
1711
|
)
|
1702
1712
|
|
data/lib/puppet/etc.rb
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'puppet/util/character_encoding'
|
2
|
+
# Wrapper around Ruby Etc module allowing us to manage encoding in a single
|
3
|
+
# place.
|
4
|
+
# This represents a subset of Ruby's Etc module, only the methods required by Puppet.
|
5
|
+
# Etc returns strings in variable encoding depending on
|
6
|
+
# environment. For Puppet we specifically want UTF-8 as our input from the Etc
|
7
|
+
# module - which is our input for many resource instance 'is' values. The
|
8
|
+
# associated 'should' value will basically always be coming from Puppet in
|
9
|
+
# UTF-8. Etc is defined for Windows but calls to it return nil.
|
10
|
+
#
|
11
|
+
# We only use Etc for retrieving existing property values from the system. For
|
12
|
+
# setting property values, providers leverage system tools (i.e., `useradd`)
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
module Puppet::Etc
|
16
|
+
class << self
|
17
|
+
# Etc::getgrent returns an Etc::Group struct object
|
18
|
+
# On first call opens /etc/group and returns parse of first entry. Each subsquent call
|
19
|
+
# returns new struct the next entry or nil if EOF. Call ::endgrent to close file.
|
20
|
+
def getgrent
|
21
|
+
convert_field_values_to_utf8!(::Etc.getgrent)
|
22
|
+
end
|
23
|
+
|
24
|
+
# closes handle to /etc/group file
|
25
|
+
def endgrent
|
26
|
+
::Etc.endgrent
|
27
|
+
end
|
28
|
+
|
29
|
+
# effectively equivalent to IO#rewind of /etc/group
|
30
|
+
def setgrent
|
31
|
+
::Etc.setgrent
|
32
|
+
end
|
33
|
+
|
34
|
+
# Etc::getpwent returns an Etc::Passwd struct object
|
35
|
+
# On first call opens /etc/passwd and returns parse of first entry. Each subsquent call
|
36
|
+
# returns new struct for the next entry or nil if EOF. Call ::endgrent to close file.
|
37
|
+
def getpwent
|
38
|
+
convert_field_values_to_utf8!(::Etc.getpwent)
|
39
|
+
end
|
40
|
+
|
41
|
+
# closes handle to /etc/passwd file
|
42
|
+
def endpwent
|
43
|
+
::Etc.endpwent
|
44
|
+
end
|
45
|
+
|
46
|
+
#effectively equivalent to IO#rewind of /etc/passwd
|
47
|
+
def setpwent
|
48
|
+
::Etc.setpwent
|
49
|
+
end
|
50
|
+
|
51
|
+
# Etc::getpwnam searches /etc/passwd file for an entry corresponding to
|
52
|
+
# username.
|
53
|
+
# returns an Etc::Passwd struct corresponding to the entry or raises
|
54
|
+
# ArgumentError if none
|
55
|
+
def getpwnam(username)
|
56
|
+
convert_field_values_to_utf8!(::Etc.getpwnam(username))
|
57
|
+
end
|
58
|
+
|
59
|
+
# Etc::getgrnam searches /etc/group file for an entry corresponding to groupname.
|
60
|
+
# returns an Etc::Group struct corresponding to the entry or raises
|
61
|
+
# ArgumentError if none
|
62
|
+
def getgrnam(groupname)
|
63
|
+
convert_field_values_to_utf8!(::Etc.getgrnam(groupname))
|
64
|
+
end
|
65
|
+
|
66
|
+
# Etc::getgrid searches /etc/group file for an entry corresponding to id.
|
67
|
+
# returns an Etc::Group struct corresponding to the entry or raises
|
68
|
+
# ArgumentError if none
|
69
|
+
def getgrgid(id)
|
70
|
+
convert_field_values_to_utf8!(::Etc.getgrgid(id))
|
71
|
+
end
|
72
|
+
|
73
|
+
# Etc::getpwuid searches /etc/passwd file for an entry corresponding to id.
|
74
|
+
# returns an Etc::Passwd struct corresponding to the entry or raises
|
75
|
+
# ArgumentError if none
|
76
|
+
def getpwuid(id)
|
77
|
+
convert_field_values_to_utf8!(::Etc.getpwuid(id))
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
# Utility method for converting the String values of a struct returned by
|
82
|
+
# the Etc module to UTF-8. Structs returned by the ruby Etc module contain
|
83
|
+
# members with fields of type String, Integer, or Array of Strings, so we
|
84
|
+
# handle these types. Otherwise ignore fields.
|
85
|
+
#
|
86
|
+
# NOTE: If a string cannot be converted to UTF-8, this leaves the original
|
87
|
+
# string string intact in the Struct.
|
88
|
+
#
|
89
|
+
# Warning! This is a destructive method - the struct passed is modified!
|
90
|
+
#
|
91
|
+
# @api private
|
92
|
+
# @param [Etc::Passwd or Etc::Group struct]
|
93
|
+
# @return [Etc::Passwd or Etc::Group struct] the original struct with values
|
94
|
+
# converted to UTF-8 if possible, or the original value intact if not
|
95
|
+
def convert_field_values_to_utf8!(struct)
|
96
|
+
return nil if struct.nil?
|
97
|
+
struct.each_with_index do |value, index|
|
98
|
+
if value.is_a?(String)
|
99
|
+
converted = Puppet::Util::CharacterEncoding.convert_to_utf_8!(value)
|
100
|
+
struct[index] = converted if !converted.nil?
|
101
|
+
elsif value.is_a?(Array)
|
102
|
+
struct[index] = convert_array_values_to_utf8!(value)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# Helper method for ::convert_field_values_to_utf8!
|
108
|
+
#
|
109
|
+
# Warning! This is a destructive method - the array passed is modified!
|
110
|
+
#
|
111
|
+
# @api private
|
112
|
+
# @param [Array] object containing String values to convert to UTF-8
|
113
|
+
# @return [Array] original Array with String values converted to UTF-8 if
|
114
|
+
# convertible, or original, unmodified values if not.
|
115
|
+
def convert_array_values_to_utf8!(string_array)
|
116
|
+
string_array.map! do |elem|
|
117
|
+
converted = Puppet::Util::CharacterEncoding.convert_to_utf_8!(elem)
|
118
|
+
converted.nil? ? elem : converted
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
|
125
|
+
|
data/lib/puppet/face/help.rb
CHANGED
data/lib/puppet/functions.rb
CHANGED
@@ -46,6 +46,14 @@
|
|
46
46
|
# specifies the method that should be called for that signature. When a
|
47
47
|
# matching signature is found, the corresponding method is called.
|
48
48
|
#
|
49
|
+
# Special dispatches designed to create error messages for an argument mismatch
|
50
|
+
# can be added using the keyword `argument_mismatch` instead of `dispatch`. The
|
51
|
+
# method appointed by an `argument_mismatch` will be called with arguments
|
52
|
+
# just like a normal `dispatch` would, but the method must produce a string.
|
53
|
+
# The string is then used as the message in the `ArgumentError` that is raised
|
54
|
+
# when the method returns. A block parameter can be given, but it is not
|
55
|
+
# propagated in the method call.
|
56
|
+
#
|
49
57
|
# Documentation for the function should be placed as comments to the
|
50
58
|
# implementation method(s).
|
51
59
|
#
|
@@ -73,6 +81,27 @@
|
|
73
81
|
# end
|
74
82
|
# end
|
75
83
|
#
|
84
|
+
# @example Using an argument mismatch handler
|
85
|
+
# Puppet::Functions.create_function('math::min') do
|
86
|
+
# dispatch :numeric_min do
|
87
|
+
# param 'Numeric', :a
|
88
|
+
# param 'Numeric', :b
|
89
|
+
# end
|
90
|
+
#
|
91
|
+
# argument_mismatch :on_error do
|
92
|
+
# param 'Any', :a
|
93
|
+
# param 'Any', :b
|
94
|
+
# end
|
95
|
+
#
|
96
|
+
# def numeric_min(a, b)
|
97
|
+
# a <= b ? a : b
|
98
|
+
# end
|
99
|
+
#
|
100
|
+
# def on_error(a, b)
|
101
|
+
# 'both arguments must be of type Numeric'
|
102
|
+
# end
|
103
|
+
# end
|
104
|
+
#
|
76
105
|
# Specifying Signatures
|
77
106
|
# ---
|
78
107
|
#
|
@@ -224,7 +253,7 @@ module Puppet::Functions
|
|
224
253
|
simple_name = func_name.split(/::/)[-1]
|
225
254
|
type, names = default_dispatcher(the_class, simple_name)
|
226
255
|
last_captures_rest = (type.size_range[1] == Float::INFINITY)
|
227
|
-
the_class.dispatcher.
|
256
|
+
the_class.dispatcher.add(Puppet::Pops::Functions::Dispatch.new(type, simple_name, names, last_captures_rest))
|
228
257
|
end
|
229
258
|
|
230
259
|
# The function class is returned as the result of the create function method
|
@@ -285,7 +314,22 @@ module Puppet::Functions
|
|
285
314
|
# @api public
|
286
315
|
def self.dispatch(meth_name, &block)
|
287
316
|
builder().instance_eval do
|
288
|
-
dispatch(meth_name, &block)
|
317
|
+
dispatch(meth_name, false, &block)
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
# Like `dispatch` but used for a specific type of argument mismatch. Will not be include in the list of valid
|
322
|
+
# parameter overloads for the function.
|
323
|
+
#
|
324
|
+
# @param meth_name [Symbol] The name of the implementation method to call
|
325
|
+
# when the signature defined in the block matches the arguments to a call
|
326
|
+
# to the function.
|
327
|
+
# @return [Void]
|
328
|
+
#
|
329
|
+
# @api public
|
330
|
+
def self.argument_mismatch(meth_name, &block)
|
331
|
+
builder().instance_eval do
|
332
|
+
dispatch(meth_name, true, &block)
|
289
333
|
end
|
290
334
|
end
|
291
335
|
|
@@ -500,7 +544,7 @@ module Puppet::Functions
|
|
500
544
|
end
|
501
545
|
|
502
546
|
# @api private
|
503
|
-
def dispatch(meth_name, &block)
|
547
|
+
def dispatch(meth_name, argument_mismatch_handler, &block)
|
504
548
|
# an array of either an index into names/types, or an array with
|
505
549
|
# injection information [type, name, injection_name] used when the call
|
506
550
|
# is being made to weave injections into the given arguments.
|
@@ -514,9 +558,10 @@ module Puppet::Functions
|
|
514
558
|
@block_type = nil
|
515
559
|
@block_name = nil
|
516
560
|
@return_type = nil
|
561
|
+
@argument_mismatch_hander = argument_mismatch_handler
|
517
562
|
self.instance_eval &block
|
518
563
|
callable_t = create_callable(@types, @block_type, @return_type, @min, @max)
|
519
|
-
@dispatcher.
|
564
|
+
@dispatcher.add(Puppet::Pops::Functions::Dispatch.new(callable_t, meth_name, @names, @max == :default, @block_name, @injections, @weaving, @argument_mismatch_hander))
|
520
565
|
end
|
521
566
|
|
522
567
|
# Handles creation of a callable type from strings specifications of puppet
|
@@ -19,6 +19,13 @@ Puppet::Functions.create_function(:eyaml_lookup_key) do
|
|
19
19
|
def eyaml_lookup_key(key, options, context)
|
20
20
|
return context.cached_value(key) if context.cache_has_key(key)
|
21
21
|
|
22
|
+
# Can't do this with an argument_mismatch dispatcher since there is no way to declare a struct that at least
|
23
|
+
# contains some keys but may contain other arbitrary keys.
|
24
|
+
unless options.include?('path')
|
25
|
+
raise ArgumentError,
|
26
|
+
"'eyaml_lookup_key': one of 'path', 'paths' 'glob', 'globs' or 'mapped_paths' must be declared in hiera.yaml when using this lookup_key function"
|
27
|
+
end
|
28
|
+
|
22
29
|
# nil key is used to indicate that the cache contains the raw content of the eyaml file
|
23
30
|
raw_data = context.cached_value(nil)
|
24
31
|
if raw_data.nil?
|
@@ -70,9 +77,11 @@ Puppet::Functions.create_function(:eyaml_lookup_key) do
|
|
70
77
|
end
|
71
78
|
|
72
79
|
def decrypt(data, context)
|
73
|
-
|
74
|
-
|
75
|
-
|
80
|
+
if encrypted?(data)
|
81
|
+
tokens = Hiera::Backend::Eyaml::Parser::ParserFactory.hiera_backend_parser.parse(data)
|
82
|
+
data = tokens.map(&:to_plain_text).join.chomp
|
83
|
+
end
|
84
|
+
context.interpolate(data)
|
76
85
|
end
|
77
86
|
|
78
87
|
def encrypted?(data)
|
@@ -13,6 +13,11 @@ Puppet::Functions.create_function(:hocon_data) do
|
|
13
13
|
param 'Puppet::LookupContext', :context
|
14
14
|
end
|
15
15
|
|
16
|
+
argument_mismatch :missing_path do
|
17
|
+
param 'Hash', :options
|
18
|
+
param 'Puppet::LookupContext', :context
|
19
|
+
end
|
20
|
+
|
16
21
|
def hocon_data(options, context)
|
17
22
|
path = options['path']
|
18
23
|
context.cached_file_data(path) do |content|
|
@@ -23,4 +28,8 @@ Puppet::Functions.create_function(:hocon_data) do
|
|
23
28
|
end
|
24
29
|
end
|
25
30
|
end
|
31
|
+
|
32
|
+
def missing_path(options, context)
|
33
|
+
"one of 'path', 'paths' 'glob', 'globs' or 'mapped_paths' must be declared in hiera.yaml when using this data_hash function"
|
34
|
+
end
|
26
35
|
end
|
@@ -6,6 +6,11 @@ Puppet::Functions.create_function(:json_data) do
|
|
6
6
|
param 'Puppet::LookupContext', :context
|
7
7
|
end
|
8
8
|
|
9
|
+
argument_mismatch :missing_path do
|
10
|
+
param 'Hash', :options
|
11
|
+
param 'Puppet::LookupContext', :context
|
12
|
+
end
|
13
|
+
|
9
14
|
def json_data(options, context)
|
10
15
|
path = options['path']
|
11
16
|
context.cached_file_data(path) do |content|
|
@@ -17,4 +22,8 @@ Puppet::Functions.create_function(:json_data) do
|
|
17
22
|
end
|
18
23
|
end
|
19
24
|
end
|
25
|
+
|
26
|
+
def missing_path(options, context)
|
27
|
+
"one of 'path', 'paths' 'glob', 'globs' or 'mapped_paths' must be declared in hiera.yaml when using this data_hash function"
|
28
|
+
end
|
20
29
|
end
|
@@ -8,6 +8,11 @@ Puppet::Functions.create_function(:yaml_data) do
|
|
8
8
|
param 'Puppet::LookupContext', :context
|
9
9
|
end
|
10
10
|
|
11
|
+
argument_mismatch :missing_path do
|
12
|
+
param 'Hash', :options
|
13
|
+
param 'Puppet::LookupContext', :context
|
14
|
+
end
|
15
|
+
|
11
16
|
def yaml_data(options, context)
|
12
17
|
path = options['path']
|
13
18
|
context.cached_file_data(path) do |content|
|
@@ -26,4 +31,8 @@ Puppet::Functions.create_function(:yaml_data) do
|
|
26
31
|
end
|
27
32
|
end
|
28
33
|
end
|
34
|
+
|
35
|
+
def missing_path(options, context)
|
36
|
+
"one of 'path', 'paths' 'glob', 'globs' or 'mapped_paths' must be declared in hiera.yaml when using this data_hash function"
|
37
|
+
end
|
29
38
|
end
|