bosh_aws_registry 0.2.1 → 0.2.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.
| @@ -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
         |