puppet 6.10.1 → 6.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.
- checksums.yaml +4 -4
- data/Gemfile +4 -4
- data/Gemfile.lock +20 -12
- data/ext/project_data.yaml +3 -2
- data/ext/regexp_nodes/regexp_nodes.rb +4 -4
- data/ext/windows/service/daemon.rb +33 -8
- data/install.rb +6 -6
- data/lib/puppet.rb +8 -0
- data/lib/puppet/application.rb +1 -1
- data/lib/puppet/application/agent.rb +3 -0
- data/lib/puppet/application/apply.rb +2 -2
- data/lib/puppet/application/describe.rb +3 -9
- data/lib/puppet/application/device.rb +3 -0
- 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/application/ssl.rb +25 -21
- data/lib/puppet/configurer.rb +42 -0
- data/lib/puppet/configurer/downloader.rb +2 -6
- data/lib/puppet/context/trusted_information.rb +42 -4
- data/lib/puppet/defaults.rb +19 -4
- 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.rb +1 -2
- 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 +4 -3
- data/lib/puppet/http.rb +29 -0
- data/lib/puppet/http/client.rb +156 -0
- data/lib/puppet/http/errors.rb +30 -0
- data/lib/puppet/http/redirector.rb +48 -0
- data/lib/puppet/http/resolver.rb +5 -0
- data/lib/puppet/http/resolver/settings.rb +5 -0
- data/lib/puppet/http/resolver/srv.rb +13 -0
- data/lib/puppet/http/response.rb +34 -0
- data/lib/puppet/http/retry_after_handler.rb +47 -0
- data/lib/puppet/http/service.rb +18 -0
- data/lib/puppet/http/service/ca.rb +49 -0
- data/lib/puppet/http/session.rb +55 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/hiera.rb +2 -0
- data/lib/puppet/indirector/request.rb +1 -1
- 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/interface/documentation.rb +1 -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/task.rb +20 -4
- 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.rb +2 -6
- 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/site.rb +5 -1
- data/lib/puppet/network/resolver.rb +4 -4
- data/lib/puppet/node/environment.rb +4 -2
- data/lib/puppet/pal/pal_impl.rb +2 -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/scope.rb +8 -7
- 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 -7
- data/lib/puppet/pops/loader/module_loaders.rb +1 -1
- data/lib/puppet/pops/loader/task_instantiator.rb +4 -0
- 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 +52 -48
- data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
- data/lib/puppet/pops/types/p_uri_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/exec.rb +6 -2
- data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
- data/lib/puppet/provider/nameservice/pw.rb +2 -2
- data/lib/puppet/provider/package/apt.rb +5 -1
- data/lib/puppet/provider/package/dnfmodule.rb +87 -0
- data/lib/puppet/provider/package/dpkg.rb +31 -17
- 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 +1 -1
- data/lib/puppet/provider/package/rpm.rb +5 -5
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +1 -1
- 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 +10 -10
- data/lib/puppet/provider/user/directoryservice.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/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/rest/errors.rb +1 -0
- data/lib/puppet/rest/response.rb +1 -0
- data/lib/puppet/rest/route.rb +1 -0
- data/lib/puppet/rest/routes.rb +3 -0
- data/lib/puppet/runtime.rb +25 -0
- data/lib/puppet/settings.rb +3 -3
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/ssl/host.rb +1 -1
- data/lib/puppet/ssl/oids.rb +1 -1
- data/lib/puppet/ssl/state_machine.rb +23 -15
- data/lib/puppet/test/test_helper.rb +1 -1
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/trusted_external.rb +13 -0
- data/lib/puppet/type.rb +1 -3
- data/lib/puppet/type/exec.rb +7 -3
- data/lib/puppet/type/file.rb +1 -2
- data/lib/puppet/type/file/source.rb +2 -2
- data/lib/puppet/type/package.rb +10 -3
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/service.rb +1 -1
- data/lib/puppet/util.rb +2 -2
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +2 -10
- data/lib/puppet/util/log.rb +2 -2
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/logging.rb +2 -2
- data/lib/puppet/util/metric.rb +2 -2
- data/lib/puppet/util/platform.rb +15 -4
- 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/registry.rb +7 -5
- data/lib/puppet/vendor.rb +1 -1
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509/cert_provider.rb +4 -1
- data/locales/puppet.pot +279 -203
- data/man/man5/puppet.conf.5 +30 -8
- 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-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.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-ssl.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/lib/puppet/certificate_factory.rb +2 -2
- data/spec/spec_helper.rb +24 -0
- data/spec/unit/application/device_spec.rb +6 -0
- data/spec/unit/application/ssl_spec.rb +4 -7
- data/spec/unit/configurer_spec.rb +1 -0
- data/spec/unit/context/trusted_information_spec.rb +41 -2
- data/spec/unit/http/client_spec.rb +440 -0
- data/spec/unit/http/resolver_spec.rb +45 -0
- data/spec/unit/http/service/ca_spec.rb +106 -0
- data/spec/unit/http/service_spec.rb +32 -0
- data/spec/unit/http/session_spec.rb +102 -0
- data/spec/unit/indirector/resource/ral_spec.rb +4 -4
- data/spec/unit/network/http/connection_spec.rb +119 -145
- data/spec/unit/network/http/site_spec.rb +7 -0
- data/spec/unit/parser/scope_spec.rb +10 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +13 -2
- data/spec/unit/pops/loaders/module_loaders_spec.rb +37 -0
- 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 +238 -78
- data/spec/unit/provider/package/pip_spec.rb +51 -6
- 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 +25 -25
- data/spec/unit/provider/user/useradd_spec.rb +46 -0
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/state_machine_spec.rb +16 -10
- data/spec/unit/type/exec_spec.rb +6 -12
- data/spec/unit/type/file_spec.rb +9 -4
- data/spec/unit/type/package_spec.rb +5 -0
- data/spec/unit/util/execution_spec.rb +16 -0
- data/spec/unit/util/http_proxy_spec.rb +79 -27
- data/spec/unit/util/log/destinations_spec.rb +7 -3
- metadata +45 -22
- data/lib/puppet/pops/loader/null_loader.rb +0 -60
- data/lib/puppet/vendor/deep_merge/CHANGELOG +0 -45
- data/lib/puppet/vendor/deep_merge/Gemfile +0 -3
- data/lib/puppet/vendor/deep_merge/LICENSE +0 -21
- data/lib/puppet/vendor/deep_merge/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/deep_merge/README.md +0 -113
- data/lib/puppet/vendor/deep_merge/Rakefile +0 -19
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +0 -35
- data/lib/puppet/vendor/deep_merge/lib/deep_merge.rb +0 -2
- data/lib/puppet/vendor/deep_merge/lib/deep_merge/core.rb +0 -210
- data/lib/puppet/vendor/deep_merge/lib/deep_merge/deep_merge_hash.rb +0 -28
- data/lib/puppet/vendor/deep_merge/lib/deep_merge/rails_compat.rb +0 -27
- data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +0 -608
- data/lib/puppet/vendor/load_deep_merge.rb +0 -1
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +0 -24
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +0 -24
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +0 -24
@@ -177,7 +177,7 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
|
|
177
177
|
package_sets << package_set.to_s.strip
|
178
178
|
end
|
179
179
|
|
180
|
-
if @resource[:name]
|
180
|
+
if @resource[:name] =~ /^@/
|
181
181
|
if package_sets.include?(@resource[:name][1..-1].to_s)
|
182
182
|
return({:name => "#{@resource[:name]}", :ensure => '9999', :version_available => nil, :installed_versions => nil, :installable_versions => "9999,"})
|
183
183
|
end
|
@@ -230,14 +230,14 @@ These options should be specified as an array where each element is either a str
|
|
230
230
|
str2 = str2.gsub(front_strip_re, '')
|
231
231
|
|
232
232
|
# "handle the tilde separator, it sorts before everything else"
|
233
|
-
if
|
233
|
+
if str1 =~ /^~/ && str2 =~ /^~/
|
234
234
|
# if they both have ~, strip it
|
235
235
|
str1 = str1[1..-1]
|
236
236
|
str2 = str2[1..-1]
|
237
237
|
next
|
238
|
-
elsif
|
238
|
+
elsif str1 =~ /^~/
|
239
239
|
return -1
|
240
|
-
elsif
|
240
|
+
elsif str2 =~ /^~/
|
241
241
|
return 1
|
242
242
|
end
|
243
243
|
|
@@ -246,7 +246,7 @@ These options should be specified as an array where each element is either a str
|
|
246
246
|
# "grab first completely alpha or completely numeric segment"
|
247
247
|
isnum = false
|
248
248
|
# if the first char of str1 is a digit, grab the chunk of continuous digits from each string
|
249
|
-
if /^[0-9]
|
249
|
+
if str1 =~ /^[0-9]+/
|
250
250
|
if str1 =~ /^[0-9]+/
|
251
251
|
segment1 = $~.to_s
|
252
252
|
str1 = $~.post_match
|
@@ -342,7 +342,7 @@ These options should be specified as an array where each element is either a str
|
|
342
342
|
r = s[ri+1,s.length]
|
343
343
|
arch = r.scan(ARCH_REGEX)[0]
|
344
344
|
if arch
|
345
|
-
a = arch.
|
345
|
+
a = arch.delete('.')
|
346
346
|
r.gsub!(ARCH_REGEX, '')
|
347
347
|
end
|
348
348
|
else
|
@@ -80,7 +80,7 @@ class Puppet::Provider::Package::Windows
|
|
80
80
|
|
81
81
|
def self.replace_forward_slashes(value)
|
82
82
|
if value.include?('/')
|
83
|
-
value = value.
|
83
|
+
value = value.tr('/', "\\")
|
84
84
|
Puppet.debug('Package source parameter contained /s - replaced with \\s')
|
85
85
|
end
|
86
86
|
value
|
@@ -92,7 +92,7 @@ defaultfor :osfamily => :redhat, :operatingsystemmajrelease => (4..7).to_a
|
|
92
92
|
updates = Hash.new { |h, k| h[k] = [] }
|
93
93
|
body.split.each_slice(3) do |tuple|
|
94
94
|
break if tuple[0] =~ /^(Obsoleting|Security:|Update)/
|
95
|
-
break unless tuple[1]
|
95
|
+
break unless tuple[1] =~ /^(?:(\d+):)?(\S+)-(\S+)$/
|
96
96
|
hash = update_to_hash(*tuple[0..1])
|
97
97
|
# Create entries for both the package name without a version and a
|
98
98
|
# version since yum considers those as mostly interchangeable.
|
@@ -74,7 +74,7 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
74
74
|
|
75
75
|
flushed = []
|
76
76
|
begin
|
77
|
-
@modified.
|
77
|
+
@modified.sort_by(&:to_s).uniq.each do |target|
|
78
78
|
Puppet.debug "Flushing #{@resource_type.name} provider target #{target}"
|
79
79
|
flushed << target
|
80
80
|
flush_target(target)
|
@@ -46,14 +46,8 @@ Puppet::Type.type(:service).provide :daemontools, :parent => :base do
|
|
46
46
|
|
47
47
|
# Determine the daemon path.
|
48
48
|
def defpath
|
49
|
-
|
50
|
-
|
51
|
-
if Puppet::FileSystem.exist?(path)
|
52
|
-
@defpath = path
|
53
|
-
break
|
54
|
-
end
|
55
|
-
end
|
56
|
-
raise "Could not find the daemon directory (tested [/var/lib/service,/etc])" unless @defpath
|
49
|
+
@defpath ||= ["/var/lib/service", "/etc"].find do |path|
|
50
|
+
Puppet::FileSystem.exist?(path) && FileTest.directory?(path)
|
57
51
|
end
|
58
52
|
@defpath
|
59
53
|
end
|
@@ -65,6 +59,10 @@ Puppet::Type.type(:service).provide :daemontools, :parent => :base do
|
|
65
59
|
# ie enabled or not
|
66
60
|
def self.instances
|
67
61
|
path = self.defpath
|
62
|
+
unless path
|
63
|
+
Puppet.info("#{self.name} is unsuitable because service directory is nil")
|
64
|
+
return
|
65
|
+
end
|
68
66
|
unless FileTest.directory?(path)
|
69
67
|
Puppet.notice "Service path #{path} does not exist"
|
70
68
|
return
|
@@ -109,7 +107,9 @@ Puppet::Type.type(:service).provide :daemontools, :parent => :base do
|
|
109
107
|
# note that this path can be overridden in the resource
|
110
108
|
# definition
|
111
109
|
def daemon
|
112
|
-
|
110
|
+
path = resource[:path]
|
111
|
+
raise Puppet::Error.new("#{self.class.name} must specify a path for daemon directory") unless path
|
112
|
+
File.join(path, resource[:name])
|
113
113
|
end
|
114
114
|
|
115
115
|
def status
|
@@ -79,7 +79,7 @@ Puppet::Type.type(:service).provide :openbsd, :parent => :init do
|
|
79
79
|
def running?
|
80
80
|
output = execute([command(:rcctl), "check", @resource[:name]],
|
81
81
|
:failonfail => false, :combine => false, :squelch => false).chomp
|
82
|
-
return true if output
|
82
|
+
return true if output =~ /\(ok\)/
|
83
83
|
end
|
84
84
|
|
85
85
|
# Uses the wrapper to prevent failure when the service is not running;
|
@@ -17,7 +17,7 @@ Puppet::Type.type(:service).provide :rcng, :parent => :bsd do
|
|
17
17
|
if Puppet::FileSystem.exist?(rcfile)
|
18
18
|
File.open(rcfile).readlines.each do |line|
|
19
19
|
# Now look for something that looks like "service=${service:=YES}" or "service=YES"
|
20
|
-
if line
|
20
|
+
if line =~ /^\s*#{@resource[:name]}=(?:YES|\${#{@resource[:name]}:=YES})/
|
21
21
|
return :true
|
22
22
|
end
|
23
23
|
end
|
@@ -34,7 +34,7 @@ Puppet::Type.type(:service).provide :rcng, :parent => :bsd do
|
|
34
34
|
if Puppet::FileSystem.exist?(rcfile)
|
35
35
|
newcontents = []
|
36
36
|
File.open(rcfile).readlines.each do |line|
|
37
|
-
if line
|
37
|
+
if line =~ /^\s*#{@resource[:name]}=(NO|\$\{#{@resource[:name]}:NO\})/
|
38
38
|
line = "#{@resource[:name]}=${#{@resource[:name]}:=YES}"
|
39
39
|
end
|
40
40
|
newcontents.push(line)
|
@@ -40,14 +40,8 @@ Puppet::Type.type(:service).provide :runit, :parent => :daemontools do
|
|
40
40
|
# this is necessary to autodetect a valid resource
|
41
41
|
# default path, since there is no standard for such directory.
|
42
42
|
def defpath
|
43
|
-
|
44
|
-
|
45
|
-
if Puppet::FileSystem.exist?(path)
|
46
|
-
@defpath = path
|
47
|
-
break
|
48
|
-
end
|
49
|
-
end
|
50
|
-
raise "Could not find the daemon directory (tested [/etc/sv,/var/lib/service])" unless @defpath
|
43
|
+
@defpath ||= ["/var/lib/service", "/etc/sv"].find do |path|
|
44
|
+
Puppet::FileSystem.exist?(path) && FileTest.directory?(path)
|
51
45
|
end
|
52
46
|
@defpath
|
53
47
|
end
|
@@ -44,7 +44,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
|
|
44
44
|
# in the provider's believed state of the service and the actual state.
|
45
45
|
# @param action [String,Symbol] One of 'enable', 'disable', 'mask' or 'unmask'
|
46
46
|
def systemctl_change_enable(action)
|
47
|
-
output = systemctl(action, @resource[:name])
|
47
|
+
output = systemctl(action, '--', @resource[:name])
|
48
48
|
rescue
|
49
49
|
raise Puppet::Error, "Could not #{action} #{self.name}: #{output}", $!.backtrace
|
50
50
|
ensure
|
@@ -57,7 +57,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
|
|
57
57
|
|
58
58
|
def get_start_link_count
|
59
59
|
# Start links don't include '.service'. Just search for the service name.
|
60
|
-
if @resource[:name]
|
60
|
+
if @resource[:name] =~ /\.service/
|
61
61
|
link_name = @resource[:name].split('.')[0]
|
62
62
|
else
|
63
63
|
link_name = @resource[:name]
|
@@ -68,7 +68,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
|
|
68
68
|
|
69
69
|
def cached_enabled?
|
70
70
|
return @cached_enabled if @cached_enabled
|
71
|
-
cmd = [command(:systemctl), 'is-enabled', @resource[:name]]
|
71
|
+
cmd = [command(:systemctl), 'is-enabled', '--', @resource[:name]]
|
72
72
|
@cached_enabled = execute(cmd, :failonfail => false).strip
|
73
73
|
end
|
74
74
|
|
@@ -87,7 +87,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
|
|
87
87
|
# The indirect state indicates that the unit is not enabled.
|
88
88
|
return :false if output == 'indirect'
|
89
89
|
return :true if (code == 0)
|
90
|
-
if (output.empty?) && (code > 0) && (Facter.value(:osfamily).
|
90
|
+
if (output.empty?) && (code > 0) && (Facter.value(:osfamily).casecmp('debian').zero?)
|
91
91
|
ret = debian_enabled?
|
92
92
|
return ret if ret
|
93
93
|
end
|
@@ -127,10 +127,10 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
|
|
127
127
|
# This function is called only on start & restart unit options.
|
128
128
|
# Reference: (PUP-3483) Systemd provider doesn't scan for changed units
|
129
129
|
def daemon_reload?
|
130
|
-
cmd = [command(:systemctl), 'show', @resource[:name], '--property=NeedDaemonReload']
|
130
|
+
cmd = [command(:systemctl), 'show', '--', @resource[:name], '--property=NeedDaemonReload']
|
131
131
|
daemon_reload = execute(cmd, :failonfail => false).strip.split('=').last
|
132
132
|
if daemon_reload == 'yes'
|
133
|
-
daemon_reload_cmd = [command(:systemctl), 'daemon-reload']
|
133
|
+
daemon_reload_cmd = [command(:systemctl), '--', 'daemon-reload']
|
134
134
|
execute(daemon_reload_cmd, :failonfail => false)
|
135
135
|
end
|
136
136
|
end
|
@@ -150,20 +150,20 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
|
|
150
150
|
end
|
151
151
|
|
152
152
|
def restartcmd
|
153
|
-
[command(:systemctl), "restart", @resource[:name]]
|
153
|
+
[command(:systemctl), "restart", '--', @resource[:name]]
|
154
154
|
end
|
155
155
|
|
156
156
|
def startcmd
|
157
157
|
self.unmask
|
158
|
-
[command(:systemctl), "start", @resource[:name]]
|
158
|
+
[command(:systemctl), "start", '--', @resource[:name]]
|
159
159
|
end
|
160
160
|
|
161
161
|
def stopcmd
|
162
|
-
[command(:systemctl), "stop", @resource[:name]]
|
162
|
+
[command(:systemctl), "stop", '--', @resource[:name]]
|
163
163
|
end
|
164
164
|
|
165
165
|
def statuscmd
|
166
|
-
[command(:systemctl), "is-active", @resource[:name]]
|
166
|
+
[command(:systemctl), "is-active", '--', @resource[:name]]
|
167
167
|
end
|
168
168
|
|
169
169
|
def restart
|
@@ -504,7 +504,7 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
504
504
|
def next_system_id(min_id=20)
|
505
505
|
dscl_output = dscl '.', '-list', '/Users', 'uid'
|
506
506
|
# We're ok with throwing away negative uids here. Also, remove nil values.
|
507
|
-
user_ids = dscl_output.split.compact.collect { |l| l.to_i if l
|
507
|
+
user_ids = dscl_output.split.compact.collect { |l| l.to_i if l =~ /^\d+$/ }
|
508
508
|
ids = user_ids.compact!.sort! { |a,b| a.to_f <=> b.to_f }
|
509
509
|
# We're just looking for an unused id in our sorted array.
|
510
510
|
ids.each_index do |i|
|
@@ -36,7 +36,7 @@ Puppet::Type.type(:user).provide :user_role_add, :parent => :useradd, :source =>
|
|
36
36
|
has_features :manages_homedir, :allows_duplicates, :manages_solaris_rbac, :manages_passwords, :manages_password_age, :manages_shell
|
37
37
|
|
38
38
|
def check_valid_shell
|
39
|
-
unless File.
|
39
|
+
unless File.exist?(@resource.should(:shell))
|
40
40
|
raise(Puppet::Error, "Shell #{@resource.should(:shell)} must exist")
|
41
41
|
end
|
42
42
|
unless File.executable?(@resource.should(:shell).to_s)
|
@@ -55,35 +55,44 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
|
|
55
55
|
get(:uid)
|
56
56
|
end
|
57
57
|
|
58
|
+
def comment
|
59
|
+
return localcomment if @resource.forcelocal?
|
60
|
+
get(:comment)
|
61
|
+
end
|
62
|
+
|
58
63
|
def finduser(key, value)
|
59
64
|
passwd_file = "/etc/passwd"
|
60
|
-
passwd_keys = [
|
65
|
+
passwd_keys = [:account, :password, :uid, :gid, :gecos, :directory, :shell]
|
61
66
|
index = passwd_keys.index(key)
|
62
67
|
File.open(passwd_file) do |f|
|
63
68
|
f.each_line do |line|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
end
|
69
|
+
user = line.split(":")
|
70
|
+
if user[index] == value
|
71
|
+
return Hash[passwd_keys.zip(user)]
|
72
|
+
end
|
69
73
|
end
|
70
74
|
end
|
71
75
|
false
|
72
76
|
end
|
73
77
|
|
74
78
|
def local_username
|
75
|
-
finduser(
|
79
|
+
finduser(:uid, @resource.uid)
|
76
80
|
end
|
77
81
|
|
78
82
|
def localuid
|
79
|
-
user = finduser(
|
80
|
-
return user[
|
83
|
+
user = finduser(:account, resource[:name])
|
84
|
+
return user[:uid] if user
|
81
85
|
false
|
82
86
|
end
|
83
87
|
|
88
|
+
def localcomment
|
89
|
+
user = finduser(:account, resource[:name])
|
90
|
+
user[:gecos]
|
91
|
+
end
|
92
|
+
|
84
93
|
def shell=(value)
|
85
94
|
check_valid_shell
|
86
|
-
set(
|
95
|
+
set(:shell, value)
|
87
96
|
end
|
88
97
|
|
89
98
|
verify :gid, "GID must be an integer" do |value|
|
@@ -106,8 +115,8 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
|
|
106
115
|
# to ensure consistent behaviour of the useradd provider when
|
107
116
|
# using both useradd and luseradd
|
108
117
|
if (!@resource.allowdupe?) && @resource.forcelocal?
|
109
|
-
if @resource.should(:uid) && finduser(
|
110
|
-
raise(Puppet::Error, "UID #{@resource.should(:uid)
|
118
|
+
if @resource.should(:uid) && finduser(:uid, @resource.should(:uid).to_s)
|
119
|
+
raise(Puppet::Error, "UID #{@resource.should(:uid)} already exists, use allowdupe to force user creation")
|
111
120
|
end
|
112
121
|
elsif @resource.allowdupe? && (!@resource.forcelocal?)
|
113
122
|
return ["-o"]
|
@@ -116,7 +125,7 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
|
|
116
125
|
end
|
117
126
|
|
118
127
|
def check_valid_shell
|
119
|
-
unless File.
|
128
|
+
unless File.exist?(@resource.should(:shell))
|
120
129
|
raise(Puppet::Error, "Shell #{@resource.should(:shell)} must exist")
|
121
130
|
end
|
122
131
|
unless File.executable?(@resource.should(:shell).to_s)
|
@@ -125,14 +125,13 @@ Puppet::Type.type(:user).provide :windows_adsi do
|
|
125
125
|
|
126
126
|
def password=(value)
|
127
127
|
if user.disabled?
|
128
|
-
|
128
|
+
info _("The user account '%s' is disabled; The password will still be changed" % @resource[:name])
|
129
129
|
elsif user.locked_out?
|
130
|
-
|
130
|
+
info _("The user account '%s' is locked out; The password will still be changed" % @resource[:name])
|
131
131
|
elsif user.expired?
|
132
|
-
|
133
|
-
else
|
134
|
-
user.password = value
|
132
|
+
info _("The user account '%s' is expired; The password will still be changed" % @resource[:name])
|
135
133
|
end
|
134
|
+
user.password = value
|
136
135
|
end
|
137
136
|
|
138
137
|
def uid
|
@@ -5,14 +5,14 @@ require 'puppet/file_serving/metadata'
|
|
5
5
|
|
6
6
|
reference = Puppet::Util::Reference.newreference :indirection, :doc => "Indirection types and their terminus classes" do
|
7
7
|
text = ""
|
8
|
-
Puppet::Indirector::Indirection.instances.
|
8
|
+
Puppet::Indirector::Indirection.instances.sort_by(&:to_s).each do |indirection|
|
9
9
|
ind = Puppet::Indirector::Indirection.instance(indirection)
|
10
10
|
name = indirection.to_s.capitalize
|
11
11
|
text << "## " + indirection.to_s + "\n\n"
|
12
12
|
|
13
13
|
text << Puppet::Util::Docs.scrub(ind.doc) + "\n\n"
|
14
14
|
|
15
|
-
Puppet::Indirector::Terminus.terminus_classes(ind.name).
|
15
|
+
Puppet::Indirector::Terminus.terminus_classes(ind.name).sort_by(&:to_s).each do |terminus|
|
16
16
|
terminus_name = terminus.to_s
|
17
17
|
term_class = Puppet::Indirector::Terminus.terminus_class(ind.name, terminus)
|
18
18
|
if term_class
|
@@ -19,9 +19,7 @@ etc.), prevent Puppet from making changes (`noop`), and change logging verbosity
|
|
19
19
|
params << param
|
20
20
|
}
|
21
21
|
|
22
|
-
params.
|
23
|
-
a.to_s <=> b.to_s
|
24
|
-
}.each { |param|
|
22
|
+
params.sort_by(&:to_s).each { |param|
|
25
23
|
str << markdown_header(param.to_s, 3)
|
26
24
|
str << scrub(Puppet::Type.metaparamdoc(param))
|
27
25
|
str << "\n\n"
|
@@ -34,7 +34,7 @@ providers = Puppet::Util::Reference.newreference :providers, :title => "Provider
|
|
34
34
|
|
35
35
|
notes = []
|
36
36
|
default = type.defaultprovider ? type.defaultprovider.name : 'none'
|
37
|
-
type.providers.
|
37
|
+
type.providers.sort_by(&:to_s).each do |pname|
|
38
38
|
data = []
|
39
39
|
table_data[pname] = data
|
40
40
|
provider = type.provider(pname)
|
@@ -49,9 +49,7 @@ Puppet::Util::Reference.newreference :type, :doc => "All Puppet resource types a
|
|
49
49
|
|
50
50
|
}
|
51
51
|
|
52
|
-
types.
|
53
|
-
a.to_s <=> b.to_s
|
54
|
-
}.each { |name,type|
|
52
|
+
types.sort_by(&:to_s).each { |name,type|
|
55
53
|
|
56
54
|
str << "
|
57
55
|
|
@@ -70,9 +68,7 @@ Puppet::Util::Reference.newreference :type, :doc => "All Puppet resource types a
|
|
70
68
|
end
|
71
69
|
|
72
70
|
docs = {}
|
73
|
-
type.validproperties.
|
74
|
-
a.to_s <=> b.to_s
|
75
|
-
}.reject { |sname|
|
71
|
+
type.validproperties.sort_by(&:to_s).reject { |sname|
|
76
72
|
property = type.propertybyname(sname)
|
77
73
|
property.nodoc
|
78
74
|
}.each { |sname|
|
@@ -93,9 +89,7 @@ Puppet::Util::Reference.newreference :type, :doc => "All Puppet resource types a
|
|
93
89
|
}
|
94
90
|
|
95
91
|
str << markdown_header("Parameters", 4) + "\n"
|
96
|
-
type.parameters.
|
97
|
-
a.to_s <=> b.to_s
|
98
|
-
}.each { |type_name, param|
|
92
|
+
type.parameters.sort_by(&:to_s).each { |type_name, param|
|
99
93
|
docs[type_name] = scrub(type.paramdoc(type_name))
|
100
94
|
}
|
101
95
|
|
data/lib/puppet/reports.rb
CHANGED
@@ -74,7 +74,7 @@ class Puppet::Reports
|
|
74
74
|
|
75
75
|
# Use this method so they all get loaded
|
76
76
|
instance_loader(:report).loadall(Puppet.lookup(:current_environment))
|
77
|
-
loaded_instances(:report).
|
77
|
+
loaded_instances(:report).sort_by(&:to_s).each do |name|
|
78
78
|
mod = self.report(name)
|
79
79
|
docs << "#{name}\n#{"-" * name.to_s.length}\n"
|
80
80
|
|
data/lib/puppet/resource.rb
CHANGED
@@ -631,7 +631,7 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
631
631
|
result.add_resource newres
|
632
632
|
end
|
633
633
|
|
634
|
-
message = convert.to_s.
|
634
|
+
message = convert.to_s.tr "_", " "
|
635
635
|
edges.each do |edge|
|
636
636
|
# Skip edges between virtual resources.
|
637
637
|
next if virtual_not_exported?(edge.source)
|