To attach interface for server when using 'uuid'

If user using 'uuid' to specify the network id, to make
sure to attach interface for server when updating.

Change-Id: Ie7ceb9c54ab4da4ad9a5d19803791edd41e5604c
Closes-Bug: #1439497
This commit is contained in:
huangtianhua 2015-04-02 14:22:35 +08:00
parent d56778dc7a
commit 6523afe8c9
2 changed files with 48 additions and 0 deletions

View File

@ -1068,6 +1068,11 @@ class Server(stack_user.StackUser):
None, self._get_network_id(net),
net.get('fixed_ip'))
checkers.append(checker)
elif net.get('uuid'):
checker = scheduler.TaskRunner(server.interface_attach,
None, net['uuid'],
net.get('fixed_ip'))
checkers.append(checker)
# if new_networks is None, we should attach first free port,
# according to similar behavior during instance creation

View File

@ -2874,6 +2874,49 @@ class ServersTest(common.HeatTestCase):
self.assertEqual((server.UPDATE, server.COMPLETE), server.state)
self.m.VerifyAll()
def test_server_update_networks_with_uuid(self):
return_server = self.fc.servers.list()[1]
return_server.id = '5678'
server = self._create_test_server(return_server, 'networks_update')
old_networks = [
{'network': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'}]
new_networks = [
{'uuid': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'}]
server.t['Properties']['networks'] = old_networks
update_template = copy.deepcopy(server.t)
update_template['Properties']['networks'] = new_networks
self.m.StubOutWithMock(self.fc.servers, 'get')
self.fc.servers.get('5678').MultipleTimes().AndReturn(return_server)
self.m.StubOutWithMock(return_server, 'interface_list')
poor_interfaces = [
self.create_fake_iface('95e25541-d26a-478d-8f36-ae1c8f6b74dc',
'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
'11.12.13.14')
]
return_server.interface_list().AndReturn(poor_interfaces)
self.m.StubOutWithMock(return_server, 'interface_detach')
return_server.interface_detach(
poor_interfaces[0].port_id).AndReturn(None)
self.m.StubOutWithMock(return_server, 'interface_attach')
return_server.interface_attach(None, new_networks[0]['uuid'],
None).AndReturn(None)
self.stub_NetworkConstraint_validate()
self.patchobject(neutron.NeutronClientPlugin, 'resolve_network',
return_value='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa')
self.m.ReplayAll()
scheduler.TaskRunner(server.update, update_template)()
self.assertEqual((server.UPDATE, server.COMPLETE), server.state)
self.m.VerifyAll()
def test_server_update_networks_with_empty_list(self):
return_server = self.fc.servers.list()[1]
return_server.id = '5678'