puppet 7.10.0 → 7.11.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.

Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/Gemfile.lock +9 -9
  4. data/lib/puppet/application/agent.rb +4 -0
  5. data/lib/puppet/application/apply.rb +20 -2
  6. data/lib/puppet/application/resource.rb +15 -13
  7. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  8. data/lib/puppet/configurer.rb +14 -4
  9. data/lib/puppet/confine/variable.rb +1 -1
  10. data/lib/puppet/defaults.rb +9 -3
  11. data/lib/puppet/facter_impl.rb +96 -0
  12. data/lib/puppet/file_serving/mount/file.rb +4 -4
  13. data/lib/puppet/file_system/file_impl.rb +3 -1
  14. data/lib/puppet/forge.rb +1 -1
  15. data/lib/puppet/indirector/catalog/compiler.rb +3 -3
  16. data/lib/puppet/indirector/facts/facter.rb +6 -6
  17. data/lib/puppet/indirector/indirection.rb +1 -1
  18. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  19. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  20. data/lib/puppet/pal/pal_impl.rb +1 -1
  21. data/lib/puppet/parser/scope.rb +8 -7
  22. data/lib/puppet/parser/templatewrapper.rb +1 -0
  23. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  24. data/lib/puppet/pops/model/ast.rb +1 -0
  25. data/lib/puppet/pops/model/factory.rb +14 -13
  26. data/lib/puppet/pops/parser/egrammar.ra +2 -2
  27. data/lib/puppet/pops/parser/eparser.rb +752 -753
  28. data/lib/puppet/pops/parser/lexer2.rb +69 -68
  29. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  30. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  31. data/lib/puppet/pops/types/type_formatter.rb +7 -6
  32. data/lib/puppet/pops/types/types.rb +1 -1
  33. data/lib/puppet/provider/aix_object.rb +1 -1
  34. data/lib/puppet/provider/group/groupadd.rb +5 -2
  35. data/lib/puppet/provider/package/pkg.rb +1 -1
  36. data/lib/puppet/provider/package/puppet_gem.rb +1 -1
  37. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  38. data/lib/puppet/provider/package/yum.rb +1 -1
  39. data/lib/puppet/provider/service/base.rb +1 -1
  40. data/lib/puppet/provider/service/init.rb +5 -5
  41. data/lib/puppet/provider/service/launchd.rb +1 -1
  42. data/lib/puppet/provider/service/redhat.rb +1 -1
  43. data/lib/puppet/provider/service/smf.rb +3 -3
  44. data/lib/puppet/provider/service/systemd.rb +1 -1
  45. data/lib/puppet/provider/service/upstart.rb +5 -5
  46. data/lib/puppet/provider/user/aix.rb +44 -1
  47. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  48. data/lib/puppet/provider/user/useradd.rb +10 -7
  49. data/lib/puppet/provider.rb +1 -1
  50. data/lib/puppet/reference/providers.rb +2 -2
  51. data/lib/puppet/resource/type_collection.rb +2 -1
  52. data/lib/puppet/runtime.rb +11 -1
  53. data/lib/puppet/settings/file_setting.rb +3 -8
  54. data/lib/puppet/settings.rb +2 -2
  55. data/lib/puppet/test/test_helper.rb +4 -1
  56. data/lib/puppet/type/exec.rb +9 -1
  57. data/lib/puppet/type/group.rb +0 -1
  58. data/lib/puppet/type/resources.rb +1 -1
  59. data/lib/puppet/type/user.rb +0 -1
  60. data/lib/puppet/util/command_line.rb +1 -1
  61. data/lib/puppet/util/filetype.rb +2 -2
  62. data/lib/puppet/util/log.rb +1 -2
  63. data/lib/puppet/util/logging.rb +1 -25
  64. data/lib/puppet/util/pidlock.rb +1 -1
  65. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  66. data/lib/puppet/util/suidmanager.rb +1 -2
  67. data/lib/puppet/util/tagging.rb +1 -0
  68. data/lib/puppet/util/windows/user.rb +0 -1
  69. data/lib/puppet/util.rb +4 -3
  70. data/lib/puppet/version.rb +1 -1
  71. data/lib/puppet.rb +2 -6
  72. data/man/man5/puppet.conf.5 +10 -2
  73. data/man/man8/puppet-agent.8 +4 -1
  74. data/man/man8/puppet-apply.8 +1 -1
  75. data/man/man8/puppet-catalog.8 +1 -1
  76. data/man/man8/puppet-config.8 +1 -1
  77. data/man/man8/puppet-describe.8 +1 -1
  78. data/man/man8/puppet-device.8 +1 -1
  79. data/man/man8/puppet-doc.8 +1 -1
  80. data/man/man8/puppet-epp.8 +1 -1
  81. data/man/man8/puppet-facts.8 +1 -1
  82. data/man/man8/puppet-filebucket.8 +1 -1
  83. data/man/man8/puppet-generate.8 +1 -1
  84. data/man/man8/puppet-help.8 +1 -1
  85. data/man/man8/puppet-lookup.8 +1 -1
  86. data/man/man8/puppet-module.8 +1 -1
  87. data/man/man8/puppet-node.8 +1 -1
  88. data/man/man8/puppet-parser.8 +1 -1
  89. data/man/man8/puppet-plugin.8 +1 -1
  90. data/man/man8/puppet-report.8 +1 -1
  91. data/man/man8/puppet-resource.8 +1 -1
  92. data/man/man8/puppet-script.8 +1 -1
  93. data/man/man8/puppet-ssl.8 +1 -1
  94. data/man/man8/puppet.8 +2 -2
  95. data/spec/integration/application/agent_spec.rb +16 -0
  96. data/spec/integration/configurer_spec.rb +1 -1
  97. data/spec/integration/indirector/facts/facter_spec.rb +3 -3
  98. data/spec/integration/transaction/report_spec.rb +1 -1
  99. data/spec/integration/type/file_spec.rb +2 -2
  100. data/spec/integration/type/package_spec.rb +6 -6
  101. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  102. data/spec/integration/util/windows/process_spec.rb +1 -9
  103. data/spec/unit/application/apply_spec.rb +76 -56
  104. data/spec/unit/application/resource_spec.rb +29 -0
  105. data/spec/unit/configurer_spec.rb +13 -3
  106. data/spec/unit/facter_impl_spec.rb +31 -0
  107. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  108. data/spec/unit/file_system_spec.rb +7 -0
  109. data/spec/unit/functions/lookup_spec.rb +64 -0
  110. data/spec/unit/indirector/indirection_spec.rb +10 -3
  111. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  112. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  113. data/spec/unit/provider/package/gem_spec.rb +1 -1
  114. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  115. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  116. data/spec/unit/provider/package/pip_spec.rb +1 -1
  117. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  118. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  119. data/spec/unit/provider/user/aix_spec.rb +100 -0
  120. data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
  121. data/spec/unit/provider_spec.rb +4 -4
  122. data/spec/unit/puppet_spec.rb +12 -4
  123. data/spec/unit/settings/file_setting_spec.rb +10 -7
  124. data/spec/unit/type_spec.rb +2 -2
  125. data/spec/unit/util/logging_spec.rb +2 -0
  126. data/tasks/parallel.rake +3 -3
  127. metadata +5 -2
