bosh_aws_cpi 0.3.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.
@@ -0,0 +1,34 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ require File.expand_path("../../spec_helper", __FILE__)
4
+
5
+ describe Bosh::AwsCloud::Cloud do
6
+
7
+ it "deletes an EC2 volume" do
8
+ volume = double("volume", :id => "v-foo")
9
+
10
+ cloud = mock_cloud do |ec2|
11
+ ec2.volumes.stub(:[]).with("v-foo").and_return(volume)
12
+ end
13
+
14
+ volume.should_receive(:state).and_return(:available, :deleting)
15
+ volume.should_receive(:delete)
16
+ cloud.should_receive(:wait_resource).with(volume, :deleting, :deleted)
17
+
18
+ cloud.delete_disk("v-foo")
19
+ end
20
+
21
+ it "doesn't delete volume unless it's state is `available'" do
22
+ volume = double("volume", :id => "v-foo", :state => :busy)
23
+
24
+ cloud = mock_cloud do |ec2|
25
+ ec2.volumes.stub(:[]).with("v-foo").and_return(volume)
26
+ end
27
+
28
+ expect {
29
+ cloud.delete_disk("v-foo")
30
+ }.to raise_error(Bosh::Clouds::CloudError,
31
+ "Cannot delete volume `v-foo', state is busy")
32
+ end
33
+
34
+ end
@@ -0,0 +1,18 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ require File.expand_path("../../spec_helper", __FILE__)
4
+
5
+ describe Bosh::AwsCloud::Cloud do
6
+
7
+ it "deregisters EC2 image" do
8
+ image = double("image", :id => "i-foo")
9
+
10
+ cloud = mock_cloud do |ec2|
11
+ ec2.images.stub(:[]).with("i-foo").and_return(image)
12
+ end
13
+
14
+ image.should_receive(:deregister)
15
+ cloud.delete_stemcell("i-foo")
16
+ end
17
+
18
+ end
@@ -0,0 +1,26 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ require File.expand_path("../../spec_helper", __FILE__)
4
+
5
+ describe Bosh::AwsCloud::Cloud do
6
+
7
+ before(:each) do
8
+ @registry = mock_registry
9
+ end
10
+
11
+ it "deletes an EC2 instance" do
12
+ instance = double("instance", :id => "i-foobar")
13
+
14
+ cloud = mock_cloud do |ec2|
15
+ ec2.instances.stub(:[]).with("i-foobar").and_return(instance)
16
+ end
17
+
18
+ instance.should_receive(:terminate)
19
+ instance.should_receive(:status).and_return(:deleting)
20
+ cloud.should_receive(:wait_resource).with(instance, :deleting, :terminated)
21
+
22
+ @registry.should_receive(:delete_settings).with("i-foobar")
23
+
24
+ cloud.delete_vm("i-foobar")
25
+ end
26
+ end
@@ -0,0 +1,64 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ require File.expand_path("../../spec_helper", __FILE__)
4
+
5
+ describe Bosh::AwsCloud::Cloud do
6
+
7
+ before(:each) do
8
+ @registry = mock_registry
9
+ end
10
+
11
+ it "detaches EC2 volume from an instance" do
12
+ instance = double("instance", :id => "i-test")
13
+ volume = double("volume", :id => "v-foobar")
14
+ attachment = double("attachment", :device => "/dev/sdf")
15
+
16
+ cloud = mock_cloud do |ec2|
17
+ ec2.instances.should_receive(:[]).with("i-test").and_return(instance)
18
+ ec2.volumes.should_receive(:[]).with("v-foobar").and_return(volume)
19
+ end
20
+
21
+ mappings = {
22
+ "/dev/sdf" => mock("attachment",
23
+ :volume => mock("volume", :id => "v-foobar")),
24
+ "/dev/sdg" => mock("attachment",
25
+ :volume => mock("volume", :id => "v-deadbeef")),
26
+ }
27
+
28
+ instance.should_receive(:block_device_mappings).and_return(mappings)
29
+
30
+ volume.should_receive(:detach_from).
31
+ with(instance, "/dev/sdf").and_return(attachment)
32
+
33
+ attachment.should_receive(:status).and_return(:detaching)
34
+ cloud.should_receive(:wait_resource).with(attachment, :detaching, :detached)
35
+
36
+ old_settings = {
37
+ "foo" => "bar",
38
+ "disks" => {
39
+ "persistent" => {
40
+ "v-foobar" => "/dev/sdf",
41
+ "v-deadbeef" => "/dev/sdg"
42
+ }
43
+ }
44
+ }
45
+
46
+ new_settings = {
47
+ "foo" => "bar",
48
+ "disks" => {
49
+ "persistent" => {
50
+ "v-deadbeef" => "/dev/sdg"
51
+ }
52
+ }
53
+ }
54
+
55
+ @registry.should_receive(:read_settings).
56
+ with("i-test").
57
+ and_return(old_settings)
58
+
59
+ @registry.should_receive(:update_settings).with("i-test", new_settings)
60
+
61
+ cloud.detach_disk("i-test", "v-foobar")
62
+ end
63
+
64
+ end
@@ -0,0 +1,42 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ require File.expand_path("../../spec_helper", __FILE__)
4
+
5
+ describe Bosh::AwsCloud::Helpers do
6
+ it "should time out" do
7
+ cloud = mock_cloud
8
+
9
+ resource = double("resource")
10
+ resource.stub(:status).and_return(:start)
11
+ cloud.stub(:sleep)
12
+
13
+ lambda {
14
+ cloud.wait_resource(resource, :start, :stop, :status, 0.1)
15
+ }.should raise_error Bosh::Clouds::CloudError, /Timed out/
16
+ end
17
+
18
+ it "should not time out" do
19
+ cloud = mock_cloud
20
+
21
+ resource = double("resource")
22
+ resource.stub(:status).and_return(:start, :stop)
23
+ cloud.stub(:sleep)
24
+
25
+ lambda {
26
+ cloud.wait_resource(resource, :start, :stop, :status, 0.1)
27
+ }.should_not raise_error Bosh::Clouds::CloudError
28
+ end
29
+
30
+ it "should raise error when target state is wrong" do
31
+ cloud = mock_cloud
32
+
33
+ resource = double("resource")
34
+ resource.stub(:status).and_return(:started, :failed)
35
+ cloud.stub(:sleep)
36
+
37
+ lambda {
38
+ cloud.wait_resource(resource, :started, :stopped, :status, 0.1)
39
+ }.should raise_error Bosh::Clouds::CloudError,
40
+ /is failed, expected to be stopped/
41
+ end
42
+ end
@@ -0,0 +1,57 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ require File.expand_path("../../spec_helper", __FILE__)
4
+
5
+ describe Bosh::AwsCloud::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::AwsCloud::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::AwsCloud::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::AwsCloud::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::AwsCloud::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::AwsCloud::NetworkConfigurator.new(spec)
54
+ }.should raise_error ArgumentError, "security groups must be an Array"
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,40 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ require File.expand_path("../../spec_helper", __FILE__)
4
+
5
+ describe Bosh::AwsCloud::Cloud do
6
+
7
+ before :each do
8
+ @instance = double("instance", :id => "i-foobar")
9
+
10
+ @cloud = mock_cloud(mock_cloud_options) do |ec2|
11
+ ec2.instances.stub(:[]).with("i-foobar").and_return(@instance)
12
+ end
13
+ end
14
+
15
+ it "reboots an EC2 instance (CPI call picks soft reboot)" do
16
+ @cloud.should_receive(:soft_reboot).with(@instance)
17
+ @cloud.reboot_vm("i-foobar")
18
+ end
19
+
20
+ it "soft reboots an EC2 instance" do
21
+ @instance.should_receive(:reboot)
22
+ @cloud.send(:soft_reboot, @instance)
23
+ end
24
+
25
+ it "hard reboots an EC2 instance" do
26
+ # N.B. This requires ebs-store instance
27
+ @instance.should_receive(:stop).ordered
28
+ @instance.should_receive(:status).ordered.and_return(:stopping)
29
+ @cloud.should_receive(:wait_resource).
30
+ with(@instance, :stopping, :stopped).ordered
31
+
32
+ @instance.should_receive(:start)
33
+ @instance.should_receive(:status).and_return(:starting)
34
+ @cloud.should_receive(:wait_resource).ordered.
35
+ with(@instance, :starting, :running)
36
+
37
+ @cloud.send(:hard_reboot, @instance)
38
+ end
39
+
40
+ end
@@ -0,0 +1,16 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ require File.expand_path("../../spec_helper", __FILE__)
4
+
5
+ describe Bosh::AwsCloud::Cloud do
6
+
7
+ it "doesn't implement `validate_deployment'" do
8
+ cloud = make_cloud
9
+ expect {
10
+ cloud.validate_deployment({}, {})
11
+ }.to raise_error(Bosh::Clouds::NotImplemented,
12
+ "`validate_deployment' is not implemented "\
13
+ "by Bosh::AwsCloud::Cloud")
14
+ end
15
+
16
+ end
metadata ADDED
@@ -0,0 +1,188 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bosh_aws_cpi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - VMware
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: aws-sdk
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.3.5
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.3.5
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.2
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.2
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 AWS CPI
111
+ email: support@vmware.com
112
+ executables: []
113
+ extensions: []
114
+ extra_rdoc_files: []
115
+ files:
116
+ - lib/bosh_aws_cpi.rb
117
+ - lib/cloud/aws.rb
118
+ - lib/cloud/aws/cloud.rb
119
+ - lib/cloud/aws/dynamic_network.rb
120
+ - lib/cloud/aws/helpers.rb
121
+ - lib/cloud/aws/network.rb
122
+ - lib/cloud/aws/network_configurator.rb
123
+ - lib/cloud/aws/registry_client.rb
124
+ - lib/cloud/aws/version.rb
125
+ - lib/cloud/aws/vip_network.rb
126
+ - README
127
+ - Rakefile
128
+ - spec/spec_helper.rb
129
+ - spec/unit/attach_disk_spec.rb
130
+ - spec/unit/cloud_spec.rb
131
+ - spec/unit/configure_networks_spec.rb
132
+ - spec/unit/create_disk_spec.rb
133
+ - spec/unit/create_stemcell_spec.rb
134
+ - spec/unit/create_vm_spec.rb
135
+ - spec/unit/delete_disk_spec.rb
136
+ - spec/unit/delete_stemcell_spec.rb
137
+ - spec/unit/delete_vm_spec.rb
138
+ - spec/unit/detach_disk_spec.rb
139
+ - spec/unit/helpers_spec.rb
140
+ - spec/unit/network_configurator_spec.rb
141
+ - spec/unit/reboot_vm_spec.rb
142
+ - spec/unit/validate_deployment_spec.rb
143
+ homepage: http://www.vmware.com
144
+ licenses: []
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ none: false
151
+ requirements:
152
+ - - ! '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ segments:
156
+ - 0
157
+ hash: 3401725189883691334
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ! '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ segments:
165
+ - 0
166
+ hash: 3401725189883691334
167
+ requirements: []
168
+ rubyforge_project:
169
+ rubygems_version: 1.8.21
170
+ signing_key:
171
+ specification_version: 3
172
+ summary: BOSH AWS CPI
173
+ test_files:
174
+ - spec/spec_helper.rb
175
+ - spec/unit/attach_disk_spec.rb
176
+ - spec/unit/cloud_spec.rb
177
+ - spec/unit/configure_networks_spec.rb
178
+ - spec/unit/create_disk_spec.rb
179
+ - spec/unit/create_stemcell_spec.rb
180
+ - spec/unit/create_vm_spec.rb
181
+ - spec/unit/delete_disk_spec.rb
182
+ - spec/unit/delete_stemcell_spec.rb
183
+ - spec/unit/delete_vm_spec.rb
184
+ - spec/unit/detach_disk_spec.rb
185
+ - spec/unit/helpers_spec.rb
186
+ - spec/unit/network_configurator_spec.rb
187
+ - spec/unit/reboot_vm_spec.rb
188
+ - spec/unit/validate_deployment_spec.rb