cucumber-chef 2.1.0.rc.2 → 2.1.0.rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
################################################################################
|