cucumber-chef 2.1.0.rc.2 → 2.1.0.rc.3
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/cc-knife +2 -3
- data/bin/cc-push +7 -15
- data/bin/cc-server +38 -7
- data/bin/cucumber-chef +179 -119
- data/cucumber-chef.gemspec +1 -1
- data/lib/cucumber/chef.rb +2 -2
- data/lib/cucumber/chef/config.rb +24 -16
- data/lib/cucumber/chef/helpers.rb +0 -2
- data/lib/cucumber/chef/helpers/chef_client.rb +20 -23
- data/lib/cucumber/chef/helpers/chef_server.rb +7 -7
- data/lib/cucumber/chef/helpers/command.rb +20 -33
- data/lib/cucumber/chef/helpers/container.rb +55 -22
- data/lib/cucumber/chef/helpers/server.rb +45 -31
- data/lib/cucumber/chef/helpers/test_lab.rb +8 -2
- data/lib/cucumber/chef/helpers/utility.rb +2 -23
- data/lib/cucumber/chef/provider.rb +24 -19
- data/lib/cucumber/chef/providers/aws.rb +90 -121
- data/lib/cucumber/chef/providers/vagrant.rb +92 -36
- data/lib/cucumber/chef/provisioner.rb +52 -94
- data/lib/cucumber/chef/server.rb +42 -36
- data/lib/cucumber/chef/steps/provision_steps.rb +7 -7
- data/lib/cucumber/chef/steps/ssh_steps.rb +9 -4
- data/lib/cucumber/chef/templates/bootstrap/ubuntu-precise-test-lab.erb +13 -7
- data/lib/cucumber/chef/templates/cucumber/cc-hooks.rb +1 -1
- data/lib/cucumber/chef/test_lab.rb +38 -9
- data/lib/cucumber/chef/utility.rb +55 -48
- data/lib/cucumber/chef/version.rb +1 -1
- data/spec/cucumber/chef/config_spec.rb +8 -8
- metadata +11 -12
- data/lib/cucumber/chef/bootstrap.rb +0 -95
data/bin/cc-knife
CHANGED
@@ -2,15 +2,14 @@
|
|
2
2
|
require 'cucumber-chef'
|
3
3
|
|
4
4
|
# if we have bundler binstubs use that; otherwise attempt to detect
|
5
|
-
knife = (Cucumber::Chef.locate(:file, "bin", "knife") rescue
|
6
|
-
knife = "/usr/bin/env knife" unless knife
|
5
|
+
knife = (Cucumber::Chef.locate(:file, "bin", "knife") rescue "/usr/bin/env knife")
|
7
6
|
|
8
7
|
message = "cc-knife v#{Cucumber::Chef::VERSION}"
|
9
8
|
puts(message)
|
10
9
|
Cucumber::Chef.logger.info { message }
|
11
10
|
|
12
11
|
Cucumber::Chef::Config.load
|
13
|
-
if (test_lab = Cucumber::Chef::TestLab.new) &&
|
12
|
+
if (test_lab = Cucumber::Chef::TestLab.new) && test_lab.alive?
|
14
13
|
|
15
14
|
knife_rb = Cucumber::Chef.knife_rb
|
16
15
|
if File.exists?(knife_rb)
|
data/bin/cc-push
CHANGED
@@ -1,22 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'cucumber-chef'
|
3
3
|
|
4
|
-
def run_remote(command)
|
5
|
-
$logger.info { "cc-push(run_remote): '#{command}'" }
|
6
|
-
$test_lab.ssh.exec(command)
|
7
|
-
end
|
8
|
-
|
9
|
-
def run_local(command)
|
10
|
-
$logger.info { "cc-push(run_local): '#{command}'" }
|
11
|
-
%x(#{command})
|
12
|
-
end
|
13
|
-
|
14
4
|
tag = Cucumber::Chef.tag("cc-push")
|
15
5
|
puts(tag)
|
16
6
|
Cucumber::Chef.boot(tag)
|
17
7
|
$logger = Cucumber::Chef.logger
|
18
8
|
|
19
|
-
if ($test_lab = Cucumber::Chef::TestLab.new) &&
|
9
|
+
if ($test_lab = Cucumber::Chef::TestLab.new) && $test_lab.alive?
|
20
10
|
gem_name = "cucumber-chef-#{Cucumber::Chef::VERSION}.gem"
|
21
11
|
gem_path = File.join(Cucumber::Chef.root_dir, gem_name)
|
22
12
|
|
@@ -37,21 +27,23 @@ if ($test_lab = Cucumber::Chef::TestLab.new) && ($test_lab.labs_running.count >
|
|
37
27
|
$test_lab.ssh.upload(local_file, remote_file)
|
38
28
|
FileUtils.rm_f(File.join(Cucumber::Chef.root_dir, "*.gem"))
|
39
29
|
|
40
|
-
|
30
|
+
$test_lab.ssh.exec(<<-EOH
|
41
31
|
sudo /bin/bash -c '
|
32
|
+
pkill -9 cc-server
|
42
33
|
cd #{File.dirname(remote_file)}
|
43
34
|
ls -la | grep 'cucumber-chef-'
|
44
|
-
gem uninstall cucumber-chef --all --ignore-dependencies --executables --backtrace
|
35
|
+
gem uninstall cucumber-chef ztk --all --ignore-dependencies --executables --backtrace
|
45
36
|
rm -fv /usr/lib/ruby/gems/1.8/cache/#{gem_name}
|
46
37
|
gem cleanup cucumber-chef --backtrace
|
47
38
|
gem install #{remote_file} --backtrace
|
48
|
-
rm -fv /home/#{$test_lab.ssh.config.user}/*.gem
|
39
|
+
rm -fv /home/#{$test_lab.ssh.config.user}/*.gem
|
40
|
+
exit 0'
|
49
41
|
EOH
|
50
42
|
)
|
51
43
|
File.exists?(gem_path) && File.delete(gem_path)
|
52
44
|
end
|
53
45
|
|
54
46
|
else
|
55
|
-
puts("No
|
47
|
+
puts("No running cucumber-chef test labs to connect to!")
|
56
48
|
exit(1)
|
57
49
|
end
|
data/bin/cc-server
CHANGED
@@ -18,31 +18,62 @@ require 'drb/acl'
|
|
18
18
|
require 'cucumber-chef'
|
19
19
|
require 'cucumber/chef/helpers'
|
20
20
|
|
21
|
+
tag = Cucumber::Chef.tag("cc-server")
|
22
|
+
puts(" * #{tag}")
|
23
|
+
Cucumber::Chef.boot(tag)
|
24
|
+
$logger = Cucumber::Chef.logger
|
25
|
+
Dir.chdir(File.join("/home", Cucumber::Chef.lab_user))
|
26
|
+
|
21
27
|
class FrontObject
|
22
|
-
attr_accessor :
|
28
|
+
attr_accessor :containers
|
23
29
|
|
24
30
|
include Cucumber::Chef
|
25
31
|
include Cucumber::Chef::Helpers
|
26
32
|
|
33
|
+
################################################################################
|
34
|
+
|
27
35
|
def initialize
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
36
|
+
logger.info { "DRB=#{DRb.config.inspect}" }
|
37
|
+
|
38
|
+
if ENV['PURGE']
|
39
|
+
Cucumber::Chef.logger.warn { "PURGING CONTAINERS! Container attributes will be reset!" }
|
40
|
+
load_containers
|
41
|
+
containers.each do |name, value|
|
42
|
+
server_destroy(name)
|
43
|
+
end
|
44
|
+
|
45
|
+
File.exists?(Cucumber::Chef.containers_bin) && File.delete(Cucumber::Chef.containers_bin)
|
46
|
+
load_containers
|
47
|
+
else
|
48
|
+
Cucumber::Chef.logger.info { "Allowing existing containers to persist." }
|
49
|
+
end
|
33
50
|
end
|
34
51
|
|
52
|
+
################################################################################
|
53
|
+
|
35
54
|
def shutdown
|
55
|
+
logger.fatal { "Shutting down." }
|
36
56
|
DRb.stop_service
|
57
|
+
exit(0)
|
37
58
|
end
|
38
59
|
|
60
|
+
################################################################################
|
61
|
+
|
39
62
|
def logger
|
40
63
|
$logger
|
41
64
|
end
|
42
65
|
|
66
|
+
################################################################################
|
67
|
+
|
68
|
+
def ping
|
69
|
+
"pong"
|
70
|
+
end
|
71
|
+
|
72
|
+
################################################################################
|
73
|
+
|
43
74
|
end
|
44
75
|
|
45
|
-
list = %w(
|
76
|
+
list = %w(deny all)
|
46
77
|
ARGV[0] and (list += [ 'allow', ARGV[0] ])
|
47
78
|
acl = ACL.new(list)
|
48
79
|
|
data/bin/cucumber-chef
CHANGED
@@ -132,7 +132,6 @@ class CucumberChef < Thor
|
|
132
132
|
def setup
|
133
133
|
boot
|
134
134
|
|
135
|
-
puts
|
136
135
|
if (test_lab = Cucumber::Chef::TestLab.new)
|
137
136
|
if (provider = test_lab.create)
|
138
137
|
if (provisioner = Cucumber::Chef::Provisioner.new(test_lab))
|
@@ -140,16 +139,11 @@ class CucumberChef < Thor
|
|
140
139
|
provisioner.build
|
141
140
|
|
142
141
|
puts
|
143
|
-
puts("
|
142
|
+
puts("If you are using AWS, be sure to log into the chef-server webui and change the default admin password at least.")
|
144
143
|
puts
|
145
|
-
puts("
|
144
|
+
puts("Your test lab has now been provisioned! Enjoy!")
|
146
145
|
puts
|
147
|
-
|
148
|
-
puts(" http://#{test_lab.ip}:4040/")
|
149
|
-
puts(" Username:")
|
150
|
-
puts(" admin")
|
151
|
-
puts(" Password:")
|
152
|
-
puts(" #{Cucumber::Chef::Provisioner::PASSWORD}")
|
146
|
+
test_lab.status
|
153
147
|
|
154
148
|
else
|
155
149
|
puts(set_color("Could not create the provisioner!", :red, true))
|
@@ -168,64 +162,70 @@ class CucumberChef < Thor
|
|
168
162
|
end
|
169
163
|
|
170
164
|
################################################################################
|
171
|
-
#
|
165
|
+
# DESTROY
|
172
166
|
################################################################################
|
173
167
|
|
174
|
-
desc "
|
168
|
+
desc "destroy [container]", "Destroy the cucumber-chef test lab in Amazon EC2 or a test lab [container] if specified."
|
175
169
|
method_option :test, :type => :boolean, :desc => "INTERNAL USE ONLY"
|
176
|
-
def
|
170
|
+
def destroy(*args)
|
177
171
|
boot
|
178
172
|
|
179
|
-
|
180
|
-
if (test_lab = Cucumber::Chef::TestLab.new)
|
173
|
+
if (test_lab = Cucumber::Chef::TestLab.new) && test_lab.exists?
|
181
174
|
if args.count == 0
|
182
|
-
|
183
|
-
|
175
|
+
test_lab.status
|
176
|
+
|
177
|
+
if yes?(set_color("Are you sure you want to destroy the test lab?", :red, true))
|
184
178
|
puts
|
185
|
-
puts(set_color("You have 5 seconds to abort!", :
|
179
|
+
puts(set_color("You have 5 seconds to abort!", :red, true))
|
186
180
|
puts
|
187
|
-
print(set_color("Self-destructing in", :green, true))
|
188
181
|
5.downto(1) do |x|
|
189
|
-
print(
|
182
|
+
print("#{x}...")
|
190
183
|
sleep(1)
|
191
184
|
end
|
192
|
-
puts(
|
185
|
+
puts("BOOM!")
|
193
186
|
puts
|
194
|
-
|
187
|
+
|
188
|
+
ZTK::Benchmark.bench(:message => "Destroy #{Cucumber::Chef::Config.provider.upcase} instance '#{test_lab.id}'", :mark => "completed in %0.4f seconds.") do
|
189
|
+
test_lab.destroy
|
190
|
+
end
|
195
191
|
else
|
196
192
|
puts
|
197
193
|
puts(set_color("Whew! That was close!", :green, true))
|
198
194
|
end
|
199
195
|
else
|
200
|
-
container
|
201
|
-
if yes?(set_color("Are you sure you want to teardown the test lab containter '#{container}'?", :red, true))
|
202
|
-
count_down_colors = { 5 => :green, 4 => :yellow, 3 => :yellow, 2 => :red, 1 => :red }
|
196
|
+
if yes?(set_color("Are you sure you want to destroy the container#{args.count > 1 ? 's' : nil} #{args.collect{|a| "'#{a}'"}.join(', ')}?", :red, true))
|
203
197
|
puts
|
204
|
-
puts(set_color("You have 5 seconds to abort!", :
|
198
|
+
puts(set_color("You have 5 seconds to abort!", :red, true))
|
205
199
|
puts
|
206
|
-
print(set_color("Self-destructing in", :green, true))
|
207
200
|
5.downto(1) do |x|
|
208
|
-
print(
|
201
|
+
print("#{x}...")
|
209
202
|
sleep(1)
|
210
203
|
end
|
211
|
-
puts(
|
204
|
+
puts("BOOM!")
|
212
205
|
puts
|
213
206
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
207
|
+
ZTK::Benchmark.bench(:message => "Start cc-server", :mark => "completed in %0.4f seconds.") do
|
208
|
+
cc_server = Cucumber::Chef::Server.new(test_lab)
|
209
|
+
cc_server.up(:silence => true)
|
210
|
+
end
|
211
|
+
|
212
|
+
args.each do |container|
|
213
|
+
ZTK::Benchmark.bench(:message => "Destroy container '#{container}'", :mark => "completed in %0.4f seconds.") do
|
214
|
+
test_lab.drb.load_containers
|
215
|
+
test_lab.drb.server_destroy(container)
|
216
|
+
test_lab.drb.server_delete(container)
|
217
|
+
test_lab.drb.save_containers
|
218
|
+
end
|
218
219
|
end
|
219
|
-
test_lab.drb.servers = Hash.new(nil)
|
220
|
-
test_lab.drb.server_destroy(container)
|
221
220
|
else
|
222
221
|
puts
|
223
222
|
puts(set_color("Whew! That was close!", :green, true))
|
224
223
|
end
|
224
|
+
|
225
225
|
end
|
226
226
|
|
227
227
|
else
|
228
|
-
|
228
|
+
raise Cucumber::Chef::Error, "We could not find a running test lab."
|
229
229
|
end
|
230
230
|
puts
|
231
231
|
|
@@ -242,11 +242,12 @@ class CucumberChef < Thor
|
|
242
242
|
def up
|
243
243
|
boot
|
244
244
|
|
245
|
-
|
246
|
-
|
247
|
-
|
245
|
+
if (test_lab = Cucumber::Chef::TestLab.new) && test_lab.dead?
|
246
|
+
ZTK::Benchmark.bench(:message => "Booting #{Cucumber::Chef::Config.provider.upcase} instance '#{test_lab.id}'", :mark => "completed in %0.4f seconds.") do
|
247
|
+
test_lab.up
|
248
|
+
end
|
248
249
|
else
|
249
|
-
|
250
|
+
raise Cucumber::Chef::Error, "We could not find a powered off test lab."
|
250
251
|
end
|
251
252
|
puts
|
252
253
|
|
@@ -256,18 +257,41 @@ class CucumberChef < Thor
|
|
256
257
|
end
|
257
258
|
|
258
259
|
################################################################################
|
259
|
-
#
|
260
|
+
# HALT
|
260
261
|
################################################################################
|
261
262
|
|
262
|
-
desc "
|
263
|
-
def
|
263
|
+
desc "halt", "Power off the cucumber-chef test lab"
|
264
|
+
def halt
|
264
265
|
boot
|
265
266
|
|
267
|
+
if (test_lab = Cucumber::Chef::TestLab.new) && test_lab.alive?
|
268
|
+
ZTK::Benchmark.bench(:message => "Halting #{Cucumber::Chef::Config.provider.upcase} instance '#{test_lab.id}'", :mark => "completed in %0.4f seconds.") do
|
269
|
+
test_lab.halt
|
270
|
+
end
|
271
|
+
else
|
272
|
+
raise Cucumber::Chef::Error, "We could not find a running test lab."
|
273
|
+
end
|
266
274
|
puts
|
267
|
-
|
268
|
-
|
275
|
+
|
276
|
+
rescue Cucumber::Chef::Error => e
|
277
|
+
$logger.fatal { e.backtrace.join("\n") }
|
278
|
+
fatal(e)
|
279
|
+
end
|
280
|
+
|
281
|
+
################################################################################
|
282
|
+
# RELOAD
|
283
|
+
################################################################################
|
284
|
+
|
285
|
+
desc "reload", "Reload the cucumber-chef test lab"
|
286
|
+
def reload
|
287
|
+
boot
|
288
|
+
|
289
|
+
if (test_lab = Cucumber::Chef::TestLab.new) && test_lab.alive?
|
290
|
+
ZTK::Benchmark.bench(:message => "Reloading #{Cucumber::Chef::Config.provider.upcase} instance '#{test_lab.id}'", :mark => "completed in %0.4f seconds.") do
|
291
|
+
test_lab.reload
|
292
|
+
end
|
269
293
|
else
|
270
|
-
|
294
|
+
raise Cucumber::Chef::Error, "We could not find a running test lab."
|
271
295
|
end
|
272
296
|
puts
|
273
297
|
|
@@ -281,13 +305,60 @@ class CucumberChef < Thor
|
|
281
305
|
################################################################################
|
282
306
|
|
283
307
|
desc "status", "Displays the current status of the test lab."
|
308
|
+
method_option :containers, :type => :boolean, :desc => "Display container status.", :default => false
|
309
|
+
method_option :attributes, :type => :boolean, :desc => "Display chef-client attributes for containers.", :default => false
|
284
310
|
method_option :test, :type => :boolean, :desc => "INTERNAL USE ONLY"
|
285
311
|
def status
|
286
312
|
boot
|
287
313
|
|
288
|
-
puts
|
289
314
|
if (test_lab = Cucumber::Chef::TestLab.new)
|
290
|
-
|
315
|
+
if @options.containers?
|
316
|
+
if test_lab.alive?
|
317
|
+
ZTK::Benchmark.bench(:message => "Start cc-server", :mark => "completed in %0.4f seconds.") do
|
318
|
+
test_lab.cc_server.up(:silence => true)
|
319
|
+
end
|
320
|
+
|
321
|
+
test_lab.drb.load_containers
|
322
|
+
|
323
|
+
headers = [:name, :alive, :arch, :distro, :ip, :mac, :"chef version", :persist]
|
324
|
+
results = ZTK::Report.new.spreadsheet(test_lab.drb.containers, headers) do |name, detail|
|
325
|
+
chef_version = "N/A"
|
326
|
+
alive = (test_lab.drb.command_run_local(%Q{ping -n -c 1 -W 1 #{detail[:ip]}}, :ignore_exit_status => true).exit_code == 0)
|
327
|
+
if alive
|
328
|
+
chef_version = test_lab.drb.command_run_chroot(name, %Q{/usr/bin/env chef-client -v}, :ignore_exit_status => true).output.chomp
|
329
|
+
end
|
330
|
+
|
331
|
+
OpenStruct.new(
|
332
|
+
:name => name,
|
333
|
+
:ip => detail[:ip],
|
334
|
+
:mac => detail[:mac],
|
335
|
+
:distro => detail[:distro],
|
336
|
+
:arch => detail[:arch],
|
337
|
+
:alive => alive,
|
338
|
+
:"chef version" => chef_version,
|
339
|
+
:persist => detail[:persist],
|
340
|
+
:chef_attributes => detail[:chef_client]
|
341
|
+
)
|
342
|
+
end
|
343
|
+
|
344
|
+
if @options.attributes?
|
345
|
+
results.rows.each do |result|
|
346
|
+
puts
|
347
|
+
puts("-" * results.width)
|
348
|
+
puts("Chef-Client attributes for '#{result.name.to_s.downcase}':")
|
349
|
+
puts("-" * results.width)
|
350
|
+
puts(JSON.pretty_generate(result.chef_attributes))
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
test_lab.cc_server.down
|
355
|
+
else
|
356
|
+
raise Cucumber::Chef::Error, "We could not find a running test lab."
|
357
|
+
end
|
358
|
+
|
359
|
+
else
|
360
|
+
test_lab.status
|
361
|
+
end
|
291
362
|
end
|
292
363
|
puts
|
293
364
|
|
@@ -301,23 +372,48 @@ class CucumberChef < Thor
|
|
301
372
|
################################################################################
|
302
373
|
|
303
374
|
desc "ssh [container]", "SSH to cucumber-chef test lab or [container] if specified."
|
304
|
-
method_option :
|
375
|
+
method_option :bootstrap, :type => :boolean, :desc => "Use the bootstrap settings.", :default => false
|
305
376
|
def ssh(*args)
|
306
377
|
boot
|
307
378
|
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
379
|
+
if (test_lab = Cucumber::Chef::TestLab.new) && test_lab.alive?
|
380
|
+
if @options.bootstrap?
|
381
|
+
puts([set_color("Attempting bootstrap SSH connection to cucumber-chef '", :blue, true), set_color("test lab", :cyan, true), set_color("'...", :blue, true)].join)
|
382
|
+
test_lab.bootstrap_ssh.console
|
383
|
+
elsif args.size == 0
|
384
|
+
puts([set_color("Attempting SSH connection to the '", :blue, true), set_color("test lab", :cyan, true), set_color("'...", :blue, true)].join)
|
312
385
|
test_lab.ssh.console
|
313
|
-
|
386
|
+
elsif args.size > 0
|
314
387
|
container = args[0]
|
315
|
-
puts([set_color("Attempting SSH connection to
|
388
|
+
puts([set_color("Attempting proxy SSH connection to the container '", :blue, true), set_color(container, :cyan, true), set_color("'...", :blue, true)].join)
|
316
389
|
test_lab.proxy_ssh(container).console
|
390
|
+
else
|
391
|
+
raise Cucumber::Chef::Error, "You did not specify a valid combination of options."
|
317
392
|
end
|
393
|
+
else
|
394
|
+
raise Cucumber::Chef::Error, "We could not find a running test lab."
|
395
|
+
end
|
396
|
+
puts
|
397
|
+
|
398
|
+
rescue Cucumber::Chef::Error => e
|
399
|
+
$logger.fatal { e.backtrace.join("\n") }
|
400
|
+
fatal(e)
|
401
|
+
end
|
318
402
|
|
403
|
+
################################################################################
|
404
|
+
# PS
|
405
|
+
################################################################################
|
406
|
+
|
407
|
+
desc "ps [ps-options]", "Snapshot of the current cucumber-chef test lab container processes."
|
408
|
+
def ps(*args)
|
409
|
+
boot
|
410
|
+
|
411
|
+
if (test_lab = Cucumber::Chef::TestLab.new) && test_lab.alive?
|
412
|
+
puts("-" * 80)
|
413
|
+
test_lab.ssh.exec("lxc-ps --lxc -- #{args.join(" ")}")
|
414
|
+
puts("-" * 80)
|
319
415
|
else
|
320
|
-
|
416
|
+
raise Cucumber::Chef::Error, "We could not find a running test lab."
|
321
417
|
end
|
322
418
|
puts
|
323
419
|
|
@@ -334,13 +430,9 @@ class CucumberChef < Thor
|
|
334
430
|
def log
|
335
431
|
boot
|
336
432
|
|
337
|
-
if ($test_lab = Cucumber::Chef::TestLab.new) &&
|
433
|
+
if ($test_lab = Cucumber::Chef::TestLab.new) && $test_lab.exists? && $test_lab.alive?
|
338
434
|
$tail_thread_remote = Thread.new do
|
339
435
|
$test_lab.ssh.exec("tail -n 0 -f /home/#{$test_lab.ssh.config.user}/.cucumber-chef/cucumber-chef.log")
|
340
|
-
|
341
|
-
Kernel.at_exit do
|
342
|
-
$test_lab.ssh.close
|
343
|
-
end
|
344
436
|
end
|
345
437
|
|
346
438
|
log_file = File.open(Cucumber::Chef.log_file, "r")
|
@@ -354,11 +446,13 @@ class CucumberChef < Thor
|
|
354
446
|
end
|
355
447
|
|
356
448
|
$tail_thread_remote.join
|
449
|
+
else
|
450
|
+
raise Cucumber::Chef::Error, "We could not find a running test lab."
|
357
451
|
end
|
358
452
|
|
359
|
-
|
360
|
-
|
361
|
-
|
453
|
+
rescue Cucumber::Chef::Error => e
|
454
|
+
$logger.fatal { e.backtrace.join("\n") }
|
455
|
+
fatal(e)
|
362
456
|
end
|
363
457
|
|
364
458
|
################################################################################
|
@@ -372,8 +466,7 @@ class CucumberChef < Thor
|
|
372
466
|
def diagnose(container)
|
373
467
|
boot
|
374
468
|
|
375
|
-
|
376
|
-
if (test_lab = Cucumber::Chef::TestLab.new) && (test_lab.labs_running.count > 0)
|
469
|
+
if (test_lab = Cucumber::Chef::TestLab.new) && test_lab.alive?
|
377
470
|
puts([set_color("Attempting to collect diagnostic information on cucumber-chef container '", :blue, true), set_color(container, :cyan, true), set_color("'...", :blue, true)].join)
|
378
471
|
if @options.strace?
|
379
472
|
puts
|
@@ -388,6 +481,8 @@ class CucumberChef < Thor
|
|
388
481
|
puts(set_color("============================================================================", :bold))
|
389
482
|
test_lab.proxy_ssh(container).exec("[[ -e /var/log/chef/client.log ]] && tail -n #{@options.lines} /var/log/chef/client.log")
|
390
483
|
end
|
484
|
+
else
|
485
|
+
raise Cucumber::Chef::Error, "We could not find a running test lab."
|
391
486
|
end
|
392
487
|
puts
|
393
488
|
|
@@ -410,7 +505,7 @@ class CucumberChef < Thor
|
|
410
505
|
"home_dir" => Cucumber::Chef.home_dir,
|
411
506
|
"log_file" => Cucumber::Chef.log_file,
|
412
507
|
"config_rb" => Cucumber::Chef.config_rb,
|
413
|
-
"
|
508
|
+
"containers_bin" => Cucumber::Chef.containers_bin,
|
414
509
|
"knife_rb" => Cucumber::Chef.knife_rb,
|
415
510
|
"chef_repo" => Cucumber::Chef.chef_repo,
|
416
511
|
"bootstrap_identity" => Cucumber::Chef.bootstrap_identity,
|
@@ -421,16 +516,15 @@ class CucumberChef < Thor
|
|
421
516
|
"lxc_user_home_dir" => Cucumber::Chef.lxc_user_home_dir,
|
422
517
|
"lxc_identity" => Cucumber::Chef.lxc_identity
|
423
518
|
}
|
519
|
+
max_key_length = details.collect{ |k,v| k.to_s.length }.max
|
424
520
|
|
425
|
-
puts
|
426
|
-
|
521
|
+
puts("-" * 80)
|
427
522
|
say(Cucumber::Chef::Config.configuration.to_yaml, :bold)
|
428
|
-
|
429
|
-
max_key_length = details.collect{ |k,v| k.to_s.length }.max
|
523
|
+
puts("-" * 80)
|
430
524
|
details.each do |key,value|
|
431
525
|
puts("%#{max_key_length}s = %s" % [key.downcase, value.inspect])
|
432
526
|
end
|
433
|
-
|
527
|
+
puts("-" * 80)
|
434
528
|
puts
|
435
529
|
|
436
530
|
rescue Cucumber::Chef::Error => e
|
@@ -438,29 +532,6 @@ class CucumberChef < Thor
|
|
438
532
|
fatal(e.message)
|
439
533
|
end
|
440
534
|
|
441
|
-
################################################################################
|
442
|
-
# PS
|
443
|
-
################################################################################
|
444
|
-
|
445
|
-
desc "ps [ps-options]", "Snapshot of the current cucumber-chef test lab container processes."
|
446
|
-
def ps(*args)
|
447
|
-
boot
|
448
|
-
|
449
|
-
puts
|
450
|
-
if (test_lab = Cucumber::Chef::TestLab.new) && (test_lab.labs_running.count > 0)
|
451
|
-
puts(set_color("Getting container processes from cucumber-chef test lab...", :blue, true))
|
452
|
-
puts
|
453
|
-
puts(set_color("============================================================================", :bold))
|
454
|
-
test_lab.ssh.exec("lxc-ps --lxc -- #{args.join(" ")}")
|
455
|
-
print("\n")
|
456
|
-
end
|
457
|
-
puts
|
458
|
-
|
459
|
-
rescue Cucumber::Chef::Error => e
|
460
|
-
$logger.fatal { e.backtrace.join("\n") }
|
461
|
-
fatal(e)
|
462
|
-
end
|
463
|
-
|
464
535
|
################################################################################
|
465
536
|
# CREATE
|
466
537
|
################################################################################
|
@@ -485,34 +556,23 @@ class CucumberChef < Thor
|
|
485
556
|
end
|
486
557
|
|
487
558
|
################################################################################
|
488
|
-
# DEPRECIATED
|
489
|
-
################################################################################
|
490
|
-
|
491
|
-
desc "info", "DEPRECIATED! - You should execute the 'status' task instead."
|
492
|
-
def info
|
493
|
-
puts
|
494
|
-
puts(set_color("The 'info' task is DEPRECIATED! You should execute the 'status' task instead.", :red, true))
|
495
|
-
puts
|
496
|
-
status
|
497
|
-
|
498
|
-
rescue Cucumber::Chef::Error => e
|
499
|
-
$logger.fatal { e.backtrace.join("\n") }
|
500
|
-
fatal(e)
|
501
|
-
end
|
502
|
-
|
503
|
-
################################################################################
|
504
|
-
# DEPRECIATED: TEST
|
559
|
+
# DEPRECIATED TASKS
|
505
560
|
################################################################################
|
506
561
|
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
562
|
+
depreciated_tasks = {
|
563
|
+
"teardown" => "You should execute the 'destroy' task instead.",
|
564
|
+
"info" => "You should execute the 'status' task instead.",
|
565
|
+
"test" => "You should execute 'cucumber' or 'rspec' directly.",
|
566
|
+
"down" => "You should execute the 'halt' task instead."
|
567
|
+
}
|
512
568
|
|
513
|
-
|
514
|
-
|
515
|
-
|
569
|
+
depreciated_tasks.each do |old_task, message|
|
570
|
+
desc old_task, "*DEPRECIATED* - #{message}"
|
571
|
+
define_method(old_task) do
|
572
|
+
puts
|
573
|
+
puts(set_color("The '#{old_task}' task is *DEPRECIATED* - #{message}", :red, true))
|
574
|
+
puts
|
575
|
+
end
|
516
576
|
end
|
517
577
|
|
518
578
|
################################################################################
|