Replace first_public_address/first_private_address
OS::Nova::Server attributes first_public_address and first_private_address will not work with neutron, which allows any network name to be assigned not just 'public' and 'private'. This change replaces these attributes with a 'first_address' attribute which uses the same nova_utils.server_to_ipaddress method that AWS::EC2::Instance uses to populate all of its IP address attributes. This needs to be fixed before the Havana release to avoid these broken attributes needing to be supported. Change-Id: I0b4dc009d665e4d7b4cbc32d484a2efc6068320a Closes-Bug: #1228929
This commit is contained in:
@@ -149,14 +149,12 @@ class Server(resource.Resource):
|
||||
'the API'),
|
||||
'networks': _('A dict of assigned network addresses of the form: '
|
||||
'{"public": [ip1, ip2...], "private": [ip3, ip4]}'),
|
||||
'first_private_address': _('Convenience attribute to fetch the first '
|
||||
'assigned private network address, or an '
|
||||
'empty string if nothing has been assigned '
|
||||
'at this time'),
|
||||
'first_public_address': _('Convenience attribute to fetch the first '
|
||||
'assigned public network address, or an '
|
||||
'empty string if nothing has been assigned '
|
||||
'at this time'),
|
||||
'first_address': _('Convenience attribute to fetch the first '
|
||||
'assigned network address, or an '
|
||||
'empty string if nothing has been assigned '
|
||||
'at this time. Result may not be predictable '
|
||||
'if the server has addresses from more than one '
|
||||
'network.'),
|
||||
'instance_name': _('AWS compatible instance name'),
|
||||
'accessIPv4': _('The manually assigned alternative public IPv4 '
|
||||
'address of the server'),
|
||||
@@ -293,21 +291,14 @@ class Server(resource.Resource):
|
||||
return nics
|
||||
|
||||
def _resolve_attribute(self, name):
|
||||
if name == 'first_address':
|
||||
return nova_utils.server_to_ipaddress(
|
||||
self.nova(), self.resource_id) or ''
|
||||
server = self.nova().servers.get(self.resource_id)
|
||||
if name == 'addresses':
|
||||
return server.addresses
|
||||
if name == 'networks':
|
||||
return server.networks
|
||||
if name == 'first_private_address':
|
||||
private = server.networks.get('private', [])
|
||||
if len(private) > 0:
|
||||
return private[0]
|
||||
return ''
|
||||
if name == 'first_public_address':
|
||||
public = server.networks.get('public', [])
|
||||
if len(public) > 0:
|
||||
return public[0]
|
||||
return ''
|
||||
if name == 'instance_name':
|
||||
return server._info.get('OS-EXT-SRV-ATTR:instance_name')
|
||||
if name == 'accessIPv4':
|
||||
|
||||
@@ -121,16 +121,14 @@ class ServersTest(HeatTestCase):
|
||||
server.FnGetAtt('addresses')['public'][0]['addr'], public_ip)
|
||||
self.assertEqual(
|
||||
server.FnGetAtt('networks')['public'][0], public_ip)
|
||||
self.assertEqual(
|
||||
server.FnGetAtt('first_public_address'), public_ip)
|
||||
|
||||
private_ip = return_server.networks['private'][0]
|
||||
self.assertEqual(
|
||||
server.FnGetAtt('addresses')['private'][0]['addr'], private_ip)
|
||||
self.assertEqual(
|
||||
server.FnGetAtt('networks')['private'][0], private_ip)
|
||||
self.assertEqual(
|
||||
server.FnGetAtt('first_private_address'), private_ip)
|
||||
self.assertIn(
|
||||
server.FnGetAtt('first_address'), (private_ip, public_ip))
|
||||
|
||||
self.assertEqual(return_server._info, server.FnGetAtt('show'))
|
||||
self.assertEqual('sample-server2', server.FnGetAtt('instance_name'))
|
||||
@@ -157,16 +155,14 @@ class ServersTest(HeatTestCase):
|
||||
server.FnGetAtt('addresses')['public'][0]['addr'], public_ip)
|
||||
self.assertEqual(
|
||||
server.FnGetAtt('networks')['public'][0], public_ip)
|
||||
self.assertEqual(
|
||||
server.FnGetAtt('first_public_address'), public_ip)
|
||||
|
||||
private_ip = return_server.networks['private'][0]
|
||||
self.assertEqual(
|
||||
server.FnGetAtt('addresses')['private'][0]['addr'], private_ip)
|
||||
self.assertEqual(
|
||||
server.FnGetAtt('networks')['private'][0], private_ip)
|
||||
self.assertEqual(
|
||||
server.FnGetAtt('first_private_address'), private_ip)
|
||||
self.assertIn(
|
||||
server.FnGetAtt('first_address'), (private_ip, public_ip))
|
||||
|
||||
self.m.VerifyAll()
|
||||
|
||||
@@ -767,8 +763,7 @@ class ServersTest(HeatTestCase):
|
||||
|
||||
self.assertEqual(server.FnGetAtt('addresses'), {'empty_net': []})
|
||||
self.assertEqual(server.FnGetAtt('networks'), {'empty_net': []})
|
||||
self.assertEqual(server.FnGetAtt('first_private_address'), '')
|
||||
self.assertEqual(server.FnGetAtt('first_public_address'), '')
|
||||
self.assertEqual(server.FnGetAtt('first_address'), '')
|
||||
|
||||
def test_build_block_device_mapping(self):
|
||||
self.assertEqual(
|
||||
|
||||
Reference in New Issue
Block a user