bosh_openstack_cpi 0.0.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/README.md +40 -0
- data/Rakefile +50 -0
- data/bin/bosh_openstack_console +74 -0
- data/lib/bosh_openstack_cpi.rb +3 -0
- data/lib/cloud/openstack.rb +34 -0
- data/lib/cloud/openstack/cloud.rb +550 -0
- data/lib/cloud/openstack/dynamic_network.rb +26 -0
- data/lib/cloud/openstack/helpers.rb +49 -0
- data/lib/cloud/openstack/network.rb +37 -0
- data/lib/cloud/openstack/network_configurator.rb +113 -0
- data/lib/cloud/openstack/registry_client.rb +109 -0
- data/lib/cloud/openstack/version.rb +7 -0
- data/lib/cloud/openstack/vip_network.rb +49 -0
- data/spec/spec_helper.rb +137 -0
- data/spec/unit/attach_disk_spec.rb +95 -0
- data/spec/unit/cloud_spec.rb +18 -0
- data/spec/unit/configure_networks_spec.rb +83 -0
- data/spec/unit/create_disk_spec.rb +82 -0
- data/spec/unit/create_stemcell_spec.rb +50 -0
- data/spec/unit/create_vm_spec.rb +142 -0
- data/spec/unit/delete_disk_spec.rb +35 -0
- data/spec/unit/delete_stemcell_spec.rb +19 -0
- data/spec/unit/delete_vm_spec.rb +26 -0
- data/spec/unit/detach_disk_spec.rb +67 -0
- data/spec/unit/helpers_spec.rb +34 -0
- data/spec/unit/network_configurator_spec.rb +57 -0
- data/spec/unit/reboot_vm_spec.rb +34 -0
- data/spec/unit/validate_deployment_spec.rb +16 -0
- metadata +190 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
# Copyright (c) 2012 Piston Cloud Computing, Inc.
|
2
|
+
|
3
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::OpenStackCloud::Cloud do
|
6
|
+
|
7
|
+
it "deletes an OpenStack volume" do
|
8
|
+
volume = double("volume", :id => "v-foobar")
|
9
|
+
|
10
|
+
cloud = mock_cloud do |openstack|
|
11
|
+
openstack.volumes.should_receive(:get).with("v-foobar").and_return(volume)
|
12
|
+
end
|
13
|
+
|
14
|
+
volume.should_receive(:status).and_return(:available)
|
15
|
+
volume.should_receive(:destroy).and_return(true)
|
16
|
+
cloud.should_receive(:wait_resource).with(volume, :available, :deleted)
|
17
|
+
|
18
|
+
cloud.delete_disk("v-foobar")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "doesn't delete an OpenStack volume unless it's state is `available'" do
|
22
|
+
volume = double("volume", :id => "v-foobar")
|
23
|
+
|
24
|
+
cloud = mock_cloud do |openstack|
|
25
|
+
openstack.volumes.should_receive(:get).with("v-foobar").and_return(volume)
|
26
|
+
end
|
27
|
+
|
28
|
+
volume.should_receive(:status).and_return(:busy)
|
29
|
+
|
30
|
+
expect {
|
31
|
+
cloud.delete_disk("v-foobar")
|
32
|
+
}.to raise_error(Bosh::Clouds::CloudError, "Cannot delete volume `v-foobar', state is busy")
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Copyright (c) 2012 Piston Cloud Computing, Inc.
|
2
|
+
|
3
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::OpenStackCloud::Cloud do
|
6
|
+
|
7
|
+
it "deregisters OpenStack image" do
|
8
|
+
image = double("image", :id => "i-foo")
|
9
|
+
|
10
|
+
cloud = mock_cloud do |openstack|
|
11
|
+
openstack.images.stub(:get).with("i-foo").and_return(image)
|
12
|
+
end
|
13
|
+
|
14
|
+
image.should_receive(:destroy)
|
15
|
+
|
16
|
+
cloud.delete_stemcell("i-foo")
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Copyright (c) 2012 Piston Cloud Computing, Inc.
|
2
|
+
|
3
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::OpenStackCloud::Cloud do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@registry = mock_registry
|
9
|
+
end
|
10
|
+
|
11
|
+
it "deletes an OpenStack server" do
|
12
|
+
server = double("server", :id => "i-foobar", :name => "i-foobar")
|
13
|
+
|
14
|
+
cloud = mock_cloud do |openstack|
|
15
|
+
openstack.servers.should_receive(:get).with("i-foobar").and_return(server)
|
16
|
+
end
|
17
|
+
|
18
|
+
server.should_receive(:state).and_return(:active)
|
19
|
+
server.should_receive(:destroy).and_return(true)
|
20
|
+
cloud.should_receive(:wait_resource).with(server, :active, :terminated, :state)
|
21
|
+
|
22
|
+
@registry.should_receive(:delete_settings).with("i-foobar")
|
23
|
+
|
24
|
+
cloud.delete_vm("i-foobar")
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# Copyright (c) 2012 Piston Cloud Computing, Inc.
|
2
|
+
|
3
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::OpenStackCloud::Cloud do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@registry = mock_registry
|
9
|
+
end
|
10
|
+
|
11
|
+
it "detaches an OpenStack volume from a server" do
|
12
|
+
server = double("server", :id => "i-test", :name => "i-test")
|
13
|
+
volume = double("volume", :id => "v-foobar")
|
14
|
+
volume_attachments = double("body", :body => {"volumeAttachments" => [{"volumeId" => "v-foobar"}, {"volumeId" => "v-barfoo"}]})
|
15
|
+
|
16
|
+
cloud = mock_cloud do |openstack|
|
17
|
+
openstack.servers.should_receive(:get).with("i-test").and_return(server)
|
18
|
+
openstack.volumes.should_receive(:get).with("v-foobar").and_return(volume)
|
19
|
+
openstack.should_receive(:get_server_volumes).and_return(volume_attachments)
|
20
|
+
end
|
21
|
+
|
22
|
+
volume.should_receive(:status).and_return(:"in-use")
|
23
|
+
volume.should_receive(:detach).with(server.id, "v-foobar").and_return(true)
|
24
|
+
cloud.should_receive(:wait_resource).with(volume, :"in-use", :available)
|
25
|
+
|
26
|
+
old_settings = {
|
27
|
+
"foo" => "bar",
|
28
|
+
"disks" => {
|
29
|
+
"persistent" => {
|
30
|
+
"v-foobar" => "/dev/vdc",
|
31
|
+
"v-barfoo" => "/dev/vdd"
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
new_settings = {
|
37
|
+
"foo" => "bar",
|
38
|
+
"disks" => {
|
39
|
+
"persistent" => {
|
40
|
+
"v-barfoo" => "/dev/vdd"
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
@registry.should_receive(:read_settings).with("i-test").and_return(old_settings)
|
46
|
+
@registry.should_receive(:update_settings).with("i-test", new_settings)
|
47
|
+
|
48
|
+
cloud.detach_disk("i-test", "v-foobar")
|
49
|
+
end
|
50
|
+
|
51
|
+
it "raises an error when volume is not attached to a server" do
|
52
|
+
server = double("server", :id => "i-test", :name => "i-test")
|
53
|
+
volume = double("volume", :id => "v-barfoo")
|
54
|
+
volume_attachments = double("body", :body => {"volumeAttachments" => [{"volumeId" => "v-foobar"}]})
|
55
|
+
|
56
|
+
cloud = mock_cloud do |openstack|
|
57
|
+
openstack.servers.should_receive(:get).with("i-test").and_return(server)
|
58
|
+
openstack.volumes.should_receive(:get).with("v-barfoo").and_return(volume)
|
59
|
+
openstack.should_receive(:get_server_volumes).and_return(volume_attachments)
|
60
|
+
end
|
61
|
+
|
62
|
+
expect {
|
63
|
+
cloud.detach_disk("i-test", "v-barfoo")
|
64
|
+
}.to raise_error(Bosh::Clouds::CloudError, /is not attached to server/)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Copyright (c) 2012 Piston Cloud Computing, Inc.
|
2
|
+
|
3
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::OpenStackCloud::Helpers do
|
6
|
+
it "should time out" do
|
7
|
+
cloud = mock_cloud
|
8
|
+
|
9
|
+
resource = double("resource")
|
10
|
+
resource.stub(:id).and_return("foobar")
|
11
|
+
resource.stub(:reload).and_return(cloud)
|
12
|
+
resource.stub(:status).and_return(:start)
|
13
|
+
cloud.stub(:sleep)
|
14
|
+
|
15
|
+
lambda {
|
16
|
+
cloud.wait_resource(resource, :start, :stop, :status, 0.1)
|
17
|
+
}.should raise_error Bosh::Clouds::CloudError, /Timed out/
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should not time out" do
|
21
|
+
cloud = mock_cloud
|
22
|
+
|
23
|
+
resource = double("resource")
|
24
|
+
resource.stub(:id).and_return("foobar")
|
25
|
+
resource.stub(:reload).and_return(cloud)
|
26
|
+
resource.stub(:status).and_return(:start, :stop)
|
27
|
+
cloud.stub(:sleep)
|
28
|
+
|
29
|
+
lambda {
|
30
|
+
cloud.wait_resource(resource, :start, :stop, :status, 0.1)
|
31
|
+
}.should_not raise_error Bosh::Clouds::CloudError
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# Copyright (c) 2012 Piston Cloud Computing, Inc.
|
2
|
+
|
3
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::OpenStackCloud::NetworkConfigurator do
|
6
|
+
|
7
|
+
def set_security_groups(spec, security_groups)
|
8
|
+
spec["cloud_properties"] = {
|
9
|
+
"security_groups" => security_groups
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should raise an error if the spec isn't a hash" do
|
14
|
+
lambda {
|
15
|
+
Bosh::OpenStackCloud::NetworkConfigurator.new("foo")
|
16
|
+
}.should raise_error ArgumentError
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "security groups" do
|
20
|
+
it "should only be extracted from dynamic network" do
|
21
|
+
spec = {}
|
22
|
+
spec["network_a"] = dynamic_network_spec
|
23
|
+
set_security_groups(spec["network_a"], %w[foo])
|
24
|
+
spec["network_b"] = vip_network_spec
|
25
|
+
set_security_groups(spec["network_b"], %w[bar])
|
26
|
+
|
27
|
+
nc = Bosh::OpenStackCloud::NetworkConfigurator.new(spec)
|
28
|
+
nc.security_groups(nil).should == %w[foo]
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should return the default groups if none are extracted" do
|
32
|
+
spec = {}
|
33
|
+
spec["network_a"] = dynamic_network_spec
|
34
|
+
|
35
|
+
nc = Bosh::OpenStackCloud::NetworkConfigurator.new(spec)
|
36
|
+
nc.security_groups(%w[foo]).should == %w[foo]
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return an empty list if no default group is set" do
|
40
|
+
spec = {}
|
41
|
+
spec["network_a"] = dynamic_network_spec
|
42
|
+
|
43
|
+
nc = Bosh::OpenStackCloud::NetworkConfigurator.new(spec)
|
44
|
+
nc.security_groups(nil).should == []
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should raise an error when it isn't an array" do
|
48
|
+
spec = {}
|
49
|
+
spec["network_a"] = dynamic_network_spec
|
50
|
+
set_security_groups(spec["network_a"], "foo")
|
51
|
+
|
52
|
+
lambda {
|
53
|
+
Bosh::OpenStackCloud::NetworkConfigurator.new(spec)
|
54
|
+
}.should raise_error ArgumentError, "security groups must be an Array"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Copyright (c) 2012 Piston Cloud Computing, Inc.
|
2
|
+
|
3
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::OpenStackCloud::Cloud do
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
@server = double("server", :id => "i-foobar")
|
9
|
+
|
10
|
+
@cloud = mock_cloud(mock_cloud_options) do |openstack|
|
11
|
+
openstack.servers.stub(:get).with("i-foobar").and_return(@server)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "reboots an OpenStack server (CPI call picks soft reboot)" do
|
16
|
+
@cloud.should_receive(:soft_reboot).with(@server)
|
17
|
+
@cloud.reboot_vm("i-foobar")
|
18
|
+
end
|
19
|
+
|
20
|
+
it "soft reboots an OpenStack server" do
|
21
|
+
@server.should_receive(:reboot)
|
22
|
+
@server.should_receive(:state).and_return(:reboot)
|
23
|
+
@cloud.should_receive(:wait_resource).with(@server, :reboot, :active, :state)
|
24
|
+
@cloud.send(:soft_reboot, @server)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "hard reboots an OpenStack server" do
|
28
|
+
@server.should_receive(:reboot)
|
29
|
+
@server.should_receive(:state).and_return(:reboot)
|
30
|
+
@cloud.should_receive(:wait_resource).with(@server, :reboot, :active, :state)
|
31
|
+
@cloud.send(:hard_reboot, @server)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Copyright (c) 2012 Piston Cloud Computing, Inc.
|
2
|
+
|
3
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::OpenStackCloud::Cloud do
|
6
|
+
|
7
|
+
it "doesn't implement `validate_deployment'" do
|
8
|
+
Fog::Compute.stub(:new)
|
9
|
+
Fog::Image.stub(:new)
|
10
|
+
cloud = make_cloud
|
11
|
+
expect {
|
12
|
+
cloud.validate_deployment({}, {})
|
13
|
+
}.to raise_error(Bosh::Clouds::NotImplemented, "`validate_deployment' is not implemented by Bosh::OpenStackCloud::Cloud")
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,190 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bosh_openstack_cpi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Piston Cloud Computing
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: fog
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.4.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.4.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: bosh_common
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.4.0
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.4.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: bosh_cpi
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.4.3
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.4.3
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: httpclient
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 2.2.0
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 2.2.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: uuidtools
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 2.1.2
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 2.1.2
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: yajl-ruby
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.8.2
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.8.2
|
110
|
+
description: BOSH OpenStack CPI
|
111
|
+
email: info@pistoncloud.com
|
112
|
+
executables:
|
113
|
+
- bosh_openstack_console
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- bin/bosh_openstack_console
|
118
|
+
- lib/bosh_openstack_cpi.rb
|
119
|
+
- lib/cloud/openstack.rb
|
120
|
+
- lib/cloud/openstack/cloud.rb
|
121
|
+
- lib/cloud/openstack/dynamic_network.rb
|
122
|
+
- lib/cloud/openstack/helpers.rb
|
123
|
+
- lib/cloud/openstack/network.rb
|
124
|
+
- lib/cloud/openstack/network_configurator.rb
|
125
|
+
- lib/cloud/openstack/registry_client.rb
|
126
|
+
- lib/cloud/openstack/version.rb
|
127
|
+
- lib/cloud/openstack/vip_network.rb
|
128
|
+
- README.md
|
129
|
+
- Rakefile
|
130
|
+
- spec/spec_helper.rb
|
131
|
+
- spec/unit/attach_disk_spec.rb
|
132
|
+
- spec/unit/cloud_spec.rb
|
133
|
+
- spec/unit/configure_networks_spec.rb
|
134
|
+
- spec/unit/create_disk_spec.rb
|
135
|
+
- spec/unit/create_stemcell_spec.rb
|
136
|
+
- spec/unit/create_vm_spec.rb
|
137
|
+
- spec/unit/delete_disk_spec.rb
|
138
|
+
- spec/unit/delete_stemcell_spec.rb
|
139
|
+
- spec/unit/delete_vm_spec.rb
|
140
|
+
- spec/unit/detach_disk_spec.rb
|
141
|
+
- spec/unit/helpers_spec.rb
|
142
|
+
- spec/unit/network_configurator_spec.rb
|
143
|
+
- spec/unit/reboot_vm_spec.rb
|
144
|
+
- spec/unit/validate_deployment_spec.rb
|
145
|
+
homepage: http://www.pistoncloud.com
|
146
|
+
licenses: []
|
147
|
+
post_install_message:
|
148
|
+
rdoc_options: []
|
149
|
+
require_paths:
|
150
|
+
- lib
|
151
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
152
|
+
none: false
|
153
|
+
requirements:
|
154
|
+
- - ! '>='
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '0'
|
157
|
+
segments:
|
158
|
+
- 0
|
159
|
+
hash: -5012446851796113
|
160
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
segments:
|
167
|
+
- 0
|
168
|
+
hash: -5012446851796113
|
169
|
+
requirements: []
|
170
|
+
rubyforge_project:
|
171
|
+
rubygems_version: 1.8.24
|
172
|
+
signing_key:
|
173
|
+
specification_version: 3
|
174
|
+
summary: BOSH OpenStack CPI
|
175
|
+
test_files:
|
176
|
+
- spec/spec_helper.rb
|
177
|
+
- spec/unit/attach_disk_spec.rb
|
178
|
+
- spec/unit/cloud_spec.rb
|
179
|
+
- spec/unit/configure_networks_spec.rb
|
180
|
+
- spec/unit/create_disk_spec.rb
|
181
|
+
- spec/unit/create_stemcell_spec.rb
|
182
|
+
- spec/unit/create_vm_spec.rb
|
183
|
+
- spec/unit/delete_disk_spec.rb
|
184
|
+
- spec/unit/delete_stemcell_spec.rb
|
185
|
+
- spec/unit/delete_vm_spec.rb
|
186
|
+
- spec/unit/detach_disk_spec.rb
|
187
|
+
- spec/unit/helpers_spec.rb
|
188
|
+
- spec/unit/network_configurator_spec.rb
|
189
|
+
- spec/unit/reboot_vm_spec.rb
|
190
|
+
- spec/unit/validate_deployment_spec.rb
|