puppet 7.10.0-universal-darwin → 7.13.1-universal-darwin
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +3 -3
- data/Gemfile.lock +20 -15
- data/ext/project_data.yaml +1 -1
- data/lib/puppet/application/agent.rb +4 -0
- data/lib/puppet/application/apply.rb +20 -2
- data/lib/puppet/application/lookup.rb +72 -24
- data/lib/puppet/application/resource.rb +15 -13
- data/lib/puppet/concurrent/thread_local_singleton.rb +6 -3
- data/lib/puppet/configurer.rb +98 -29
- data/lib/puppet/confine/variable.rb +1 -1
- data/lib/puppet/defaults.rb +17 -3
- data/lib/puppet/facter_impl.rb +96 -0
- data/lib/puppet/file_serving/metadata.rb +3 -0
- data/lib/puppet/file_serving/mount/file.rb +4 -4
- data/lib/puppet/file_system/file_impl.rb +10 -8
- data/lib/puppet/file_system/jruby.rb +1 -1
- data/lib/puppet/file_system/path_pattern.rb +10 -15
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/file_system/windows.rb +4 -4
- data/lib/puppet/file_system.rb +3 -2
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/functions/versioncmp.rb +6 -2
- data/lib/puppet/graph/simple_graph.rb +2 -1
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/http/redirector.rb +5 -0
- data/lib/puppet/indirector/catalog/compiler.rb +3 -3
- data/lib/puppet/indirector/facts/facter.rb +6 -6
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
- data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
- data/lib/puppet/pal/pal_impl.rb +1 -1
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/scope.rb +8 -7
- data/lib/puppet/parser/templatewrapper.rb +1 -0
- data/lib/puppet/pops/evaluator/closure.rb +7 -5
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +1 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
- data/lib/puppet/pops/model/ast.rb +1 -0
- data/lib/puppet/pops/model/factory.rb +14 -13
- data/lib/puppet/pops/parser/code_merger.rb +4 -4
- data/lib/puppet/pops/parser/egrammar.ra +4 -2
- data/lib/puppet/pops/parser/eparser.rb +909 -894
- data/lib/puppet/pops/parser/lexer2.rb +69 -68
- data/lib/puppet/pops/parser/slurp_support.rb +1 -0
- data/lib/puppet/pops/serialization/to_data_converter.rb +6 -18
- data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
- data/lib/puppet/pops/types/type_formatter.rb +7 -6
- data/lib/puppet/pops/types/types.rb +1 -1
- data/lib/puppet/pops/validation/checker4_0.rb +7 -2
- data/lib/puppet/provider/aix_object.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +5 -2
- data/lib/puppet/provider/package/pkg.rb +11 -1
- data/lib/puppet/provider/package/puppet_gem.rb +1 -1
- data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/init.rb +10 -9
- data/lib/puppet/provider/service/launchd.rb +1 -1
- data/lib/puppet/provider/service/redhat.rb +1 -1
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/service/upstart.rb +5 -5
- data/lib/puppet/provider/user/aix.rb +44 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +30 -7
- data/lib/puppet/provider.rb +1 -1
- data/lib/puppet/reference/providers.rb +2 -2
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/resource/type_collection.rb +2 -1
- data/lib/puppet/resource.rb +38 -5
- data/lib/puppet/runtime.rb +11 -1
- data/lib/puppet/settings/file_setting.rb +3 -8
- data/lib/puppet/settings.rb +2 -2
- data/lib/puppet/ssl/verifier.rb +3 -1
- data/lib/puppet/test/test_helper.rb +4 -1
- data/lib/puppet/transaction/persistence.rb +22 -12
- data/lib/puppet/type/exec.rb +9 -1
- data/lib/puppet/type/file/data_sync.rb +1 -1
- data/lib/puppet/type/file/group.rb +8 -1
- data/lib/puppet/type/file/owner.rb +8 -1
- data/lib/puppet/type/group.rb +0 -1
- data/lib/puppet/type/resources.rb +1 -1
- data/lib/puppet/type/service.rb +8 -3
- data/lib/puppet/type/user.rb +40 -39
- data/lib/puppet/util/autoload.rb +1 -1
- data/lib/puppet/util/command_line.rb +1 -1
- data/lib/puppet/util/filetype.rb +2 -2
- data/lib/puppet/util/json.rb +20 -0
- data/lib/puppet/util/log.rb +8 -4
- data/lib/puppet/util/logging.rb +1 -25
- data/lib/puppet/util/monkey_patches.rb +26 -2
- data/lib/puppet/util/package.rb +25 -16
- data/lib/puppet/util/pidlock.rb +1 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
- data/lib/puppet/util/suidmanager.rb +1 -2
- data/lib/puppet/util/tagging.rb +1 -0
- data/lib/puppet/util/windows/service.rb +0 -5
- data/lib/puppet/util/windows/user.rb +0 -1
- data/lib/puppet/util/windows.rb +3 -0
- data/lib/puppet/util/yaml.rb +11 -0
- data/lib/puppet/util.rb +4 -3
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +3 -6
- data/locales/puppet.pot +265 -239
- data/man/man5/puppet.conf.5 +18 -2
- data/man/man8/puppet-agent.8 +4 -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-lookup.8 +9 -6
- 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.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +2 -1
- data/spec/fixtures/unit/forge/bacula.json +1 -1
- data/spec/integration/application/agent_spec.rb +44 -0
- data/spec/integration/application/lookup_spec.rb +29 -6
- data/spec/integration/configurer_spec.rb +1 -1
- data/spec/integration/indirector/facts/facter_spec.rb +3 -3
- data/spec/integration/parser/pcore_resource_spec.rb +20 -0
- data/spec/integration/transaction/report_spec.rb +1 -1
- data/spec/integration/type/file_spec.rb +2 -2
- data/spec/integration/type/package_spec.rb +6 -6
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/windows/process_spec.rb +1 -9
- data/spec/shared_contexts/l10n.rb +5 -0
- data/spec/unit/application/apply_spec.rb +76 -56
- data/spec/unit/application/lookup_spec.rb +131 -10
- data/spec/unit/application/resource_spec.rb +29 -0
- data/spec/unit/concurrent/thread_local_singleton_spec.rb +39 -0
- data/spec/unit/configurer_spec.rb +113 -28
- data/spec/unit/facter_impl_spec.rb +31 -0
- data/spec/unit/file_bucket/dipper_spec.rb +2 -2
- data/spec/unit/file_system/uniquefile_spec.rb +7 -1
- data/spec/unit/file_system_spec.rb +41 -4
- data/spec/unit/forge/module_release_spec.rb +3 -3
- data/spec/unit/functions/lookup_spec.rb +64 -0
- data/spec/unit/functions/versioncmp_spec.rb +40 -4
- data/spec/unit/http/client_spec.rb +58 -1
- data/spec/unit/indirector/indirection_spec.rb +10 -3
- data/spec/unit/network/formats_spec.rb +6 -0
- data/spec/unit/pops/parser/parse_containers_spec.rb +2 -2
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +0 -58
- data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
- data/spec/unit/pops/validator/validator_spec.rb +5 -0
- data/spec/unit/provider/package/gem_spec.rb +1 -1
- data/spec/unit/provider/package/pip2_spec.rb +1 -1
- data/spec/unit/provider/package/pip3_spec.rb +1 -1
- data/spec/unit/provider/package/pip_spec.rb +1 -1
- data/spec/unit/provider/package/pkg_spec.rb +15 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +6 -5
- data/spec/unit/provider/service/init_spec.rb +15 -9
- data/spec/unit/provider/service/openwrt_spec.rb +21 -29
- data/spec/unit/provider/service/redhat_spec.rb +3 -2
- data/spec/unit/provider/user/aix_spec.rb +100 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
- data/spec/unit/provider/user/useradd_spec.rb +40 -0
- data/spec/unit/provider_spec.rb +4 -4
- data/spec/unit/puppet_spec.rb +12 -4
- data/spec/unit/resource/catalog_spec.rb +14 -1
- data/spec/unit/resource_spec.rb +58 -2
- data/spec/unit/settings/file_setting_spec.rb +10 -7
- data/spec/unit/transaction/persistence_spec.rb +51 -0
- data/spec/unit/type/file/group_spec.rb +7 -0
- data/spec/unit/type/file/owner_spec.rb +7 -0
- data/spec/unit/type/service_spec.rb +27 -0
- data/spec/unit/type/user_spec.rb +0 -45
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +25 -8
- data/spec/unit/util/json_spec.rb +126 -0
- data/spec/unit/util/logging_spec.rb +2 -0
- data/spec/unit/util/yaml_spec.rb +37 -13
- data/tasks/parallel.rake +3 -3
- metadata +17 -4
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# The Lexer is responsible for turning source text into tokens.
|
2
3
|
# This version is a performance enhanced lexer (in comparison to the 3.x and earlier "future parser" lexer.
|
3
4
|
#
|
@@ -30,85 +31,85 @@ class Lexer2
|
|
30
31
|
# The length is pre-calculated for all singleton tokens. The length is used both to signal the length of
|
31
32
|
# the token, and to advance the scanner position (without having to advance it with a scan(regexp)).
|
32
33
|
#
|
33
|
-
TOKEN_LBRACK = [:LBRACK, '['
|
34
|
-
TOKEN_LISTSTART = [:LISTSTART, '['
|
35
|
-
TOKEN_RBRACK = [:RBRACK, ']'
|
36
|
-
TOKEN_LBRACE = [:LBRACE, '{'
|
37
|
-
TOKEN_RBRACE = [:RBRACE, '}'
|
38
|
-
TOKEN_SELBRACE = [:SELBRACE, '{'
|
39
|
-
TOKEN_LPAREN = [:LPAREN, '('
|
40
|
-
TOKEN_WSLPAREN = [:WSLPAREN, '('
|
41
|
-
TOKEN_RPAREN = [:RPAREN, ')'
|
42
|
-
|
43
|
-
TOKEN_EQUALS = [:EQUALS, '='
|
44
|
-
TOKEN_APPENDS = [:APPENDS, '+='
|
45
|
-
TOKEN_DELETES = [:DELETES, '-='
|
46
|
-
|
47
|
-
TOKEN_ISEQUAL = [:ISEQUAL, '=='
|
48
|
-
TOKEN_NOTEQUAL = [:NOTEQUAL, '!='
|
49
|
-
TOKEN_MATCH = [:MATCH, '=~'
|
50
|
-
TOKEN_NOMATCH = [:NOMATCH, '!~'
|
51
|
-
TOKEN_GREATEREQUAL = [:GREATEREQUAL, '>='
|
52
|
-
TOKEN_GREATERTHAN = [:GREATERTHAN, '>'
|
53
|
-
TOKEN_LESSEQUAL = [:LESSEQUAL, '<='
|
54
|
-
TOKEN_LESSTHAN = [:LESSTHAN, '<'
|
55
|
-
|
56
|
-
TOKEN_FARROW = [:FARROW, '=>'
|
57
|
-
TOKEN_PARROW = [:PARROW, '+>'
|
58
|
-
|
59
|
-
TOKEN_LSHIFT = [:LSHIFT, '<<'
|
60
|
-
TOKEN_LLCOLLECT = [:LLCOLLECT, '<<|'
|
61
|
-
TOKEN_LCOLLECT = [:LCOLLECT, '<|'
|
62
|
-
|
63
|
-
TOKEN_RSHIFT = [:RSHIFT, '>>'
|
64
|
-
TOKEN_RRCOLLECT = [:RRCOLLECT, '|>>'
|
65
|
-
TOKEN_RCOLLECT = [:RCOLLECT, '|>'
|
66
|
-
|
67
|
-
TOKEN_PLUS = [:PLUS, '+'
|
68
|
-
TOKEN_MINUS = [:MINUS, '-'
|
69
|
-
TOKEN_DIV = [:DIV, '/'
|
70
|
-
TOKEN_TIMES = [:TIMES, '*'
|
71
|
-
TOKEN_MODULO = [:MODULO, '%'
|
72
|
-
|
73
|
-
TOKEN_NOT = [:NOT, '!'
|
74
|
-
TOKEN_DOT = [:DOT, '.'
|
75
|
-
TOKEN_PIPE = [:PIPE, '|'
|
76
|
-
TOKEN_AT = [:AT , '@'
|
77
|
-
TOKEN_ATAT = [:ATAT , '@@'
|
78
|
-
TOKEN_COLON = [:COLON, ':'
|
79
|
-
TOKEN_COMMA = [:COMMA, ','
|
80
|
-
TOKEN_SEMIC = [:SEMIC, ';'
|
81
|
-
TOKEN_QMARK = [:QMARK, '?'
|
82
|
-
TOKEN_TILDE = [:TILDE, '~'
|
34
|
+
TOKEN_LBRACK = [:LBRACK, '[', 1].freeze
|
35
|
+
TOKEN_LISTSTART = [:LISTSTART, '[', 1].freeze
|
36
|
+
TOKEN_RBRACK = [:RBRACK, ']', 1].freeze
|
37
|
+
TOKEN_LBRACE = [:LBRACE, '{', 1].freeze
|
38
|
+
TOKEN_RBRACE = [:RBRACE, '}', 1].freeze
|
39
|
+
TOKEN_SELBRACE = [:SELBRACE, '{', 1].freeze
|
40
|
+
TOKEN_LPAREN = [:LPAREN, '(', 1].freeze
|
41
|
+
TOKEN_WSLPAREN = [:WSLPAREN, '(', 1].freeze
|
42
|
+
TOKEN_RPAREN = [:RPAREN, ')', 1].freeze
|
43
|
+
|
44
|
+
TOKEN_EQUALS = [:EQUALS, '=', 1].freeze
|
45
|
+
TOKEN_APPENDS = [:APPENDS, '+=', 2].freeze
|
46
|
+
TOKEN_DELETES = [:DELETES, '-=', 2].freeze
|
47
|
+
|
48
|
+
TOKEN_ISEQUAL = [:ISEQUAL, '==', 2].freeze
|
49
|
+
TOKEN_NOTEQUAL = [:NOTEQUAL, '!=', 2].freeze
|
50
|
+
TOKEN_MATCH = [:MATCH, '=~', 2].freeze
|
51
|
+
TOKEN_NOMATCH = [:NOMATCH, '!~', 2].freeze
|
52
|
+
TOKEN_GREATEREQUAL = [:GREATEREQUAL, '>=', 2].freeze
|
53
|
+
TOKEN_GREATERTHAN = [:GREATERTHAN, '>', 1].freeze
|
54
|
+
TOKEN_LESSEQUAL = [:LESSEQUAL, '<=', 2].freeze
|
55
|
+
TOKEN_LESSTHAN = [:LESSTHAN, '<', 1].freeze
|
56
|
+
|
57
|
+
TOKEN_FARROW = [:FARROW, '=>', 2].freeze
|
58
|
+
TOKEN_PARROW = [:PARROW, '+>', 2].freeze
|
59
|
+
|
60
|
+
TOKEN_LSHIFT = [:LSHIFT, '<<', 2].freeze
|
61
|
+
TOKEN_LLCOLLECT = [:LLCOLLECT, '<<|', 3].freeze
|
62
|
+
TOKEN_LCOLLECT = [:LCOLLECT, '<|', 2].freeze
|
63
|
+
|
64
|
+
TOKEN_RSHIFT = [:RSHIFT, '>>', 2].freeze
|
65
|
+
TOKEN_RRCOLLECT = [:RRCOLLECT, '|>>', 3].freeze
|
66
|
+
TOKEN_RCOLLECT = [:RCOLLECT, '|>', 2].freeze
|
67
|
+
|
68
|
+
TOKEN_PLUS = [:PLUS, '+', 1].freeze
|
69
|
+
TOKEN_MINUS = [:MINUS, '-', 1].freeze
|
70
|
+
TOKEN_DIV = [:DIV, '/', 1].freeze
|
71
|
+
TOKEN_TIMES = [:TIMES, '*', 1].freeze
|
72
|
+
TOKEN_MODULO = [:MODULO, '%', 1].freeze
|
73
|
+
|
74
|
+
TOKEN_NOT = [:NOT, '!', 1].freeze
|
75
|
+
TOKEN_DOT = [:DOT, '.', 1].freeze
|
76
|
+
TOKEN_PIPE = [:PIPE, '|', 1].freeze
|
77
|
+
TOKEN_AT = [:AT , '@', 1].freeze
|
78
|
+
TOKEN_ATAT = [:ATAT , '@@', 2].freeze
|
79
|
+
TOKEN_COLON = [:COLON, ':', 1].freeze
|
80
|
+
TOKEN_COMMA = [:COMMA, ',', 1].freeze
|
81
|
+
TOKEN_SEMIC = [:SEMIC, ';', 1].freeze
|
82
|
+
TOKEN_QMARK = [:QMARK, '?', 1].freeze
|
83
|
+
TOKEN_TILDE = [:TILDE, '~', 1].freeze # lexed but not an operator in Puppet
|
83
84
|
|
84
85
|
TOKEN_REGEXP = [:REGEXP, nil, 0].freeze
|
85
86
|
|
86
|
-
TOKEN_IN_EDGE = [:IN_EDGE, '->'
|
87
|
-
TOKEN_IN_EDGE_SUB = [:IN_EDGE_SUB, '~>'
|
88
|
-
TOKEN_OUT_EDGE = [:OUT_EDGE, '<-'
|
89
|
-
TOKEN_OUT_EDGE_SUB = [:OUT_EDGE_SUB, '<~'
|
87
|
+
TOKEN_IN_EDGE = [:IN_EDGE, '->', 2].freeze
|
88
|
+
TOKEN_IN_EDGE_SUB = [:IN_EDGE_SUB, '~>', 2].freeze
|
89
|
+
TOKEN_OUT_EDGE = [:OUT_EDGE, '<-', 2].freeze
|
90
|
+
TOKEN_OUT_EDGE_SUB = [:OUT_EDGE_SUB, '<~', 2].freeze
|
90
91
|
|
91
92
|
# Tokens that are always unique to what has been lexed
|
92
|
-
TOKEN_STRING =
|
93
|
-
TOKEN_WORD =
|
94
|
-
TOKEN_DQPRE =
|
95
|
-
TOKEN_DQMID =
|
96
|
-
TOKEN_DQPOS =
|
97
|
-
TOKEN_NUMBER =
|
98
|
-
TOKEN_VARIABLE =
|
99
|
-
TOKEN_VARIABLE_EMPTY =
|
93
|
+
TOKEN_STRING = [:STRING, nil, 0].freeze
|
94
|
+
TOKEN_WORD = [:WORD, nil, 0].freeze
|
95
|
+
TOKEN_DQPRE = [:DQPRE, nil, 0].freeze
|
96
|
+
TOKEN_DQMID = [:DQPRE, nil, 0].freeze
|
97
|
+
TOKEN_DQPOS = [:DQPRE, nil, 0].freeze
|
98
|
+
TOKEN_NUMBER = [:NUMBER, nil, 0].freeze
|
99
|
+
TOKEN_VARIABLE = [:VARIABLE, nil, 1].freeze
|
100
|
+
TOKEN_VARIABLE_EMPTY = [:VARIABLE, '', 1].freeze
|
100
101
|
|
101
102
|
# HEREDOC has syntax as an argument.
|
102
|
-
TOKEN_HEREDOC =
|
103
|
+
TOKEN_HEREDOC = [:HEREDOC, nil, 0].freeze
|
103
104
|
|
104
105
|
# EPP_START is currently a marker token, may later get syntax
|
105
|
-
TOKEN_EPPSTART
|
106
|
-
TOKEN_EPPEND
|
107
|
-
TOKEN_EPPEND_TRIM
|
106
|
+
TOKEN_EPPSTART = [:EPP_START, nil, 0].freeze
|
107
|
+
TOKEN_EPPEND = [:EPP_END, '%>', 2].freeze
|
108
|
+
TOKEN_EPPEND_TRIM = [:EPP_END_TRIM, '-%>', 3].freeze
|
108
109
|
|
109
110
|
# This is used for unrecognized tokens, will always be a single character. This particular instance
|
110
111
|
# is not used, but is kept here for documentation purposes.
|
111
|
-
TOKEN_OTHER
|
112
|
+
TOKEN_OTHER = [:OTHER, nil, 0]
|
112
113
|
|
113
114
|
# Keywords are all singleton tokens with pre calculated lengths.
|
114
115
|
# Booleans are pre-calculated (rather than evaluating the strings "false" "true" repeatedly.
|
@@ -175,7 +176,7 @@ class Lexer2
|
|
175
176
|
# PERFORMANCE NOTE:
|
176
177
|
# Comparison against a frozen string is faster (than unfrozen).
|
177
178
|
#
|
178
|
-
STRING_BSLASH_SLASH = '\/'
|
179
|
+
STRING_BSLASH_SLASH = '\/'
|
179
180
|
|
180
181
|
attr_reader :locator
|
181
182
|
|
@@ -14,8 +14,6 @@ module Serialization
|
|
14
14
|
# @option options [Boolean] :local_reference use local references instead of duplicating complex entries
|
15
15
|
# @option options [Boolean] :type_by_reference `true` if Object types are converted to references rather than embedded.
|
16
16
|
# @option options [Boolean] :symbol_as_string `true` if Symbols should be converted to strings (with type loss)
|
17
|
-
# @option options [Boolean] :force_symbol `false` if Symbols should not be converted (rich_data and symbol_as_string must be false)
|
18
|
-
# @option options [Boolean] :silence_warnings `false` if warnings should be silenced
|
19
17
|
# @option options [String] :message_prefix String to prepend to in warnings and errors
|
20
18
|
# @return [Data] the processed result. An object assignable to `Data`.
|
21
19
|
#
|
@@ -43,12 +41,6 @@ module Serialization
|
|
43
41
|
@symbol_as_string = options[:symbol_as_string]
|
44
42
|
@symbol_as_string = false if @symbol_as_string.nil?
|
45
43
|
|
46
|
-
@force_symbol = options[:force_symbol]
|
47
|
-
@force_symbol = false if @force_symbol.nil?
|
48
|
-
|
49
|
-
@silence_warnings = options[:silence_warnings]
|
50
|
-
@silence_warnings = false if @silence_warnings.nil?
|
51
|
-
|
52
44
|
@rich_data = options[:rich_data]
|
53
45
|
@rich_data = false if @rich_data.nil?
|
54
46
|
|
@@ -100,11 +92,7 @@ module Serialization
|
|
100
92
|
elsif @rich_data
|
101
93
|
{ PCORE_TYPE_KEY => PCORE_TYPE_SYMBOL, PCORE_VALUE_KEY => value.to_s }
|
102
94
|
else
|
103
|
-
|
104
|
-
value
|
105
|
-
else
|
106
|
-
@silence_warnings ? unknown_to_string(value) : unknown_to_string_with_warning(value)
|
107
|
-
end
|
95
|
+
unknown_to_string_with_warning(value)
|
108
96
|
end
|
109
97
|
elsif value.instance_of?(Array)
|
110
98
|
process(value) do
|
@@ -129,11 +117,7 @@ module Serialization
|
|
129
117
|
{ PCORE_TYPE_KEY => PCORE_TYPE_SENSITIVE, PCORE_VALUE_KEY => to_data(value.unwrap) }
|
130
118
|
end
|
131
119
|
else
|
132
|
-
|
133
|
-
value_to_data_hash(value)
|
134
|
-
else
|
135
|
-
@silence_warnings ? unknown_to_string(value) : unknown_to_string_with_warning(value)
|
136
|
-
end
|
120
|
+
unknown_to_data(value)
|
137
121
|
end
|
138
122
|
end
|
139
123
|
|
@@ -207,6 +191,10 @@ module Serialization
|
|
207
191
|
v
|
208
192
|
end
|
209
193
|
|
194
|
+
def unknown_to_data(value)
|
195
|
+
@rich_data ? value_to_data_hash(value) : unknown_to_string_with_warning(value)
|
196
|
+
end
|
197
|
+
|
210
198
|
def unknown_key_to_string_with_warning(value)
|
211
199
|
str = unknown_to_string(value)
|
212
200
|
serialization_issue(Issues::SERIALIZATION_UNKNOWN_KEY_CONVERTED_TO_STRING, :path => path_to_s, :klass => value.class, :value => str)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require_relative '../../../puppet/concurrent/thread_local_singleton'
|
2
3
|
|
3
4
|
module Puppet::Pops
|
@@ -22,7 +23,7 @@ class TypeFormatter
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def initialize
|
25
|
-
@string_visitor = Visitor.new(nil, 'string',0,0)
|
26
|
+
@string_visitor = Visitor.new(nil, 'string', 0, 0)
|
26
27
|
end
|
27
28
|
|
28
29
|
def expanded
|
@@ -49,7 +50,7 @@ class TypeFormatter
|
|
49
50
|
# @api public
|
50
51
|
#
|
51
52
|
def string(t)
|
52
|
-
@bld = ''
|
53
|
+
@bld = ''.dup
|
53
54
|
append_string(t)
|
54
55
|
@bld
|
55
56
|
end
|
@@ -63,7 +64,7 @@ class TypeFormatter
|
|
63
64
|
#
|
64
65
|
# @api public
|
65
66
|
def indented_string(t, indent = 0, indent_width = 2)
|
66
|
-
@bld = ''
|
67
|
+
@bld = ''.dup
|
67
68
|
append_indented_string(t, indent, indent_width)
|
68
69
|
@bld
|
69
70
|
end
|
@@ -634,7 +635,7 @@ class TypeFormatter
|
|
634
635
|
'[a TypeFormatter]'
|
635
636
|
end
|
636
637
|
|
637
|
-
NAME_SEGMENT_SEPARATOR = '::'
|
638
|
+
NAME_SEGMENT_SEPARATOR = '::'
|
638
639
|
STARTS_WITH_ASCII_CAPITAL = /^[A-Z]/
|
639
640
|
|
640
641
|
# Capitalizes each segment in a name separated with the {NAME_SEPARATOR} conditionally. The name
|
@@ -661,9 +662,9 @@ class TypeFormatter
|
|
661
662
|
|
662
663
|
private
|
663
664
|
|
664
|
-
COMMA_SEP = ', '
|
665
|
+
COMMA_SEP = ', '
|
665
666
|
|
666
|
-
HASH_ENTRY_OP = ' => '
|
667
|
+
HASH_ENTRY_OP = ' => '
|
667
668
|
|
668
669
|
def is_short_array?(t)
|
669
670
|
t.empty? || 100 - @indent * @indent_width > t.inject(0) do |sum, elem|
|
@@ -735,7 +735,7 @@ class PScalarDataType < PScalarType
|
|
735
735
|
end
|
736
736
|
|
737
737
|
def instance?(o, guard = nil)
|
738
|
-
return o.
|
738
|
+
return o.instance_of?(String) || o.is_a?(Integer) || o.is_a?(Float) || o.is_a?(TrueClass) || o.is_a?(FalseClass)
|
739
739
|
end
|
740
740
|
|
741
741
|
DEFAULT = PScalarDataType.new
|
@@ -614,20 +614,25 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
614
614
|
string_path == manifest_setting || string_path.start_with?(manifest_setting)
|
615
615
|
end
|
616
616
|
|
617
|
+
# Get the path of +file_path+ relative to the first directory in
|
618
|
+
# +modulepath_directories+ that is an ancestor of +file_path+. Return NO_PATH
|
619
|
+
# if none is found.
|
617
620
|
def get_module_relative_path(file_path, modulepath_directories)
|
618
|
-
clean_file = file_path.cleanpath
|
621
|
+
clean_file = file_path.cleanpath.to_s
|
619
622
|
parent_path = modulepath_directories.find { |path_dir| is_parent_dir_of(path_dir, clean_file) }
|
620
623
|
return NO_PATH if parent_path.nil?
|
621
624
|
|
622
625
|
file_path.relative_path_from(Pathname.new(parent_path))
|
623
626
|
end
|
627
|
+
private :get_module_relative_path
|
624
628
|
|
625
629
|
def is_parent_dir_of(parent_dir, child_dir)
|
626
630
|
parent_dir_path = Pathname.new(parent_dir)
|
627
631
|
clean_parent = parent_dir_path.cleanpath.to_s + File::SEPARATOR
|
628
632
|
|
629
|
-
return child_dir.
|
633
|
+
return child_dir.start_with?(clean_parent)
|
630
634
|
end
|
635
|
+
private :is_parent_dir_of
|
631
636
|
|
632
637
|
def dir_to_names(relative_path)
|
633
638
|
# Downcasing here because check is case-insensitive
|
@@ -2,11 +2,14 @@ require_relative '../../../puppet/provider/nameservice/objectadd'
|
|
2
2
|
require_relative '../../../puppet/util/libuser'
|
3
3
|
|
4
4
|
Puppet::Type.type(:group).provide :groupadd, :parent => Puppet::Provider::NameService::ObjectAdd do
|
5
|
-
desc "Group management via `groupadd` and its ilk. The default for most platforms.
|
5
|
+
desc "Group management via `groupadd` and its ilk. The default for most platforms.
|
6
|
+
|
7
|
+
To use the `forcelocal` parameter, you need to install the `libuser` package (providing
|
8
|
+
`/usr/sbin/lgroupadd` and `/usr/sbin/luseradd`)."
|
6
9
|
|
7
10
|
commands :add => "groupadd", :delete => "groupdel", :modify => "groupmod"
|
8
11
|
|
9
|
-
has_feature :system_groups unless %w{HP-UX Solaris}.include?
|
12
|
+
has_feature :system_groups unless %w{HP-UX Solaris}.include? Puppet.runtime[:facter].value(:operatingsystem)
|
10
13
|
|
11
14
|
verify :gid, _("GID must be an integer") do |value|
|
12
15
|
value.is_a? Integer
|
@@ -228,7 +228,7 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
|
|
228
228
|
command = 'update'
|
229
229
|
end
|
230
230
|
args = ['--accept']
|
231
|
-
if Puppet::Util::Package.versioncmp(
|
231
|
+
if Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:operatingsystemrelease), '11.2') >= 0
|
232
232
|
args.push('--sync-actuators-timeout', '900')
|
233
233
|
end
|
234
234
|
args.concat(join_options(@resource[:install_options])) if @resource[:install_options]
|
@@ -237,7 +237,17 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
|
|
237
237
|
end
|
238
238
|
self.unhold if self.properties[:mark] == :hold
|
239
239
|
begin
|
240
|
+
tries = 1
|
241
|
+
# pkg install exits with code 7 when the image is currently in use by another process and cannot be modified
|
240
242
|
r = exec_cmd(command(:pkg), command, *args, name)
|
243
|
+
while r[:exit] == 7 do
|
244
|
+
if tries > 4
|
245
|
+
raise Puppet::Error, _("Pkg could not install %{name} after %{tries} tries. Aborting run") % { name: name, tries: tries }
|
246
|
+
end
|
247
|
+
sleep 2 ** tries
|
248
|
+
tries += 1
|
249
|
+
r = exec_cmd(command(:pkg), command, *args, name)
|
250
|
+
end
|
241
251
|
ensure
|
242
252
|
self.hold if @resource[:mark] == :hold
|
243
253
|
end
|
@@ -4,7 +4,7 @@ Puppet::Type.type(:package).provide :puppet_gem, :parent => :gem do
|
|
4
4
|
|
5
5
|
has_feature :versionable, :install_options, :uninstall_options
|
6
6
|
|
7
|
-
confine :true =>
|
7
|
+
confine :true => Puppet.runtime[:facter].value(:aio_agent_version)
|
8
8
|
|
9
9
|
def self.windows_gemcmd
|
10
10
|
puppet_dir = Puppet::Util.get_env('PUPPET_DIR')
|
@@ -145,7 +145,7 @@ Puppet::Type.type(:package).provide :puppetserver_gem, :parent => :gem do
|
|
145
145
|
|
146
146
|
pe_puppetserver_conf_file = '/etc/puppetlabs/puppetserver/conf.d/pe-puppet-server.conf'
|
147
147
|
os_puppetserver_conf_file = '/etc/puppetlabs/puppetserver/puppetserver.conf'
|
148
|
-
puppetserver_conf_file =
|
148
|
+
puppetserver_conf_file = Puppet.runtime[:facter].value(:pe_server_version) ? pe_puppetserver_conf_file : os_puppetserver_conf_file
|
149
149
|
puppetserver_conf = Hocon.load(puppetserver_conf_file)
|
150
150
|
|
151
151
|
gem_env = {}
|
@@ -298,7 +298,7 @@ defaultfor :osfamily => :redhat, :operatingsystemmajrelease => (4..7).to_a
|
|
298
298
|
|
299
299
|
# Yum on el-4 and el-5 returns exit status 0 when trying to install a package it doesn't recognize;
|
300
300
|
# ensure we capture output to check for errors.
|
301
|
-
no_debug = if
|
301
|
+
no_debug = if Puppet.runtime[:facter].value(:operatingsystemmajrelease).to_i > 5 then ["-d", "0"] else [] end
|
302
302
|
command = [command(:cmd)] + no_debug + ["-e", error_level, "-y", install_options, operation, wanted].compact
|
303
303
|
output = execute(command)
|
304
304
|
|
@@ -15,7 +15,7 @@ Puppet::Type.type(:service).provide :base, :parent => :service do
|
|
15
15
|
# ported from the facter 2.x implementation, since facter 3.x
|
16
16
|
# is dropping the fact (for which this was the only use)
|
17
17
|
def getps
|
18
|
-
case
|
18
|
+
case Puppet.runtime[:facter].value(:operatingsystem)
|
19
19
|
when 'OpenWrt'
|
20
20
|
'ps www'
|
21
21
|
when 'FreeBSD', 'NetBSD', 'OpenBSD', 'Darwin', 'DragonFly'
|
@@ -4,7 +4,7 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
|
|
4
4
|
desc "Standard `init`-style service management."
|
5
5
|
|
6
6
|
def self.defpath
|
7
|
-
case
|
7
|
+
case Puppet.runtime[:facter].value(:operatingsystem)
|
8
8
|
when "FreeBSD", "DragonFly"
|
9
9
|
["/etc/rc.d", "/usr/local/etc/rc.d"]
|
10
10
|
when "HP-UX"
|
@@ -21,8 +21,8 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
|
|
21
21
|
# Debian and Ubuntu should use the Debian provider.
|
22
22
|
# RedHat systems should use the RedHat provider.
|
23
23
|
confine :true => begin
|
24
|
-
os =
|
25
|
-
family =
|
24
|
+
os = Puppet.runtime[:facter].value(:operatingsystem).downcase
|
25
|
+
family = Puppet.runtime[:facter].value(:osfamily).downcase
|
26
26
|
!(os == 'debian' || os == 'ubuntu' || family == 'redhat')
|
27
27
|
end
|
28
28
|
|
@@ -54,7 +54,7 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
|
|
54
54
|
# these excludes were found with grep -r -L start /etc/init.d
|
55
55
|
excludes += %w{rcS module-init-tools}
|
56
56
|
# Prevent puppet failing on unsafe scripts from Yocto Linux
|
57
|
-
if
|
57
|
+
if Puppet.runtime[:facter].value(:osfamily) == "cisco-wrlinux"
|
58
58
|
excludes += %w{banner.sh bootmisc.sh checkroot.sh devpts.sh dmesg.sh
|
59
59
|
hostname.sh mountall.sh mountnfs.sh populate-volatile.sh
|
60
60
|
rmnologin.sh save-rtc.sh sendsigs sysfs.sh umountfs
|
@@ -84,7 +84,7 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
|
|
84
84
|
defpath = [defpath] unless defpath.is_a? Array
|
85
85
|
instances = []
|
86
86
|
defpath.each do |path|
|
87
|
-
unless
|
87
|
+
unless Puppet::FileSystem.directory?(path)
|
88
88
|
Puppet.debug "Service path #{path} does not exist"
|
89
89
|
next
|
90
90
|
end
|
@@ -97,8 +97,9 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
|
|
97
97
|
fullpath = File.join(path, name)
|
98
98
|
next if name =~ /^\./
|
99
99
|
next if exclude.include? name
|
100
|
-
next if
|
101
|
-
next
|
100
|
+
next if Puppet::FileSystem.directory?(fullpath)
|
101
|
+
next unless Puppet::FileSystem.executable?(fullpath)
|
102
|
+
next unless is_init?(fullpath)
|
102
103
|
instances << new(:name => name, :path => path, :hasstatus => true)
|
103
104
|
end
|
104
105
|
end
|
@@ -122,7 +123,7 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
|
|
122
123
|
|
123
124
|
def paths
|
124
125
|
@paths ||= @resource[:path].find_all do |path|
|
125
|
-
if
|
126
|
+
if Puppet::FileSystem.directory?(path)
|
126
127
|
true
|
127
128
|
else
|
128
129
|
if Puppet::FileSystem.exist?(path)
|
@@ -171,7 +172,7 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
|
|
171
172
|
end
|
172
173
|
|
173
174
|
def service_execute(type, command, fof = true, squelch = false, combine = true)
|
174
|
-
if type == :start &&
|
175
|
+
if type == :start && Puppet.runtime[:facter].value(:osfamily) == "Solaris"
|
175
176
|
command = ["/usr/bin/ctrun -l child", command].flatten.join(" ")
|
176
177
|
end
|
177
178
|
super(type, command, fof, squelch, combine)
|
@@ -70,7 +70,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
|
|
70
70
|
#
|
71
71
|
# @api private
|
72
72
|
def self.get_os_version
|
73
|
-
@os_version ||=
|
73
|
+
@os_version ||= Puppet.runtime[:facter].value(:operatingsystemmajrelease).to_i
|
74
74
|
end
|
75
75
|
|
76
76
|
# Defines the path to the overrides plist file where service enabling
|
@@ -35,7 +35,7 @@ Puppet::Type.type(:service).provide :redhat, :parent => :init, :source => :init
|
|
35
35
|
# For Suse OS family, chkconfig returns 0 even if the service is disabled or non-existent
|
36
36
|
# Therefore, check the output for '<name> on' (or '<name> B for boot services)
|
37
37
|
# to see if it is enabled
|
38
|
-
return :false unless
|
38
|
+
return :false unless Puppet.runtime[:facter].value(:osfamily) != 'Suse' || output =~ /^#{name}\s+(on|B)$/
|
39
39
|
|
40
40
|
:true
|
41
41
|
end
|
@@ -101,14 +101,14 @@ Puppet::Type.type(:service).provide :smf, :parent => :base do
|
|
101
101
|
|
102
102
|
# Returns true if the provider supports incomplete services.
|
103
103
|
def supports_incomplete_services?
|
104
|
-
Puppet::Util::Package.versioncmp(
|
104
|
+
Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:operatingsystemrelease), '11.1') >= 0
|
105
105
|
end
|
106
106
|
|
107
107
|
# Returns true if the service is complete. A complete service is a service that
|
108
108
|
# has the general/complete property defined.
|
109
109
|
def complete_service?
|
110
110
|
unless supports_incomplete_services?
|
111
|
-
raise Puppet::Error, _("Cannot query if the %{service} service is complete: The concept of complete/incomplete services was introduced in Solaris 11.1. You are on a Solaris %{release} machine.") % { service: @resource[:name], release:
|
111
|
+
raise Puppet::Error, _("Cannot query if the %{service} service is complete: The concept of complete/incomplete services was introduced in Solaris 11.1. You are on a Solaris %{release} machine.") % { service: @resource[:name], release: Puppet.runtime[:facter].value(:operatingsystemrelease) }
|
112
112
|
end
|
113
113
|
|
114
114
|
return @complete_service if @complete_service
|
@@ -138,7 +138,7 @@ Puppet::Type.type(:service).provide :smf, :parent => :base do
|
|
138
138
|
end
|
139
139
|
|
140
140
|
def restartcmd
|
141
|
-
if Puppet::Util::Package.versioncmp(
|
141
|
+
if Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:operatingsystemrelease), '11.2') >= 0
|
142
142
|
[command(:adm), :restart, "-s", self.service_fmri]
|
143
143
|
else
|
144
144
|
# Synchronous restart only supported in Solaris 11.2 and above
|
@@ -110,7 +110,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
|
|
110
110
|
# The indirect state indicates that the unit is not enabled.
|
111
111
|
return :false if output == 'indirect'
|
112
112
|
return :true if (code == 0)
|
113
|
-
if (output.empty?) && (code > 0) && (
|
113
|
+
if (output.empty?) && (code > 0) && (Puppet.runtime[:facter].value(:osfamily).casecmp('debian').zero?)
|
114
114
|
ret = debian_enabled?
|
115
115
|
return ret if ret
|
116
116
|
end
|
@@ -10,10 +10,10 @@ Puppet::Type.type(:service).provide :upstart, :parent => :debian do
|
|
10
10
|
"
|
11
11
|
|
12
12
|
confine :any => [
|
13
|
-
|
14
|
-
(
|
15
|
-
(
|
16
|
-
|
13
|
+
Puppet.runtime[:facter].value(:operatingsystem) == 'Ubuntu',
|
14
|
+
(Puppet.runtime[:facter].value(:osfamily) == 'RedHat' and Puppet.runtime[:facter].value(:operatingsystemrelease) =~ /^6\./),
|
15
|
+
(Puppet.runtime[:facter].value(:operatingsystem) == 'Amazon' and Puppet.runtime[:facter].value(:operatingsystemmajrelease) =~ /\d{4}/),
|
16
|
+
Puppet.runtime[:facter].value(:operatingsystem) == 'LinuxMint',
|
17
17
|
]
|
18
18
|
|
19
19
|
defaultfor :operatingsystem => :ubuntu, :operatingsystemmajrelease => ["10.04", "12.04", "14.04", "14.10"]
|
@@ -57,7 +57,7 @@ Puppet::Type.type(:service).provide :upstart, :parent => :debian do
|
|
57
57
|
|
58
58
|
def self.excludes
|
59
59
|
excludes = super
|
60
|
-
if
|
60
|
+
if Puppet.runtime[:facter].value(:osfamily) == 'RedHat'
|
61
61
|
# Puppet cannot deal with services that have instances, so we have to
|
62
62
|
# ignore these services using instances on redhat based systems.
|
63
63
|
excludes += %w[serial tty]
|
@@ -265,6 +265,50 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
|
|
265
265
|
end
|
266
266
|
end
|
267
267
|
|
268
|
+
# Lists all instances of the given object, taking in an optional set
|
269
|
+
# of ia_module arguments. Returns an array of hashes, each hash
|
270
|
+
# having the schema
|
271
|
+
# {
|
272
|
+
# :name => <object_name>
|
273
|
+
# :home => <object_home>
|
274
|
+
# }
|
275
|
+
def list_all_homes(ia_module_args = [])
|
276
|
+
cmd = [command(:list), '-c', *ia_module_args, '-a', 'home', 'ALL']
|
277
|
+
parse_aix_objects(execute(cmd)).to_a.map do |object|
|
278
|
+
name = object[:name]
|
279
|
+
home = object[:attributes].delete(:home)
|
280
|
+
|
281
|
+
{ name: name, home: home }
|
282
|
+
end
|
283
|
+
rescue => e
|
284
|
+
Puppet.debug("Could not list home of all users: #{e.message}")
|
285
|
+
{}
|
286
|
+
end
|
287
|
+
|
288
|
+
# Deletes this instance resource
|
289
|
+
def delete
|
290
|
+
homedir = home
|
291
|
+
super
|
292
|
+
return unless @resource.managehome?
|
293
|
+
|
294
|
+
if !Puppet::Util.absolute_path?(homedir) || File.realpath(homedir) == '/' || Puppet::FileSystem.symlink?(homedir)
|
295
|
+
Puppet.debug("Can not remove home directory '#{homedir}' of user '#{@resource[:name]}'. Please make sure the path is not relative, symlink or '/'.")
|
296
|
+
return
|
297
|
+
end
|
298
|
+
|
299
|
+
affected_home = list_all_homes.find { |info| info[:home].start_with?(File.realpath(homedir)) }
|
300
|
+
if affected_home
|
301
|
+
Puppet.debug("Can not remove home directory '#{homedir}' of user '#{@resource[:name]}' as it would remove the home directory '#{affected_home[:home]}' of user '#{affected_home[:name]}' also.")
|
302
|
+
return
|
303
|
+
end
|
304
|
+
|
305
|
+
FileUtils.remove_entry_secure(homedir, true)
|
306
|
+
end
|
307
|
+
|
308
|
+
def deletecmd
|
309
|
+
[self.class.command(:delete), '-p'] + ia_module_args + [@resource[:name]]
|
310
|
+
end
|
311
|
+
|
268
312
|
# UNSUPPORTED
|
269
313
|
#- **profile_membership**
|
270
314
|
# Whether specified roles should be treated as the only roles
|
@@ -314,5 +358,4 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
|
|
314
358
|
# be treated as the minimum membership list. Valid values are
|
315
359
|
# `inclusive`, `minimum`.
|
316
360
|
# UNSUPPORTED
|
317
|
-
|
318
361
|
end
|
@@ -159,7 +159,7 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
159
159
|
end
|
160
160
|
|
161
161
|
def self.get_os_version
|
162
|
-
@os_version ||=
|
162
|
+
@os_version ||= Puppet.runtime[:facter].value(:macosx_productversion_major)
|
163
163
|
end
|
164
164
|
|
165
165
|
# Use dscl to retrieve an array of hashes containing attributes about all
|