chef 12.1.2 → 12.2.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/chef/application/client.rb +2 -2
- data/lib/chef/audit/audit_reporter.rb +1 -1
- data/lib/chef/audit/runner.rb +15 -2
- data/lib/chef/client.rb +1 -1
- data/lib/chef/config.rb +6 -4
- data/lib/chef/dsl/powershell.rb +29 -0
- data/lib/chef/exceptions.rb +18 -3
- data/lib/chef/formatters/doc.rb +2 -2
- data/lib/chef/knife/bootstrap.rb +2 -1
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +13 -5
- data/lib/chef/knife/exec.rb +2 -1
- data/lib/chef/knife/ssh.rb +12 -2
- data/lib/chef/mixin/params_validate.rb +42 -19
- data/lib/chef/mixin/powershell_type_coercions.rb +82 -0
- data/lib/chef/mixin/windows_architecture_helper.rb +8 -0
- data/lib/chef/node.rb +1 -1
- data/lib/chef/platform/provider_mapping.rb +0 -107
- data/lib/chef/platform/query_helpers.rb +7 -0
- data/lib/chef/provider/batch.rb +2 -0
- data/lib/chef/provider/cron.rb +2 -0
- data/lib/chef/provider/cron/aix.rb +2 -0
- data/lib/chef/provider/cron/unix.rb +2 -0
- data/lib/chef/provider/deploy.rb +104 -87
- data/lib/chef/provider/dsc_resource.rb +157 -0
- data/lib/chef/provider/env.rb +2 -0
- data/lib/chef/provider/env/windows.rb +2 -0
- data/lib/chef/provider/git.rb +4 -0
- data/lib/chef/provider/group.rb +5 -5
- data/lib/chef/provider/group/dscl.rb +2 -0
- data/lib/chef/provider/group/groupmod.rb +2 -0
- data/lib/chef/provider/group/usermod.rb +2 -0
- data/lib/chef/provider/group/windows.rb +2 -0
- data/lib/chef/provider/mdadm.rb +2 -0
- data/lib/chef/provider/mount/windows.rb +2 -0
- data/lib/chef/provider/package/homebrew.rb +1 -1
- data/lib/chef/provider/package/openbsd.rb +49 -18
- data/lib/chef/provider/package/rubygems.rb +7 -2
- data/lib/chef/provider/powershell_script.rb +2 -0
- data/lib/chef/provider/service/macosx.rb +1 -2
- data/lib/chef/provider/user/dscl.rb +7 -1
- data/lib/chef/provider/user/windows.rb +2 -0
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/recipe.rb +2 -0
- data/lib/chef/resource.rb +9 -0
- data/lib/chef/resource/batch.rb +2 -0
- data/lib/chef/resource/cron.rb +3 -3
- data/lib/chef/resource/deploy.rb +52 -217
- data/lib/chef/resource/dsc_resource.rb +83 -0
- data/lib/chef/resource/env.rb +2 -0
- data/lib/chef/resource/git.rb +1 -1
- data/lib/chef/resource/group.rb +2 -0
- data/lib/chef/resource/homebrew_package.rb +1 -1
- data/lib/chef/resource/lwrp_base.rb +0 -8
- data/lib/chef/resource/mdadm.rb +2 -0
- data/lib/chef/resource/mount.rb +2 -0
- data/lib/chef/resource/powershell_script.rb +2 -0
- data/lib/chef/resource/user.rb +2 -0
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/run_context.rb +1 -1
- data/lib/chef/shell.rb +7 -5
- data/lib/chef/util/dsc/resource_store.rb +110 -0
- data/lib/chef/util/path_helper.rb +76 -0
- data/lib/chef/util/powershell/cmdlet.rb +41 -7
- data/lib/chef/util/powershell/cmdlet_result.rb +18 -3
- data/lib/chef/util/powershell/ps_credential.rb +38 -0
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api.rb +2 -0
- data/lib/chef/win32/api/crypto.rb +63 -0
- data/lib/chef/win32/api/installer.rb +1 -1
- data/lib/chef/win32/crypto.rb +49 -0
- data/lib/chef/workstation_config_loader.rb +4 -3
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +1 -1
- data/spec/functional/resource/cookbook_file_spec.rb +1 -1
- data/spec/functional/resource/deploy_revision_spec.rb +35 -0
- data/spec/functional/resource/directory_spec.rb +1 -1
- data/spec/functional/resource/dsc_resource_spec.rb +93 -0
- data/spec/functional/resource/env_spec.rb +4 -3
- data/spec/functional/resource/file_spec.rb +1 -1
- data/spec/functional/resource/powershell_spec.rb +2 -1
- data/spec/functional/resource/remote_directory_spec.rb +1 -1
- data/spec/functional/resource/remote_file_spec.rb +1 -1
- data/spec/functional/resource/template_spec.rb +1 -1
- data/spec/functional/resource/user/dscl_spec.rb +1 -2
- data/spec/functional/resource/user/useradd_spec.rb +27 -13
- data/spec/functional/util/powershell/cmdlet_spec.rb +3 -3
- data/spec/functional/win32/crypto_spec.rb +57 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/platform_helpers.rb +14 -0
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +5 -5
- data/spec/unit/application/client_spec.rb +4 -4
- data/spec/unit/audit/audit_reporter_spec.rb +1 -1
- data/spec/unit/audit/runner_spec.rb +10 -0
- data/spec/unit/config_spec.rb +2 -8
- data/spec/unit/knife/bootstrap_spec.rb +20 -8
- data/spec/unit/knife/core/subcommand_loader_spec.rb +29 -29
- data/spec/unit/mixin/params_validate_spec.rb +75 -61
- data/spec/unit/mixin/powershell_type_coercions_spec.rb +72 -0
- data/spec/unit/platform/query_helpers_spec.rb +22 -0
- data/spec/unit/platform_spec.rb +0 -5
- data/spec/unit/provider/dsc_resource_spec.rb +84 -0
- data/spec/unit/provider/package/openbsd_spec.rb +105 -17
- data/spec/unit/provider/service/macosx_spec.rb +3 -3
- data/spec/unit/provider_resolver_spec.rb +132 -0
- data/spec/unit/recipe_spec.rb +4 -0
- data/spec/unit/resource/deploy_spec.rb +27 -0
- data/spec/unit/resource/dsc_resource_spec.rb +85 -0
- data/spec/unit/shell_spec.rb +1 -1
- data/spec/unit/util/dsc/resource_store.rb +76 -0
- data/spec/unit/util/powershell/ps_credential_spec.rb +37 -0
- data/spec/unit/workstation_config_loader_spec.rb +1 -1
- metadata +159 -186
@@ -43,6 +43,14 @@ class Chef
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def with_os_architecture(node)
|
46
|
+
node ||= begin
|
47
|
+
os_arch = ENV['PROCESSOR_ARCHITEW6432'] ||
|
48
|
+
ENV['PROCESSOR_ARCHITECTURE']
|
49
|
+
Hash.new.tap do |n|
|
50
|
+
n[:kernel] = Hash.new
|
51
|
+
n[:kernel][:machine] = os_arch == 'AMD64' ? :x86_64 : :i386
|
52
|
+
end
|
53
|
+
end
|
46
54
|
wow64_redirection_state = nil
|
47
55
|
|
48
56
|
if wow64_architecture_override_required?(node, node_windows_architecture(node))
|
data/lib/chef/node.rb
CHANGED
@@ -323,7 +323,7 @@ class Chef
|
|
323
323
|
if attrs.key?("recipes") || attrs.key?("run_list")
|
324
324
|
raise Chef::Exceptions::AmbiguousRunlistSpecification, "please set the node's run list using the 'run_list' attribute only."
|
325
325
|
end
|
326
|
-
Chef::Log.info("Setting the run_list to #{new_run_list.
|
326
|
+
Chef::Log.info("Setting the run_list to #{new_run_list.to_s} from CLI options")
|
327
327
|
run_list(new_run_list)
|
328
328
|
end
|
329
329
|
attrs
|
@@ -38,33 +38,16 @@ class Chef
|
|
38
38
|
require 'chef/providers'
|
39
39
|
|
40
40
|
{
|
41
|
-
:mac_os_x => {
|
42
|
-
:default => {
|
43
|
-
:package => Chef::Provider::Package::Homebrew,
|
44
|
-
:user => Chef::Provider::User::Dscl,
|
45
|
-
:group => Chef::Provider::Group::Dscl
|
46
|
-
}
|
47
|
-
},
|
48
|
-
:mac_os_x_server => {
|
49
|
-
:default => {
|
50
|
-
:package => Chef::Provider::Package::Homebrew,
|
51
|
-
:user => Chef::Provider::User::Dscl,
|
52
|
-
:group => Chef::Provider::Group::Dscl
|
53
|
-
}
|
54
|
-
},
|
55
41
|
:freebsd => {
|
56
42
|
:default => {
|
57
43
|
:group => Chef::Provider::Group::Pw,
|
58
44
|
:user => Chef::Provider::User::Pw,
|
59
|
-
:cron => Chef::Provider::Cron
|
60
45
|
}
|
61
46
|
},
|
62
47
|
:ubuntu => {
|
63
48
|
:default => {
|
64
49
|
:package => Chef::Provider::Package::Apt,
|
65
50
|
:service => Chef::Provider::Service::Debian,
|
66
|
-
:cron => Chef::Provider::Cron,
|
67
|
-
:mdadm => Chef::Provider::Mdadm
|
68
51
|
},
|
69
52
|
">= 11.10" => {
|
70
53
|
:ifconfig => Chef::Provider::Ifconfig::Debian
|
@@ -79,40 +62,30 @@ class Chef
|
|
79
62
|
:default => {
|
80
63
|
:package => Chef::Provider::Package::Apt,
|
81
64
|
:service => Chef::Provider::Service::Debian,
|
82
|
-
:cron => Chef::Provider::Cron,
|
83
|
-
:mdadm => Chef::Provider::Mdadm
|
84
65
|
}
|
85
66
|
},
|
86
67
|
:linaro => {
|
87
68
|
:default => {
|
88
69
|
:package => Chef::Provider::Package::Apt,
|
89
70
|
:service => Chef::Provider::Service::Debian,
|
90
|
-
:cron => Chef::Provider::Cron,
|
91
|
-
:mdadm => Chef::Provider::Mdadm
|
92
71
|
}
|
93
72
|
},
|
94
73
|
:raspbian => {
|
95
74
|
:default => {
|
96
75
|
:package => Chef::Provider::Package::Apt,
|
97
76
|
:service => Chef::Provider::Service::Debian,
|
98
|
-
:cron => Chef::Provider::Cron,
|
99
|
-
:mdadm => Chef::Provider::Mdadm
|
100
77
|
}
|
101
78
|
},
|
102
79
|
:linuxmint => {
|
103
80
|
:default => {
|
104
81
|
:package => Chef::Provider::Package::Apt,
|
105
82
|
:service => Chef::Provider::Service::Upstart,
|
106
|
-
:cron => Chef::Provider::Cron,
|
107
|
-
:mdadm => Chef::Provider::Mdadm
|
108
83
|
}
|
109
84
|
},
|
110
85
|
:debian => {
|
111
86
|
:default => {
|
112
87
|
:package => Chef::Provider::Package::Apt,
|
113
88
|
:service => Chef::Provider::Service::Debian,
|
114
|
-
:cron => Chef::Provider::Cron,
|
115
|
-
:mdadm => Chef::Provider::Mdadm
|
116
89
|
},
|
117
90
|
">= 6.0" => {
|
118
91
|
:service => Chef::Provider::Service::Insserv
|
@@ -124,25 +97,19 @@ class Chef
|
|
124
97
|
:xenserver => {
|
125
98
|
:default => {
|
126
99
|
:service => Chef::Provider::Service::Redhat,
|
127
|
-
:cron => Chef::Provider::Cron,
|
128
100
|
:package => Chef::Provider::Package::Yum,
|
129
|
-
:mdadm => Chef::Provider::Mdadm
|
130
101
|
}
|
131
102
|
},
|
132
103
|
:xcp => {
|
133
104
|
:default => {
|
134
105
|
:service => Chef::Provider::Service::Redhat,
|
135
|
-
:cron => Chef::Provider::Cron,
|
136
106
|
:package => Chef::Provider::Package::Yum,
|
137
|
-
:mdadm => Chef::Provider::Mdadm
|
138
107
|
}
|
139
108
|
},
|
140
109
|
:centos => {
|
141
110
|
:default => {
|
142
111
|
:service => Chef::Provider::Service::Systemd,
|
143
|
-
:cron => Chef::Provider::Cron,
|
144
112
|
:package => Chef::Provider::Package::Yum,
|
145
|
-
:mdadm => Chef::Provider::Mdadm,
|
146
113
|
:ifconfig => Chef::Provider::Ifconfig::Redhat
|
147
114
|
},
|
148
115
|
"< 7" => {
|
@@ -152,17 +119,13 @@ class Chef
|
|
152
119
|
:amazon => {
|
153
120
|
:default => {
|
154
121
|
:service => Chef::Provider::Service::Redhat,
|
155
|
-
:cron => Chef::Provider::Cron,
|
156
122
|
:package => Chef::Provider::Package::Yum,
|
157
|
-
:mdadm => Chef::Provider::Mdadm
|
158
123
|
}
|
159
124
|
},
|
160
125
|
:scientific => {
|
161
126
|
:default => {
|
162
127
|
:service => Chef::Provider::Service::Systemd,
|
163
|
-
:cron => Chef::Provider::Cron,
|
164
128
|
:package => Chef::Provider::Package::Yum,
|
165
|
-
:mdadm => Chef::Provider::Mdadm
|
166
129
|
},
|
167
130
|
"< 7" => {
|
168
131
|
:service => Chef::Provider::Service::Redhat
|
@@ -171,9 +134,7 @@ class Chef
|
|
171
134
|
:fedora => {
|
172
135
|
:default => {
|
173
136
|
:service => Chef::Provider::Service::Systemd,
|
174
|
-
:cron => Chef::Provider::Cron,
|
175
137
|
:package => Chef::Provider::Package::Yum,
|
176
|
-
:mdadm => Chef::Provider::Mdadm,
|
177
138
|
:ifconfig => Chef::Provider::Ifconfig::Redhat
|
178
139
|
},
|
179
140
|
"< 15" => {
|
@@ -183,7 +144,6 @@ class Chef
|
|
183
144
|
:opensuse => {
|
184
145
|
:default => {
|
185
146
|
:service => Chef::Provider::Service::Redhat,
|
186
|
-
:cron => Chef::Provider::Cron,
|
187
147
|
:package => Chef::Provider::Package::Zypper,
|
188
148
|
:group => Chef::Provider::Group::Suse
|
189
149
|
},
|
@@ -195,7 +155,6 @@ class Chef
|
|
195
155
|
:suse => {
|
196
156
|
:default => {
|
197
157
|
:service => Chef::Provider::Service::Systemd,
|
198
|
-
:cron => Chef::Provider::Cron,
|
199
158
|
:package => Chef::Provider::Package::Zypper,
|
200
159
|
:group => Chef::Provider::Group::Gpasswd
|
201
160
|
},
|
@@ -207,9 +166,7 @@ class Chef
|
|
207
166
|
:oracle => {
|
208
167
|
:default => {
|
209
168
|
:service => Chef::Provider::Service::Systemd,
|
210
|
-
:cron => Chef::Provider::Cron,
|
211
169
|
:package => Chef::Provider::Package::Yum,
|
212
|
-
:mdadm => Chef::Provider::Mdadm
|
213
170
|
},
|
214
171
|
"< 7" => {
|
215
172
|
:service => Chef::Provider::Service::Redhat
|
@@ -218,9 +175,7 @@ class Chef
|
|
218
175
|
:redhat => {
|
219
176
|
:default => {
|
220
177
|
:service => Chef::Provider::Service::Systemd,
|
221
|
-
:cron => Chef::Provider::Cron,
|
222
178
|
:package => Chef::Provider::Package::Yum,
|
223
|
-
:mdadm => Chef::Provider::Mdadm,
|
224
179
|
:ifconfig => Chef::Provider::Ifconfig::Redhat
|
225
180
|
},
|
226
181
|
"< 7" => {
|
@@ -230,27 +185,21 @@ class Chef
|
|
230
185
|
:ibm_powerkvm => {
|
231
186
|
:default => {
|
232
187
|
:service => Chef::Provider::Service::Redhat,
|
233
|
-
:cron => Chef::Provider::Cron,
|
234
188
|
:package => Chef::Provider::Package::Yum,
|
235
|
-
:mdadm => Chef::Provider::Mdadm,
|
236
189
|
:ifconfig => Chef::Provider::Ifconfig::Redhat
|
237
190
|
}
|
238
191
|
},
|
239
192
|
:cloudlinux => {
|
240
193
|
:default => {
|
241
194
|
:service => Chef::Provider::Service::Redhat,
|
242
|
-
:cron => Chef::Provider::Cron,
|
243
195
|
:package => Chef::Provider::Package::Yum,
|
244
|
-
:mdadm => Chef::Provider::Mdadm,
|
245
196
|
:ifconfig => Chef::Provider::Ifconfig::Redhat
|
246
197
|
}
|
247
198
|
},
|
248
199
|
:parallels => {
|
249
200
|
:default => {
|
250
201
|
:service => Chef::Provider::Service::Redhat,
|
251
|
-
:cron => Chef::Provider::Cron,
|
252
202
|
:package => Chef::Provider::Package::Yum,
|
253
|
-
:mdadm => Chef::Provider::Mdadm,
|
254
203
|
:ifconfig => Chef::Provider::Ifconfig::Redhat
|
255
204
|
}
|
256
205
|
},
|
@@ -258,46 +207,12 @@ class Chef
|
|
258
207
|
:default => {
|
259
208
|
:package => Chef::Provider::Package::Portage,
|
260
209
|
:service => Chef::Provider::Service::Gentoo,
|
261
|
-
:cron => Chef::Provider::Cron,
|
262
|
-
:mdadm => Chef::Provider::Mdadm
|
263
210
|
}
|
264
211
|
},
|
265
212
|
:arch => {
|
266
213
|
:default => {
|
267
214
|
:package => Chef::Provider::Package::Pacman,
|
268
215
|
:service => Chef::Provider::Service::Systemd,
|
269
|
-
:cron => Chef::Provider::Cron,
|
270
|
-
:mdadm => Chef::Provider::Mdadm
|
271
|
-
}
|
272
|
-
},
|
273
|
-
:mswin => {
|
274
|
-
:default => {
|
275
|
-
:env => Chef::Provider::Env::Windows,
|
276
|
-
:user => Chef::Provider::User::Windows,
|
277
|
-
:group => Chef::Provider::Group::Windows,
|
278
|
-
:mount => Chef::Provider::Mount::Windows,
|
279
|
-
:batch => Chef::Provider::Batch,
|
280
|
-
:powershell_script => Chef::Provider::PowershellScript
|
281
|
-
}
|
282
|
-
},
|
283
|
-
:mingw32 => {
|
284
|
-
:default => {
|
285
|
-
:env => Chef::Provider::Env::Windows,
|
286
|
-
:user => Chef::Provider::User::Windows,
|
287
|
-
:group => Chef::Provider::Group::Windows,
|
288
|
-
:mount => Chef::Provider::Mount::Windows,
|
289
|
-
:batch => Chef::Provider::Batch,
|
290
|
-
:powershell_script => Chef::Provider::PowershellScript
|
291
|
-
}
|
292
|
-
},
|
293
|
-
:windows => {
|
294
|
-
:default => {
|
295
|
-
:env => Chef::Provider::Env::Windows,
|
296
|
-
:user => Chef::Provider::User::Windows,
|
297
|
-
:group => Chef::Provider::Group::Windows,
|
298
|
-
:mount => Chef::Provider::Mount::Windows,
|
299
|
-
:batch => Chef::Provider::Batch,
|
300
|
-
:powershell_script => Chef::Provider::PowershellScript
|
301
216
|
}
|
302
217
|
},
|
303
218
|
:solaris => {},
|
@@ -305,7 +220,6 @@ class Chef
|
|
305
220
|
:default => {
|
306
221
|
:mount => Chef::Provider::Mount::Solaris,
|
307
222
|
:package => Chef::Provider::Package::Ips,
|
308
|
-
:cron => Chef::Provider::Cron::Solaris,
|
309
223
|
:group => Chef::Provider::Group::Usermod
|
310
224
|
}
|
311
225
|
},
|
@@ -313,7 +227,6 @@ class Chef
|
|
313
227
|
:default => {
|
314
228
|
:mount => Chef::Provider::Mount::Solaris,
|
315
229
|
:package => Chef::Provider::Package::Ips,
|
316
|
-
:cron => Chef::Provider::Cron::Solaris,
|
317
230
|
:group => Chef::Provider::Group::Usermod
|
318
231
|
}
|
319
232
|
},
|
@@ -321,7 +234,6 @@ class Chef
|
|
321
234
|
:default => {
|
322
235
|
:mount => Chef::Provider::Mount::Solaris,
|
323
236
|
:package => Chef::Provider::Package::Solaris,
|
324
|
-
:cron => Chef::Provider::Cron::Solaris,
|
325
237
|
:group => Chef::Provider::Group::Usermod
|
326
238
|
}
|
327
239
|
},
|
@@ -329,7 +241,6 @@ class Chef
|
|
329
241
|
:default => {
|
330
242
|
:mount => Chef::Provider::Mount::Solaris,
|
331
243
|
:package => Chef::Provider::Package::Ips,
|
332
|
-
:cron => Chef::Provider::Cron::Solaris,
|
333
244
|
:group => Chef::Provider::Group::Usermod,
|
334
245
|
:user => Chef::Provider::User::Solaris,
|
335
246
|
}
|
@@ -338,14 +249,12 @@ class Chef
|
|
338
249
|
:default => {
|
339
250
|
:mount => Chef::Provider::Mount::Solaris,
|
340
251
|
:package => Chef::Provider::Package::Ips,
|
341
|
-
:cron => Chef::Provider::Cron::Solaris,
|
342
252
|
:group => Chef::Provider::Group::Usermod,
|
343
253
|
:user => Chef::Provider::User::Solaris,
|
344
254
|
},
|
345
255
|
"< 5.11" => {
|
346
256
|
:mount => Chef::Provider::Mount::Solaris,
|
347
257
|
:package => Chef::Provider::Package::Solaris,
|
348
|
-
:cron => Chef::Provider::Cron::Solaris,
|
349
258
|
:group => Chef::Provider::Group::Usermod,
|
350
259
|
:user => Chef::Provider::User::Solaris,
|
351
260
|
}
|
@@ -354,22 +263,9 @@ class Chef
|
|
354
263
|
:default => {
|
355
264
|
:mount => Chef::Provider::Mount::Solaris,
|
356
265
|
:package => Chef::Provider::Package::SmartOS,
|
357
|
-
:cron => Chef::Provider::Cron::Solaris,
|
358
266
|
:group => Chef::Provider::Group::Usermod
|
359
267
|
}
|
360
268
|
},
|
361
|
-
:netbsd => {
|
362
|
-
:default => {
|
363
|
-
:group => Chef::Provider::Group::Groupmod
|
364
|
-
}
|
365
|
-
},
|
366
|
-
:openbsd => {
|
367
|
-
:default => {
|
368
|
-
:group => Chef::Provider::Group::Usermod,
|
369
|
-
:package => Chef::Provider::Package::Openbsd,
|
370
|
-
:service => Chef::Provider::Service::Openbsd
|
371
|
-
}
|
372
|
-
},
|
373
269
|
:hpux => {
|
374
270
|
:default => {
|
375
271
|
:group => Chef::Provider::Group::Usermod
|
@@ -380,7 +276,6 @@ class Chef
|
|
380
276
|
:group => Chef::Provider::Group::Aix,
|
381
277
|
:mount => Chef::Provider::Mount::Aix,
|
382
278
|
:ifconfig => Chef::Provider::Ifconfig::Aix,
|
383
|
-
:cron => Chef::Provider::Cron::Aix,
|
384
279
|
:package => Chef::Provider::Package::Aix,
|
385
280
|
:user => Chef::Provider::User::Aix,
|
386
281
|
:service => Chef::Provider::Service::Aix
|
@@ -390,8 +285,6 @@ class Chef
|
|
390
285
|
:default => {
|
391
286
|
:package => Chef::Provider::Package::Paludis,
|
392
287
|
:service => Chef::Provider::Service::Systemd,
|
393
|
-
:cron => Chef::Provider::Cron,
|
394
|
-
:mdadm => Chef::Provider::Mdadm
|
395
288
|
}
|
396
289
|
},
|
397
290
|
:default => {
|
@@ -47,6 +47,13 @@ class Chef
|
|
47
47
|
node[:languages] && node[:languages][:powershell] &&
|
48
48
|
node[:languages][:powershell][:version].to_i >= 4
|
49
49
|
end
|
50
|
+
|
51
|
+
def supports_dsc_invoke_resource?(node)
|
52
|
+
require 'rubygems'
|
53
|
+
supports_dsc?(node) &&
|
54
|
+
Gem::Version.new(node[:languages][:powershell][:version]) >=
|
55
|
+
Gem::Version.new("5.0.10018.0")
|
56
|
+
end
|
50
57
|
end
|
51
58
|
end
|
52
59
|
end
|
data/lib/chef/provider/batch.rb
CHANGED
data/lib/chef/provider/cron.rb
CHANGED
@@ -25,6 +25,8 @@ class Chef
|
|
25
25
|
class Cron < Chef::Provider
|
26
26
|
include Chef::Mixin::Command
|
27
27
|
|
28
|
+
provides :cron, os: ["!aix", "!solaris2"]
|
29
|
+
|
28
30
|
SPECIAL_TIME_VALUES = [:reboot, :yearly, :annually, :monthly, :weekly, :daily, :midnight, :hourly]
|
29
31
|
CRON_ATTRIBUTES = [:minute, :hour, :day, :month, :weekday, :time, :command, :mailto, :path, :shell, :home, :environment]
|
30
32
|
WEEKDAY_SYMBOLS = [:sunday, :monday, :tuesday, :wednesday, :thursday, :friday, :saturday]
|
data/lib/chef/provider/deploy.rb
CHANGED
@@ -42,18 +42,38 @@ class Chef
|
|
42
42
|
|
43
43
|
# @configuration is not used by Deploy, it is only for backwards compat with
|
44
44
|
# chef-deploy or capistrano hooks that might use it to get environment information
|
45
|
-
@configuration =
|
45
|
+
@configuration = new_resource.to_hash
|
46
46
|
@configuration[:environment] = @configuration[:environment] && @configuration[:environment]["RAILS_ENV"]
|
47
47
|
end
|
48
48
|
|
49
|
+
# @return [Array] create_dirs_before_symlink parameter set on the resource
|
50
|
+
def create_dirs_before_symlink
|
51
|
+
new_resource.create_dirs_before_symlink || []
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [Array] purge_before_symlink paremeter set on the resource
|
55
|
+
def purge_before_symlink
|
56
|
+
new_resource.purge_before_symlink || []
|
57
|
+
end
|
58
|
+
|
59
|
+
# @return [Hash] symlinks parameter set on the resource
|
60
|
+
def symlinks
|
61
|
+
new_resource.symlinks || {}
|
62
|
+
end
|
63
|
+
|
64
|
+
# @return [Hash] symlink_before_migrate parameter set on the resource
|
65
|
+
def symlink_before_migrate
|
66
|
+
new_resource.symlink_before_migrate || {}
|
67
|
+
end
|
68
|
+
|
49
69
|
def whyrun_supported?
|
50
70
|
true
|
51
71
|
end
|
52
72
|
|
53
73
|
def load_current_resource
|
54
|
-
|
55
|
-
@release_path =
|
56
|
-
@shared_path =
|
74
|
+
scm_provider.load_current_resource
|
75
|
+
@release_path = new_resource.deploy_to + "/releases/#{release_slug}"
|
76
|
+
@shared_path = new_resource.shared_path
|
57
77
|
end
|
58
78
|
|
59
79
|
def sudo(command,&block)
|
@@ -62,10 +82,10 @@ class Chef
|
|
62
82
|
|
63
83
|
def run(command, &block)
|
64
84
|
exec = execute(command, &block)
|
65
|
-
exec.user(
|
66
|
-
exec.group(
|
85
|
+
exec.user(new_resource.user) if new_resource.user
|
86
|
+
exec.group(new_resource.group) if new_resource.group
|
67
87
|
exec.cwd(release_path) unless exec.cwd
|
68
|
-
exec.environment(
|
88
|
+
exec.environment(new_resource.environment) unless exec.environment
|
69
89
|
converge_by("execute #{command}") do
|
70
90
|
exec
|
71
91
|
end
|
@@ -78,8 +98,8 @@ class Chef
|
|
78
98
|
#There is no reason to assume 2 deployments in a single chef run, hence fails in whyrun.
|
79
99
|
end
|
80
100
|
|
81
|
-
[
|
82
|
-
|
101
|
+
[ new_resource.before_migrate, new_resource.before_symlink,
|
102
|
+
new_resource.before_restart, new_resource.after_restart ].each do |script|
|
83
103
|
requirements.assert(:deploy, :force_deploy) do |a|
|
84
104
|
callback_file = "#{release_path}/#{script}"
|
85
105
|
a.assertion do
|
@@ -100,7 +120,7 @@ class Chef
|
|
100
120
|
save_release_state
|
101
121
|
if deployed?(release_path )
|
102
122
|
if current_release?(release_path )
|
103
|
-
Chef::Log.debug("#{
|
123
|
+
Chef::Log.debug("#{new_resource} is the latest version")
|
104
124
|
else
|
105
125
|
rollback_to release_path
|
106
126
|
end
|
@@ -117,7 +137,7 @@ class Chef
|
|
117
137
|
converge_by("delete deployed app at #{release_path} prior to force-deploy") do
|
118
138
|
Chef::Log.info("Already deployed app at #{release_path}, forcing.")
|
119
139
|
FileUtils.rm_rf(release_path)
|
120
|
-
Chef::Log.info("#{
|
140
|
+
Chef::Log.info("#{new_resource} forcing deploy of already deployed app at #{release_path}")
|
121
141
|
end
|
122
142
|
end
|
123
143
|
|
@@ -143,7 +163,7 @@ class Chef
|
|
143
163
|
|
144
164
|
releases_to_nuke.each do |i|
|
145
165
|
converge_by("roll back by removing release #{i}") do
|
146
|
-
Chef::Log.info "#{
|
166
|
+
Chef::Log.info "#{new_resource} removing release: #{i}"
|
147
167
|
FileUtils.rm_rf i
|
148
168
|
end
|
149
169
|
release_deleted(i)
|
@@ -157,21 +177,21 @@ class Chef
|
|
157
177
|
copy_cached_repo
|
158
178
|
install_gems
|
159
179
|
enforce_ownership
|
160
|
-
callback(:before_migrate,
|
180
|
+
callback(:before_migrate, new_resource.before_migrate)
|
161
181
|
migrate
|
162
|
-
callback(:before_symlink,
|
182
|
+
callback(:before_symlink, new_resource.before_symlink)
|
163
183
|
symlink
|
164
|
-
callback(:before_restart,
|
184
|
+
callback(:before_restart, new_resource.before_restart)
|
165
185
|
restart
|
166
|
-
callback(:after_restart,
|
186
|
+
callback(:after_restart, new_resource.after_restart)
|
167
187
|
cleanup!
|
168
|
-
Chef::Log.info "#{
|
188
|
+
Chef::Log.info "#{new_resource} deployed to #{new_resource.deploy_to}"
|
169
189
|
end
|
170
190
|
|
171
191
|
def rollback
|
172
|
-
Chef::Log.info "#{
|
192
|
+
Chef::Log.info "#{new_resource} rolling back to previous release #{release_path}"
|
173
193
|
symlink
|
174
|
-
Chef::Log.info "#{
|
194
|
+
Chef::Log.info "#{new_resource} restarting with previous release"
|
175
195
|
restart
|
176
196
|
end
|
177
197
|
|
@@ -179,7 +199,7 @@ class Chef
|
|
179
199
|
@collection = Chef::ResourceCollection.new
|
180
200
|
case callback_code
|
181
201
|
when Proc
|
182
|
-
Chef::Log.info "#{
|
202
|
+
Chef::Log.info "#{new_resource} running callback #{what}"
|
183
203
|
recipe_eval(&callback_code)
|
184
204
|
when String
|
185
205
|
run_callback_from_file("#{release_path}/#{callback_code}")
|
@@ -191,17 +211,17 @@ class Chef
|
|
191
211
|
def migrate
|
192
212
|
run_symlinks_before_migrate
|
193
213
|
|
194
|
-
if
|
214
|
+
if new_resource.migrate
|
195
215
|
enforce_ownership
|
196
216
|
|
197
|
-
environment =
|
217
|
+
environment = new_resource.environment
|
198
218
|
env_info = environment && environment.map do |key_and_val|
|
199
219
|
"#{key_and_val.first}='#{key_and_val.last}'"
|
200
220
|
end.join(" ")
|
201
221
|
|
202
|
-
converge_by("execute migration command #{
|
203
|
-
Chef::Log.info "#{
|
204
|
-
run_command(run_options(:command =>
|
222
|
+
converge_by("execute migration command #{new_resource.migration_command}") do
|
223
|
+
Chef::Log.info "#{new_resource} migrating #{new_resource.user} with environment #{env_info}"
|
224
|
+
run_command(run_options(:command => new_resource.migration_command, :cwd=>release_path, :log_level => :info))
|
205
225
|
end
|
206
226
|
end
|
207
227
|
end
|
@@ -210,18 +230,18 @@ class Chef
|
|
210
230
|
purge_tempfiles_from_current_release
|
211
231
|
link_tempfiles_to_current_release
|
212
232
|
link_current_release_to_production
|
213
|
-
Chef::Log.info "#{
|
233
|
+
Chef::Log.info "#{new_resource} updated symlinks"
|
214
234
|
end
|
215
235
|
|
216
236
|
def restart
|
217
|
-
if restart_cmd =
|
237
|
+
if restart_cmd = new_resource.restart_command
|
218
238
|
if restart_cmd.kind_of?(Proc)
|
219
|
-
Chef::Log.info("#{
|
239
|
+
Chef::Log.info("#{new_resource} restarting app with embedded recipe")
|
220
240
|
recipe_eval(&restart_cmd)
|
221
241
|
else
|
222
|
-
converge_by("restart app using command #{
|
223
|
-
Chef::Log.info("#{
|
224
|
-
run_command(run_options(:command =>
|
242
|
+
converge_by("restart app using command #{new_resource.restart_command}") do
|
243
|
+
Chef::Log.info("#{new_resource} restarting app")
|
244
|
+
run_command(run_options(:command => new_resource.restart_command, :cwd => new_resource.current_path))
|
225
245
|
end
|
226
246
|
end
|
227
247
|
end
|
@@ -232,10 +252,10 @@ class Chef
|
|
232
252
|
release_created(release_path)
|
233
253
|
end
|
234
254
|
|
235
|
-
chop = -1 -
|
255
|
+
chop = -1 - new_resource.keep_releases
|
236
256
|
all_releases[0..chop].each do |old_release|
|
237
257
|
converge_by("remove old release #{old_release}") do
|
238
|
-
Chef::Log.info "#{
|
258
|
+
Chef::Log.info "#{new_resource} removing old release #{old_release}"
|
239
259
|
FileUtils.rm_rf(old_release)
|
240
260
|
end
|
241
261
|
release_deleted(old_release)
|
@@ -243,11 +263,11 @@ class Chef
|
|
243
263
|
end
|
244
264
|
|
245
265
|
def all_releases
|
246
|
-
Dir.glob(Chef::Util::PathHelper.escape_glob(
|
266
|
+
Dir.glob(Chef::Util::PathHelper.escape_glob(new_resource.deploy_to) + "/releases/*").sort
|
247
267
|
end
|
248
268
|
|
249
269
|
def update_cached_repo
|
250
|
-
if
|
270
|
+
if new_resource.svn_force_export
|
251
271
|
# TODO assertion, non-recoverable - @scm_provider must be svn if force_export?
|
252
272
|
svn_force_export
|
253
273
|
else
|
@@ -256,95 +276,92 @@ class Chef
|
|
256
276
|
end
|
257
277
|
|
258
278
|
def run_scm_sync
|
259
|
-
|
279
|
+
scm_provider.run_action(:sync)
|
260
280
|
end
|
261
281
|
|
262
282
|
def svn_force_export
|
263
|
-
Chef::Log.info "#{
|
264
|
-
|
283
|
+
Chef::Log.info "#{new_resource} exporting source repository"
|
284
|
+
scm_provider.run_action(:force_export)
|
265
285
|
end
|
266
286
|
|
267
287
|
def copy_cached_repo
|
268
|
-
target_dir_path =
|
288
|
+
target_dir_path = new_resource.deploy_to + "/releases"
|
269
289
|
converge_by("deploy from repo to #{target_dir_path} ") do
|
270
290
|
FileUtils.rm_rf(release_path) if ::File.exist?(release_path)
|
271
291
|
FileUtils.mkdir_p(target_dir_path)
|
272
|
-
FileUtils.cp_r(::File.join(
|
273
|
-
Chef::Log.info "#{
|
292
|
+
FileUtils.cp_r(::File.join(new_resource.destination, "."), release_path, :preserve => true)
|
293
|
+
Chef::Log.info "#{new_resource} copied the cached checkout to #{release_path}"
|
274
294
|
end
|
275
295
|
end
|
276
296
|
|
277
297
|
def enforce_ownership
|
278
|
-
converge_by("force ownership of #{
|
279
|
-
FileUtils.chown_R(
|
280
|
-
Chef::Log.info("#{
|
281
|
-
Chef::Log.info("#{
|
298
|
+
converge_by("force ownership of #{new_resource.deploy_to} to #{new_resource.group}:#{new_resource.user}") do
|
299
|
+
FileUtils.chown_R(new_resource.user, new_resource.group, new_resource.deploy_to)
|
300
|
+
Chef::Log.info("#{new_resource} set user to #{new_resource.user}") if new_resource.user
|
301
|
+
Chef::Log.info("#{new_resource} set group to #{new_resource.group}") if new_resource.group
|
282
302
|
end
|
283
303
|
end
|
284
304
|
|
285
305
|
def verify_directories_exist
|
286
|
-
create_dir_unless_exists(
|
287
|
-
create_dir_unless_exists(
|
306
|
+
create_dir_unless_exists(new_resource.deploy_to)
|
307
|
+
create_dir_unless_exists(new_resource.shared_path)
|
288
308
|
end
|
289
309
|
|
290
310
|
def link_current_release_to_production
|
291
|
-
converge_by(["remove existing link at #{
|
292
|
-
"link release #{release_path} into production at #{
|
293
|
-
FileUtils.rm_f(
|
311
|
+
converge_by(["remove existing link at #{new_resource.current_path}",
|
312
|
+
"link release #{release_path} into production at #{new_resource.current_path}"]) do
|
313
|
+
FileUtils.rm_f(new_resource.current_path)
|
294
314
|
begin
|
295
|
-
FileUtils.ln_sf(release_path,
|
315
|
+
FileUtils.ln_sf(release_path, new_resource.current_path)
|
296
316
|
rescue => e
|
297
317
|
raise Chef::Exceptions::FileNotFound.new("Cannot symlink current release to production: #{e.message}")
|
298
318
|
end
|
299
|
-
Chef::Log.info "#{
|
319
|
+
Chef::Log.info "#{new_resource} linked release #{release_path} into production at #{new_resource.current_path}"
|
300
320
|
end
|
301
321
|
enforce_ownership
|
302
322
|
end
|
303
323
|
|
304
324
|
def run_symlinks_before_migrate
|
305
|
-
links_info =
|
325
|
+
links_info = symlink_before_migrate.map { |src, dst| "#{src} => #{dst}" }.join(", ")
|
306
326
|
converge_by("make pre-migration symlinks: #{links_info}") do
|
307
|
-
|
327
|
+
symlink_before_migrate.each do |src, dest|
|
308
328
|
begin
|
309
|
-
FileUtils.ln_sf(
|
329
|
+
FileUtils.ln_sf(new_resource.shared_path + "/#{src}", release_path + "/#{dest}")
|
310
330
|
rescue => e
|
311
|
-
raise Chef::Exceptions::FileNotFound.new("Cannot symlink #{
|
331
|
+
raise Chef::Exceptions::FileNotFound.new("Cannot symlink #{new_resource.shared_path}/#{src} to #{release_path}/#{dest} before migrate: #{e.message}")
|
312
332
|
end
|
313
333
|
end
|
314
|
-
Chef::Log.info "#{
|
334
|
+
Chef::Log.info "#{new_resource} made pre-migration symlinks"
|
315
335
|
end
|
316
336
|
end
|
317
337
|
|
318
338
|
def link_tempfiles_to_current_release
|
319
|
-
dirs_info =
|
320
|
-
|
339
|
+
dirs_info = create_dirs_before_symlink.join(",")
|
340
|
+
create_dirs_before_symlink.each do |dir|
|
321
341
|
create_dir_unless_exists(release_path + "/#{dir}")
|
322
342
|
end
|
323
|
-
Chef::Log.info("#{
|
343
|
+
Chef::Log.info("#{new_resource} created directories before symlinking: #{dirs_info}")
|
324
344
|
|
325
|
-
links_info =
|
345
|
+
links_info = symlinks.map { |src, dst| "#{src} => #{dst}" }.join(", ")
|
326
346
|
converge_by("link shared paths into current release: #{links_info}") do
|
327
|
-
|
347
|
+
symlinks.each do |src, dest|
|
328
348
|
begin
|
329
|
-
FileUtils.ln_sf(::File.join(
|
349
|
+
FileUtils.ln_sf(::File.join(new_resource.shared_path, src), ::File.join(release_path, dest))
|
330
350
|
rescue => e
|
331
|
-
raise Chef::Exceptions::FileNotFound.new("Cannot symlink shared data #{::File.join(
|
351
|
+
raise Chef::Exceptions::FileNotFound.new("Cannot symlink shared data #{::File.join(new_resource.shared_path, src)} to #{::File.join(release_path, dest)}: #{e.message}")
|
332
352
|
end
|
333
353
|
end
|
334
|
-
Chef::Log.info("#{
|
354
|
+
Chef::Log.info("#{new_resource} linked shared paths into current release: #{links_info}")
|
335
355
|
end
|
336
356
|
run_symlinks_before_migrate
|
337
357
|
enforce_ownership
|
338
358
|
end
|
339
359
|
|
340
|
-
def create_dirs_before_symlink
|
341
|
-
end
|
342
|
-
|
343
360
|
def purge_tempfiles_from_current_release
|
344
|
-
log_info =
|
361
|
+
log_info = purge_before_symlink.join(", ")
|
345
362
|
converge_by("purge directories in checkout #{log_info}") do
|
346
|
-
|
347
|
-
Chef::Log.info("#{
|
363
|
+
purge_before_symlink.each { |dir| FileUtils.rm_rf(release_path + "/#{dir}") }
|
364
|
+
Chef::Log.info("#{new_resource} purged directories in checkout #{log_info}")
|
348
365
|
end
|
349
366
|
end
|
350
367
|
|
@@ -394,10 +411,10 @@ class Chef
|
|
394
411
|
end
|
395
412
|
|
396
413
|
def run_options(run_opts={})
|
397
|
-
run_opts[:user] =
|
398
|
-
run_opts[:group] =
|
399
|
-
run_opts[:environment] =
|
400
|
-
run_opts[:log_tag] =
|
414
|
+
run_opts[:user] = new_resource.user if new_resource.user
|
415
|
+
run_opts[:group] = new_resource.group if new_resource.group
|
416
|
+
run_opts[:environment] = new_resource.environment if new_resource.environment
|
417
|
+
run_opts[:log_tag] = new_resource.to_s
|
401
418
|
run_opts[:log_level] ||= :debug
|
402
419
|
if run_opts[:log_level] == :info
|
403
420
|
if STDOUT.tty? && !Chef::Config[:daemon] && Chef::Log.info?
|
@@ -408,7 +425,7 @@ class Chef
|
|
408
425
|
end
|
409
426
|
|
410
427
|
def run_callback_from_file(callback_file)
|
411
|
-
Chef::Log.info "#{
|
428
|
+
Chef::Log.info "#{new_resource} queueing checkdeploy hook #{callback_file}"
|
412
429
|
recipe_eval do
|
413
430
|
Dir.chdir(release_path) do
|
414
431
|
from_file(callback_file) if ::File.exist?(callback_file)
|
@@ -418,20 +435,20 @@ class Chef
|
|
418
435
|
|
419
436
|
def create_dir_unless_exists(dir)
|
420
437
|
if ::File.directory?(dir)
|
421
|
-
Chef::Log.debug "#{
|
438
|
+
Chef::Log.debug "#{new_resource} not creating #{dir} because it already exists"
|
422
439
|
return false
|
423
440
|
end
|
424
441
|
converge_by("create new directory #{dir}") do
|
425
442
|
begin
|
426
443
|
FileUtils.mkdir_p(dir)
|
427
|
-
Chef::Log.debug "#{
|
428
|
-
if
|
429
|
-
FileUtils.chown(
|
430
|
-
Chef::Log.debug("#{
|
444
|
+
Chef::Log.debug "#{new_resource} created directory #{dir}"
|
445
|
+
if new_resource.user
|
446
|
+
FileUtils.chown(new_resource.user, nil, dir)
|
447
|
+
Chef::Log.debug("#{new_resource} set user to #{new_resource.user} for #{dir}")
|
431
448
|
end
|
432
|
-
if
|
433
|
-
FileUtils.chown(nil,
|
434
|
-
Chef::Log.debug("#{
|
449
|
+
if new_resource.group
|
450
|
+
FileUtils.chown(nil, new_resource.group, dir)
|
451
|
+
Chef::Log.debug("#{new_resource} set group to #{new_resource.group} for #{dir}")
|
435
452
|
end
|
436
453
|
rescue => e
|
437
454
|
raise Chef::Exceptions::FileNotFound.new("Cannot create directory #{dir}: #{e.message}")
|
@@ -442,7 +459,7 @@ class Chef
|
|
442
459
|
def with_rollback_on_error
|
443
460
|
yield
|
444
461
|
rescue ::Exception => e
|
445
|
-
if
|
462
|
+
if new_resource.rollback_on_error
|
446
463
|
Chef::Log.warn "Error on deploying #{release_path}: #{e.message}"
|
447
464
|
failed_release = release_path
|
448
465
|
|
@@ -461,8 +478,8 @@ class Chef
|
|
461
478
|
end
|
462
479
|
|
463
480
|
def save_release_state
|
464
|
-
if ::File.exists?(
|
465
|
-
release = ::File.readlink(
|
481
|
+
if ::File.exists?(new_resource.current_path)
|
482
|
+
release = ::File.readlink(new_resource.current_path)
|
466
483
|
@previous_release_path = release if ::File.exists?(release)
|
467
484
|
end
|
468
485
|
end
|