puppet 5.5.3-x64-mingw32 → 5.5.6-x64-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 +5 -5
- data/CONTRIBUTING.md +1 -4
- data/Gemfile +5 -1
- data/Gemfile.lock +167 -0
- data/Rakefile +4 -34
- data/ext/build_defaults.yaml +0 -2
- data/lib/puppet/application/cert.rb +3 -1
- data/lib/puppet/defaults.rb +55 -26
- data/lib/puppet/face/certificate.rb +2 -0
- data/lib/puppet/indirector/ldap.rb +6 -0
- data/lib/puppet/node/environment.rb +4 -2
- data/lib/puppet/parser/functions/tagged.rb +1 -4
- data/lib/puppet/pops/issues.rb +4 -0
- data/lib/puppet/pops/validation/checker4_0.rb +100 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +4 -3
- data/lib/puppet/provider/augeas/augeas.rb +198 -4
- data/lib/puppet/provider/service/smf.rb +2 -3
- data/lib/puppet/provider/service/upstart.rb +10 -2
- data/lib/puppet/test/test_helper.rb +0 -3
- data/lib/puppet/type/file/source.rb +10 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +132 -118
- data/man/man5/puppet.conf.5 +23 -23
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-ca.8 +3 -3
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +3 -3
- 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 +3 -3
- data/spec/integration/type/file_spec.rb +18 -3
- data/spec/integration/util/settings_spec.rb +1 -0
- data/spec/integration/util/windows/security_spec.rb +78 -1
- data/spec/unit/application/master_spec.rb +2 -0
- data/spec/unit/configurer/downloader_spec.rb +5 -0
- data/spec/unit/defaults_spec.rb +13 -0
- data/spec/unit/face/help_spec.rb +2 -1
- data/spec/unit/indirector/ldap_spec.rb +22 -1
- data/spec/unit/node/environment_spec.rb +14 -0
- data/spec/unit/parser/functions/tagged_spec.rb +16 -0
- data/spec/unit/pops/validator/validator_spec.rb +139 -4
- data/spec/unit/provider/augeas/augeas_spec.rb +66 -1
- data/spec/unit/provider/service/smf_spec.rb +2 -6
- data/spec/unit/provider/service/upstart_spec.rb +37 -0
- data/spec/unit/settings/autosign_setting_spec.rb +2 -2
- data/spec/unit/settings/file_setting_spec.rb +6 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +1 -0
- metadata +4 -3
@@ -395,6 +395,8 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
395
395
|
if o.name !~ Patterns::CLASSREF_DECL
|
396
396
|
acceptor.accept(Issues::ILLEGAL_DEFINITION_NAME, o, {:name=>o.name})
|
397
397
|
end
|
398
|
+
|
399
|
+
internal_check_file_namespace(o, o.name, o.locator.file)
|
398
400
|
internal_check_reserved_type_name(o, o.name)
|
399
401
|
internal_check_future_reserved_word(o, o.name)
|
400
402
|
end
|
@@ -530,6 +532,104 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
530
532
|
end
|
531
533
|
end
|
532
534
|
|
535
|
+
NO_NAMESPACE = :no_namespace
|
536
|
+
NO_PATH = :no_path
|
537
|
+
BAD_MODULE_FILE = :bad_module_file
|
538
|
+
def internal_check_file_namespace(o, name, file)
|
539
|
+
return if file.nil? || file == '' #e.g. puppet apply -e '...'
|
540
|
+
|
541
|
+
file_namespace = namespace_for_file(file)
|
542
|
+
return if file_namespace == NO_NAMESPACE
|
543
|
+
|
544
|
+
# Downcasing here because check is case-insensitive
|
545
|
+
if file_namespace == BAD_MODULE_FILE || !name.downcase.start_with?(file_namespace)
|
546
|
+
acceptor.accept(Issues::ILLEGAL_DEFINITION_LOCATION, o, {:name => name, :file => file})
|
547
|
+
end
|
548
|
+
end
|
549
|
+
|
550
|
+
# @api private
|
551
|
+
class Puppet::Util::FileNamespaceAdapter < Puppet::Pops::Adaptable::Adapter
|
552
|
+
attr_accessor :file_to_namespace
|
553
|
+
end
|
554
|
+
|
555
|
+
def namespace_for_file(file)
|
556
|
+
env = Puppet.lookup(:current_environment)
|
557
|
+
return NO_NAMESPACE if env.nil?
|
558
|
+
|
559
|
+
Puppet::Util::FileNamespaceAdapter.adapt(env) do |adapter|
|
560
|
+
adapter.file_to_namespace ||= {}
|
561
|
+
|
562
|
+
file_namespace = adapter.file_to_namespace[file]
|
563
|
+
return file_namespace unless file_namespace.nil? # No cache entry, so we do the calculation
|
564
|
+
|
565
|
+
path = Pathname.new(file)
|
566
|
+
|
567
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if path.extname != ".pp"
|
568
|
+
|
569
|
+
path = path.expand_path
|
570
|
+
|
571
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if initial_manifest?(path, env.manifest)
|
572
|
+
|
573
|
+
#All auto-loaded files from modules come from a module search path dir
|
574
|
+
relative_path = get_module_relative_path(path, env.full_modulepath)
|
575
|
+
|
576
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if relative_path == NO_PATH
|
577
|
+
|
578
|
+
#If a file comes from a module, but isn't in the right place, always error
|
579
|
+
names = dir_to_names(relative_path)
|
580
|
+
|
581
|
+
return adapter.file_to_namespace[file] = (names == BAD_MODULE_FILE ? BAD_MODULE_FILE : names.join("::").freeze)
|
582
|
+
end
|
583
|
+
end
|
584
|
+
|
585
|
+
def initial_manifest?(path, manifest_setting)
|
586
|
+
return false if manifest_setting.nil? || manifest_setting == :no_manifest
|
587
|
+
|
588
|
+
string_path = path.to_s
|
589
|
+
|
590
|
+
string_path == manifest_setting || string_path.start_with?(manifest_setting)
|
591
|
+
end
|
592
|
+
|
593
|
+
def get_module_relative_path(file_path, modulepath_directories)
|
594
|
+
clean_file = file_path.cleanpath
|
595
|
+
parent_path = modulepath_directories.find { |path_dir| is_parent_dir_of(path_dir, clean_file) }
|
596
|
+
return NO_PATH if parent_path.nil?
|
597
|
+
|
598
|
+
file_path.relative_path_from(Pathname.new(parent_path))
|
599
|
+
end
|
600
|
+
|
601
|
+
def is_parent_dir_of(parent_dir, child_dir)
|
602
|
+
parent_dir_path = Pathname.new(parent_dir)
|
603
|
+
clean_parent = parent_dir_path.cleanpath
|
604
|
+
|
605
|
+
return child_dir.to_s.start_with?(clean_parent.to_s)
|
606
|
+
end
|
607
|
+
|
608
|
+
def dir_to_names(relative_path)
|
609
|
+
# Downcasing here because check is case-insensitive
|
610
|
+
path_components = relative_path.to_s.downcase.split(File::SEPARATOR)
|
611
|
+
|
612
|
+
# Example definition dir: manifests in this path:
|
613
|
+
# <module name>/manifests/<module subdir>/<classfile>.pp
|
614
|
+
dir = path_components[1]
|
615
|
+
|
616
|
+
# How can we get this result?
|
617
|
+
# If it is not an initial manifest, it must come from a module,
|
618
|
+
# and from the manifests dir there. This may never get used...
|
619
|
+
return BAD_MODULE_FILE unless dir == 'manifests' || dir == 'functions' || dir == 'types' || dir == 'plans'
|
620
|
+
|
621
|
+
names = path_components[2 .. -2] # Directories inside module
|
622
|
+
names.unshift(path_components[0]) # Name of the module itself
|
623
|
+
|
624
|
+
# Do not include name of module init file at top level of module
|
625
|
+
# e.g. <module name>/manifests/init.pp
|
626
|
+
filename = path_components[-1]
|
627
|
+
if !(path_components.length == 3 && filename == 'init.pp')
|
628
|
+
names.push(filename[0 .. -4]) # Remove .pp from filename
|
629
|
+
end
|
630
|
+
|
631
|
+
names
|
632
|
+
end
|
533
633
|
|
534
634
|
RESERVED_PARAMETERS = {
|
535
635
|
'name' => true,
|
@@ -27,15 +27,16 @@ class ValidatorFactory_4_0 < Factory
|
|
27
27
|
# Configure each issue that should **not** be an error
|
28
28
|
#
|
29
29
|
# Validate as per the current runtime configuration
|
30
|
-
p[Issues::RT_NO_STORECONFIGS_EXPORT]
|
31
|
-
p[Issues::RT_NO_STORECONFIGS]
|
30
|
+
p[Issues::RT_NO_STORECONFIGS_EXPORT] = Puppet[:storeconfigs] ? :ignore : :warning
|
31
|
+
p[Issues::RT_NO_STORECONFIGS] = Puppet[:storeconfigs] ? :ignore : :warning
|
32
32
|
|
33
33
|
p[Issues::FUTURE_RESERVED_WORD] = :deprecation
|
34
34
|
|
35
35
|
p[Issues::DUPLICATE_KEY] = Puppet[:strict] == :off ? :ignore : Puppet[:strict]
|
36
36
|
p[Issues::NAME_WITH_HYPHEN] = :error
|
37
37
|
p[Issues::EMPTY_RESOURCE_SPECIALIZATION] = :ignore
|
38
|
-
p[Issues::CLASS_NOT_VIRTUALIZABLE]
|
38
|
+
p[Issues::CLASS_NOT_VIRTUALIZABLE] = Puppet[:strict] == :off ? :warning : Puppet[:strict]
|
39
|
+
p[Issues::ILLEGAL_DEFINITION_LOCATION] = :deprecation
|
39
40
|
p
|
40
41
|
end
|
41
42
|
end
|
@@ -281,7 +281,7 @@ Puppet::Type.type(:augeas).provide(:augeas) do
|
|
281
281
|
when "=="
|
282
282
|
begin
|
283
283
|
arg = clause_array.shift
|
284
|
-
new_array =
|
284
|
+
new_array = to_array(arg)
|
285
285
|
return_value = (values == new_array)
|
286
286
|
rescue
|
287
287
|
fail(_("Invalid array in command: %{cmd}") % { cmd: cmd_array.join(" ") })
|
@@ -289,7 +289,7 @@ Puppet::Type.type(:augeas).provide(:augeas) do
|
|
289
289
|
when "!="
|
290
290
|
begin
|
291
291
|
arg = clause_array.shift
|
292
|
-
new_array =
|
292
|
+
new_array = to_array(arg)
|
293
293
|
return_value = (values != new_array)
|
294
294
|
rescue
|
295
295
|
fail(_("Invalid array in command: %{cmd}") % { cmd: cmd_array.join(" ") })
|
@@ -337,7 +337,7 @@ Puppet::Type.type(:augeas).provide(:augeas) do
|
|
337
337
|
when "=="
|
338
338
|
begin
|
339
339
|
arg = clause_array.shift
|
340
|
-
new_array =
|
340
|
+
new_array = to_array(arg)
|
341
341
|
return_value = (result == new_array)
|
342
342
|
rescue
|
343
343
|
fail(_("Invalid array in command: %{cmd}") % { cmd: cmd_array.join(" ") })
|
@@ -345,7 +345,7 @@ Puppet::Type.type(:augeas).provide(:augeas) do
|
|
345
345
|
when "!="
|
346
346
|
begin
|
347
347
|
arg = clause_array.shift
|
348
|
-
new_array =
|
348
|
+
new_array = to_array(arg)
|
349
349
|
return_value = (result != new_array)
|
350
350
|
rescue
|
351
351
|
fail(_("Invalid array in command: %{cmd}") % { cmd: cmd_array.join(" ") })
|
@@ -570,4 +570,198 @@ Puppet::Type.type(:augeas).provide(:augeas) do
|
|
570
570
|
end
|
571
571
|
end
|
572
572
|
end
|
573
|
+
|
574
|
+
def to_array(string)
|
575
|
+
s = StringScanner.new(string)
|
576
|
+
match = array_open(s)
|
577
|
+
raise "Unable to parse array. Unexpected character at: #{s.rest}" if match.nil?
|
578
|
+
|
579
|
+
array_content = array_values(s)
|
580
|
+
|
581
|
+
match = array_close(s)
|
582
|
+
raise "Unable to parse array. Unexpected character at: #{s.rest}" if match.nil?
|
583
|
+
|
584
|
+
array_content
|
585
|
+
end
|
586
|
+
private :to_array
|
587
|
+
|
588
|
+
def array_open(scanner)
|
589
|
+
scanner.scan(/\s*\[\s*/)
|
590
|
+
end
|
591
|
+
private :array_open
|
592
|
+
|
593
|
+
def array_close(scanner)
|
594
|
+
scanner.scan(/\s*\]\s*/)
|
595
|
+
end
|
596
|
+
private :array_close
|
597
|
+
|
598
|
+
def array_separator(scanner)
|
599
|
+
scanner.scan(/\s*,\s*/)
|
600
|
+
end
|
601
|
+
private :array_separator
|
602
|
+
|
603
|
+
def single_quote_unescaped_char(scanner)
|
604
|
+
scanner.scan(/[^'\\]/)
|
605
|
+
end
|
606
|
+
private :single_quote_unescaped_char
|
607
|
+
|
608
|
+
def single_quote_escaped_char(scanner)
|
609
|
+
scanner.scan(/\\(['\\])/) && scanner[1]
|
610
|
+
end
|
611
|
+
private :single_quote_escaped_char
|
612
|
+
|
613
|
+
def single_quote_char(scanner)
|
614
|
+
single_quote_escaped_char(scanner) || single_quote_unescaped_char(scanner)
|
615
|
+
end
|
616
|
+
private :single_quote_char
|
617
|
+
|
618
|
+
def double_quote_unescaped_char(scanner)
|
619
|
+
scanner.scan(/[^"\\]/)
|
620
|
+
end
|
621
|
+
private :double_quote_unescaped_char
|
622
|
+
|
623
|
+
# This handles the possible Ruby escape sequences in double-quoted strings,
|
624
|
+
# except for \M-x, \M-\C-x, \M-\cx, \c\M-x, \c?, and \C-?. The full list of
|
625
|
+
# escape sequences, and their meanings is taken from:
|
626
|
+
# https://github.com/ruby/ruby/blob/90fdfec11a4a42653722e2ce2a672d6e87a57b8e/doc/syntax/literals.rdoc#strings
|
627
|
+
def double_quote_escaped_char(scanner)
|
628
|
+
match = scanner.scan(/\\(["\\abtnvfres0-7xu])/)
|
629
|
+
return nil if match.nil?
|
630
|
+
|
631
|
+
case scanner[1]
|
632
|
+
when '\\' then return '\\'
|
633
|
+
when '"' then return '"'
|
634
|
+
when 'a' then return "\a"
|
635
|
+
when 'b' then return "\b"
|
636
|
+
when 't' then return "\t"
|
637
|
+
when 'n' then return "\n"
|
638
|
+
when 'v' then return "\v"
|
639
|
+
when 'f' then return "\f"
|
640
|
+
when 'r' then return "\r"
|
641
|
+
when 'e' then return "\e"
|
642
|
+
when 's' then return "\s"
|
643
|
+
when /[0-7]/
|
644
|
+
octal_character = scanner[1]
|
645
|
+
other_digits = scanner.scan(/[0-7]{1,2}/)
|
646
|
+
octal_character << other_digits unless other_digits.nil?
|
647
|
+
|
648
|
+
return octal_character.to_i(8).chr
|
649
|
+
when 'x'
|
650
|
+
hex_character = scanner.scan(/[0-9a-fA-F]{1,2}/)
|
651
|
+
if hex_character.nil?
|
652
|
+
return nil
|
653
|
+
else
|
654
|
+
return hex_character.to_i(16).chr
|
655
|
+
end
|
656
|
+
when 'u'
|
657
|
+
return unicode_short_hex_character(scanner) || unicode_long_hex_characters(scanner)
|
658
|
+
else
|
659
|
+
# Not a valid escape sequence as far as we're concerned.
|
660
|
+
return nil
|
661
|
+
end
|
662
|
+
end
|
663
|
+
private :double_quote_escaped_char
|
664
|
+
|
665
|
+
def unicode_short_hex_character(scanner)
|
666
|
+
unicode_character = scanner.scan(/[0-9a-fA-F]{4}/)
|
667
|
+
if unicode_character.nil?
|
668
|
+
return nil
|
669
|
+
else
|
670
|
+
return [unicode_character.hex].pack 'U'
|
671
|
+
end
|
672
|
+
end
|
673
|
+
private :unicode_short_hex_character
|
674
|
+
|
675
|
+
def unicode_long_hex_characters(scanner)
|
676
|
+
unicode_string = ''
|
677
|
+
return nil unless scanner.scan(/{/)
|
678
|
+
|
679
|
+
loop do
|
680
|
+
char = scanner.scan(/[0-9a-fA-F]{1,6}/)
|
681
|
+
break if char.nil?
|
682
|
+
unicode_string << [char.hex].pack('U')
|
683
|
+
|
684
|
+
separator = scanner.scan(/\s/)
|
685
|
+
break if separator.nil?
|
686
|
+
end
|
687
|
+
|
688
|
+
return nil unless scanner.scan(/}/)
|
689
|
+
|
690
|
+
if unicode_string.empty?
|
691
|
+
return nil
|
692
|
+
else
|
693
|
+
return unicode_string
|
694
|
+
end
|
695
|
+
end
|
696
|
+
private :unicode_long_hex_characters
|
697
|
+
|
698
|
+
def single_quoted_string(scanner)
|
699
|
+
quoted_string = ''
|
700
|
+
|
701
|
+
match = scanner.scan(/'/)
|
702
|
+
return nil if match.nil?
|
703
|
+
|
704
|
+
loop do
|
705
|
+
match = single_quote_char(scanner)
|
706
|
+
break if match.nil?
|
707
|
+
|
708
|
+
quoted_string << match
|
709
|
+
end
|
710
|
+
|
711
|
+
match = scanner.scan(/'/)
|
712
|
+
if match
|
713
|
+
return quoted_string
|
714
|
+
else
|
715
|
+
return nil
|
716
|
+
end
|
717
|
+
end
|
718
|
+
private :single_quoted_string
|
719
|
+
|
720
|
+
def double_quote_char(scanner)
|
721
|
+
double_quote_escaped_char(scanner) || double_quote_unescaped_char(scanner)
|
722
|
+
end
|
723
|
+
private :double_quote_char
|
724
|
+
|
725
|
+
def double_quoted_string(scanner)
|
726
|
+
quoted_string = ''
|
727
|
+
|
728
|
+
match = scanner.scan(/"/)
|
729
|
+
return nil if match.nil?
|
730
|
+
|
731
|
+
loop do
|
732
|
+
match = double_quote_char(scanner)
|
733
|
+
break if match.nil?
|
734
|
+
|
735
|
+
quoted_string << match
|
736
|
+
end
|
737
|
+
|
738
|
+
match = scanner.scan(/"/)
|
739
|
+
if match
|
740
|
+
return quoted_string
|
741
|
+
else
|
742
|
+
return nil
|
743
|
+
end
|
744
|
+
end
|
745
|
+
private :double_quoted_string
|
746
|
+
|
747
|
+
def quoted_string(scanner)
|
748
|
+
single_quoted_string(scanner) || double_quoted_string(scanner)
|
749
|
+
end
|
750
|
+
private :quoted_string
|
751
|
+
|
752
|
+
def array_values(scanner)
|
753
|
+
values = []
|
754
|
+
|
755
|
+
loop do
|
756
|
+
match = quoted_string(scanner)
|
757
|
+
break if match.nil?
|
758
|
+
values << match
|
759
|
+
|
760
|
+
match = array_separator(scanner)
|
761
|
+
break if match.nil?
|
762
|
+
end
|
763
|
+
|
764
|
+
values
|
765
|
+
end
|
766
|
+
private :array_values
|
573
767
|
end
|
@@ -108,8 +108,6 @@ Puppet::Type.type(:service).provide :smf, :parent => :base do
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def stop
|
111
|
-
# Don't try to stop non-existing services (PUP-8167)
|
112
|
-
return if self.status == :absent
|
113
111
|
# Wait for the service to actually stop before returning.
|
114
112
|
super
|
115
113
|
self.wait('offline', 'disabled', 'uninitialized')
|
@@ -138,8 +136,9 @@ Puppet::Type.type(:service).provide :smf, :parent => :base do
|
|
138
136
|
states = service_states
|
139
137
|
state = states[1] == "-" ? states[0] : states[1]
|
140
138
|
rescue Puppet::ExecutionFailure
|
139
|
+
# TODO (PUP-8957): Should this be set back to INFO ?
|
141
140
|
debug "Could not get status on service #{self.name} #{$!}"
|
142
|
-
return :
|
141
|
+
return :stopped
|
143
142
|
end
|
144
143
|
|
145
144
|
case state
|
@@ -16,8 +16,6 @@ Puppet::Type.type(:service).provide :upstart, :parent => :debian do
|
|
16
16
|
Facter.value(:operatingsystem) == 'LinuxMint',
|
17
17
|
]
|
18
18
|
|
19
|
-
confine :exists => "/var/run/upstart-socket-bridge.pid"
|
20
|
-
|
21
19
|
defaultfor :operatingsystem => :ubuntu, :operatingsystemmajrelease => ["10.04", "12.04", "14.04", "14.10"]
|
22
20
|
|
23
21
|
commands :start => "/sbin/start",
|
@@ -26,6 +24,16 @@ Puppet::Type.type(:service).provide :upstart, :parent => :debian do
|
|
26
24
|
:status_exec => "/sbin/status",
|
27
25
|
:initctl => "/sbin/initctl"
|
28
26
|
|
27
|
+
# We only want to use upstart as our provider if the upstart daemon is running.
|
28
|
+
# This can be checked by running `initctl version --quiet` on a machine that has
|
29
|
+
# upstart installed.
|
30
|
+
confine :true => begin
|
31
|
+
initctl('version', '--quiet')
|
32
|
+
true
|
33
|
+
rescue
|
34
|
+
false
|
35
|
+
end
|
36
|
+
|
29
37
|
# upstart developer haven't implemented initctl enable/disable yet:
|
30
38
|
# http://www.linuxplanet.com/linuxplanet/tutorials/7033/2/
|
31
39
|
has_feature :enableable
|
@@ -221,9 +221,6 @@ module Puppet::Test
|
|
221
221
|
# Initialize "app defaults" settings to a good set of test values
|
222
222
|
Puppet.settings.initialize_app_defaults(app_defaults_for_tests)
|
223
223
|
|
224
|
-
# Avoid opening ports to the outside world
|
225
|
-
Puppet.settings[:bindaddress] = "127.0.0.1"
|
226
|
-
|
227
224
|
# We don't want to depend upon the reported domain name of the
|
228
225
|
# machine running the tests, nor upon the DNS setup of that
|
229
226
|
# domain.
|
@@ -152,7 +152,7 @@ module Puppet
|
|
152
152
|
next if metadata_method == :group and !Puppet.features.root?
|
153
153
|
|
154
154
|
case resource[:source_permissions]
|
155
|
-
when :ignore
|
155
|
+
when :ignore, nil
|
156
156
|
next
|
157
157
|
when :use_when_creating
|
158
158
|
next if Puppet::FileSystem.exist?(resource[:path])
|
@@ -352,5 +352,14 @@ module Puppet
|
|
352
352
|
|
353
353
|
defaultto :ignore
|
354
354
|
newvalues(:use, :use_when_creating, :ignore)
|
355
|
+
munge do |value|
|
356
|
+
value = value ? value.to_sym : :ignore
|
357
|
+
if @resource.file && @resource.line && value != :ignore
|
358
|
+
#TRANSLATORS "source_permissions" is a parameter name and should not be translated
|
359
|
+
Puppet.puppet_deprecation_warning(_("The `source_permissions` parameter is deprecated. Explicitly set `owner`, `group`, and `mode`."), file: @resource.file, line: @resource.line)
|
360
|
+
end
|
361
|
+
|
362
|
+
value
|
363
|
+
end
|
355
364
|
end
|
356
365
|
end
|
data/lib/puppet/version.rb
CHANGED