Fix instance creation when a network with no subnet is used
It is possible with OpenStack Networking to create a network with no subnet attached to it. When creating an instance associated to such a network, the engine would raise a 'list index out of range' exception because the instance has no IP address on the network. The issue would also happen with a loadbalancer referencing the same type of instance. Change-Id: I6122efb90877d8020added44aee8802eb8a80297 Fixes: bug #1187023
This commit is contained in:
parent
c981c55d32
commit
6ba1916e31
|
@ -134,8 +134,9 @@ class Instance(resource.Resource):
|
|||
'''
|
||||
# Just record the first ipaddress
|
||||
for n in networks:
|
||||
self.ipaddress = networks[n][0]
|
||||
break
|
||||
if len(networks[n]) > 0:
|
||||
self.ipaddress = networks[n][0]
|
||||
break
|
||||
|
||||
def _ipaddress(self):
|
||||
'''
|
||||
|
|
|
@ -253,7 +253,8 @@ class LoadBalancer(stack_resource.StackResource):
|
|||
logger.warn('Instance (%s) not found: %s' % (inst, str(ex)))
|
||||
else:
|
||||
for n in server.networks:
|
||||
return server.networks[n][0]
|
||||
if len(server.networks[n]) > 0:
|
||||
return server.networks[n][0]
|
||||
|
||||
return '0.0.0.0'
|
||||
|
||||
|
|
|
@ -264,3 +264,10 @@ class instancesTest(HeatTestCase):
|
|||
'id4',
|
||||
'id5'
|
||||
]))
|
||||
|
||||
def test_instance_without_ip_address(self):
|
||||
return_server = self.fc.servers.list()[3]
|
||||
instance = self._create_test_instance(return_server,
|
||||
'test_without_ip_address')
|
||||
|
||||
self.assertEqual(instance.FnGetAtt('PrivateIp'), '0.0.0.0')
|
||||
|
|
|
@ -114,6 +114,7 @@ class FakeHTTPClient(base_client.HTTPClient):
|
|||
{'id': 1234, 'name': 'sample-server'},
|
||||
{'id': 5678, 'name': 'sample-server2'},
|
||||
{'id': 9101, 'name': 'hard-reboot'},
|
||||
{'id': 9102, 'name': 'server-with-no-ip'},
|
||||
{'id': 9999, 'name': 'sample-server3'}
|
||||
]})
|
||||
|
||||
|
@ -174,6 +175,18 @@ class FakeHTTPClient(base_client.HTTPClient):
|
|||
"private": [{"version": 4,
|
||||
"addr": "10.13.12.13"}]},
|
||||
"metadata": {"Server Label": "DB 1"}},
|
||||
{"id": 9102,
|
||||
"name": "server-with-no-ip",
|
||||
"image": {"id": 2,
|
||||
"name": "sample image"},
|
||||
"flavor": {"id": 1,
|
||||
"name": "256 MB Server"},
|
||||
"hostId":
|
||||
"c1365ba78c624df9b2ff446515a682f5",
|
||||
"status": "ACTIVE",
|
||||
"addresses": {
|
||||
"empty_net": []},
|
||||
"metadata": {"Server Label": "DB 1"}},
|
||||
{"id": 9999,
|
||||
"name": "sample-server3",
|
||||
"image": {"id": 3,
|
||||
|
@ -215,7 +228,7 @@ class FakeHTTPClient(base_client.HTTPClient):
|
|||
return (200, r)
|
||||
|
||||
def get_servers_WikiServerOne2(self, **kw):
|
||||
r = {'server': self.get_servers_detail()[1]['servers'][0]}
|
||||
r = {'server': self.get_servers_detail()[1]['servers'][3]}
|
||||
return (200, r)
|
||||
|
||||
def get_servers_5678(self, **kw):
|
||||
|
@ -278,6 +291,10 @@ class FakeHTTPClient(base_client.HTTPClient):
|
|||
def get_servers_9999_diagnostics(self, **kw):
|
||||
return (200, 'Fake diagnostics')
|
||||
|
||||
def get_servers_9102(self, **kw):
|
||||
r = {'server': self.get_servers_detail()[1]['servers'][3]}
|
||||
return (200, r)
|
||||
|
||||
def get_servers_1234_actions(self, **kw):
|
||||
return (200, {'actions': [{'action': 'rebuild',
|
||||
'error': None,
|
||||
|
|
Loading…
Reference in New Issue