diff --git a/lib/fog/aws.rb b/lib/fog/aws.rb index 3219ef0d8..453eb09eb 100644 --- a/lib/fog/aws.rb +++ b/lib/fog/aws.rb @@ -46,6 +46,14 @@ module Fog sprintf("%0.10f", rand / 100).to_f end + def self.dns_name_for(ip_address) + "ec2-#{ip_address.gsub('.','-')}.compute-1.amazonaws.com" + end + + def self.private_dns_name_for(ip_address) + "ip-#{ip_address.gsub('.','-')}.ec2.internal" + end + def self.console_output 'This is my console. There are many like it, but this one is mine. My console is my best friend. It is my life. I must master it as I master my life. My console, without me, is useless. Without my console, I am useless.' end diff --git a/lib/fog/aws/requests/ec2/associate_address.rb b/lib/fog/aws/requests/ec2/associate_address.rb index cbbf3d72a..011565dec 100644 --- a/lib/fog/aws/requests/ec2/associate_address.rb +++ b/lib/fog/aws/requests/ec2/associate_address.rb @@ -34,6 +34,9 @@ module Fog address = @data[:addresses][public_ip] if instance && address address['instanceId'] = instance_id + instance['originalIpAddress'] = instance['ipAddress'] + instance['ipAddress'] = public_ip + instance['dnsName'] = Fog::AWS::Mock.dns_name_for(public_ip) response.status = 200 response.body = { 'requestId' => Fog::AWS::Mock.request_id, diff --git a/lib/fog/aws/requests/ec2/describe_instances.rb b/lib/fog/aws/requests/ec2/describe_instances.rb index dc1abfdd0..655429517 100644 --- a/lib/fog/aws/requests/ec2/describe_instances.rb +++ b/lib/fog/aws/requests/ec2/describe_instances.rb @@ -78,9 +78,9 @@ module Fog when 'pending' if Time.now - instance['launchTime'] > Fog::Mock.delay instance['ipAddress'] = Fog::AWS::Mock.ip_address - instance['dnsName'] = "ec2-#{instance['ipAddress'].gsub('.','-')}.compute-1.amazonaws.com" + instance['dnsName'] = Fog::AWS::Mock.dns_name_for(instance['ipAddress']) instance['privateIpAddress'] = Fog::AWS::Mock.ip_address - instance['privateDnsName'] = "ip-#{instance['privateIpAddress'].gsub('.','-')}.ec2.internal" + instance['privateDnsName'] = Fog::AWS::Mock.private_dns_name_for(instance['privateIpAddress']) instance['instanceState'] = { 'code' => 16, 'name' => 'running' } end when 'rebooting' diff --git a/lib/fog/aws/requests/ec2/disassociate_address.rb b/lib/fog/aws/requests/ec2/disassociate_address.rb index d1c6e6265..41b42e6d7 100644 --- a/lib/fog/aws/requests/ec2/disassociate_address.rb +++ b/lib/fog/aws/requests/ec2/disassociate_address.rb @@ -29,6 +29,10 @@ module Fog response = Excon::Response.new response.status = 200 if address = @data[:addresses][public_ip] + instance_id = address['instanceId'] + instance = @data[:instances][instance_id] + instance['ipAddress'] = instance['originalIpAddress'] + instance['dnsName'] = Fog::AWS::Mock.dns_name_for(instance['ipAddress']) address['instanceId'] = nil response.status = 200 response.body = { diff --git a/tests/aws/requests/ec2/address_tests.rb b/tests/aws/requests/ec2/address_tests.rb index e524817b0..bb0f10fef 100644 --- a/tests/aws/requests/ec2/address_tests.rb +++ b/tests/aws/requests/ec2/address_tests.rb @@ -2,6 +2,7 @@ Shindo.tests('AWS::EC2 | address requests', ['aws']) do @server = AWS[:ec2].servers.create(:image_id => GENTOO_AMI) @server.wait_for { ready? } + @ip_address = @server.ip_address tests('success') do @@ -32,11 +33,13 @@ Shindo.tests('AWS::EC2 | address requests', ['aws']) do test("#associate_address('#{@server.identity}', '#{@public_ip}')") do @data = AWS[:ec2].associate_address(@server.identity, @public_ip).body has_format(@data, AWS::EC2::Formats::BASIC) + @server.reload.ip_address == @public_ip end test("#disassociate_address('#{@public_ip}')") do @data = AWS[:ec2].disassociate_address(@public_ip).body has_format(@data, AWS::EC2::Formats::BASIC) + @server.reload.ip_address == @ip_address end test("#release_address('#{@public_ip}')") do