@@ -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, '['.freeze, 1].freeze
34
- TOKEN_LISTSTART = [:LISTSTART, '['.freeze, 1].freeze
35
- TOKEN_RBRACK = [:RBRACK, ']'.freeze, 1].freeze
36
- TOKEN_LBRACE = [:LBRACE, '{'.freeze, 1].freeze
37
- TOKEN_RBRACE = [:RBRACE, '}'.freeze, 1].freeze
38
- TOKEN_SELBRACE = [:SELBRACE, '{'.freeze, 1].freeze
39
- TOKEN_LPAREN = [:LPAREN, '('.freeze, 1].freeze
40
- TOKEN_WSLPAREN = [:WSLPAREN, '('.freeze, 1].freeze
41
- TOKEN_RPAREN = [:RPAREN, ')'.freeze, 1].freeze
42
-
43
- TOKEN_EQUALS = [:EQUALS, '='.freeze, 1].freeze
44
- TOKEN_APPENDS = [:APPENDS, '+='.freeze, 2].freeze
45
- TOKEN_DELETES = [:DELETES, '-='.freeze, 2].freeze
46
-
47
- TOKEN_ISEQUAL = [:ISEQUAL, '=='.freeze, 2].freeze
48
- TOKEN_NOTEQUAL = [:NOTEQUAL, '!='.freeze, 2].freeze
49
- TOKEN_MATCH = [:MATCH, '=~'.freeze, 2].freeze
50
- TOKEN_NOMATCH = [:NOMATCH, '!~'.freeze, 2].freeze
51
- TOKEN_GREATEREQUAL = [:GREATEREQUAL, '>='.freeze, 2].freeze
52
- TOKEN_GREATERTHAN = [:GREATERTHAN, '>'.freeze, 1].freeze
53
- TOKEN_LESSEQUAL = [:LESSEQUAL, '<='.freeze, 2].freeze
54
- TOKEN_LESSTHAN = [:LESSTHAN, '<'.freeze, 1].freeze
55
-
56
- TOKEN_FARROW = [:FARROW, '=>'.freeze, 2].freeze
57
- TOKEN_PARROW = [:PARROW, '+>'.freeze, 2].freeze
58
-
59
- TOKEN_LSHIFT = [:LSHIFT, '<<'.freeze, 2].freeze
60
- TOKEN_LLCOLLECT = [:LLCOLLECT, '<<|'.freeze, 3].freeze
61
- TOKEN_LCOLLECT = [:LCOLLECT, '<|'.freeze, 2].freeze
62
-
63
- TOKEN_RSHIFT = [:RSHIFT, '>>'.freeze, 2].freeze
64
- TOKEN_RRCOLLECT = [:RRCOLLECT, '|>>'.freeze, 3].freeze
65
- TOKEN_RCOLLECT = [:RCOLLECT, '|>'.freeze, 2].freeze
66
-
67
- TOKEN_PLUS = [:PLUS, '+'.freeze, 1].freeze
68
- TOKEN_MINUS = [:MINUS, '-'.freeze, 1].freeze
69
- TOKEN_DIV = [:DIV, '/'.freeze, 1].freeze
70
- TOKEN_TIMES = [:TIMES, '*'.freeze, 1].freeze
71
- TOKEN_MODULO = [:MODULO, '%'.freeze, 1].freeze
72
-
73
- TOKEN_NOT = [:NOT, '!'.freeze, 1].freeze
74
- TOKEN_DOT = [:DOT, '.'.freeze, 1].freeze
75
- TOKEN_PIPE = [:PIPE, '|'.freeze, 1].freeze
76
- TOKEN_AT = [:AT , '@'.freeze, 1].freeze
77
- TOKEN_ATAT = [:ATAT , '@@'.freeze, 2].freeze
78
- TOKEN_COLON = [:COLON, ':'.freeze, 1].freeze
79
- TOKEN_COMMA = [:COMMA, ','.freeze, 1].freeze
80
- TOKEN_SEMIC = [:SEMIC, ';'.freeze, 1].freeze
81
- TOKEN_QMARK = [:QMARK, '?'.freeze, 1].freeze
82
- TOKEN_TILDE = [:TILDE, '~'.freeze, 1].freeze # lexed but not an operator in Puppet
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, '->'.freeze, 2].freeze
87
- TOKEN_IN_EDGE_SUB = [:IN_EDGE_SUB, '~>'.freeze, 2].freeze
88
- TOKEN_OUT_EDGE = [:OUT_EDGE, '<-'.freeze, 2].freeze
89
- TOKEN_OUT_EDGE_SUB = [:OUT_EDGE_SUB, '<~'.freeze, 2].freeze
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 = [:STRING, nil, 0].freeze
93
- TOKEN_WORD = [:WORD, nil, 0].freeze
94
- TOKEN_DQPRE = [:DQPRE, nil, 0].freeze
95
- TOKEN_DQMID = [:DQPRE, nil, 0].freeze
96
- TOKEN_DQPOS = [:DQPRE, nil, 0].freeze
97
- TOKEN_NUMBER = [:NUMBER, nil, 0].freeze
98
- TOKEN_VARIABLE = [:VARIABLE, nil, 1].freeze
99
- TOKEN_VARIABLE_EMPTY = [:VARIABLE, ''.freeze, 1].freeze
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 = [:HEREDOC, nil, 0].freeze
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 = [:EPP_START, nil, 0].freeze
106
- TOKEN_EPPEND = [:EPP_END, '%>', 2].freeze
107
- TOKEN_EPPEND_TRIM = [:EPP_END_TRIM, '-%>', 3].freeze
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 = [:OTHER, nil, 0]
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 = '\/'.freeze
179
+ STRING_BSLASH_SLASH = '\/'
179
180
 
