Replace get_server_public_ip() with get_server_external_ipv4()

get_server_public_ip() just returns floating IP addresses or addresses
from a network named 'public'.

get_server_external_ipv4() tries hard to find an IPv4 address reachable
from outside the cloud.

Change-Id: I8e2c856b8f913424d3c0f20b72f240e08e4b9f62
This commit is contained in:
Davide Guerri
2015-06-13 15:39:04 +01:00
parent 07f72e19f5
commit 1f0171bea3
3 changed files with 18 additions and 6 deletions

View File

@@ -1638,7 +1638,7 @@ class OpenStackCloud(object):
return meta.get_server_private_ip(server)
def get_server_public_ip(self, server):
return meta.get_server_public_ip(server)
return meta.get_server_external_ipv4(self, server)
def get_server_dict(self, name_or_id):
server = self.get_server(name_or_id)

View File

@@ -155,7 +155,7 @@ def get_hostvars_from_server(cloud, server, mounts=None):
server_vars.pop('links', None)
# Fist, add an IP address
server_vars['public_v4'] = get_server_public_ip(server)
server_vars['public_v4'] = get_server_external_ipv4(cloud, server)
server_vars['private_v4'] = get_server_private_ip(server)
if cloud.private:
interface_ip = server_vars['private_v4']

View File

@@ -197,7 +197,10 @@ class TestMeta(testtools.TestCase):
self.assertEqual(new_list[0]['value'], 0)
self.assertEqual(new_list[1]['value'], 1)
def test_basic_hostvars(self):
@mock.patch.object(shade.meta, 'get_server_external_ipv4')
def test_basic_hostvars(self, mock_get_server_external_ipv4):
mock_get_server_external_ipv4.return_value = PUBLIC_V4
hostvars = meta.get_hostvars_from_server(
FakeCloud(), meta.obj_to_dict(FakeServer()))
self.assertNotIn('links', hostvars)
@@ -216,21 +219,30 @@ class TestMeta(testtools.TestCase):
# test volume exception
self.assertEquals([], hostvars['volumes'])
def test_private_interface_ip(self):
@mock.patch.object(shade.meta, 'get_server_external_ipv4')
def test_private_interface_ip(self, mock_get_server_external_ipv4):
mock_get_server_external_ipv4.return_value = PUBLIC_V4
cloud = FakeCloud()
cloud.private = True
hostvars = meta.get_hostvars_from_server(
cloud, meta.obj_to_dict(FakeServer()))
self.assertEqual(PRIVATE_V4, hostvars['interface_ip'])
def test_image_string(self):
@mock.patch.object(shade.meta, 'get_server_external_ipv4')
def test_image_string(self, mock_get_server_external_ipv4):
mock_get_server_external_ipv4.return_value = PUBLIC_V4
server = FakeServer()
server.image = 'fake-image-id'
hostvars = meta.get_hostvars_from_server(
FakeCloud(), meta.obj_to_dict(server))
self.assertEquals('fake-image-id', hostvars['image']['id'])
def test_az(self):
@mock.patch.object(shade.meta, 'get_server_external_ipv4')
def test_az(self, mock_get_server_external_ipv4):
mock_get_server_external_ipv4.return_value = PUBLIC_V4
server = FakeServer()
server.__dict__['OS-EXT-AZ:availability_zone'] = 'az1'
hostvars = meta.get_hostvars_from_server(