bosh_aws_registry 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
@@ -31,7 +31,7 @@ module Bosh::AwsRegistry
|
|
31
31
|
# check will be performed to see if it instance id
|
32
32
|
# actually has this IP address according to EC2.
|
33
33
|
def read_settings(instance_id, remote_ip = nil)
|
34
|
-
|
34
|
+
check_instance_ips(remote_ip, instance_id) if remote_ip
|
35
35
|
|
36
36
|
get_instance(instance_id).settings
|
37
37
|
end
|
@@ -42,12 +42,13 @@ module Bosh::AwsRegistry
|
|
42
42
|
|
43
43
|
private
|
44
44
|
|
45
|
-
def
|
45
|
+
def check_instance_ips(ip, instance_id)
|
46
46
|
return if ip == "127.0.0.1"
|
47
|
-
|
48
|
-
unless ip
|
47
|
+
actual_ips = instance_ips(instance_id)
|
48
|
+
unless actual_ips.include?(ip)
|
49
49
|
raise InstanceError, "Instance IP mismatch, expected IP is " \
|
50
|
-
"`%s', actual IP
|
50
|
+
"`%s', actual IP(s): `%s'" %
|
51
|
+
[ ip, actual_ips.join(", ") ]
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
@@ -61,8 +62,14 @@ module Bosh::AwsRegistry
|
|
61
62
|
instance
|
62
63
|
end
|
63
64
|
|
64
|
-
|
65
|
-
|
65
|
+
# Get the list of IPs belonging to this instance
|
66
|
+
def instance_ips(instance_id)
|
67
|
+
instance = @ec2.instances[instance_id]
|
68
|
+
ips = [instance.private_ip_address, instance.public_ip_address]
|
69
|
+
if instance.has_elastic_ip?
|
70
|
+
ips << instance.elastic_ip.public_ip
|
71
|
+
end
|
72
|
+
ips
|
66
73
|
rescue AWS::Errors::Base => e
|
67
74
|
raise Bosh::AwsRegistry::AwsError, "AWS error: #{e}"
|
68
75
|
end
|
data/lib/aws_registry/version.rb
CHANGED
@@ -17,30 +17,44 @@ describe Bosh::AwsRegistry::InstanceManager do
|
|
17
17
|
Bosh::AwsRegistry::Models::AwsInstance.create(params)
|
18
18
|
end
|
19
19
|
|
20
|
-
def actual_ip_is(
|
20
|
+
def actual_ip_is(public_ip, private_ip, eip=nil)
|
21
21
|
instances = mock("instances")
|
22
22
|
instance = mock("instance")
|
23
|
+
if eip
|
24
|
+
elastic_ip = mock("elastic_ip", :public_ip => eip)
|
25
|
+
instance.should_receive(:has_elastic_ip?).and_return(true)
|
26
|
+
instance.should_receive(:elastic_ip).and_return(elastic_ip)
|
27
|
+
else
|
28
|
+
instance.should_receive(:has_elastic_ip?).and_return(false)
|
29
|
+
end
|
23
30
|
@ec2.should_receive(:instances).and_return(instances)
|
24
31
|
instances.should_receive(:[]).with("foo").and_return(instance)
|
25
|
-
instance.should_receive(:private_ip_address).and_return(
|
32
|
+
instance.should_receive(:private_ip_address).and_return(public_ip)
|
33
|
+
instance.should_receive(:public_ip_address).and_return(private_ip)
|
26
34
|
end
|
27
35
|
|
28
36
|
describe "reading settings" do
|
29
37
|
it "returns settings after verifying IP address" do
|
30
38
|
create_instance(:instance_id => "foo", :settings => "bar")
|
31
|
-
actual_ip_is("10.0.0.1")
|
39
|
+
actual_ip_is("10.0.0.1", "10.0.1.1")
|
32
40
|
manager.read_settings("foo", "10.0.0.1").should == "bar"
|
33
41
|
end
|
34
42
|
|
43
|
+
it "returns settings after verifying elastic IP address" do
|
44
|
+
create_instance(:instance_id => "foo", :settings => "bar")
|
45
|
+
actual_ip_is("10.0.0.1", "10.0.1.1", "10.0.3.1")
|
46
|
+
manager.read_settings("foo", "10.0.3.1").should == "bar"
|
47
|
+
end
|
48
|
+
|
35
49
|
it "raises an error if IP cannot be verified" do
|
36
50
|
create_instance(:instance_id => "foo", :settings => "bar")
|
37
|
-
actual_ip_is("10.0.0.
|
51
|
+
actual_ip_is("10.0.0.1", "10.0.1.1")
|
38
52
|
|
39
53
|
expect {
|
40
|
-
manager.read_settings("foo", "10.0.
|
54
|
+
manager.read_settings("foo", "10.0.3.1")
|
41
55
|
}.to raise_error(Bosh::AwsRegistry::InstanceError,
|
42
|
-
"Instance IP mismatch, expected IP is `10.0.
|
43
|
-
"actual IP
|
56
|
+
"Instance IP mismatch, expected IP is `10.0.3.1', " \
|
57
|
+
"actual IP(s): `10.0.0.1, 10.0.1.1'")
|
44
58
|
end
|
45
59
|
|
46
60
|
it "doesn't check remote IP if it's not provided" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bosh_aws_registry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07
|
12
|
+
date: 2012-08-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sequel
|
@@ -132,7 +132,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
132
132
|
version: '0'
|
133
133
|
segments:
|
134
134
|
- 0
|
135
|
-
hash: -
|
135
|
+
hash: -294461121857325008
|
136
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
137
|
none: false
|
138
138
|
requirements:
|
@@ -141,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
141
|
version: '0'
|
142
142
|
segments:
|
143
143
|
- 0
|
144
|
-
hash: -
|
144
|
+
hash: -294461121857325008
|
145
145
|
requirements: []
|
146
146
|
rubyforge_project:
|
147
147
|
rubygems_version: 1.8.24
|