chef 11.12.0.alpha.1 → 11.12.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/chef/api_client/registration.rb +46 -9
- data/lib/chef/application.rb +1 -0
- data/lib/chef/application/client.rb +25 -24
- data/lib/chef/client.rb +34 -0
- data/lib/chef/config.rb +11 -0
- data/lib/chef/cookbook/chefignore.rb +10 -2
- data/lib/chef/cookbook/metadata.rb +31 -3
- data/lib/chef/cookbook/synchronizer.rb +2 -2
- data/lib/chef/cookbook/syntax_check.rb +4 -4
- data/lib/chef/encrypted_data_bag_item.rb +37 -1
- data/lib/chef/exceptions.rb +1 -0
- data/lib/chef/guard_interpreter/default_guard_interpreter.rb +42 -0
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +122 -0
- data/lib/chef/http.rb +0 -1
- data/lib/chef/http/decompressor.rb +7 -4
- data/lib/chef/http/simple.rb +5 -0
- data/lib/chef/http/validate_content_length.rb +28 -12
- data/lib/chef/knife.rb +1 -0
- data/lib/chef/knife/client_bulk_delete.rb +48 -9
- data/lib/chef/knife/client_delete.rb +4 -4
- data/lib/chef/knife/cookbook_bulk_delete.rb +1 -1
- data/lib/chef/knife/cookbook_upload.rb +17 -7
- data/lib/chef/knife/core/bootstrap_context.rb +1 -1
- data/lib/chef/knife/core/ui.rb +42 -5
- data/lib/chef/knife/node_run_list_add.rb +31 -2
- data/lib/chef/knife/ssh.rb +44 -31
- data/lib/chef/knife/ssl_check.rb +213 -0
- data/lib/chef/knife/ssl_fetch.rb +145 -0
- data/lib/chef/mixin/deep_merge.rb +13 -5
- data/lib/chef/mixin/shell_out.rb +9 -3
- data/lib/chef/node.rb +23 -4
- data/lib/chef/node/immutable_collections.rb +32 -0
- data/lib/chef/platform/provider_mapping.rb +21 -18
- data/lib/chef/platform/query_helpers.rb +10 -2
- data/lib/chef/policy_builder/expand_node_object.rb +3 -6
- data/lib/chef/provider/cron.rb +25 -3
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/package/dpkg.rb +2 -1
- data/lib/chef/provider/package/windows.rb +80 -0
- data/lib/chef/provider/package/windows/msi.rb +69 -0
- data/lib/chef/provider/powershell_script.rb +19 -6
- data/lib/chef/provider/service/solaris.rb +11 -7
- data/lib/chef/resource.rb +18 -5
- data/lib/chef/resource/conditional.rb +20 -7
- data/lib/chef/resource/cron.rb +18 -2
- data/lib/chef/resource/execute.rb +0 -2
- data/lib/chef/resource/powershell_script.rb +23 -1
- data/lib/chef/resource/script.rb +25 -0
- data/lib/chef/resource/subversion.rb +4 -0
- data/lib/chef/resource/windows_package.rb +79 -0
- data/lib/chef/resource/windows_script.rb +0 -5
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/rest.rb +6 -1
- data/lib/chef/run_context.rb +22 -2
- data/lib/chef/run_context/cookbook_compiler.rb +12 -0
- data/lib/chef/util/editor.rb +92 -0
- data/lib/chef/util/file_edit.rb +22 -54
- data/lib/chef/version.rb +2 -2
- data/lib/chef/win32/api/installer.rb +166 -0
- data/lib/chef/win32/version.rb +8 -0
- data/spec/data/standalone_cookbook/Gemfile +1 -0
- data/spec/data/standalone_cookbook/chefignore +9 -0
- data/spec/data/standalone_cookbook/recipes/default.rb +3 -0
- data/spec/data/standalone_cookbook/vendor/bundle/ruby/2.0.0/gems/multi_json-1.9.0/lib/multi_json.rb +1 -0
- data/spec/functional/resource/powershell_spec.rb +262 -1
- data/spec/functional/win32/versions_spec.rb +3 -3
- data/spec/integration/knife/chefignore_spec.rb +1 -2
- data/spec/integration/knife/raw_spec.rb +8 -13
- data/spec/integration/knife/redirection_spec.rb +6 -14
- data/spec/integration/solo/solo_spec.rb +19 -0
- data/spec/support/shared/functional/windows_script.rb +1 -1
- data/spec/support/shared/integration/app_server_support.rb +42 -0
- data/spec/support/shared/integration/integration_helper.rb +1 -0
- data/spec/support/shared/unit/script_resource.rb +38 -0
- data/spec/unit/api_client/registration_spec.rb +109 -38
- data/spec/unit/application/client_spec.rb +48 -1
- data/spec/unit/cookbook/chefignore_spec.rb +10 -0
- data/spec/unit/cookbook/metadata_spec.rb +45 -1
- data/spec/unit/cookbook/syntax_check_spec.rb +28 -0
- data/spec/unit/cookbook_spec.rb +0 -10
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +56 -0
- data/spec/unit/http/simple_spec.rb +32 -0
- data/spec/unit/http/validate_content_length_spec.rb +187 -0
- data/spec/unit/knife/bootstrap_spec.rb +13 -4
- data/spec/unit/knife/client_bulk_delete_spec.rb +123 -38
- data/spec/unit/knife/client_delete_spec.rb +4 -4
- data/spec/unit/knife/cookbook_upload_spec.rb +181 -88
- data/spec/unit/knife/core/bootstrap_context_spec.rb +11 -1
- data/spec/unit/knife/core/ui_spec.rb +109 -38
- data/spec/unit/knife/node_run_list_add_spec.rb +24 -1
- data/spec/unit/knife/ssh_spec.rb +17 -6
- data/spec/unit/knife/ssl_check_spec.rb +187 -0
- data/spec/unit/knife/ssl_fetch_spec.rb +151 -0
- data/spec/unit/mixin/deep_merge_spec.rb +17 -0
- data/spec/unit/node/immutable_collections_spec.rb +55 -0
- data/spec/unit/node_spec.rb +9 -0
- data/spec/unit/platform/query_helpers_spec.rb +32 -0
- data/spec/unit/platform_spec.rb +193 -175
- data/spec/unit/policy_builder/expand_node_object_spec.rb +1 -1
- data/spec/unit/provider/cron_spec.rb +175 -1
- data/spec/unit/provider/mount/mount_spec.rb +33 -3
- data/spec/unit/provider/package/dpkg_spec.rb +4 -0
- data/spec/unit/provider/package/windows/msi_spec.rb +60 -0
- data/spec/unit/provider/package/windows_spec.rb +80 -0
- data/spec/unit/provider/service/macosx_spec.rb +3 -3
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +35 -10
- data/spec/unit/pure_application_spec.rb +32 -0
- data/spec/unit/recipe_spec.rb +4 -0
- data/spec/unit/resource/conditional_spec.rb +13 -12
- data/spec/unit/resource/cron_spec.rb +7 -2
- data/spec/unit/resource/powershell_spec.rb +85 -2
- data/spec/unit/resource/subversion_spec.rb +5 -0
- data/spec/unit/resource/windows_package_spec.rb +74 -0
- data/spec/unit/resource_spec.rb +23 -1
- data/spec/unit/rest_spec.rb +15 -0
- data/spec/unit/run_context/cookbook_compiler_spec.rb +12 -0
- data/spec/unit/run_context_spec.rb +7 -0
- data/spec/unit/util/editor_spec.rb +152 -0
- data/spec/unit/util/file_edit_spec.rb +37 -1
- metadata +41 -30
@@ -0,0 +1,145 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Daniel DeLeo (<dan@getchef.com>)
|
3
|
+
# Copyright:: Copyright (c) 2014 Chef Software, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'chef/knife/ssl_fetch'
|
20
|
+
require 'chef/config'
|
21
|
+
|
22
|
+
class Chef
|
23
|
+
class Knife
|
24
|
+
class SslFetch < Chef::Knife
|
25
|
+
|
26
|
+
deps do
|
27
|
+
require 'pp'
|
28
|
+
require 'socket'
|
29
|
+
require 'uri'
|
30
|
+
require 'openssl'
|
31
|
+
end
|
32
|
+
|
33
|
+
banner "knife ssl fetch [URL] (options)"
|
34
|
+
|
35
|
+
def initialize(*args)
|
36
|
+
super
|
37
|
+
@uri = nil
|
38
|
+
end
|
39
|
+
|
40
|
+
def uri
|
41
|
+
@uri ||= begin
|
42
|
+
Chef::Log.debug("Checking SSL cert on #{given_uri}")
|
43
|
+
URI.parse(given_uri)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def given_uri
|
48
|
+
(name_args[0] or Chef::Config.chef_server_url)
|
49
|
+
end
|
50
|
+
|
51
|
+
def host
|
52
|
+
uri.host
|
53
|
+
end
|
54
|
+
|
55
|
+
def port
|
56
|
+
uri.port
|
57
|
+
end
|
58
|
+
|
59
|
+
def validate_uri
|
60
|
+
unless host && port
|
61
|
+
invalid_uri!
|
62
|
+
end
|
63
|
+
rescue URI::Error
|
64
|
+
invalid_uri!
|
65
|
+
end
|
66
|
+
|
67
|
+
def invalid_uri!
|
68
|
+
ui.error("Given URI: `#{given_uri}' is invalid")
|
69
|
+
show_usage
|
70
|
+
exit 1
|
71
|
+
end
|
72
|
+
|
73
|
+
def remote_cert_chain
|
74
|
+
tcp_connection = TCPSocket.new(host, port)
|
75
|
+
shady_ssl_connection = OpenSSL::SSL::SSLSocket.new(tcp_connection, noverify_peer_ssl_context)
|
76
|
+
shady_ssl_connection.connect
|
77
|
+
shady_ssl_connection.peer_cert_chain
|
78
|
+
end
|
79
|
+
|
80
|
+
def noverify_peer_ssl_context
|
81
|
+
@noverify_peer_ssl_context ||= begin
|
82
|
+
noverify_peer_context = OpenSSL::SSL::SSLContext.new
|
83
|
+
noverify_peer_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
84
|
+
noverify_peer_context
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
def cn_of(certificate)
|
90
|
+
subject = certificate.subject
|
91
|
+
cn_field_tuple = subject.to_a.find {|field| field[0] == "CN" }
|
92
|
+
cn_field_tuple[1]
|
93
|
+
end
|
94
|
+
|
95
|
+
# Convert the CN of a certificate into something that will work well as a
|
96
|
+
# filename. To do so, all `*` characters are converted to the string
|
97
|
+
# "wildcard" and then all characters other than alphanumeric and hypen
|
98
|
+
# characters are converted to underscores.
|
99
|
+
# NOTE: There is some confustion about what the CN will contain when
|
100
|
+
# using internationalized domain names. RFC 6125 mandates that the ascii
|
101
|
+
# representation be used, but it is not clear whether this is followed in
|
102
|
+
# practice.
|
103
|
+
# https://tools.ietf.org/html/rfc6125#section-6.4.2
|
104
|
+
def normalize_cn(cn)
|
105
|
+
cn.gsub("*", "wildcard").gsub(/[^[:alnum:]\-]/, '_')
|
106
|
+
end
|
107
|
+
|
108
|
+
def configuration
|
109
|
+
Chef::Config
|
110
|
+
end
|
111
|
+
|
112
|
+
def trusted_certs_dir
|
113
|
+
configuration.trusted_certs_dir
|
114
|
+
end
|
115
|
+
|
116
|
+
def write_cert(cert)
|
117
|
+
FileUtils.mkdir_p(trusted_certs_dir)
|
118
|
+
cn = cn_of(cert)
|
119
|
+
filename = File.join(trusted_certs_dir, "#{normalize_cn(cn)}.crt")
|
120
|
+
ui.msg("Adding certificate for #{cn} in #{filename}")
|
121
|
+
File.open(filename, File::CREAT|File::TRUNC|File::RDWR, 0644) do |f|
|
122
|
+
f.print(cert.to_s)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def run
|
127
|
+
validate_uri
|
128
|
+
ui.warn(<<-TRUST_TRUST)
|
129
|
+
Certificates from #{host} will be fetched and placed in your trusted_cert
|
130
|
+
directory (#{trusted_certs_dir}).
|
131
|
+
|
132
|
+
Knife has no means to verify these are the correct certificates. You should
|
133
|
+
verify the authenticity of these certificates after downloading.
|
134
|
+
|
135
|
+
TRUST_TRUST
|
136
|
+
remote_cert_chain.each do |cert|
|
137
|
+
write_cert(cert)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
@@ -111,7 +111,13 @@ class Chef
|
|
111
111
|
end # deep_merge!
|
112
112
|
|
113
113
|
def hash_only_merge(merge_onto, merge_with)
|
114
|
-
hash_only_merge!(merge_onto
|
114
|
+
hash_only_merge!(safe_dup(merge_onto), safe_dup(merge_with))
|
115
|
+
end
|
116
|
+
|
117
|
+
def safe_dup(thing)
|
118
|
+
thing.dup
|
119
|
+
rescue TypeError
|
120
|
+
thing
|
115
121
|
end
|
116
122
|
|
117
123
|
# Deep merge without Array merge.
|
@@ -122,7 +128,11 @@ class Chef
|
|
122
128
|
# If there are two Hashes, recursively merge.
|
123
129
|
if merge_onto.kind_of?(Hash) && merge_with.kind_of?(Hash)
|
124
130
|
merge_with.each do |key, merge_with_value|
|
125
|
-
merge_onto[key] =
|
131
|
+
merge_onto[key] = if merge_onto.has_key?(key)
|
132
|
+
hash_only_merge(merge_onto[key], merge_with_value)
|
133
|
+
else
|
134
|
+
merge_with_value
|
135
|
+
end
|
126
136
|
end
|
127
137
|
merge_onto
|
128
138
|
|
@@ -158,11 +168,9 @@ class Chef
|
|
158
168
|
end
|
159
169
|
|
160
170
|
def deep_merge(source, dest)
|
161
|
-
deep_merge!(source
|
171
|
+
deep_merge!(safe_dup(source), safe_dup(dest))
|
162
172
|
end
|
163
173
|
|
164
174
|
end
|
165
175
|
end
|
166
176
|
end
|
167
|
-
|
168
|
-
|
data/lib/chef/mixin/shell_out.rb
CHANGED
@@ -33,9 +33,7 @@ class Chef
|
|
33
33
|
|
34
34
|
def shell_out(*command_args)
|
35
35
|
cmd = Mixlib::ShellOut.new(*run_command_compatible_options(command_args))
|
36
|
-
|
37
|
-
cmd.live_stream = STDOUT
|
38
|
-
end
|
36
|
+
cmd.live_stream = io_for_live_stream
|
39
37
|
cmd.run_command
|
40
38
|
cmd
|
41
39
|
end
|
@@ -73,6 +71,14 @@ class Chef
|
|
73
71
|
def deprecate_option(old_option, new_option)
|
74
72
|
Chef::Log.logger.warn "DEPRECATION: Chef::Mixin::ShellOut option :#{old_option} is deprecated. Use :#{new_option}"
|
75
73
|
end
|
74
|
+
|
75
|
+
def io_for_live_stream
|
76
|
+
if STDOUT.tty? && !Chef::Config[:daemon] && Chef::Log.debug?
|
77
|
+
STDOUT
|
78
|
+
else
|
79
|
+
nil
|
80
|
+
end
|
81
|
+
end
|
76
82
|
end
|
77
83
|
end
|
78
84
|
end
|
data/lib/chef/node.rb
CHANGED
@@ -42,7 +42,7 @@ class Chef
|
|
42
42
|
|
43
43
|
def_delegators :attributes, :keys, :each_key, :each_value, :key?, :has_key?
|
44
44
|
|
45
|
-
attr_accessor :recipe_list, :run_state, :
|
45
|
+
attr_accessor :recipe_list, :run_state, :override_runlist
|
46
46
|
|
47
47
|
# RunContext will set itself as run_context via this setter when
|
48
48
|
# initialized. This is needed so DSL::IncludeAttribute (in particular,
|
@@ -63,7 +63,8 @@ class Chef
|
|
63
63
|
@name = nil
|
64
64
|
|
65
65
|
@chef_environment = '_default'
|
66
|
-
@
|
66
|
+
@primary_runlist = Chef::RunList.new
|
67
|
+
@override_runlist = Chef::RunList.new
|
67
68
|
|
68
69
|
@attributes = Chef::Node::Attribute.new({}, {}, {}, {})
|
69
70
|
|
@@ -259,10 +260,28 @@ class Chef
|
|
259
260
|
run_list.include?("role[#{role_name}]")
|
260
261
|
end
|
261
262
|
|
263
|
+
def primary_runlist
|
264
|
+
@primary_runlist
|
265
|
+
end
|
266
|
+
|
267
|
+
def override_runlist(*args)
|
268
|
+
args.length > 0 ? @override_runlist.reset!(args) : @override_runlist
|
269
|
+
end
|
270
|
+
|
271
|
+
def select_run_list
|
272
|
+
@override_runlist.empty? ? @primary_runlist : @override_runlist
|
273
|
+
end
|
274
|
+
|
262
275
|
# Returns an Array of roles and recipes, in the order they will be applied.
|
263
276
|
# If you call it with arguments, they will become the new list of roles and recipes.
|
264
277
|
def run_list(*args)
|
265
|
-
|
278
|
+
rl = select_run_list
|
279
|
+
args.length > 0 ? rl.reset!(args) : rl
|
280
|
+
end
|
281
|
+
|
282
|
+
def run_list=(list)
|
283
|
+
rl = select_run_list
|
284
|
+
rl = list
|
266
285
|
end
|
267
286
|
|
268
287
|
# Returns true if this Node expects a given role, false if not.
|
@@ -410,7 +429,7 @@ class Chef
|
|
410
429
|
"default" => attributes.combined_default,
|
411
430
|
"override" => attributes.combined_override,
|
412
431
|
#Render correctly for run_list items so malformed json does not result
|
413
|
-
"run_list" =>
|
432
|
+
"run_list" => @primary_runlist.run_list.map { |item| item.to_s }
|
414
433
|
}
|
415
434
|
result
|
416
435
|
end
|
@@ -96,6 +96,22 @@ class Chef
|
|
96
96
|
Array.new(map {|e| safe_dup(e)})
|
97
97
|
end
|
98
98
|
|
99
|
+
def to_a
|
100
|
+
a = Array.new
|
101
|
+
each do |v|
|
102
|
+
a <<
|
103
|
+
case v
|
104
|
+
when ImmutableArray
|
105
|
+
v.to_a
|
106
|
+
when ImmutableMash
|
107
|
+
v.to_hash
|
108
|
+
else
|
109
|
+
v
|
110
|
+
end
|
111
|
+
end
|
112
|
+
a
|
113
|
+
end
|
114
|
+
|
99
115
|
end
|
100
116
|
|
101
117
|
# == ImmutableMash
|
@@ -187,6 +203,22 @@ class Chef
|
|
187
203
|
Mash.new(self)
|
188
204
|
end
|
189
205
|
|
206
|
+
def to_hash
|
207
|
+
h = Hash.new
|
208
|
+
each_pair do |k, v|
|
209
|
+
h[k] =
|
210
|
+
case v
|
211
|
+
when ImmutableMash
|
212
|
+
v.to_hash
|
213
|
+
when ImmutableArray
|
214
|
+
v.to_a
|
215
|
+
else
|
216
|
+
v
|
217
|
+
end
|
218
|
+
end
|
219
|
+
h
|
220
|
+
end
|
221
|
+
|
190
222
|
end
|
191
223
|
|
192
224
|
end
|
@@ -180,6 +180,7 @@ class Chef
|
|
180
180
|
:package => Chef::Provider::Package::Zypper,
|
181
181
|
:group => Chef::Provider::Group::Suse
|
182
182
|
},
|
183
|
+
# Only OpenSuSE 12.3+ should use the Usermod group provider:
|
183
184
|
">= 12.3" => {
|
184
185
|
:group => Chef::Provider::Group::Usermod
|
185
186
|
}
|
@@ -190,19 +191,6 @@ class Chef
|
|
190
191
|
:cron => Chef::Provider::Cron,
|
191
192
|
:package => Chef::Provider::Package::Zypper,
|
192
193
|
:group => Chef::Provider::Group::Suse
|
193
|
-
},
|
194
|
-
###############################################
|
195
|
-
# TODO: Remove this after ohai update is released.
|
196
|
-
# Only OpenSuSE 12.3+ should use the Usermod group provider:
|
197
|
-
# Ohai before OHAI-339 is applied reports both OpenSuSE and SuSE
|
198
|
-
# Enterprise as "suse", Ohai after OHAI-339 will report OpenSuSE as
|
199
|
-
# "opensuse".
|
200
|
-
#
|
201
|
-
# In order to support OpenSuSE both before and after the Ohai
|
202
|
-
# change, I'm leaving this here. It needs to get removed before
|
203
|
-
# SuSE enterprise 12.3 ships.
|
204
|
-
">= 12.3" => {
|
205
|
-
:group => Chef::Provider::Group::Usermod
|
206
194
|
}
|
207
195
|
},
|
208
196
|
:oracle => {
|
@@ -222,6 +210,15 @@ class Chef
|
|
222
210
|
:ifconfig => Chef::Provider::Ifconfig::Redhat
|
223
211
|
}
|
224
212
|
},
|
213
|
+
:ibm_powerkvm => {
|
214
|
+
:default => {
|
215
|
+
:service => Chef::Provider::Service::Redhat,
|
216
|
+
:cron => Chef::Provider::Cron,
|
217
|
+
:package => Chef::Provider::Package::Yum,
|
218
|
+
:mdadm => Chef::Provider::Mdadm,
|
219
|
+
:ifconfig => Chef::Provider::Ifconfig::Redhat
|
220
|
+
}
|
221
|
+
},
|
225
222
|
:gentoo => {
|
226
223
|
:default => {
|
227
224
|
:package => Chef::Provider::Package::Portage,
|
@@ -233,7 +230,7 @@ class Chef
|
|
233
230
|
:arch => {
|
234
231
|
:default => {
|
235
232
|
:package => Chef::Provider::Package::Pacman,
|
236
|
-
:service => Chef::Provider::Service::
|
233
|
+
:service => Chef::Provider::Service::Systemd,
|
237
234
|
:cron => Chef::Provider::Cron,
|
238
235
|
:mdadm => Chef::Provider::Mdadm
|
239
236
|
}
|
@@ -244,7 +241,9 @@ class Chef
|
|
244
241
|
:service => Chef::Provider::Service::Windows,
|
245
242
|
:user => Chef::Provider::User::Windows,
|
246
243
|
:group => Chef::Provider::Group::Windows,
|
247
|
-
:mount => Chef::Provider::Mount::Windows
|
244
|
+
:mount => Chef::Provider::Mount::Windows,
|
245
|
+
:batch => Chef::Provider::Batch,
|
246
|
+
:powershell_script => Chef::Provider::PowershellScript
|
248
247
|
}
|
249
248
|
},
|
250
249
|
:mingw32 => {
|
@@ -253,7 +252,9 @@ class Chef
|
|
253
252
|
:service => Chef::Provider::Service::Windows,
|
254
253
|
:user => Chef::Provider::User::Windows,
|
255
254
|
:group => Chef::Provider::Group::Windows,
|
256
|
-
:mount => Chef::Provider::Mount::Windows
|
255
|
+
:mount => Chef::Provider::Mount::Windows,
|
256
|
+
:batch => Chef::Provider::Batch,
|
257
|
+
:powershell_script => Chef::Provider::PowershellScript
|
257
258
|
}
|
258
259
|
},
|
259
260
|
:windows => {
|
@@ -262,7 +263,9 @@ class Chef
|
|
262
263
|
:service => Chef::Provider::Service::Windows,
|
263
264
|
:user => Chef::Provider::User::Windows,
|
264
265
|
:group => Chef::Provider::Group::Windows,
|
265
|
-
:mount => Chef::Provider::Mount::Windows
|
266
|
+
:mount => Chef::Provider::Mount::Windows,
|
267
|
+
:batch => Chef::Provider::Batch,
|
268
|
+
:powershell_script => Chef::Provider::PowershellScript
|
266
269
|
}
|
267
270
|
},
|
268
271
|
:solaris => {},
|
@@ -307,7 +310,7 @@ class Chef
|
|
307
310
|
:group => Chef::Provider::Group::Usermod,
|
308
311
|
:user => Chef::Provider::User::Solaris,
|
309
312
|
},
|
310
|
-
"
|
313
|
+
"< 5.11" => {
|
311
314
|
:service => Chef::Provider::Service::Solaris,
|
312
315
|
:package => Chef::Provider::Package::Solaris,
|
313
316
|
:cron => Chef::Provider::Cron::Solaris,
|
@@ -30,11 +30,19 @@ class Chef
|
|
30
30
|
|
31
31
|
def windows_server_2003?
|
32
32
|
return false unless windows?
|
33
|
-
|
34
33
|
require 'ruby-wmi'
|
35
34
|
|
35
|
+
# CHEF-4888: Work around ruby #2618, expected to be fixed in Ruby 2.1.0
|
36
|
+
# https://github.com/ruby/ruby/commit/588504b20f5cc880ad51827b93e571e32446e5db
|
37
|
+
# https://github.com/ruby/ruby/commit/27ed294c7134c0de582007af3c915a635a6506cd
|
38
|
+
WIN32OLE.ole_initialize
|
39
|
+
|
36
40
|
host = WMI::Win32_OperatingSystem.find(:first)
|
37
|
-
(host.version && host.version.start_with?("5.2"))
|
41
|
+
is_server_2003 = (host.version && host.version.start_with?("5.2"))
|
42
|
+
|
43
|
+
WIN32OLE.ole_uninitialize
|
44
|
+
|
45
|
+
is_server_2003
|
38
46
|
end
|
39
47
|
end
|
40
48
|
|
@@ -40,7 +40,6 @@ class Chef
|
|
40
40
|
attr_reader :ohai_data
|
41
41
|
attr_reader :json_attribs
|
42
42
|
attr_reader :override_runlist
|
43
|
-
attr_reader :original_runlist
|
44
43
|
attr_reader :run_context
|
45
44
|
attr_reader :run_list_expansion
|
46
45
|
|
@@ -52,7 +51,6 @@ class Chef
|
|
52
51
|
@events = events
|
53
52
|
|
54
53
|
@node = nil
|
55
|
-
@original_runlist = nil
|
56
54
|
@run_list_expansion = nil
|
57
55
|
end
|
58
56
|
|
@@ -190,7 +188,7 @@ class Chef
|
|
190
188
|
# override_runlist was provided. Chef::Client uses this to decide whether
|
191
189
|
# to do the final node save at the end of the run or not.
|
192
190
|
def temporary_policy?
|
193
|
-
|
191
|
+
!node.override_runlist.empty?
|
194
192
|
end
|
195
193
|
|
196
194
|
########################################
|
@@ -200,10 +198,9 @@ class Chef
|
|
200
198
|
def setup_run_list_override
|
201
199
|
runlist_override_sanity_check!
|
202
200
|
unless(override_runlist.empty?)
|
203
|
-
|
204
|
-
node.run_list(*override_runlist)
|
201
|
+
node.override_runlist(*override_runlist)
|
205
202
|
Chef::Log.warn "Run List override has been provided."
|
206
|
-
Chef::Log.warn "Original Run List: [#{
|
203
|
+
Chef::Log.warn "Original Run List: [#{node.primary_runlist}]"
|
207
204
|
Chef::Log.warn "Overridden Run List: [#{node.run_list}]"
|
208
205
|
end
|
209
206
|
end
|