daptiv-chef-ci 0.0.15 → 0.1.0
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.
- checksums.yaml +4 -4
- data/daptiv-chef-ci.gemspec +21 -20
- data/lib/daptiv-chef-ci/clone_environment_task.rb +69 -0
- data/lib/daptiv-chef-ci/logger.rb +9 -10
- data/lib/daptiv-chef-ci/raketask_helper.rb +5 -6
- data/lib/daptiv-chef-ci/shell.rb +50 -28
- data/lib/daptiv-chef-ci/upload_cookbook_task.rb +62 -0
- data/lib/daptiv-chef-ci/vagrant_destroy_task.rb +11 -12
- data/lib/daptiv-chef-ci/vagrant_driver.rb +47 -56
- data/lib/daptiv-chef-ci/vagrant_provision_task.rb +12 -15
- data/lib/daptiv-chef-ci/vagrant_task.rb +34 -57
- data/lib/daptiv-chef-ci/vagrant_up_task.rb +14 -16
- data/lib/daptiv-chef-ci/version_cookbook_task.rb +69 -0
- data/lib/daptiv-chef-ci/virtualbox_driver.rb +11 -12
- data/spec/daptiv-chef-ci/logger_spec.rb +11 -15
- data/spec/daptiv-chef-ci/shell_spec.rb +23 -27
- data/spec/daptiv-chef-ci/vagrant_destroy_task_spec.rb +5 -7
- data/spec/daptiv-chef-ci/vagrant_driver_spec.rb +34 -72
- data/spec/daptiv-chef-ci/vagrant_provision_task_spec.rb +9 -13
- data/spec/daptiv-chef-ci/vagrant_task_spec.rb +29 -21
- data/spec/daptiv-chef-ci/vagrant_up_task_spec.rb +9 -12
- data/spec/daptiv-chef-ci/virtualbox_driver_spec.rb +21 -16
- data/spec/shared_contexts/rake.rb +7 -7
- metadata +21 -14
- data/lib/daptiv-chef-ci/basebox_builder_factory.rb +0 -19
- data/lib/daptiv-chef-ci/virtualbox_basebox_builder.rb +0 -33
- data/lib/daptiv-chef-ci/vmware_basebox_builder.rb +0 -103
- data/spec/daptiv-chef-ci/basebox_builder_factory_spec.rb +0 -25
- data/spec/daptiv-chef-ci/virtualbox_basebox_builder_spec.rb +0 -20
- data/spec/daptiv-chef-ci/vmware_basebox_builder_spec.rb +0 -20
@@ -2,16 +2,17 @@ require 'log4r'
|
|
2
2
|
require_relative 'shell'
|
3
3
|
|
4
4
|
module DaptivChefCI
|
5
|
+
# Wrapper around VBox CLI for VM cleanup
|
6
|
+
# Currently unused
|
5
7
|
class VirtualBoxDriver
|
6
|
-
|
7
8
|
def initialize(shell)
|
8
|
-
@logger = Log4r::Logger.new(
|
9
|
+
@logger = Log4r::Logger.new('daptiv_chef_ci::virtual_box')
|
9
10
|
@shell = shell
|
10
11
|
end
|
11
|
-
|
12
|
+
|
12
13
|
# Remove any running vms that have the same name as this box
|
13
14
|
def cleanup_vms(box_name)
|
14
|
-
list_all_running_vms
|
15
|
+
list_all_running_vms.each do |vm|
|
15
16
|
if vm.include?(box_name)
|
16
17
|
machine_name = vm.split[0]
|
17
18
|
@logger.debug("Found matching VBox #{machine_name} - Running")
|
@@ -22,10 +23,9 @@ module DaptivChefCI
|
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
29
|
# Power off the named virtual box
|
30
30
|
def poweroff(machine_name)
|
31
31
|
@logger.info("Powering off VM: #{machine_name}")
|
@@ -39,10 +39,9 @@ module DaptivChefCI
|
|
39
39
|
end
|
40
40
|
|
41
41
|
# Get a list of running vms
|
42
|
-
def list_all_running_vms
|
43
|
-
@logger.info(
|
42
|
+
def list_all_running_vms
|
43
|
+
@logger.info('List running VMs')
|
44
44
|
@shell.exec_cmd('vboxmanage list runningvms') || ''
|
45
45
|
end
|
46
|
-
|
47
46
|
end
|
48
|
-
end
|
47
|
+
end
|
@@ -1,40 +1,36 @@
|
|
1
1
|
require 'daptiv-chef-ci/logger'
|
2
2
|
require 'log4r'
|
3
3
|
|
4
|
-
describe DaptivChefCI::Logger, :
|
5
|
-
|
4
|
+
describe DaptivChefCI::Logger, unit: true do
|
6
5
|
describe 'init' do
|
7
|
-
|
8
6
|
# get logging level before running any of these tests
|
9
7
|
before(:all) do
|
10
8
|
@chef_ci_log = ENV['CHEF_CI_LOG']
|
11
9
|
end
|
12
|
-
|
10
|
+
|
13
11
|
# reset logging back to starting state before this fixture
|
14
12
|
after(:all) do
|
15
13
|
ENV['CHEF_CI_LOG'] = @chef_ci_log
|
16
|
-
DaptivChefCI::Logger.init
|
14
|
+
DaptivChefCI::Logger.init
|
17
15
|
end
|
18
|
-
|
16
|
+
|
19
17
|
# reset logging back to default state before every test
|
20
18
|
before(:each) do
|
21
19
|
ENV['CHEF_CI_LOG'] = ''
|
22
|
-
DaptivChefCI::Logger.init
|
20
|
+
DaptivChefCI::Logger.init
|
23
21
|
end
|
24
|
-
|
22
|
+
|
25
23
|
it 'should initialize logging to info by default' do
|
26
|
-
DaptivChefCI::Logger.init
|
27
|
-
logger = Log4r::Logger.new(
|
24
|
+
DaptivChefCI::Logger.init
|
25
|
+
logger = Log4r::Logger.new('daptiv_chef_ci::logger_spec')
|
28
26
|
expect(logger.level).to eq(2)
|
29
27
|
end
|
30
|
-
|
28
|
+
|
31
29
|
it 'should initialize logging to the specified level' do
|
32
30
|
ENV['CHEF_CI_LOG'] = 'DEBUG'
|
33
|
-
DaptivChefCI::Logger.init
|
34
|
-
logger = Log4r::Logger.new(
|
31
|
+
DaptivChefCI::Logger.init
|
32
|
+
logger = Log4r::Logger.new('daptiv_chef_ci::logger_spec')
|
35
33
|
expect(logger.level).to eq(1)
|
36
34
|
end
|
37
|
-
|
38
35
|
end
|
39
|
-
|
40
36
|
end
|
@@ -3,46 +3,46 @@ require 'daptiv-chef-ci/logger'
|
|
3
3
|
require 'mixlib/shellout/exceptions'
|
4
4
|
require 'bundler'
|
5
5
|
|
6
|
-
describe DaptivChefCI::Shell, :
|
7
|
-
|
6
|
+
describe DaptivChefCI::Shell, unit: true do
|
8
7
|
describe 'exec_cmd' do
|
9
|
-
|
10
8
|
it 'should split output by line' do
|
11
|
-
shell = DaptivChefCI::Shell.new
|
9
|
+
shell = DaptivChefCI::Shell.new
|
12
10
|
out = shell.exec_cmd('ls -l')
|
13
11
|
expect(out.count).to be > 1
|
14
12
|
end
|
15
|
-
|
13
|
+
|
16
14
|
it 'should raise exception if exit status is non-zero' do
|
17
|
-
shell = DaptivChefCI::Shell.new
|
18
|
-
expect { shell.exec_cmd('rm') }
|
15
|
+
shell = DaptivChefCI::Shell.new
|
16
|
+
expect { shell.exec_cmd('rm') }
|
17
|
+
.to raise_error(Mixlib::ShellOut::ShellCommandFailed)
|
19
18
|
end
|
20
|
-
|
19
|
+
|
21
20
|
it 'should revert path when method returns' do
|
22
21
|
path_before = ENV['PATH']
|
23
|
-
shell = DaptivChefCI::Shell.new
|
22
|
+
shell = DaptivChefCI::Shell.new
|
24
23
|
shell.exec_cmd('ls -l')
|
25
24
|
expect(ENV['PATH']).to eq(path_before)
|
26
25
|
end
|
27
|
-
|
26
|
+
|
28
27
|
it 'should pass long environment vars' do
|
29
|
-
shell = DaptivChefCI::Shell.new
|
30
|
-
out = shell.exec_cmd('echo $ENV_VAR1', 600,
|
28
|
+
shell = DaptivChefCI::Shell.new
|
29
|
+
out = shell.exec_cmd('echo $ENV_VAR1', 600, 'ENV_VAR1' => 'val1')
|
31
30
|
expect(out[0]).to eq('val1')
|
32
31
|
end
|
33
|
-
|
32
|
+
|
34
33
|
it 'should convert environment symbol keys to strings' do
|
35
|
-
shell = DaptivChefCI::Shell.new
|
36
|
-
out = shell.exec_cmd('echo $ENV_VAR1', 600,
|
34
|
+
shell = DaptivChefCI::Shell.new
|
35
|
+
out = shell.exec_cmd('echo $ENV_VAR1', 600, ENV_VAR1: 'val1')
|
37
36
|
expect(out[0]).to eq('val1')
|
38
37
|
end
|
39
38
|
|
40
39
|
it 'should default LC_ALL environment var to nil' do
|
41
|
-
# On TravisCI (Linux) this ENV var is set to en_US.UTF-8,
|
40
|
+
# On TravisCI (Linux) this ENV var is set to en_US.UTF-8,
|
41
|
+
# on OS X it is nil
|
42
42
|
original_lc_all = ENV['LC_ALL']
|
43
43
|
ENV.delete('LC_ALL') if original_lc_all
|
44
44
|
|
45
|
-
shell = DaptivChefCI::Shell.new
|
45
|
+
shell = DaptivChefCI::Shell.new
|
46
46
|
out = shell.exec_cmd('echo $LC_ALL', 600)
|
47
47
|
expect(out[0]).to be nil
|
48
48
|
|
@@ -50,22 +50,18 @@ describe DaptivChefCI::Shell, :unit => true do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
it 'should allow override of LC_ALL environment var' do
|
53
|
-
shell = DaptivChefCI::Shell.new
|
54
|
-
out = shell.exec_cmd('echo $LC_ALL', 600,
|
53
|
+
shell = DaptivChefCI::Shell.new
|
54
|
+
out = shell.exec_cmd('echo $LC_ALL', 600, LC_ALL: 'en_US.UTF-8')
|
55
55
|
expect(out[0]).to eq('en_US.UTF-8')
|
56
56
|
end
|
57
|
-
|
58
57
|
end
|
59
|
-
|
58
|
+
|
60
59
|
describe 'path_without_gem_dir' do
|
61
|
-
|
62
60
|
it 'should not be prefixed by the system gem dir' do
|
63
|
-
shell = DaptivChefCI::Shell.new
|
64
|
-
path = shell.path_without_gem_dir
|
65
|
-
expect(path).not_to include(Bundler.bundle_path.to_s
|
61
|
+
shell = DaptivChefCI::Shell.new
|
62
|
+
path = shell.path_without_gem_dir
|
63
|
+
expect(path).not_to include(Bundler.bundle_path.to_s + ':')
|
66
64
|
expect(ENV['PATH']).to include(path)
|
67
65
|
end
|
68
|
-
|
69
66
|
end
|
70
|
-
|
71
67
|
end
|
@@ -1,18 +1,16 @@
|
|
1
1
|
require 'daptiv-chef-ci/vagrant_destroy_task'
|
2
2
|
require_relative '../shared_contexts/rake'
|
3
3
|
|
4
|
-
describe VagrantDestroy::RakeTask, :
|
4
|
+
describe VagrantDestroy::RakeTask, unit: true do
|
5
5
|
include_context 'rake'
|
6
6
|
|
7
7
|
describe 'vagrant_destroy' do
|
8
8
|
it 'should destroy the box' do
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
vagrant_driver.should_receive(:destroy).with(
|
10
|
+
cmd_timeout_in_seconds: 180,
|
11
|
+
environment: {})
|
12
12
|
task = rake['vagrant_destroy']
|
13
|
-
task.invoke
|
14
|
-
|
13
|
+
task.invoke
|
15
14
|
end
|
16
15
|
end
|
17
|
-
|
18
16
|
end
|
@@ -2,113 +2,75 @@ require 'mixlib/shellout/exceptions'
|
|
2
2
|
require 'daptiv-chef-ci/vagrant_driver'
|
3
3
|
require 'daptiv-chef-ci/logger'
|
4
4
|
|
5
|
-
describe DaptivChefCI::VagrantDriver, :
|
6
|
-
|
5
|
+
describe DaptivChefCI::VagrantDriver, unit: true do
|
7
6
|
before(:each) do
|
8
|
-
@shell = mock
|
9
|
-
@
|
10
|
-
@vagrant = DaptivChefCI::VagrantDriver.new(:virtualbox, @shell, @basebox_builder_factory)
|
7
|
+
@shell = mock
|
8
|
+
@vagrant = DaptivChefCI::VagrantDriver.new(:virtualbox, @shell)
|
11
9
|
end
|
12
10
|
|
13
11
|
describe 'destroy' do
|
14
12
|
it 'should force shutdown vagrant with a timeout of 180 seconds' do
|
15
13
|
@shell.should_receive(:exec_cmd).with('vagrant destroy -f', 180, {})
|
16
|
-
@vagrant.destroy
|
14
|
+
@vagrant.destroy
|
17
15
|
end
|
18
16
|
end
|
19
|
-
|
17
|
+
|
20
18
|
describe 'halt' do
|
21
19
|
it 'should halt vagrant with a timeout of 180 seconds' do
|
22
20
|
@shell.should_receive(:exec_cmd).with('vagrant halt', 180, {})
|
23
|
-
@vagrant.halt
|
21
|
+
@vagrant.halt
|
24
22
|
end
|
25
|
-
|
23
|
+
|
26
24
|
it 'should retry when exec fails' do
|
27
|
-
@shell.should_receive(:exec_cmd)
|
25
|
+
@shell.should_receive(:exec_cmd)
|
26
|
+
.and_raise(Mixlib::ShellOut::ShellCommandFailed)
|
28
27
|
@shell.should_receive(:exec_cmd).and_return('success')
|
29
28
|
# shell cmd fails then succeeds, the vagrant.halt should succeed overall
|
30
|
-
@vagrant.halt(
|
29
|
+
@vagrant.halt(retry_wait_in_seconds: 0)
|
31
30
|
end
|
32
|
-
|
31
|
+
|
33
32
|
it 'should fail after retrying twice' do
|
34
33
|
# shell always fails, vagrant.halt should fail after a couple retries
|
35
|
-
@shell.should_receive(:exec_cmd)
|
36
|
-
|
34
|
+
@shell.should_receive(:exec_cmd)
|
35
|
+
.exactly(3).times.and_raise(Mixlib::ShellOut::ShellCommandFailed)
|
36
|
+
expect { @vagrant.halt(retry_wait_in_seconds: 0) }
|
37
|
+
.to raise_error(Mixlib::ShellOut::ShellCommandFailed)
|
37
38
|
end
|
38
39
|
end
|
39
|
-
|
40
|
+
|
40
41
|
describe 'up' do
|
41
42
|
it 'should up vagrant with a timeout of 7200 seconds' do
|
42
|
-
@shell.should_receive(:exec_cmd).with(
|
43
|
-
|
43
|
+
@shell.should_receive(:exec_cmd).with(
|
44
|
+
'vagrant up --provider=virtualbox', 7200, {})
|
45
|
+
@vagrant.up
|
44
46
|
end
|
45
47
|
|
46
48
|
it 'should up vagrant and specify the provider if not virtualbox' do
|
47
|
-
@vagrant = DaptivChefCI::VagrantDriver.new(:my_custom_provider, @shell
|
48
|
-
@shell.should_receive(:exec_cmd).with(
|
49
|
-
|
49
|
+
@vagrant = DaptivChefCI::VagrantDriver.new(:my_custom_provider, @shell)
|
50
|
+
@shell.should_receive(:exec_cmd).with(
|
51
|
+
'vagrant up --provider=my_custom_provider', 7200, {})
|
52
|
+
@vagrant.up
|
50
53
|
end
|
51
|
-
|
54
|
+
|
52
55
|
it 'should pass along environment variables' do
|
53
|
-
environment = { :
|
54
|
-
@shell.should_receive(:exec_cmd)
|
55
|
-
|
56
|
+
environment = { A: 'A' }
|
57
|
+
@shell.should_receive(:exec_cmd)
|
58
|
+
.with('vagrant up --provider=virtualbox', 7200, environment)
|
59
|
+
@vagrant.up(environment: environment)
|
56
60
|
end
|
57
61
|
end
|
58
62
|
|
59
63
|
describe 'provision' do
|
60
64
|
it 'should provision vagrant with a timeout of 7200 seconds' do
|
61
65
|
@shell.should_receive(:exec_cmd).with('vagrant provision', 7200, {})
|
62
|
-
@vagrant.provision
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'should pass along environment variables' do
|
66
|
-
environment = { :A => 'A' }
|
67
|
-
@shell.should_receive(:exec_cmd).with('vagrant provision', 7200, environment)
|
68
|
-
@vagrant.provision({ :environment => environment })
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe 'reload' do
|
73
|
-
it 'should reload vagrant with a timeout of 180 seconds' do
|
74
|
-
@shell.should_receive(:exec_cmd).with('vagrant reload', 180, {})
|
75
|
-
@vagrant.reload()
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
describe 'package' do
|
80
|
-
it 'should default to virtualbox and base_dir to current working dir' do
|
81
|
-
builder = double('builder').as_null_object
|
82
|
-
@basebox_builder_factory.should_receive(:create).with(@shell, :virtualbox, Dir.pwd).and_return(builder)
|
83
|
-
@vagrant.package()
|
66
|
+
@vagrant.provision
|
84
67
|
end
|
85
68
|
|
86
|
-
it 'should
|
87
|
-
|
88
|
-
@
|
89
|
-
|
90
|
-
@vagrant.
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'should use the specified base_dir' do
|
94
|
-
builder = double('builder').as_null_object
|
95
|
-
@basebox_builder_factory.should_receive(:create).with(@shell, :virtualbox, '/Users/admin/mybox').and_return(builder)
|
96
|
-
@vagrant.package({ :base_dir => '/Users/admin/mybox' })
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'should default box_name to directory name' do
|
100
|
-
builder = mock('builder')
|
101
|
-
builder.should_receive(:build).with('mybox.box')
|
102
|
-
@basebox_builder_factory.stub(:create).and_return(builder)
|
103
|
-
@vagrant.package({ :base_dir => '/Users/admin/mybox' })
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'should ensure box name ends with .box' do
|
107
|
-
builder = mock('builder')
|
108
|
-
builder.should_receive(:build).with('mybox.box')
|
109
|
-
@basebox_builder_factory.stub(:create).and_return(builder)
|
110
|
-
@vagrant.package({ :box_name => 'mybox' })
|
69
|
+
it 'should pass along environment variables' do
|
70
|
+
environment = { A: 'A' }
|
71
|
+
@shell.should_receive(:exec_cmd)
|
72
|
+
.with('vagrant provision', 7200, environment)
|
73
|
+
@vagrant.provision(environment: environment)
|
111
74
|
end
|
112
75
|
end
|
113
|
-
|
114
76
|
end
|
@@ -1,29 +1,25 @@
|
|
1
1
|
require 'daptiv-chef-ci/vagrant_provision_task'
|
2
2
|
require_relative '../shared_contexts/rake'
|
3
3
|
|
4
|
-
describe VagrantProvision::RakeTask, :
|
4
|
+
describe VagrantProvision::RakeTask, unit: true do
|
5
5
|
include_context 'rake'
|
6
6
|
|
7
7
|
describe 'vagrant_provision' do
|
8
8
|
it 'should provision the box' do
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
vagrant_driver.should_receive(:provision)
|
10
|
+
.with(cmd_timeout_in_seconds: 7200, environment: {})
|
12
11
|
task = rake['vagrant_provision']
|
13
|
-
task.invoke
|
14
|
-
|
12
|
+
task.invoke
|
15
13
|
end
|
16
|
-
|
14
|
+
|
17
15
|
it 'should up the box with the specified environment vars' do
|
16
|
+
environment = { ENV_VAR1: 'val1', ENV_VAR2: 'val2' }
|
17
|
+
vagrant_driver.should_receive(:provision)
|
18
|
+
.with(cmd_timeout_in_seconds: 7200, environment: environment)
|
18
19
|
|
19
|
-
environment = { :ENV_VAR1 => 'val1', :ENV_VAR2 => 'val2' }
|
20
|
-
vagrant_driver.should_receive(:provision).with({ :cmd_timeout_in_seconds => 7200, :environment => environment })
|
21
|
-
|
22
20
|
task = rake['vagrant_provision']
|
23
21
|
subject.environment = environment
|
24
|
-
task.invoke
|
25
|
-
|
22
|
+
task.invoke
|
26
23
|
end
|
27
24
|
end
|
28
|
-
|
29
25
|
end
|
@@ -1,37 +1,45 @@
|
|
1
1
|
require 'daptiv-chef-ci/vagrant_task'
|
2
2
|
require_relative '../shared_contexts/rake'
|
3
3
|
|
4
|
-
describe Vagrant::RakeTask, :
|
4
|
+
describe Vagrant::RakeTask, unit: true do
|
5
5
|
include_context 'rake'
|
6
6
|
|
7
7
|
describe 'vagrant' do
|
8
8
|
it 'should destroy, up, halt, then destroy the box' do
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
vagrant_driver.should_receive(:destroy).with(
|
10
|
+
cmd_timeout_in_seconds: 180,
|
11
|
+
retry_attempts: 0,
|
12
|
+
environment: {})
|
13
|
+
vagrant_driver.should_receive(:up).with(
|
14
|
+
cmd_timeout_in_seconds: 7200,
|
15
|
+
environment: {})
|
16
|
+
vagrant_driver.should_receive(:destroy).with(
|
17
|
+
cmd_timeout_in_seconds: 180,
|
18
|
+
retry_attempts: 2,
|
19
|
+
environment: {})
|
16
20
|
|
21
|
+
task = rake['vagrant']
|
22
|
+
task.invoke
|
17
23
|
end
|
18
|
-
|
24
|
+
|
19
25
|
it 'should up the box with the specified environment vars' do
|
26
|
+
environment = { ENV_VAR1: 'val1', ENV_VAR2: 'val2' }
|
27
|
+
|
28
|
+
vagrant_driver.should_receive(:destroy).with(
|
29
|
+
cmd_timeout_in_seconds: 180,
|
30
|
+
retry_attempts: 0,
|
31
|
+
environment: environment)
|
32
|
+
vagrant_driver.should_receive(:up).with(
|
33
|
+
cmd_timeout_in_seconds: 7200,
|
34
|
+
environment: environment)
|
35
|
+
vagrant_driver.should_receive(:destroy).with(
|
36
|
+
cmd_timeout_in_seconds: 180,
|
37
|
+
retry_attempts: 2,
|
38
|
+
environment: environment)
|
20
39
|
|
21
|
-
environment = { :ENV_VAR1 => 'val1', :ENV_VAR2 => 'val2' }
|
22
|
-
|
23
|
-
vagrant_driver.should_receive(:destroy).with({
|
24
|
-
:cmd_timeout_in_seconds => 180, :retry_attempts => 2, :environment => environment })
|
25
|
-
vagrant_driver.should_receive(:up).with({
|
26
|
-
:cmd_timeout_in_seconds => 7200, :environment => environment })
|
27
|
-
vagrant_driver.should_receive(:destroy).with({
|
28
|
-
:cmd_timeout_in_seconds => 180, :retry_attempts => 2, :environment => environment })
|
29
|
-
|
30
40
|
task = rake['vagrant']
|
31
41
|
subject.environment = environment
|
32
|
-
task.invoke
|
33
|
-
|
42
|
+
task.invoke
|
34
43
|
end
|
35
44
|
end
|
36
|
-
|
37
45
|
end
|