180
181
  attr_reader :locator
181
182
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Puppet::Pops
2
3
  module Parser
3
4
  # This module is an integral part of the Lexer.
@@ -62,7 +62,7 @@ module Serialization
62
62
  end
63
63
 
64
64
  def to_data(value)
65
- if value.is_a?(String)
65
+ if value.instance_of?(String)
66
66
  to_string_or_binary(value)
67
67
  elsif value.nil? || Types::PScalarDataType::DEFAULT.instance?(value)
68
68
  value
@@ -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 = '::'.freeze
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 = ', '.freeze
665
+ COMMA_SEP = ', '
665
666
 
666
- HASH_ENTRY_OP = ' => '.freeze
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.is_a?(String) || o.is_a?(Integer) || o.is_a?(Float) || o.is_a?(TrueClass) || o.is_a?(FalseClass)
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
@@ -279,7 +279,7 @@ class Puppet::Provider::AixObject < Puppet::Provider
279
279
  name = object[:name]
280
280
  id = object[:attributes].delete(:id)
281
281
 
282
- Hash[[[:name, name,],[:id, id]]]
282
+ { name: name, id: id }
283
283
  end
284
284
  end
285
285
 
@@ -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? Facter.value(:operatingsystem)
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(Facter.value(:operatingsystemrelease), '11.2') >= 0
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]
@@ -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 => Facter.value(:aio_agent_version)
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 = Facter.value(:pe_server_version) ? pe_puppetserver_conf_file : os_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 Facter.value(:operatingsystemmajrelease).to_i > 5 then ["-d", "0"] else [] end
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 Facter.value(:operatingsystem)
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 Facter.value(:operatingsystem)
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 = Facter.value(:operatingsystem).downcase
25
- family = Facter.value(:osfamily).downcase
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 Facter.value(:osfamily) == "cisco-wrlinux"
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
@@ -171,7 +171,7 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
171
171
  end
