cucumber-chef 2.1.0.rc.1 → 2.1.0.rc.2
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/cc-knife +1 -1
- data/bin/cc-push +9 -14
- data/bin/cc-server +2 -3
- data/bin/cucumber-chef +111 -47
- data/chef_repo/cookbooks/cucumber-chef/recipes/test_lab.rb +2 -1
- data/cucumber-chef.gemspec +12 -4
- data/lib/cucumber/chef/bootstrap.rb +4 -3
- data/lib/cucumber/chef/config.rb +32 -17
- data/lib/cucumber/chef/helpers/chef_client.rb +6 -9
- data/lib/cucumber/chef/helpers/command.rb +1 -1
- data/lib/cucumber/chef/helpers/container.rb +5 -12
- data/lib/cucumber/chef/provider.rb +102 -0
- data/lib/cucumber/chef/providers/aws.rb +294 -0
- data/lib/cucumber/chef/providers/vagrant.rb +121 -0
- data/lib/cucumber/chef/provisioner.rb +32 -29
- data/lib/cucumber/chef/server.rb +133 -0
- data/lib/cucumber/chef/steps/ssh_steps.rb +23 -8
- data/lib/cucumber/chef/templates/bootstrap/ubuntu-precise-test-lab.erb +1 -1
- data/lib/cucumber/chef/templates/cucumber/cc-hooks.rb +8 -68
- data/lib/cucumber/chef/test_lab.rb +20 -309
- data/lib/cucumber/chef/utility.rb +109 -41
- data/lib/cucumber/chef/version.rb +1 -1
- data/lib/cucumber/chef.rb +5 -0
- metadata +42 -22
data/bin/cc-knife
CHANGED
@@ -14,7 +14,7 @@ if (test_lab = Cucumber::Chef::TestLab.new) && (test_lab.labs_running.count > 0)
|
|
14
14
|
|
15
15
|
knife_rb = Cucumber::Chef.knife_rb
|
16
16
|
if File.exists?(knife_rb)
|
17
|
-
command = [knife, ARGV, "--server-url http://#{test_lab.
|
17
|
+
command = [knife, ARGV, "--server-url http://#{test_lab.ip}:4000", "--config #{knife_rb}", "2>&1"].flatten.compact.join(" ")
|
18
18
|
puts(command)
|
19
19
|
puts(%x(#{command}))
|
20
20
|
exit($?.to_i)
|
data/bin/cc-push
CHANGED
@@ -13,12 +13,12 @@ end
|
|
13
13
|
|
14
14
|
tag = Cucumber::Chef.tag("cc-push")
|
15
15
|
puts(tag)
|
16
|
-
Cucumber::Chef.
|
16
|
+
Cucumber::Chef.boot(tag)
|
17
17
|
$logger = Cucumber::Chef.logger
|
18
18
|
|
19
19
|
if ($test_lab = Cucumber::Chef::TestLab.new) && ($test_lab.labs_running.count > 0)
|
20
20
|
gem_name = "cucumber-chef-#{Cucumber::Chef::VERSION}.gem"
|
21
|
-
gem_path = File.join(Cucumber::Chef.
|
21
|
+
gem_path = File.join(Cucumber::Chef.root_dir, gem_name)
|
22
22
|
|
23
23
|
$logger.info { "gem_name == '#{gem_name}'" }
|
24
24
|
$logger.info { "gem_path == '#{gem_path}'" }
|
@@ -27,29 +27,24 @@ if ($test_lab = Cucumber::Chef::TestLab.new) && ($test_lab.labs_running.count >
|
|
27
27
|
puts
|
28
28
|
puts("To build cucumber-chef and install the gem in to the test lab, execute:")
|
29
29
|
puts
|
30
|
-
puts [ "cd #{Cucumber::Chef.
|
30
|
+
puts [ "cd #{Cucumber::Chef.root_dir}", "gem build cucumber-chef.gemspec", "cd #{Dir.pwd}", "bundle exec cc-push" ].join(" ; ")
|
31
31
|
puts
|
32
32
|
else
|
33
|
-
local_file = File.join(Cucumber::Chef.
|
33
|
+
local_file = File.join(Cucumber::Chef.root_dir, gem_name)
|
34
34
|
remote_file = File.join("/", "home", $test_lab.ssh.config.user, gem_name)
|
35
|
-
$logger.info { "#{local_file} -> #{$test_lab.ssh.config.user}@#{$test_lab.
|
35
|
+
$logger.info { "#{local_file} -> #{$test_lab.ssh.config.user}@#{$test_lab.ip}:#{remote_file}" }
|
36
36
|
|
37
37
|
$test_lab.ssh.upload(local_file, remote_file)
|
38
|
-
FileUtils.rm_f(File.join(Cucumber::Chef.
|
38
|
+
FileUtils.rm_f(File.join(Cucumber::Chef.root_dir, "*.gem"))
|
39
39
|
|
40
40
|
run_remote(<<-EOH
|
41
41
|
sudo /bin/bash -c '
|
42
42
|
cd #{File.dirname(remote_file)}
|
43
|
-
|
44
|
-
gem uninstall ztk --all --ignore-dependencies --executables --verbose --backtrace
|
45
|
-
gem cleanup ztk --verbose --backtrace
|
46
|
-
gem install ztk --verbose --backtrace
|
47
|
-
|
48
43
|
ls -la | grep 'cucumber-chef-'
|
49
|
-
gem uninstall cucumber-chef --all --ignore-dependencies --executables --
|
44
|
+
gem uninstall cucumber-chef --all --ignore-dependencies --executables --backtrace
|
50
45
|
rm -fv /usr/lib/ruby/gems/1.8/cache/#{gem_name}
|
51
|
-
gem cleanup cucumber-chef --
|
52
|
-
gem install #{
|
46
|
+
gem cleanup cucumber-chef --backtrace
|
47
|
+
gem install #{remote_file} --backtrace
|
53
48
|
rm -fv /home/#{$test_lab.ssh.config.user}/*.gem'
|
54
49
|
EOH
|
55
50
|
)
|
data/bin/cc-server
CHANGED
@@ -13,8 +13,6 @@ if !ENV['BACKGROUND'].nil?
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
Dir.chdir(File.join("/home", "ubuntu"))
|
17
|
-
|
18
16
|
require 'drb/drb'
|
19
17
|
require 'drb/acl'
|
20
18
|
require 'cucumber-chef'
|
@@ -29,8 +27,9 @@ class FrontObject
|
|
29
27
|
def initialize
|
30
28
|
tag = Cucumber::Chef.tag("cc-server")
|
31
29
|
puts(" * #{tag}")
|
32
|
-
Cucumber::Chef.
|
30
|
+
Cucumber::Chef.boot(tag)
|
33
31
|
$logger = Cucumber::Chef.logger
|
32
|
+
Dir.chdir(File.join("/home", Cucumber::Chef.lab_user))
|
34
33
|
end
|
35
34
|
|
36
35
|
def shutdown
|
data/bin/cucumber-chef
CHANGED
@@ -35,8 +35,6 @@ class CucumberChef < Thor
|
|
35
35
|
source_dir = File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "cucumber", "chef", "templates", "cucumber"))
|
36
36
|
destination_dir = Cucumber::Chef.locate_parent(".chef")
|
37
37
|
|
38
|
-
@is_rc = Cucumber::Chef.is_rc?
|
39
|
-
|
40
38
|
CucumberChef.source_root source_dir
|
41
39
|
templates = {
|
42
40
|
"readme.erb" => "features/#{project}/README",
|
@@ -55,12 +53,14 @@ class CucumberChef < Thor
|
|
55
53
|
end
|
56
54
|
end
|
57
55
|
|
58
|
-
def
|
56
|
+
def boot
|
59
57
|
tag = Cucumber::Chef.tag("cucumber-chef")
|
60
58
|
puts(set_color(tag, :green, true))
|
61
|
-
Cucumber::Chef.
|
59
|
+
Cucumber::Chef.boot(tag)
|
62
60
|
$logger = Cucumber::Chef.logger
|
63
61
|
|
62
|
+
@is_rc = Cucumber::Chef.is_rc?
|
63
|
+
|
64
64
|
@options.test? and Cucumber::Chef::Config.test
|
65
65
|
end
|
66
66
|
|
@@ -123,17 +123,19 @@ class CucumberChef < Thor
|
|
123
123
|
initalize_config
|
124
124
|
end
|
125
125
|
|
126
|
+
################################################################################
|
127
|
+
# SETUP
|
126
128
|
################################################################################
|
127
129
|
|
128
130
|
desc "setup", "Setup cucumber-chef test lab in Amazon EC2"
|
129
131
|
method_option :test, :type => :boolean, :desc => "INTERNAL USE ONLY"
|
130
132
|
def setup
|
131
|
-
|
133
|
+
boot
|
132
134
|
|
133
135
|
puts
|
134
136
|
if (test_lab = Cucumber::Chef::TestLab.new)
|
135
|
-
if (
|
136
|
-
if (provisioner = Cucumber::Chef::Provisioner.new(
|
137
|
+
if (provider = test_lab.create)
|
138
|
+
if (provisioner = Cucumber::Chef::Provisioner.new(test_lab))
|
137
139
|
|
138
140
|
provisioner.build
|
139
141
|
|
@@ -143,7 +145,7 @@ class CucumberChef < Thor
|
|
143
145
|
puts("Be sure to log into the chef-server webui and change the default credentials.")
|
144
146
|
puts
|
145
147
|
puts(" Chef-Server WebUI:")
|
146
|
-
puts(" http://#{
|
148
|
+
puts(" http://#{test_lab.ip}:4040/")
|
147
149
|
puts(" Username:")
|
148
150
|
puts(" admin")
|
149
151
|
puts(" Password:")
|
@@ -165,12 +167,14 @@ class CucumberChef < Thor
|
|
165
167
|
fatal(e.message)
|
166
168
|
end
|
167
169
|
|
170
|
+
################################################################################
|
171
|
+
# TEARDOWN
|
168
172
|
################################################################################
|
169
173
|
|
170
174
|
desc "teardown [container]", "Teardown the cucumber-chef test lab in Amazon EC2 or a test lab [container] if specified."
|
171
175
|
method_option :test, :type => :boolean, :desc => "INTERNAL USE ONLY"
|
172
176
|
def teardown(*args)
|
173
|
-
|
177
|
+
boot
|
174
178
|
|
175
179
|
puts
|
176
180
|
if (test_lab = Cucumber::Chef::TestLab.new)
|
@@ -210,7 +214,7 @@ class CucumberChef < Thor
|
|
210
214
|
test_lab.ssh.exec("nohup sudo pkill -9 -f cc-server")
|
211
215
|
test_lab.ssh.exec("nohup sudo BACKGROUND=yes cc-server #{Cucumber::Chef.external_ip}")
|
212
216
|
Cucumber::Chef.spinner do
|
213
|
-
ZTK::TCPSocketCheck.new(:host => test_lab.
|
217
|
+
ZTK::TCPSocketCheck.new(:host => test_lab.ip, :port => 8787, :data => "\n\n").wait
|
214
218
|
end
|
215
219
|
test_lab.drb.servers = Hash.new(nil)
|
216
220
|
test_lab.drb.server_destroy(container)
|
@@ -230,12 +234,20 @@ class CucumberChef < Thor
|
|
230
234
|
fatal(e)
|
231
235
|
end
|
232
236
|
|
237
|
+
################################################################################
|
238
|
+
# UP
|
233
239
|
################################################################################
|
234
240
|
|
235
|
-
desc "
|
236
|
-
def
|
241
|
+
desc "up", "Startup the cucumber-chef test lab"
|
242
|
+
def up
|
243
|
+
boot
|
244
|
+
|
237
245
|
puts
|
238
|
-
|
246
|
+
if (test_lab = Cucumber::Chef::TestLab.new)
|
247
|
+
test_lab.up
|
248
|
+
else
|
249
|
+
puts(set_color("Could not find a cucumber-chef test lab to startup!", :red, true))
|
250
|
+
end
|
239
251
|
puts
|
240
252
|
|
241
253
|
rescue Cucumber::Chef::Error => e
|
@@ -243,17 +255,19 @@ class CucumberChef < Thor
|
|
243
255
|
fatal(e)
|
244
256
|
end
|
245
257
|
|
258
|
+
################################################################################
|
259
|
+
# DOWN
|
246
260
|
################################################################################
|
247
261
|
|
248
|
-
desc "
|
249
|
-
def
|
250
|
-
|
262
|
+
desc "down", "Shutdown the cucumber-chef test lab"
|
263
|
+
def down
|
264
|
+
boot
|
251
265
|
|
252
266
|
puts
|
253
267
|
if (test_lab = Cucumber::Chef::TestLab.new)
|
254
|
-
test_lab.
|
268
|
+
test_lab.down
|
255
269
|
else
|
256
|
-
puts(set_color("Could not find a cucumber-chef test lab to
|
270
|
+
puts(set_color("Could not find a cucumber-chef test lab to shutdown!", :red, true))
|
257
271
|
end
|
258
272
|
puts
|
259
273
|
|
@@ -262,31 +276,34 @@ class CucumberChef < Thor
|
|
262
276
|
fatal(e)
|
263
277
|
end
|
264
278
|
|
279
|
+
################################################################################
|
280
|
+
# STATUS
|
265
281
|
################################################################################
|
266
282
|
|
267
|
-
desc "
|
268
|
-
|
269
|
-
|
283
|
+
desc "status", "Displays the current status of the test lab."
|
284
|
+
method_option :test, :type => :boolean, :desc => "INTERNAL USE ONLY"
|
285
|
+
def status
|
286
|
+
boot
|
270
287
|
|
271
288
|
puts
|
272
289
|
if (test_lab = Cucumber::Chef::TestLab.new)
|
273
|
-
test_lab.
|
274
|
-
else
|
275
|
-
puts(set_color("Could not find a cucumber-chef test lab to shutdown!", :red, true))
|
290
|
+
test_lab.status
|
276
291
|
end
|
277
292
|
puts
|
278
293
|
|
279
294
|
rescue Cucumber::Chef::Error => e
|
280
295
|
$logger.fatal { e.backtrace.join("\n") }
|
281
|
-
fatal(e)
|
296
|
+
fatal(e.message)
|
282
297
|
end
|
283
298
|
|
299
|
+
################################################################################
|
300
|
+
# SSH
|
284
301
|
################################################################################
|
285
302
|
|
286
303
|
desc "ssh [container]", "SSH to cucumber-chef test lab or [container] if specified."
|
287
304
|
method_option :test, :type => :boolean, :desc => "INTERNAL USE ONLY"
|
288
305
|
def ssh(*args)
|
289
|
-
|
306
|
+
boot
|
290
307
|
|
291
308
|
puts
|
292
309
|
if (test_lab = Cucumber::Chef::TestLab.new) && (test_lab.labs_running.count > 0)
|
@@ -309,11 +326,13 @@ class CucumberChef < Thor
|
|
309
326
|
fatal(e)
|
310
327
|
end
|
311
328
|
|
329
|
+
################################################################################
|
330
|
+
# LOG
|
312
331
|
################################################################################
|
313
332
|
|
314
333
|
desc "log", "Streams the cucumber-chef local and test lab logs to the terminal."
|
315
334
|
def log
|
316
|
-
|
335
|
+
boot
|
317
336
|
|
318
337
|
if ($test_lab = Cucumber::Chef::TestLab.new) && ($test_lab.labs_running.count > 0)
|
319
338
|
$tail_thread_remote = Thread.new do
|
@@ -342,6 +361,8 @@ class CucumberChef < Thor
|
|
342
361
|
end
|
343
362
|
end
|
344
363
|
|
364
|
+
################################################################################
|
365
|
+
# DIAGNOSE
|
345
366
|
################################################################################
|
346
367
|
|
347
368
|
desc "diagnose <container>", "Provide diagnostics from the chef-client on the specified container."
|
@@ -349,7 +370,7 @@ class CucumberChef < Thor
|
|
349
370
|
method_option :log, :type => :boolean, :desc => "output the chef-client 'chef.log'", :aliases => "-l", :default => true
|
350
371
|
method_option :lines, :type => :numeric, :desc => "output the last N lines of the chef-client 'chef.log'", :aliases => "-n", :default => 1
|
351
372
|
def diagnose(container)
|
352
|
-
|
373
|
+
boot
|
353
374
|
|
354
375
|
puts
|
355
376
|
if (test_lab = Cucumber::Chef::TestLab.new) && (test_lab.labs_running.count > 0)
|
@@ -375,15 +396,41 @@ class CucumberChef < Thor
|
|
375
396
|
fatal(e)
|
376
397
|
end
|
377
398
|
|
399
|
+
################################################################################
|
400
|
+
# DISPLAYCONFIG
|
378
401
|
################################################################################
|
379
402
|
|
380
403
|
desc "displayconfig", "Display the current cucumber-chef config."
|
381
404
|
method_option :test, :type => :boolean, :desc => "INTERNAL USE ONLY"
|
382
405
|
def displayconfig
|
383
|
-
|
406
|
+
boot
|
407
|
+
|
408
|
+
details = {
|
409
|
+
"root_dir" => Cucumber::Chef.root_dir,
|
410
|
+
"home_dir" => Cucumber::Chef.home_dir,
|
411
|
+
"log_file" => Cucumber::Chef.log_file,
|
412
|
+
"config_rb" => Cucumber::Chef.config_rb,
|
413
|
+
"servers_bin" => Cucumber::Chef.servers_bin,
|
414
|
+
"knife_rb" => Cucumber::Chef.knife_rb,
|
415
|
+
"chef_repo" => Cucumber::Chef.chef_repo,
|
416
|
+
"bootstrap_identity" => Cucumber::Chef.bootstrap_identity,
|
417
|
+
"lab_user" => Cucumber::Chef.lab_user,
|
418
|
+
"lab_user_home_dir" => Cucumber::Chef.lab_user_home_dir,
|
419
|
+
"lab_identity" => Cucumber::Chef.lab_identity,
|
420
|
+
"lxc_user" => Cucumber::Chef.lxc_user,
|
421
|
+
"lxc_user_home_dir" => Cucumber::Chef.lxc_user_home_dir,
|
422
|
+
"lxc_identity" => Cucumber::Chef.lxc_identity
|
423
|
+
}
|
384
424
|
|
385
425
|
puts
|
426
|
+
|
386
427
|
say(Cucumber::Chef::Config.configuration.to_yaml, :bold)
|
428
|
+
|
429
|
+
max_key_length = details.collect{ |k,v| k.to_s.length }.max
|
430
|
+
details.each do |key,value|
|
431
|
+
puts("%#{max_key_length}s = %s" % [key.downcase, value.inspect])
|
432
|
+
end
|
433
|
+
|
387
434
|
puts
|
388
435
|
|
389
436
|
rescue Cucumber::Chef::Error => e
|
@@ -391,11 +438,13 @@ class CucumberChef < Thor
|
|
391
438
|
fatal(e.message)
|
392
439
|
end
|
393
440
|
|
441
|
+
################################################################################
|
442
|
+
# PS
|
394
443
|
################################################################################
|
395
444
|
|
396
445
|
desc "ps [ps-options]", "Snapshot of the current cucumber-chef test lab container processes."
|
397
446
|
def ps(*args)
|
398
|
-
|
447
|
+
boot
|
399
448
|
|
400
449
|
puts
|
401
450
|
if (test_lab = Cucumber::Chef::TestLab.new) && (test_lab.labs_running.count > 0)
|
@@ -413,23 +462,7 @@ class CucumberChef < Thor
|
|
413
462
|
end
|
414
463
|
|
415
464
|
################################################################################
|
416
|
-
|
417
|
-
desc "info", "Display information about the current test lab."
|
418
|
-
method_option :test, :type => :boolean, :desc => "INTERNAL USE ONLY"
|
419
|
-
def info
|
420
|
-
load_config
|
421
|
-
|
422
|
-
puts
|
423
|
-
if (test_lab = Cucumber::Chef::TestLab.new)
|
424
|
-
test_lab.info
|
425
|
-
end
|
426
|
-
puts
|
427
|
-
|
428
|
-
rescue Cucumber::Chef::Error => e
|
429
|
-
$logger.fatal { e.backtrace.join("\n") }
|
430
|
-
fatal(e.message)
|
431
|
-
end
|
432
|
-
|
465
|
+
# CREATE
|
433
466
|
################################################################################
|
434
467
|
|
435
468
|
desc "create <project>" , "Create a project template for testing an infrastructure."
|
@@ -451,6 +484,37 @@ class CucumberChef < Thor
|
|
451
484
|
fatal(e)
|
452
485
|
end
|
453
486
|
|
487
|
+
################################################################################
|
488
|
+
# DEPRECIATED: INFO
|
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
|
505
|
+
################################################################################
|
506
|
+
|
507
|
+
desc "test", "DEPRECIATED! - You should execute 'cucumber' or 'rspec' directly."
|
508
|
+
def test
|
509
|
+
puts
|
510
|
+
puts(set_color("The test task is DEPRECIATED! You should execute 'cucumber' or 'rspec' directly.", :red, true))
|
511
|
+
puts
|
512
|
+
|
513
|
+
rescue Cucumber::Chef::Error => e
|
514
|
+
$logger.fatal { e.backtrace.join("\n") }
|
515
|
+
fatal(e)
|
516
|
+
end
|
517
|
+
|
454
518
|
################################################################################
|
455
519
|
|
456
520
|
end
|
@@ -27,7 +27,7 @@
|
|
27
27
|
package p
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
[ node.lab_user, node.lxc_user ].flatten.each do |user|
|
31
31
|
home_dir = (user == "root" ? "/#{user}" : "/home/#{user}")
|
32
32
|
|
33
33
|
directory "create .ssh directory for #{user}" do
|
@@ -69,6 +69,7 @@ end
|
|
69
69
|
path "#{home_dir}/.ssh/id_rsa"
|
70
70
|
owner user
|
71
71
|
group user
|
72
|
+
mode "0400"
|
72
73
|
end
|
73
74
|
|
74
75
|
file "ensure ssh public key ownership for #{user}" do
|
data/cucumber-chef.gemspec
CHANGED
@@ -34,14 +34,22 @@ Gem::Specification.new do |s|
|
|
34
34
|
s.required_rubygems_version = ">= 1.3.6"
|
35
35
|
s.licenses = ["Apache 2.0"]
|
36
36
|
|
37
|
-
|
38
|
-
s.add_dependency("
|
37
|
+
# Chef
|
38
|
+
s.add_dependency("chef", ">= 0.10.0")
|
39
|
+
|
40
|
+
# Providers
|
39
41
|
s.add_dependency("fog", ">= 1.3.1")
|
40
|
-
s.add_dependency("
|
42
|
+
s.add_dependency("vagrant", ">= 1.0.5")
|
43
|
+
|
44
|
+
# TDD
|
45
|
+
s.add_dependency("cucumber", ">= 1.2.0")
|
46
|
+
s.add_dependency("rspec", ">= 2.10.0")
|
47
|
+
|
48
|
+
# Support
|
41
49
|
s.add_dependency("thor", ">= 0.15.2")
|
50
|
+
s.add_dependency("mixlib-config", ">= 1.1.2")
|
42
51
|
s.add_dependency("rake", ">= 0.9.2")
|
43
52
|
s.add_dependency("ubuntu_ami", ">= 0.4.0")
|
44
|
-
s.add_dependency("rspec", ">= 2.10.0")
|
45
53
|
s.add_dependency("ztk", ">= 0.0.15")
|
46
54
|
|
47
55
|
s.add_development_dependency("simplecov", ">= 0.6.4")
|
@@ -67,9 +67,10 @@ module Cucumber
|
|
67
67
|
raise BootstrapError, message
|
68
68
|
end
|
69
69
|
|
70
|
-
Cucumber::Chef.logger.debug { "prepare(#{@config[:host]})" }
|
70
|
+
Cucumber::Chef.logger.debug { "prepare(#{@config[:host]}:#{@config[:port]})" }
|
71
71
|
|
72
72
|
@ssh.config.host_name = @config[:host]
|
73
|
+
@ssh.config.port = @config[:port] if @config[:port]
|
73
74
|
@ssh.config.user = @config[:ssh_user]
|
74
75
|
@ssh.config.password = @config[:ssh_password]
|
75
76
|
@ssh.config.keys = @config[:identity_file]
|
@@ -79,9 +80,9 @@ module Cucumber
|
|
79
80
|
command = ZTK::Template.render(@config[:template_file], @config[:context])
|
80
81
|
command = "sudo #{command}" if @config[:use_sudo]
|
81
82
|
|
82
|
-
Cucumber::Chef.logger.debug { "begin(#{@config[:host]})" }
|
83
|
+
Cucumber::Chef.logger.debug { "begin(#{@config[:host]}:#{@config[:port]})" }
|
83
84
|
@ssh.exec(command, :silence => true)
|
84
|
-
Cucumber::Chef.logger.debug { "end(#{@config[:host]})" }
|
85
|
+
Cucumber::Chef.logger.debug { "end(#{@config[:host]}:#{@config[:port]})" }
|
85
86
|
end
|
86
87
|
|
87
88
|
################################################################################
|
data/lib/cucumber/chef/config.rb
CHANGED
@@ -27,11 +27,21 @@ module Cucumber
|
|
27
27
|
class Config
|
28
28
|
extend(Mixlib::Config)
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
unless const_defined?(:KEYS)
|
31
|
+
KEYS = %w(mode provider).map(&:to_sym)
|
32
|
+
end
|
33
|
+
unless const_defined?(:MODES)
|
34
|
+
MODES = %w(user test).map(&:to_sym)
|
35
|
+
end
|
36
|
+
unless const_defined?(:PROVIDERS)
|
37
|
+
PROVIDERS = %w(aws vagrant).map(&:to_sym)
|
38
|
+
end
|
39
|
+
unless const_defined?(:PROVIDER_AWS_KEYS)
|
40
|
+
PROVIDER_AWS_KEYS = %w(aws_access_key_id aws_secret_access_key region availability_zone aws_ssh_key_id identity_file).map(&:to_sym)
|
41
|
+
end
|
42
|
+
unless const_defined?(:PROVIDER_VAGRANT_KEYS)
|
43
|
+
PROVIDER_VAGRANT_KEYS = %w(identity_file).map(&:to_sym)
|
44
|
+
end
|
35
45
|
|
36
46
|
################################################################################
|
37
47
|
|
@@ -50,7 +60,7 @@ module Cucumber
|
|
50
60
|
end
|
51
61
|
|
52
62
|
def self.load
|
53
|
-
config_rb = Cucumber::Chef.
|
63
|
+
config_rb = Cucumber::Chef.config_rb
|
54
64
|
Cucumber::Chef.logger.debug { "Attempting to load cucumber-chef configuration from '%s'." % config_rb }
|
55
65
|
self.from_file(config_rb)
|
56
66
|
self.verify
|
@@ -128,9 +138,8 @@ module Cucumber
|
|
128
138
|
end
|
129
139
|
|
130
140
|
def self.verify_provider_vagrant
|
131
|
-
|
132
|
-
|
133
|
-
raise ConfigError, message
|
141
|
+
# NOOP
|
142
|
+
require 'vagrant'
|
134
143
|
end
|
135
144
|
|
136
145
|
################################################################################
|
@@ -156,18 +165,24 @@ module Cucumber
|
|
156
165
|
mode :user
|
157
166
|
prerelease (Cucumber::Chef.is_rc? ? true : false)
|
158
167
|
|
159
|
-
provider :
|
168
|
+
provider :vagrant
|
160
169
|
librarian_chef false
|
161
170
|
|
162
|
-
user (
|
171
|
+
user (ENV['OPSCODE_USER'] || ENV['USER'])
|
172
|
+
|
173
|
+
artifacts ({"chef-client-log" => "/var/log/chef/client.log",
|
174
|
+
"chef-client-stacktrace" => "/var/chef/cache/chef-stacktrace.out"})
|
163
175
|
|
164
|
-
aws
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
176
|
+
aws ({:lab_user => "ubuntu",
|
177
|
+
:lxc_user => "root",
|
178
|
+
:ubuntu_release => "precise",
|
179
|
+
:aws_instance_arch => "i386",
|
180
|
+
:aws_instance_disk_store => "ebs",
|
181
|
+
:aws_instance_type => "m1.small",
|
182
|
+
:aws_security_group => "cucumber-chef"})
|
169
183
|
|
170
|
-
vagrant
|
184
|
+
vagrant ({:lab_user => "vagrant",
|
185
|
+
:lxc_user => "root"})
|
171
186
|
|
172
187
|
################################################################################
|
173
188
|
|
@@ -53,7 +53,6 @@ module Cucumber::Chef::Helpers::ChefClient
|
|
53
53
|
|
54
54
|
def chef_run_client(name,*args)
|
55
55
|
chef_config_client(name)
|
56
|
-
artifacts =
|
57
56
|
log("removing artifacts #{Cucumber::Chef::Config[:artifacts].values.collect{|z| "$#{z}$" }.join(' ')}")
|
58
57
|
(command_run_remote(name, "/bin/rm -fv #{Cucumber::Chef::Config[:artifacts].values.join(' ')}") rescue nil)
|
59
58
|
|
@@ -109,18 +108,16 @@ module Cucumber::Chef::Helpers::ChefClient
|
|
109
108
|
# this is messy and needs to be refactored into a more configurable
|
110
109
|
# solution; but for now this should do the trick
|
111
110
|
|
112
|
-
ssh_private_key_file = Cucumber::Chef.locate(:file, ".cucumber-chef", "id_rsa-#{Cucumber::Chef::Config[:lab_user]}")
|
113
|
-
File.chmod(0400, ssh_private_key_file)
|
114
|
-
|
115
111
|
ssh = ZTK::SSH.new
|
116
112
|
|
117
|
-
ssh.config.proxy_host_name = $test_lab.
|
118
|
-
ssh.config.
|
119
|
-
ssh.config.
|
113
|
+
ssh.config.proxy_host_name = $test_lab.ip
|
114
|
+
ssh.config.proxy_port = $test_lab.port
|
115
|
+
ssh.config.proxy_user = Cucumber::Chef.lab_user
|
116
|
+
ssh.config.proxy_keys = Cucumber::Chef.lab_identity
|
120
117
|
|
121
118
|
ssh.config.host_name = name
|
122
|
-
ssh.config.user = Cucumber::Chef
|
123
|
-
ssh.config.keys =
|
119
|
+
ssh.config.user = Cucumber::Chef.lxc_user
|
120
|
+
ssh.config.keys = Cucumber::Chef.lxc_identity
|
124
121
|
|
125
122
|
feature_file = $scenario.file_colon_line.split(":").first
|
126
123
|
feature_line = $scenario.file_colon_line.split(":").last
|
@@ -24,7 +24,7 @@ module Cucumber::Chef::Helpers::Command
|
|
24
24
|
################################################################################
|
25
25
|
|
26
26
|
def command_run_remote(name, command, expected_exit_code=0)
|
27
|
-
command = %Q(ssh #{name} #{command} 2>&1)
|
27
|
+
command = %Q(ssh -i #{File.join(Cucumber::Chef.lab_user_home_dir, ".ssh", "id_rsa")} #{name} #{command} 2>&1)
|
28
28
|
logger.info { "command_run_remote(#{command})" }
|
29
29
|
output = %x(#{command})
|
30
30
|
if !expected_exit_code.nil? && ($? != expected_exit_code)
|
@@ -28,7 +28,7 @@ module Cucumber::Chef::Helpers::Container
|
|
28
28
|
cache_rootfs = container_cache_root(name, distro, release, arch)
|
29
29
|
if !File.exists?(cache_rootfs)
|
30
30
|
log("$#{name}$ has triggered building the lxc file cache for $#{distro}$")
|
31
|
-
log("this one time process per distro can take up to 10 minutes or longer depending on the test lab
|
31
|
+
log("this one time process per distro can take up to 10 minutes or longer depending on the test lab")
|
32
32
|
end
|
33
33
|
|
34
34
|
command_run_local(container_create_command(name, distro, release, arch))
|
@@ -52,18 +52,11 @@ module Cucumber::Chef::Helpers::Container
|
|
52
52
|
command_run_local(container_create_command(name, distro, release, arch))
|
53
53
|
end
|
54
54
|
|
55
|
-
command_run_local("mkdir -p #{container_root(name)
|
56
|
-
command_run_local("chmod 0755 #{container_root(name)
|
57
|
-
command_run_local("cat
|
58
|
-
command_run_local("cat /home/#{Cucumber::Chef::Config[:lab_user]}/.ssh/id_rsa.pub | tee -a #{container_root(name)}/root/.ssh/authorized_keys")
|
55
|
+
command_run_local("mkdir -p #{File.join(container_root(name), Cucumber::Chef.lxc_user_home_dir, ".ssh")}")
|
56
|
+
command_run_local("chmod 0755 #{File.join(container_root(name), Cucumber::Chef.lxc_user_home_dir, ".ssh")}")
|
57
|
+
command_run_local("cat #{File.join(Cucumber::Chef.lab_user_home_dir, ".ssh", "id_rsa.pub")} | tee -a #{File.join(container_root(name), Cucumber::Chef.lxc_user_home_dir, ".ssh", "authorized_keys")}")
|
59
58
|
|
60
|
-
command_run_local("
|
61
|
-
command_run_local("chmod 0755 #{container_root(name)}/home/#{Cucumber::Chef::Config[:lab_user]}/.ssh")
|
62
|
-
command_run_local("cat /root/.ssh/id_rsa.pub | tee -a #{container_root(name)}/home/#{Cucumber::Chef::Config[:lab_user]}/.ssh/authorized_keys")
|
63
|
-
command_run_local("cat /home/#{Cucumber::Chef::Config[:lab_user]}/.ssh/id_rsa.pub | tee -a #{container_root(name)}/home/#{Cucumber::Chef::Config[:lab_user]}/.ssh/authorized_keys")
|
64
|
-
command_run_local("chown -R #{Cucumber::Chef::Config[:lab_user]}:#{Cucumber::Chef::Config[:lab_user]} #{container_root(name)}/home/#{Cucumber::Chef::Config[:lab_user]}/.ssh")
|
65
|
-
|
66
|
-
command_run_local("rm #{container_root(name)}/etc/motd")
|
59
|
+
command_run_local("rm -f #{container_root(name)}/etc/motd")
|
67
60
|
command_run_local("cp /etc/motd #{container_root(name)}/etc/motd")
|
68
61
|
command_run_local("echo ' You are now logged in to the #{name} container!\n' >> #{container_root(name)}/etc/motd")
|
69
62
|
command_run_local("sed -i 's/localhost #{name}/#{name}.test-lab #{name} localhost/' #{container_root(name)}/etc/hosts")
|