puppet 5.5.17-x86-mingw32 → 5.5.18-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 +1 -1
- data/Gemfile +2 -3
- data/Gemfile.lock +35 -31
- 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 +54 -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/configurer.rb +86 -28
- data/lib/puppet/configurer/downloader.rb +2 -6
- data/lib/puppet/defaults.rb +17 -4
- data/lib/puppet/error.rb +9 -1
- data/lib/puppet/external/nagios/base.rb +1 -1
- data/lib/puppet/face/ca.rb +1 -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/epp.rb +4 -4
- 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 +6 -5
- 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_tool/applications/builder.rb +1 -1
- 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/rack/rest.rb +2 -2
- 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/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/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/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 -48
- 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/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec.rb +6 -2
- data/lib/puppet/provider/mount.rb +1 -1
- data/lib/puppet/provider/mount/parsed.rb +8 -8
- data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
- data/lib/puppet/provider/nameservice/pw.rb +2 -2
- data/lib/puppet/provider/package/dnfmodule.rb +87 -0
- data/lib/puppet/provider/package/dpkg.rb +3 -12
- 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 +6 -6
- 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/scheduled_task/win32_taskscheduler.rb +3 -3
- 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 +8 -8
- 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/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/reference/indirection.rb +2 -2
- data/lib/puppet/reference/metaparameter.rb +1 -3
- data/lib/puppet/reference/providers.rb +1 -1
- 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/certificate_authority/interface.rb +1 -1
- data/lib/puppet/ssl/certificate_factory.rb +2 -2
- data/lib/puppet/ssl/host.rb +3 -3
- data/lib/puppet/ssl/oids.rb +1 -1
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/type.rb +2 -4
- data/lib/puppet/type/cron.rb +1 -1
- 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/interface.rb +1 -1
- data/lib/puppet/type/notify.rb +3 -2
- data/lib/puppet/type/package.rb +2 -2
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/selboolean.rb +17 -3
- 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/instance_loader.rb +1 -1
- data/lib/puppet/util/log.rb +1 -1
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/logging.rb +30 -18
- data/lib/puppet/util/metric.rb +2 -2
- data/lib/puppet/util/monkey_patches.rb +1 -1
- data/lib/puppet/util/nagios_maker.rb +2 -2
- data/lib/puppet/util/network_device/cisco/device.rb +1 -1
- data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
- data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
- 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 +58 -28
- 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_pal.rb +2 -2
- data/locales/puppet.pot +115 -95
- data/man/man5/puppet.conf.5 +21 -5
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-ca.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-cert.8 +1 -1
- data/man/man8/puppet-certificate.8 +1 -1
- data/man/man8/puppet-certificate_request.8 +1 -1
- data/man/man8/puppet-certificate_revocation_list.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-master.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-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/unit/configurer_spec.rb +380 -397
- 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 +26 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
- 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 +15 -3
- 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 +22 -22
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/provider/user/useradd_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/selboolean_spec.rb +4 -6
- data/spec/unit/util/execution_spec.rb +16 -0
- data/spec/unit/util/http_proxy_spec.rb +97 -0
- 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/tasks/manpages.rake +1 -0
- metadata +12 -5
- data/lib/puppet/pops/loader/null_loader.rb +0 -60
- data/locales/ja/puppet.po +0 -12114
data/lib/puppet/parser/ast.rb
CHANGED
@@ -12,7 +12,7 @@ class Puppet::Parser::AST
|
|
12
12
|
attr_accessor :parent, :scope, :file, :line, :pos
|
13
13
|
|
14
14
|
def inspect
|
15
|
-
"( #{self.class} #{self
|
15
|
+
"( #{self.class} #{self} #{@children.inspect} )"
|
16
16
|
end
|
17
17
|
|
18
18
|
# Evaluate the current object. Just a stub method, since the subclass
|
@@ -24,7 +24,7 @@ module Puppet::Parser::Functions
|
|
24
24
|
Puppet::Util::Log.levels.each do |level|
|
25
25
|
newfunction(level,
|
26
26
|
:environment => root_env,
|
27
|
-
:doc => "Log a message on the server at level #{level
|
27
|
+
:doc => "Log a message on the server at level #{level}.") do |vals|
|
28
28
|
send(level, vals.join(" "))
|
29
29
|
end
|
30
30
|
end
|
@@ -7,12 +7,12 @@ result as a String.
|
|
7
7
|
The first argument to this function should be a `<MODULE NAME>/<TEMPLATE FILE>`
|
8
8
|
reference, which loads `<TEMPLATE FILE>` from `<MODULE NAME>`'s `templates`
|
9
9
|
directory. In most cases, the last argument is optional; if used, it should be a
|
10
|
-
[hash](/puppet/latest/
|
10
|
+
[hash](https://puppet.com/docs/puppet/latest/lang_data_hash.html) that contains parameters to
|
11
11
|
pass to the template.
|
12
12
|
|
13
|
-
- See the [template](/puppet/latest/
|
13
|
+
- See the [template](https://puppet.com/docs/puppet/latest/lang_template.html) documentation
|
14
14
|
for general template usage information.
|
15
|
-
- See the [EPP syntax](/puppet/latest/
|
15
|
+
- See the [EPP syntax](https://puppet.com/docs/puppet/latest/lang_template_epp.html)
|
16
16
|
documentation for examples of EPP.
|
17
17
|
|
18
18
|
For example, to call the apache module's `templates/vhost/_docroot.epp`
|
@@ -6,12 +6,12 @@ text result as a String.
|
|
6
6
|
|
7
7
|
The first argument to this function should be a string containing an EPP
|
8
8
|
template. 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/
|
12
|
+
- See the [template](https://puppet.com/docs/puppet/latest/lang_template.html) documentation
|
13
13
|
for general template usage information.
|
14
|
-
- See the [EPP syntax](/puppet/latest/
|
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 evaluate an inline EPP template and pass it the `docroot` and
|
@@ -29,7 +29,7 @@ parameter tag without default values. Puppet produces an error if the
|
|
29
29
|
`inline_epp` function fails to pass any required parameter.
|
30
30
|
|
31
31
|
An inline EPP template should be written as a single-quoted string or
|
32
|
-
[heredoc](/puppet/latest/
|
32
|
+
[heredoc](https://puppet.com/docs/puppet/latest/lang_data_string.html#heredocs).
|
33
33
|
A double-quoted string is subject to expression interpolation before the string
|
34
34
|
is parsed as an EPP template.
|
35
35
|
|
@@ -45,7 +45,7 @@ END
|
|
45
45
|
~~~
|
46
46
|
|
47
47
|
- Since 3.5
|
48
|
-
- Requires [future parser](/puppet/3.8/
|
48
|
+
- Requires [future parser](https://puppet.com/docs/puppet/3.8/experiments_future.html) in Puppet 3.5 to 3.8") do |arguments|
|
49
49
|
|
50
50
|
Puppet::Parser::Functions::Error.is4x('inline_epp')
|
51
51
|
end
|
@@ -35,10 +35,11 @@ module Puppet::Pops::Evaluator::ExternalSyntaxSupport
|
|
35
35
|
def lookup_keys_for_syntax(syntax)
|
36
36
|
segments = syntax.split(/\+/)
|
37
37
|
result = []
|
38
|
-
|
38
|
+
loop do
|
39
39
|
result << segments.join("+")
|
40
40
|
segments.shift
|
41
|
-
|
41
|
+
break if segments.empty?
|
42
|
+
end
|
42
43
|
result
|
43
44
|
end
|
44
45
|
|
@@ -33,7 +33,7 @@ module Runtime3Support
|
|
33
33
|
# @raise [Puppet::ParseError] an evaluation error initialized from the arguments (TODO: Change to EvaluationError?)
|
34
34
|
#
|
35
35
|
def optionally_fail(issue, semantic, options={}, except=nil)
|
36
|
-
if except.nil?
|
36
|
+
if except.nil? && diagnostic_producer.severity_producer[issue] == :error
|
37
37
|
# Want a stacktrace, and it must be passed as an exception
|
38
38
|
begin
|
39
39
|
raise EvaluationError.new()
|
@@ -299,10 +299,10 @@ module Runtime3Support
|
|
299
299
|
# 'ruby -wc' thinks that _func is unused, because the only reference to it
|
300
300
|
# is inside of the Kernel.eval string below. By prefixing it with the
|
301
301
|
# underscore, we let Ruby know to not worry about whether it's unused or not.
|
302
|
-
if loader &&
|
302
|
+
if loader && func = loader.load(:function, name)
|
303
303
|
Puppet::Util::Profiler.profile(name, [:functions, name]) do
|
304
|
-
# Add stack frame when calling.
|
305
|
-
return
|
304
|
+
# Add stack frame when calling.
|
305
|
+
return Puppet::Pops::PuppetStack.stack(file || '', line, func, :call, [scope, *args], &block)
|
306
306
|
end
|
307
307
|
end
|
308
308
|
# Call via 3x API if function exists there
|
data/lib/puppet/pops/loaders.rb
CHANGED
@@ -283,7 +283,7 @@ class Loaders
|
|
283
283
|
nil
|
284
284
|
elsif File.directory?(file)
|
285
285
|
raise Puppet::Error, "manifest of environment '#{@environment.name}' appoints directory '#{file}'. It must be a file"
|
286
|
-
elsif File.
|
286
|
+
elsif File.exist?(file)
|
287
287
|
parser.parse_file(file)
|
288
288
|
else
|
289
289
|
raise Puppet::Error, "manifest of environment '#{@environment.name}' appoints '#{file}'. It does not exist"
|
@@ -339,6 +339,7 @@ class HieraConfig
|
|
339
339
|
def self.not_implemented(impl, method_name)
|
340
340
|
raise NotImplementedError, "The class #{impl.class.name} should have implemented the method #{method_name}()"
|
341
341
|
end
|
342
|
+
private_class_method :not_implemented
|
342
343
|
end
|
343
344
|
|
344
345
|
# @api private
|
@@ -30,7 +30,7 @@ module SubLookup
|
|
30
30
|
raise yield('Syntax error') unless segments.size * 2 == count + 1
|
31
31
|
segments.map! do |segment|
|
32
32
|
segment.strip!
|
33
|
-
if segment.start_with?('"'
|
33
|
+
if segment.start_with?('"', "'")
|
34
34
|
segment[1..-2]
|
35
35
|
elsif segment =~ /^(:?[+-]?[0-9]+)$/
|
36
36
|
segment.to_i
|
@@ -173,12 +173,14 @@ module Puppet::Pops
|
|
173
173
|
|
174
174
|
protected
|
175
175
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
176
|
+
class << self
|
177
|
+
# Returns the type used to validate the options hash
|
178
|
+
#
|
179
|
+
# @return [Types::PStructType] the puppet type
|
180
|
+
#
|
181
|
+
def options_t
|
182
|
+
@options_t ||=Types::TypeParser.singleton.parse("Struct[{strategy=>Optional[Pattern[/#{key}/]]}]")
|
183
|
+
end
|
182
184
|
end
|
183
185
|
|
184
186
|
# Returns the type used to validate the options hash
|
@@ -383,18 +385,20 @@ module Puppet::Pops
|
|
383
385
|
|
384
386
|
protected
|
385
387
|
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
388
|
+
class << self
|
389
|
+
# Returns a type that allows all deep_merge options except 'preserve_unmergeables' since we force
|
390
|
+
# the setting of that option to false
|
391
|
+
#
|
392
|
+
# @return [Types::PAnyType] the puppet type used when validating the options hash
|
393
|
+
def options_t
|
394
|
+
@options_t ||= Types::TypeParser.singleton.parse('Struct[{'\
|
395
|
+
"strategy=>Optional[Pattern[#{key}]],"\
|
396
|
+
'knockout_prefix=>Optional[String],'\
|
397
|
+
'merge_debug=>Optional[Boolean],'\
|
398
|
+
'merge_hash_arrays=>Optional[Boolean],'\
|
399
|
+
'sort_merged_arrays=>Optional[Boolean],'\
|
400
|
+
'}]')
|
401
|
+
end
|
398
402
|
end
|
399
403
|
|
400
404
|
def value_t
|
@@ -136,7 +136,7 @@ module HeredocSupport
|
|
136
136
|
# simply leaves lines that have text in the margin untouched.
|
137
137
|
#
|
138
138
|
processed_lines = lines.collect {|s| s.gsub(leading_pattern, '') }
|
139
|
-
margin_per_line = processed_lines.length
|
139
|
+
margin_per_line = Array.new(processed_lines.length) {|x| lines[x].length - processed_lines[x].length }
|
140
140
|
lines = processed_lines
|
141
141
|
else
|
142
142
|
# Array with a 0 per line
|
@@ -23,7 +23,7 @@ module Puppet::Pops::Parser::InterpolationSupport
|
|
23
23
|
value,terminator = slurp_dqstring()
|
24
24
|
text = value
|
25
25
|
after = scn.pos
|
26
|
-
|
26
|
+
loop do
|
27
27
|
case terminator
|
28
28
|
when '"'
|
29
29
|
# simple case, there was no interpolation, return directly
|
@@ -63,7 +63,7 @@ module Puppet::Pops::Parser::InterpolationSupport
|
|
63
63
|
value,terminator = slurp_dqstring
|
64
64
|
text = value
|
65
65
|
after = scn.pos
|
66
|
-
|
66
|
+
loop do
|
67
67
|
case terminator
|
68
68
|
when '"'
|
69
69
|
# simple case, there was no further interpolation, return directly
|
@@ -107,7 +107,7 @@ module Puppet::Pops::Parser::InterpolationSupport
|
|
107
107
|
value,terminator = slurp_uqstring()
|
108
108
|
text = value
|
109
109
|
after = scn.pos
|
110
|
-
|
110
|
+
loop do
|
111
111
|
case terminator
|
112
112
|
when ''
|
113
113
|
# simple case, there was no interpolation, return directly
|
@@ -147,7 +147,7 @@ module Puppet::Pops::Parser::InterpolationSupport
|
|
147
147
|
value,terminator = slurp_uqstring
|
148
148
|
text = value
|
149
149
|
after = scn.pos
|
150
|
-
|
150
|
+
loop do
|
151
151
|
case terminator
|
152
152
|
when ''
|
153
153
|
# simple case, there was no further interpolation, return directly
|
@@ -90,7 +90,7 @@ class Locator
|
|
90
90
|
f = Puppet::Util.path_to_uri(f).to_s
|
91
91
|
end
|
92
92
|
offset = ast.offset
|
93
|
-
URI("#{f}?line=#{line_for_offset(offset)
|
93
|
+
URI("#{f}?line=#{line_for_offset(offset)}&pos=#{pos_on_line(offset)}")
|
94
94
|
end
|
95
95
|
|
96
96
|
class AbstractLocator < Locator
|
@@ -48,6 +48,23 @@ class PNParser
|
|
48
48
|
parse_next
|
49
49
|
end
|
50
50
|
|
51
|
+
def self.char_types
|
52
|
+
unless instance_variable_defined?(:@char_types)
|
53
|
+
@char_types = Array.new(0x80, TYPE_IDENTIFIER)
|
54
|
+
@char_types[0] = TYPE_END
|
55
|
+
[0x09, 0x0d, 0x0a, 0x20].each { |n| @char_types[n] = TYPE_WS }
|
56
|
+
[TOKEN_LP, TOKEN_RP, TOKEN_LB, TOKEN_RB, TOKEN_LC, TOKEN_RC].each { |n| @char_types[n] = TYPE_DELIM }
|
57
|
+
@char_types[0x2d] = TYPE_MINUS
|
58
|
+
(0x30..0x39).each { |n| @char_types[n] = TYPE_DIGIT }
|
59
|
+
(0x41..0x5a).each { |n| @char_types[n] = TYPE_ALPHA }
|
60
|
+
(0x61..0x7a).each { |n| @char_types[n] = TYPE_ALPHA }
|
61
|
+
@char_types[TOKEN_KEY] = TYPE_KEY_START
|
62
|
+
@char_types[TOKEN_STRING] = TYPE_STRING_START
|
63
|
+
@char_types.freeze
|
64
|
+
end
|
65
|
+
@char_types
|
66
|
+
end
|
67
|
+
|
51
68
|
private
|
52
69
|
|
53
70
|
def parse_next
|
@@ -128,22 +145,6 @@ class PNParser
|
|
128
145
|
end
|
129
146
|
|
130
147
|
# All methods below belong to the PN lexer
|
131
|
-
def self.char_types
|
132
|
-
unless instance_variable_defined?(:@char_types)
|
133
|
-
@char_types = Array.new(0x80, TYPE_IDENTIFIER)
|
134
|
-
@char_types[0] = TYPE_END
|
135
|
-
[0x09, 0x0d, 0x0a, 0x20].each { |n| @char_types[n] = TYPE_WS }
|
136
|
-
[TOKEN_LP, TOKEN_RP, TOKEN_LB, TOKEN_RB, TOKEN_LC, TOKEN_RC].each { |n| @char_types[n] = TYPE_DELIM }
|
137
|
-
@char_types[0x2d] = TYPE_MINUS
|
138
|
-
(0x30..0x39).each { |n| @char_types[n] = TYPE_DIGIT }
|
139
|
-
(0x41..0x5a).each { |n| @char_types[n] = TYPE_ALPHA }
|
140
|
-
(0x61..0x7a).each { |n| @char_types[n] = TYPE_ALPHA }
|
141
|
-
@char_types[TOKEN_KEY] = TYPE_KEY_START
|
142
|
-
@char_types[TOKEN_STRING] = TYPE_STRING_START
|
143
|
-
@char_types.freeze
|
144
|
-
end
|
145
|
-
@char_types
|
146
|
-
end
|
147
148
|
|
148
149
|
def next_token
|
149
150
|
skip_white
|
@@ -1,57 +1,60 @@
|
|
1
|
-
module Puppet::Pops
|
2
|
-
# Module for making a call such that there is an identifiable entry on
|
3
|
-
# the ruby call stack enabling getting a puppet call stack
|
4
|
-
# To use this make a call with:
|
5
|
-
# ```
|
6
|
-
# Puppet::Pops::PuppetStack.stack(file, line, receiver, message, args)
|
7
|
-
# ```
|
8
|
-
# To get the stack call:
|
9
|
-
# ```
|
10
|
-
# Puppet::Pops::PuppetStack.stacktrace
|
11
|
-
#
|
12
|
-
# When getting a backtrace in Ruby, the puppet stack frames are
|
13
|
-
# identified as coming from "in 'stack'" and having a ".pp" file
|
14
|
-
# name.
|
15
|
-
# To support testing, a given file that is an empty string, or nil
|
16
|
-
# as well as a nil line number are supported. Such stack frames
|
17
|
-
# will be represented with the text `unknown` and `0´ respectively.
|
18
|
-
#
|
19
|
-
module PuppetStack
|
20
|
-
# Pattern matching an entry in the ruby stack that is a puppet entry
|
21
|
-
PP_ENTRY_PATTERN = /^(.*\.pp)?:([0-9]+):in (`stack'|`block in call_function')/
|
22
1
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
2
|
+
module Puppet
|
3
|
+
module Pops
|
4
|
+
# Utility class for keeping track of the "Puppet stack", ie the file
|
5
|
+
# and line numbers of Puppet Code that created the current context.
|
6
|
+
#
|
7
|
+
# To use this make a call with:
|
8
|
+
#
|
9
|
+
# ```rb
|
10
|
+
# Puppet::Pops::PuppetStack.stack(file, line, receiver, message, args)
|
11
|
+
# ```
|
12
|
+
#
|
13
|
+
# To get the stack call:
|
14
|
+
#
|
15
|
+
# ```rb
|
16
|
+
# Puppet::Pops::PuppetStack.stacktrace
|
17
|
+
# ```
|
18
|
+
#
|
19
|
+
# or
|
20
|
+
#
|
21
|
+
# ```rb
|
22
|
+
# Puppet::Pops::PuppetStack.top_of_stack
|
23
|
+
# ```
|
24
|
+
#
|
25
|
+
# To support testing, a given file that is an empty string, or nil
|
26
|
+
# as well as a nil line number are supported. Such stack frames
|
27
|
+
# will be represented with the text `unknown` and `0´ respectively.
|
28
|
+
module PuppetStack
|
29
|
+
@stack = Array.new
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
Kernel.eval("obj.send(message, *args)", Kernel.binding(), file, line)
|
34
|
-
end
|
35
|
-
end
|
31
|
+
def self.stack(file, line, obj, message, args, &block)
|
32
|
+
file = 'unknown' if (file.nil? || file == '')
|
33
|
+
line = 0 if line.nil?
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
result = nil
|
36
|
+
@stack.unshift([file, line])
|
37
|
+
begin
|
38
|
+
if block_given?
|
39
|
+
result = obj.send(message, *args, &block)
|
40
|
+
else
|
41
|
+
result = obj.send(message, *args)
|
42
|
+
end
|
43
|
+
ensure
|
44
|
+
@stack.shift()
|
45
|
+
end
|
46
|
+
result
|
41
47
|
end
|
42
|
-
memo
|
43
|
-
end
|
44
|
-
end
|
45
48
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
def self.stacktrace
|
50
|
+
@stack.dup
|
51
|
+
end
|
52
|
+
|
53
|
+
# Returns an Array with the top of the puppet stack, or an empty
|
54
|
+
# Array if there was no such entry.
|
55
|
+
def self.top_of_stack
|
56
|
+
@stack.first || []
|
52
57
|
end
|
53
58
|
end
|
54
|
-
[]
|
55
59
|
end
|
56
60
|
end
|
57
|
-
end
|
@@ -728,7 +728,7 @@ class StringConverter
|
|
728
728
|
when :c
|
729
729
|
char = [val].pack("U")
|
730
730
|
char = f.alt? ? "\"#{char}\"" : char
|
731
|
-
Kernel.format(f.orig_fmt.
|
731
|
+
Kernel.format(f.orig_fmt.tr('c','s'), char)
|
732
732
|
|
733
733
|
when :s
|
734
734
|
fmt = f.alt? ? 'p' : 's'
|
@@ -781,7 +781,7 @@ class StringConverter
|
|
781
781
|
|
782
782
|
when :p
|
783
783
|
# width & precision applied to string, not the the name of the type
|
784
|
-
"Binary(\"#{Kernel.format(f.orig_fmt.
|
784
|
+
"Binary(\"#{Kernel.format(f.orig_fmt.tr('p', 's'), val.to_s)}\")"
|
785
785
|
|
786
786
|
when :b
|
787
787
|
Kernel.format(f.orig_fmt.gsub('b', substitute), val.relaxed_to_s)
|
@@ -817,23 +817,23 @@ class StringConverter
|
|
817
817
|
|
818
818
|
when :c
|
819
819
|
c_val = val.capitalize
|
820
|
-
f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.
|
820
|
+
f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('c', 's'), c_val)
|
821
821
|
|
822
822
|
when :C
|
823
823
|
c_val = val.split('::').map {|s| s.capitalize }.join('::')
|
824
|
-
f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.
|
824
|
+
f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('C', 's'), c_val)
|
825
825
|
|
826
826
|
when :u
|
827
827
|
c_val = val.upcase
|
828
|
-
f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.
|
828
|
+
f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('u', 's'), c_val)
|
829
829
|
|
830
830
|
when :d
|
831
831
|
c_val = val.downcase
|
832
|
-
f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.
|
832
|
+
f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('d', 's'), c_val)
|
833
833
|
|
834
834
|
when :t # trim
|
835
835
|
c_val = val.strip
|
836
|
-
f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.
|
836
|
+
f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('t', 's'), c_val)
|
837
837
|
|
838
838
|
else
|
839
839
|
raise FormatError.new('String', f.format, 'cCudspt')
|
@@ -916,7 +916,7 @@ class StringConverter
|
|
916
916
|
case f.format
|
917
917
|
when :p
|
918
918
|
str_regexp = PRegexpType.regexp_to_s_with_delimiters(val)
|
919
|
-
f.orig_fmt == '%p' ? str_regexp : Kernel.format(f.orig_fmt.
|
919
|
+
f.orig_fmt == '%p' ? str_regexp : Kernel.format(f.orig_fmt.tr('p', 's'), str_regexp)
|
920
920
|
when :s
|
921
921
|
str_regexp = PRegexpType.regexp_to_s(val)
|
922
922
|
str_regexp = puppet_quote(str_regexp) if f.alt?
|
@@ -1093,10 +1093,10 @@ class StringConverter
|
|
1093
1093
|
f = get_format(val_type, format_map)
|
1094
1094
|
case f.format
|
1095
1095
|
when :s
|
1096
|
-
str_val = f.alt? ? "\"#{val
|
1096
|
+
str_val = f.alt? ? "\"#{val}\"" : val.to_s
|
1097
1097
|
Kernel.format(f.orig_fmt, str_val)
|
1098
1098
|
when :p
|
1099
|
-
Kernel.format(f.orig_fmt.
|
1099
|
+
Kernel.format(f.orig_fmt.tr('p', 's'), val.to_s)
|
1100
1100
|
else
|
1101
1101
|
raise FormatError.new('Type', f.format, 'sp')
|
1102
1102
|
end
|