puppet 5.5.17-universal-darwin → 5.5.18-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +1 -1
- data/Gemfile +2 -3
- data/Gemfile.lock +35 -31
- data/ext/build_defaults.yaml +1 -0
- data/ext/cert_inspector +3 -3
- data/ext/puppet-test +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +4 -4
- data/ext/windows/service/daemon.rb +54 -8
- data/install.rb +6 -6
- data/lib/puppet/application.rb +1 -1
- data/lib/puppet/application/apply.rb +2 -2
- data/lib/puppet/application/describe.rb +3 -9
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/lookup.rb +1 -1
- data/lib/puppet/application/script.rb +2 -2
- data/lib/puppet/configurer.rb +86 -28
- data/lib/puppet/configurer/downloader.rb +2 -6
- data/lib/puppet/defaults.rb +17 -4
- data/lib/puppet/error.rb +9 -1
- data/lib/puppet/external/nagios/base.rb +1 -1
- data/lib/puppet/face/ca.rb +1 -1
- data/lib/puppet/face/module/list.rb +5 -5
- data/lib/puppet/face/module/search.rb +1 -1
- data/lib/puppet/face/module/uninstall.rb +1 -1
- data/lib/puppet/face/module/upgrade.rb +1 -1
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_system.rb +0 -8
- data/lib/puppet/file_system/memory_file.rb +1 -1
- data/lib/puppet/file_system/posix.rb +3 -2
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/inline_epp.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +1 -1
- data/lib/puppet/graph/rb_tree_map.rb +2 -2
- data/lib/puppet/graph/simple_graph.rb +6 -5
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/hiera.rb +2 -0
- data/lib/puppet/indirector/resource/ral.rb +1 -3
- data/lib/puppet/indirector/resource/validator.rb +1 -1
- data/lib/puppet/interface.rb +2 -1
- data/lib/puppet/loaders.rb +0 -1
- data/lib/puppet/metatype/manager.rb +1 -1
- data/lib/puppet/module.rb +1 -1
- data/lib/puppet/module_tool/applications/builder.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +1 -1
- data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
- data/lib/puppet/module_tool/tar/mini.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +12 -11
- data/lib/puppet/network/http/connection.rb +10 -12
- data/lib/puppet/network/http/pool.rb +2 -0
- data/lib/puppet/network/http/rack/rest.rb +2 -2
- data/lib/puppet/network/http/site.rb +1 -1
- data/lib/puppet/network/resolver.rb +2 -2
- data/lib/puppet/node/environment.rb +4 -2
- data/lib/puppet/parser/ast.rb +1 -1
- data/lib/puppet/parser/ast/resourceparam.rb +1 -1
- data/lib/puppet/parser/functions.rb +1 -1
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
- data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
- data/lib/puppet/pops/loaders.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
- data/lib/puppet/pops/merge_strategy.rb +22 -18
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
- data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/pn_parser.rb +17 -16
- data/lib/puppet/pops/puppet_stack.rb +51 -48
- data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
- data/lib/puppet/pops/types/string_converter.rb +10 -10
- data/lib/puppet/pops/types/types.rb +3 -3
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/ensure.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec.rb +6 -2
- data/lib/puppet/provider/mount.rb +1 -1
- data/lib/puppet/provider/mount/parsed.rb +8 -8
- data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
- data/lib/puppet/provider/nameservice/pw.rb +2 -2
- data/lib/puppet/provider/package/dnfmodule.rb +87 -0
- data/lib/puppet/provider/package/dpkg.rb +3 -12
- data/lib/puppet/provider/package/openbsd.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +34 -9
- data/lib/puppet/provider/package/portage.rb +4 -4
- data/lib/puppet/provider/package/rpm.rb +6 -6
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
- data/lib/puppet/provider/service/daemontools.rb +9 -9
- data/lib/puppet/provider/service/openbsd.rb +1 -1
- data/lib/puppet/provider/service/rcng.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +2 -8
- data/lib/puppet/provider/service/systemd.rb +8 -8
- data/lib/puppet/provider/user/directoryservice.rb +1 -1
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +22 -13
- data/lib/puppet/provider/user/windows_adsi.rb +4 -5
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/reference/indirection.rb +2 -2
- data/lib/puppet/reference/metaparameter.rb +1 -3
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/reference/type.rb +3 -9
- data/lib/puppet/reports.rb +1 -1
- data/lib/puppet/resource.rb +1 -1
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/settings.rb +3 -3
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
- data/lib/puppet/ssl/certificate_factory.rb +2 -2
- data/lib/puppet/ssl/host.rb +3 -3
- data/lib/puppet/ssl/oids.rb +1 -1
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/type.rb +2 -4
- data/lib/puppet/type/cron.rb +1 -1
- data/lib/puppet/type/exec.rb +7 -3
- data/lib/puppet/type/file.rb +1 -2
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/group.rb +4 -2
- data/lib/puppet/type/interface.rb +1 -1
- data/lib/puppet/type/notify.rb +3 -2
- data/lib/puppet/type/package.rb +2 -2
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/selboolean.rb +17 -3
- data/lib/puppet/type/service.rb +1 -1
- data/lib/puppet/type/user.rb +4 -2
- data/lib/puppet/util.rb +35 -12
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +8 -14
- data/lib/puppet/util/instance_loader.rb +1 -1
- data/lib/puppet/util/log.rb +1 -1
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/logging.rb +30 -18
- data/lib/puppet/util/metric.rb +2 -2
- data/lib/puppet/util/monkey_patches.rb +1 -1
- data/lib/puppet/util/nagios_maker.rb +2 -2
- data/lib/puppet/util/network_device/cisco/device.rb +1 -1
- data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
- data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
- data/lib/puppet/util/provider_features.rb +2 -4
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/selinux.rb +3 -1
- data/lib/puppet/util/windows/adsi.rb +58 -28
- data/lib/puppet/util/windows/registry.rb +7 -5
- data/lib/puppet/vendor.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet_pal.rb +2 -2
- data/locales/puppet.pot +115 -95
- data/man/man5/puppet.conf.5 +21 -5
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-ca.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-cert.8 +1 -1
- data/man/man8/puppet-certificate.8 +1 -1
- data/man/man8/puppet-certificate_request.8 +1 -1
- data/man/man8/puppet-certificate_revocation_list.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-master.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list-installed.txt +11 -0
- data/spec/integration/configurer_spec.rb +52 -0
- data/spec/integration/type/notify_spec.rb +46 -0
- data/spec/unit/configurer_spec.rb +380 -397
- data/spec/unit/forge/forge_spec.rb +1 -3
- data/spec/unit/forge/repository_spec.rb +1 -3
- data/spec/unit/indirector/resource/ral_spec.rb +4 -4
- data/spec/unit/network/http/connection_spec.rb +26 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/provider/exec_spec.rb +209 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +186 -0
- data/spec/unit/provider/package/dpkg_spec.rb +15 -3
- data/spec/unit/provider/package/pip_spec.rb +51 -6
- data/spec/unit/provider/package/portage_spec.rb +4 -4
- data/spec/unit/provider/package_targetable_spec.rb +60 -0
- data/spec/unit/provider/service/daemontools_spec.rb +24 -0
- data/spec/unit/provider/service/runit_spec.rb +24 -0
- data/spec/unit/provider/service/systemd_spec.rb +22 -22
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/provider/user/useradd_spec.rb +46 -0
- data/spec/unit/type/exec_spec.rb +6 -12
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/type/file_spec.rb +9 -4
- data/spec/unit/type/selboolean_spec.rb +4 -6
- data/spec/unit/util/execution_spec.rb +16 -0
- data/spec/unit/util/http_proxy_spec.rb +97 -0
- data/spec/unit/util/log/destinations_spec.rb +7 -3
- data/spec/unit/util/log_spec.rb +0 -138
- data/spec/unit/util/logging_spec.rb +200 -0
- data/spec/unit/util/windows/adsi_spec.rb +51 -0
- data/tasks/manpages.rake +1 -0
- metadata +12 -5
- data/lib/puppet/pops/loader/null_loader.rb +0 -60
- data/locales/ja/puppet.po +0 -12114
@@ -215,7 +215,7 @@ class Parser
|
|
215
215
|
opts[:type] = opts[:type] || type_from_default || :flag
|
216
216
|
|
217
217
|
## fill in :long
|
218
|
-
opts[:long] = opts[:long] ? opts[:long].to_s : name.to_s.
|
218
|
+
opts[:long] = opts[:long] ? opts[:long].to_s : name.to_s.tr("_", "-")
|
219
219
|
opts[:long] =
|
220
220
|
case opts[:long]
|
221
221
|
when /^--([^-].*)$/
|
@@ -4,13 +4,15 @@ require 'puppet/network/http'
|
|
4
4
|
|
5
5
|
module Puppet::Util::HttpProxy
|
6
6
|
def self.proxy(uri)
|
7
|
-
if
|
8
|
-
|
7
|
+
if http_proxy_host && !no_proxy?(uri)
|
8
|
+
Net::HTTP.new(uri.host, uri.port, self.http_proxy_host, self.http_proxy_port, self.http_proxy_user, self.http_proxy_password)
|
9
9
|
else
|
10
|
-
|
10
|
+
http = Net::HTTP.new(uri.host, uri.port, nil, nil, nil, nil)
|
11
|
+
# Net::HTTP defaults the proxy port even though we said not to
|
12
|
+
# use one. Set it to nil so caller is not surprised
|
13
|
+
http.proxy_port = nil if http.respond_to?(:proxy_port=)
|
14
|
+
http
|
11
15
|
end
|
12
|
-
|
13
|
-
return proxy_class.new(uri.host, uri.port)
|
14
16
|
end
|
15
17
|
|
16
18
|
def self.http_proxy_env
|
@@ -49,14 +51,6 @@ module Puppet::Util::HttpProxy
|
|
49
51
|
host, port = d.split(':')
|
50
52
|
host = Regexp.escape(host).gsub('\*', '.*')
|
51
53
|
|
52
|
-
#If the host of this no_proxy value starts with '.', this entry is
|
53
|
-
#a domain level entry. Don't pin the regex to the beginning of the entry.
|
54
|
-
#If it does not start with a '.' then it is a host specific entry and
|
55
|
-
#should be matched to the destination starting at the beginning.
|
56
|
-
unless host =~ /^\\\./
|
57
|
-
host = "^#{host}"
|
58
|
-
end
|
59
|
-
|
60
54
|
#If this no_proxy entry specifies a port, we want to match it against
|
61
55
|
#the destination port. Otherwise just match hosts.
|
62
56
|
if port
|
@@ -192,7 +186,7 @@ module Puppet::Util::HttpProxy
|
|
192
186
|
|
193
187
|
headers = { 'Accept' => '*/*', 'User-Agent' => Puppet[:http_user_agent] }
|
194
188
|
if Puppet.features.zlib?
|
195
|
-
headers
|
189
|
+
headers["Accept-Encoding"] = Puppet::Network::HTTP::Compression::ACCEPT_ENCODING
|
196
190
|
end
|
197
191
|
|
198
192
|
response = proxy.send(:head, current_uri.path, headers)
|
@@ -40,7 +40,7 @@ module Puppet::Util::InstanceLoader
|
|
40
40
|
instance_loader(type).loadall
|
41
41
|
|
42
42
|
# Use this method so they all get loaded
|
43
|
-
loaded_instances(type).
|
43
|
+
loaded_instances(type).sort_by(&:to_s).each do |name|
|
44
44
|
mod = self.loaded_instance(type, name)
|
45
45
|
docs << "#{name}\n#{"-" * name.to_s.length}\n"
|
46
46
|
|
data/lib/puppet/util/log.rb
CHANGED
@@ -34,7 +34,7 @@ Puppet::Util::Log.newdesttype :syslog do
|
|
34
34
|
end
|
35
35
|
else
|
36
36
|
msg.to_s.split("\n").each do |line|
|
37
|
-
@syslog.send(msg.level, "(%s) %s" % [msg.source.to_s.
|
37
|
+
@syslog.send(msg.level, "(%s) %s" % [msg.source.to_s.delete("%"),
|
38
38
|
line.gsub("%", '%%')
|
39
39
|
]
|
40
40
|
)
|
@@ -77,7 +77,7 @@ Puppet::Util::Log.newdesttype :file do
|
|
77
77
|
|
78
78
|
# create the log file, if it doesn't already exist
|
79
79
|
need_array_start = false
|
80
|
-
file_exists =
|
80
|
+
file_exists = Puppet::FileSystem.exist?(path)
|
81
81
|
if @json == 1
|
82
82
|
need_array_start = true
|
83
83
|
if file_exists
|
data/lib/puppet/util/logging.rb
CHANGED
@@ -48,11 +48,12 @@ module Logging
|
|
48
48
|
# wish to log a message at all; in this case it is likely that you are only calling this method in order
|
49
49
|
# to take advantage of the backtrace logging.
|
50
50
|
def log_exception(exception, message = :default, options = {})
|
51
|
-
|
51
|
+
combined_trace = Puppet[:trace] || options[:trace]
|
52
|
+
puppet_trace = Puppet[:puppet_trace] || options[:puppet_trace]
|
53
|
+
|
52
54
|
if message == :default && exception.is_a?(Puppet::ParseErrorWithIssue)
|
53
55
|
# Retain all detailed info and keep plain message and stacktrace separate
|
54
|
-
backtrace =
|
55
|
-
build_exception_trace(backtrace, exception, trace)
|
56
|
+
backtrace = build_exception_trace(exception, combined_trace, puppet_trace)
|
56
57
|
Puppet::Util::Log.create({
|
57
58
|
:level => options[:level] || :err,
|
58
59
|
:source => log_source,
|
@@ -66,28 +67,27 @@ module Logging
|
|
66
67
|
:node => exception.node
|
67
68
|
}.merge(log_metadata))
|
68
69
|
else
|
69
|
-
err(format_exception(exception, message,
|
70
|
+
err(format_exception(exception, message, combined_trace, puppet_trace))
|
70
71
|
end
|
71
72
|
end
|
72
73
|
|
73
|
-
def build_exception_trace(
|
74
|
-
|
75
|
-
|
76
|
-
arr << line =~ /^(.+):(\d+.*)$/ ? ("#{Pathname($1).realpath}:#{$2}" rescue line) : line
|
77
|
-
end
|
78
|
-
end
|
74
|
+
def build_exception_trace(exception, combined_trace = true, puppet_trace = false)
|
75
|
+
built_trace = format_backtrace(exception, combined_trace, puppet_trace)
|
76
|
+
|
79
77
|
if exception.respond_to?(:original)
|
80
78
|
original = exception.original
|
81
79
|
unless original.nil?
|
82
|
-
|
83
|
-
|
84
|
-
build_exception_trace(
|
80
|
+
built_trace << _('Wrapped exception:')
|
81
|
+
built_trace << original.message
|
82
|
+
built_trace += build_exception_trace(original, combined_trace, puppet_trace)
|
85
83
|
end
|
86
84
|
end
|
85
|
+
|
86
|
+
built_trace
|
87
87
|
end
|
88
88
|
private :build_exception_trace
|
89
89
|
|
90
|
-
def format_exception(exception, message = :default,
|
90
|
+
def format_exception(exception, message = :default, combined_trace = true, puppet_trace = false)
|
91
91
|
arr = []
|
92
92
|
case message
|
93
93
|
when :default
|
@@ -98,16 +98,28 @@ module Logging
|
|
98
98
|
arr << message
|
99
99
|
end
|
100
100
|
|
101
|
-
|
102
|
-
|
103
|
-
end
|
101
|
+
arr += format_backtrace(exception, combined_trace, puppet_trace)
|
102
|
+
|
104
103
|
if exception.respond_to?(:original) and exception.original
|
105
104
|
arr << _("Wrapped exception:")
|
106
|
-
arr << format_exception(exception.original, :default,
|
105
|
+
arr << format_exception(exception.original, :default, combined_trace, puppet_trace)
|
107
106
|
end
|
107
|
+
|
108
108
|
arr.flatten.join("\n")
|
109
109
|
end
|
110
110
|
|
111
|
+
def format_backtrace(exception, combined_trace, puppet_trace)
|
112
|
+
puppetstack = exception.respond_to?(:puppetstack) ? exception.puppetstack : []
|
113
|
+
|
114
|
+
if combined_trace and exception.backtrace
|
115
|
+
Puppet::Util.format_backtrace_array(exception.backtrace, puppetstack)
|
116
|
+
elsif puppet_trace && !puppetstack.empty?
|
117
|
+
Puppet::Util.format_backtrace_array(puppetstack)
|
118
|
+
else
|
119
|
+
[]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
111
123
|
def log_and_raise(exception, message)
|
112
124
|
log_exception(exception, message)
|
113
125
|
raise exception, message + "\n" + exception.to_s, exception.backtrace
|
data/lib/puppet/util/metric.rb
CHANGED
@@ -54,11 +54,11 @@ class Puppet::Util::Metric
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def values
|
57
|
-
@values.
|
57
|
+
@values.sort_by { |a| a[1] }
|
58
58
|
end
|
59
59
|
|
60
60
|
# Convert a name into a label.
|
61
61
|
def self.labelize(name)
|
62
|
-
name.to_s.capitalize.
|
62
|
+
name.to_s.capitalize.tr("_", " ")
|
63
63
|
end
|
64
64
|
end
|
@@ -65,11 +65,11 @@ module Puppet::Util::NagiosMaker
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
target = "/etc/nagios/#{full_name
|
68
|
+
target = "/etc/nagios/#{full_name}.cfg"
|
69
69
|
provider = type.provide(:naginator, :parent => Puppet::Provider::Naginator, :default_target => target) {}
|
70
70
|
provider.nagios_type
|
71
71
|
|
72
|
-
type.desc "The Nagios type #{name
|
72
|
+
type.desc "The Nagios type #{name}. This resource type is autogenerated using the
|
73
73
|
model developed in Naginator, and all of the Nagios types are generated using the
|
74
74
|
same code and the same library.
|
75
75
|
|
@@ -103,7 +103,7 @@ class Puppet::Util::NetworkDevice::Cisco::Device < Puppet::Util::NetworkDevice::
|
|
103
103
|
IF.each do |k,ifnames|
|
104
104
|
if found = ifnames.find { |ifname| interface =~ /^#{ifname}\s*\d/i }
|
105
105
|
found = /^#{found}(.+)\Z/i.match(interface)
|
106
|
-
return "#{k
|
106
|
+
return "#{k}#{found[1]}".gsub(/\s+/,'')
|
107
107
|
end
|
108
108
|
end
|
109
109
|
interface
|
@@ -27,8 +27,8 @@ class Puppet::Util::NetworkDevice::Cisco::Interface
|
|
27
27
|
:etherchannel => [9, ["channel-group %s", "port group %s"]],
|
28
28
|
:ipaddress => [10,
|
29
29
|
lambda do |prefix,ip,option|
|
30
|
-
ip.ipv6? ? "ipv6 address #{ip
|
31
|
-
"ip address #{ip
|
30
|
+
ip.ipv6? ? "ipv6 address #{ip}/#{prefix} #{option}" :
|
31
|
+
"ip address #{ip} #{netmask(Socket::AF_INET,prefix)}"
|
32
32
|
end],
|
33
33
|
:ensure => [11, lambda { |value| value == :present ? "no shutdown" : "shutdown" } ]
|
34
34
|
}
|
@@ -59,7 +59,7 @@ class Puppet::Util::NetworkDevice::Transport::Ssh < Puppet::Util::NetworkDevice:
|
|
59
59
|
# the ssh loop there while still having the ssh connection up
|
60
60
|
# otherwise we wouldn't be able to return ssh stdout/stderr
|
61
61
|
# for a given call of command.
|
62
|
-
return
|
62
|
+
return # rubocop:disable Lint/NonLocalExitFromIterator
|
63
63
|
end
|
64
64
|
|
65
65
|
end
|
@@ -81,7 +81,7 @@ module Puppet::Util::ProviderFeatures
|
|
81
81
|
str = ""
|
82
82
|
@features ||= {}
|
83
83
|
return nil if @features.empty?
|
84
|
-
names = @features.keys.
|
84
|
+
names = @features.keys.sort_by(&:to_s)
|
85
85
|
names.each do |name|
|
86
86
|
doc = @features[name].docs.gsub(/\n\s+/, " ")
|
87
87
|
str << "- *#{name}*: #{doc}\n"
|
@@ -130,9 +130,7 @@ module Puppet::Util::ProviderFeatures
|
|
130
130
|
# Create a method that will list all functional features.
|
131
131
|
@feature_module.send(:define_method, :features) do
|
132
132
|
return false unless defined?(features)
|
133
|
-
features.keys.find_all { |n| feature?(n) }.
|
134
|
-
a.to_s <=> b.to_s
|
135
|
-
}
|
133
|
+
features.keys.find_all { |n| feature?(n) }.sort_by(&:to_s)
|
136
134
|
end
|
137
135
|
|
138
136
|
# Create a method that will determine if a provided list of
|
data/lib/puppet/util/rdoc.rb
CHANGED
@@ -31,7 +31,7 @@ module Puppet::Util::RDoc
|
|
31
31
|
# uses relative_path_from that will generate errors when the slashes don't
|
32
32
|
# properly match. This is a workaround for that issue.
|
33
33
|
if Puppet.features.microsoft_windows? && RDoc::VERSION !~ /^[0-3]\./
|
34
|
-
options += [ "--root", Dir.pwd.
|
34
|
+
options += [ "--root", Dir.pwd.tr('\\', '/')]
|
35
35
|
end
|
36
36
|
options += files
|
37
37
|
|
@@ -60,7 +60,7 @@ class Puppet::Util::Reference
|
|
60
60
|
|
61
61
|
def self.references
|
62
62
|
instance_loader(:reference).loadall
|
63
|
-
loaded_instances(:reference).
|
63
|
+
loaded_instances(:reference).sort_by(&:to_s)
|
64
64
|
end
|
65
65
|
|
66
66
|
attr_accessor :page, :depth, :header, :title, :dynamic
|
data/lib/puppet/util/selinux.rb
CHANGED
@@ -206,7 +206,9 @@ module Puppet::Util::SELinux
|
|
206
206
|
# If possible we use read_nonblock in a loop rather than read to work-
|
207
207
|
# a linux kernel bug. See ticket #1963 for details.
|
208
208
|
mountfh = File.open("/proc/mounts")
|
209
|
-
|
209
|
+
loop do
|
210
|
+
mounts += mountfh.read_nonblock(1024)
|
211
|
+
end
|
210
212
|
else
|
211
213
|
# Otherwise we shell out and let cat do it for us
|
212
214
|
mountfh = IO.popen("/bin/cat /proc/mounts")
|
@@ -1,6 +1,23 @@
|
|
1
1
|
module Puppet::Util::Windows::ADSI
|
2
2
|
require 'ffi'
|
3
3
|
|
4
|
+
# https://docs.microsoft.com/en-us/windows/win32/api/dsrole/ne-dsrole-dsrole_machine_role
|
5
|
+
STANDALONE_WORKSTATION = 0
|
6
|
+
MEMBER_WORKSTATION = 1
|
7
|
+
STANDALONE_SERVER = 2
|
8
|
+
MEMBER_SERVER = 3
|
9
|
+
BACKUP_DOMAIN_CONTROLLER = 4
|
10
|
+
PRIMARY_DOMAIN_CONTROLLER = 5
|
11
|
+
|
12
|
+
DOMAIN_ROLES = {
|
13
|
+
STANDALONE_WORKSTATION => :STANDALONE_WORKSTATION,
|
14
|
+
MEMBER_WORKSTATION => :MEMBER_WORKSTATION,
|
15
|
+
STANDALONE_SERVER => :STANDALONE_SERVER,
|
16
|
+
MEMBER_SERVER => :MEMBER_SERVER,
|
17
|
+
BACKUP_DOMAIN_CONTROLLER => :BACKUP_DOMAIN_CONTROLLER,
|
18
|
+
PRIMARY_DOMAIN_CONTROLLER => :PRIMARY_DOMAIN_CONTROLLER,
|
19
|
+
}
|
20
|
+
|
4
21
|
class << self
|
5
22
|
extend FFI::Library
|
6
23
|
|
@@ -94,6 +111,14 @@ module Puppet::Util::Windows::ADSI
|
|
94
111
|
wmi_connection.execquery(query)
|
95
112
|
end
|
96
113
|
|
114
|
+
def domain_role
|
115
|
+
unless @domain_role
|
116
|
+
query_result = Puppet::Util::Windows::ADSI.execquery('select DomainRole from Win32_ComputerSystem').to_enum.first
|
117
|
+
@domain_role = DOMAIN_ROLES[query_result.DomainRole] if query_result
|
118
|
+
end
|
119
|
+
@domain_role
|
120
|
+
end
|
121
|
+
|
97
122
|
ffi_convention :stdcall
|
98
123
|
|
99
124
|
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724295(v=vs.85).aspx
|
@@ -126,24 +151,24 @@ module Puppet::Util::Windows::ADSI
|
|
126
151
|
Puppet::Util::Windows::SID.name_to_principal('SYSTEM').domain.upcase
|
127
152
|
]
|
128
153
|
end
|
129
|
-
|
154
|
+
|
130
155
|
def uri(name, host = '.')
|
131
156
|
host = '.' if (localized_domains << Socket.gethostname.upcase).include?(host.upcase)
|
132
157
|
Puppet::Util::Windows::ADSI.uri(name, @object_class, host)
|
133
158
|
end
|
134
|
-
|
159
|
+
|
135
160
|
def parse_name(name)
|
136
161
|
if name =~ /\//
|
137
162
|
raise Puppet::Error.new( _("Value must be in DOMAIN\\%{object_class} style syntax") % { object_class: @object_class } )
|
138
163
|
end
|
139
|
-
|
164
|
+
|
140
165
|
matches = name.scan(/((.*)\\)?(.*)/)
|
141
166
|
domain = matches[0][1] || '.'
|
142
167
|
account = matches[0][2]
|
143
|
-
|
168
|
+
|
144
169
|
return account, domain
|
145
170
|
end
|
146
|
-
|
171
|
+
|
147
172
|
# returns Puppet::Util::Windows::SID::Principal[]
|
148
173
|
# may contain objects that represent unresolvable SIDs
|
149
174
|
def get_sids(adsi_child_collection)
|
@@ -151,19 +176,19 @@ module Puppet::Util::Windows::ADSI
|
|
151
176
|
adsi_child_collection.each do |m|
|
152
177
|
sids << Puppet::Util::Windows::SID.ads_to_principal(m)
|
153
178
|
end
|
154
|
-
|
179
|
+
|
155
180
|
sids
|
156
181
|
end
|
157
|
-
|
182
|
+
|
158
183
|
def name_sid_hash(names)
|
159
184
|
return {} if names.nil? || names.empty?
|
160
|
-
|
185
|
+
|
161
186
|
sids = names.map do |name|
|
162
187
|
sid = Puppet::Util::Windows::SID.name_to_principal(name)
|
163
188
|
raise Puppet::Error.new( _("Could not resolve name: %{name}") % { name: name } ) if !sid
|
164
189
|
[sid.sid, sid]
|
165
190
|
end
|
166
|
-
|
191
|
+
|
167
192
|
Hash[ sids ]
|
168
193
|
end
|
169
194
|
|
@@ -176,8 +201,13 @@ module Puppet::Util::Windows::ADSI
|
|
176
201
|
well_known = false
|
177
202
|
if (sid = Puppet::Util::Windows::SID.name_to_principal(name_or_sid))
|
178
203
|
# Examples of SidType include SidTypeUser, SidTypeGroup
|
179
|
-
|
180
|
-
|
204
|
+
if sid.account_type == "SidType#{@object_class.capitalize}".to_sym
|
205
|
+
# Check if we're getting back a local user when domain-joined
|
206
|
+
return true unless [:MEMBER_WORKSTATION, :MEMBER_SERVER].include?(Puppet::Util::Windows::ADSI.domain_role)
|
207
|
+
# The resource domain and the computer name are not always case-matching
|
208
|
+
return sid.domain.casecmp(Puppet::Util::Windows::ADSI.computer_name) == 0
|
209
|
+
end
|
210
|
+
|
181
211
|
# 'well known group' is special as it can be a group like Everyone OR a user like SYSTEM
|
182
212
|
# so try to resolve it
|
183
213
|
# https://msdn.microsoft.com/en-us/library/cc234477.aspx
|
@@ -388,23 +418,23 @@ module Puppet::Util::Windows::ADSI
|
|
388
418
|
ADS_UF_SCRIPT: 0x0001,
|
389
419
|
ADS_UF_ACCOUNTDISABLE: 0x0002,
|
390
420
|
ADS_UF_HOMEDIR_REQUIRED: 0x0008,
|
391
|
-
ADS_UF_LOCKOUT: 0x0010,
|
392
|
-
ADS_UF_PASSWD_NOTREQD: 0x0020,
|
393
|
-
ADS_UF_PASSWD_CANT_CHANGE: 0x0040,
|
394
|
-
ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED: 0x0080,
|
395
|
-
ADS_UF_TEMP_DUPLICATE_ACCOUNT: 0x0100,
|
396
|
-
ADS_UF_NORMAL_ACCOUNT: 0x0200,
|
397
|
-
ADS_UF_INTERDOMAIN_TRUST_ACCOUNT: 0x0800,
|
398
|
-
ADS_UF_WORKSTATION_TRUST_ACCOUNT: 0x1000,
|
399
|
-
ADS_UF_SERVER_TRUST_ACCOUNT: 0x2000,
|
400
|
-
ADS_UF_DONT_EXPIRE_PASSWD: 0x10000,
|
401
|
-
ADS_UF_MNS_LOGON_ACCOUNT: 0x20000,
|
402
|
-
ADS_UF_SMARTCARD_REQUIRED: 0x40000,
|
403
|
-
ADS_UF_TRUSTED_FOR_DELEGATION: 0x80000,
|
404
|
-
ADS_UF_NOT_DELEGATED: 0x100000,
|
405
|
-
ADS_UF_USE_DES_KEY_ONLY: 0x200000,
|
406
|
-
ADS_UF_DONT_REQUIRE_PREAUTH: 0x400000,
|
407
|
-
ADS_UF_PASSWORD_EXPIRED: 0x800000,
|
421
|
+
ADS_UF_LOCKOUT: 0x0010,
|
422
|
+
ADS_UF_PASSWD_NOTREQD: 0x0020,
|
423
|
+
ADS_UF_PASSWD_CANT_CHANGE: 0x0040,
|
424
|
+
ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED: 0x0080,
|
425
|
+
ADS_UF_TEMP_DUPLICATE_ACCOUNT: 0x0100,
|
426
|
+
ADS_UF_NORMAL_ACCOUNT: 0x0200,
|
427
|
+
ADS_UF_INTERDOMAIN_TRUST_ACCOUNT: 0x0800,
|
428
|
+
ADS_UF_WORKSTATION_TRUST_ACCOUNT: 0x1000,
|
429
|
+
ADS_UF_SERVER_TRUST_ACCOUNT: 0x2000,
|
430
|
+
ADS_UF_DONT_EXPIRE_PASSWD: 0x10000,
|
431
|
+
ADS_UF_MNS_LOGON_ACCOUNT: 0x20000,
|
432
|
+
ADS_UF_SMARTCARD_REQUIRED: 0x40000,
|
433
|
+
ADS_UF_TRUSTED_FOR_DELEGATION: 0x80000,
|
434
|
+
ADS_UF_NOT_DELEGATED: 0x100000,
|
435
|
+
ADS_UF_USE_DES_KEY_ONLY: 0x200000,
|
436
|
+
ADS_UF_DONT_REQUIRE_PREAUTH: 0x400000,
|
437
|
+
ADS_UF_PASSWORD_EXPIRED: 0x800000,
|
408
438
|
ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION: 0x1000000
|
409
439
|
}
|
410
440
|
|