cucumber-chef 2.1.0.rc.1 → 2.1.0.rc.2
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 +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")
|