172
172
 
173
173
  def service_execute(type, command, fof = true, squelch = false, combine = true)
174
- if type == :start && Facter.value(:osfamily) == "Solaris"
174
+ if type == :start && Puppet.runtime[:facter].value(:osfamily) == "Solaris"
175
175
  command = ["/usr/bin/ctrun -l child", command].flatten.join(" ")
176
176
  end
177
177
  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 ||= Facter.value(:operatingsystemmajrelease).to_i
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 Facter.value(:osfamily) != 'Suse' || output =~ /^#{name}\s+(on|B)$/
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(Facter.value(:operatingsystemrelease), '11.1') >= 0
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: Facter.value(:operatingsystemrelease) }
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(Facter.value(:operatingsystemrelease), '11.2') >= 0
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) && (Facter.value(:osfamily).casecmp('debian').zero?)
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
- Facter.value(:operatingsystem) == 'Ubuntu',
14
- (Facter.value(:osfamily) == 'RedHat' and Facter.value(:operatingsystemrelease) =~ /^6\./),
15
- (Facter.value(:operatingsystem) == 'Amazon' and Facter.value(:operatingsystemmajrelease) =~ /\d{4}/),
16
- Facter.value(:operatingsystem) == 'LinuxMint',
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 Facter.value(:osfamily) == 'RedHat'
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