def migrate_server(context, server_id): server = context.src_cloud.nova.servers.get(server_id) server_id = server.id flavor_id = server.flavor["id"] flavor_retrieve = "flavor-{}-retrieve".format(flavor_id) resources = [] identity_flow = identity_tasks.migrate_server_identity(context, server.to_dict()) resources.append(identity_flow) tenant = context.src_cloud.keystone.tenants.get(server.tenant_id) server_secgroups = server.list_security_group() for secgroup in server_secgroups: secgroup_retrieve = "secgroup-{}-retrieve".format(secgroup.id) if secgroup_retrieve not in context.store: secgroup_flow = secgroup_tasks.migrate_secgroup(context, secgroup.id, tenant.id, server.user_id) resources.append(secgroup_flow) server_nics = "server-{}-nics".format(server_id) nics = [] for network_name, addresses in server.addresses.iteritems(): for address in addresses: flow, nic = network_tasks.migrate_nic(context, network_name, address, tenant.id) if flow is not None: resources.append(flow) if nic is not None: nics.append(nic) resources.append(task_utils.Gather(name=server_nics, provides=server_nics, rebind=nics)) if flavor_retrieve not in context.store: flavor_flow = flavor_tasks.migrate_flavor(context, flavor_id) resources.append(flavor_flow) add_resources, server_flow = server_tasks.reprovision_server(context, server, server_nics) resources += add_resources return resources, server_flow
def test_reprovision_server(self, mock_flow, provision_server_mock, retrieve_server_mock, suspend_server_mock, boot_server_mock, terminate_server_mock, start_event_mock, delete_server_volumes_mock, mock_sync_point, mock_network_manager, mock_migrate_server_volumes): floating_ips_flow = Mock(name="network-flows") mock_image_flow = Mock(name="image-flow") image_ensure = "image-{}-ensure".format(self.image_info["id"]) provision_server_mock.return_value = ( [mock_image_flow], [image_ensure], [], image_ensure) mock_network_manager.return_value = floating_ips_flow() server_volumes_flow = Mock(name="volumes-flow") mock_migrate_server_volumes.return_value = server_volumes_flow() server_retrieve = "server-{}-retrieve".format(self.test_server_id) keypair_ensure = "keypair-server-{}-ensure".format(self.test_server_id) expected_store_dict = { server_retrieve: self.test_server_id, keypair_ensure: None, } add_res, flow = server.reprovision_server( self.context, self.server, "nics") self.assertEqual(add_res, [mock_image_flow]) self.assertEqual(self.context.store, expected_store_dict) mock_flow.assert_called_once_with("migrate-server-{}" .format(self.test_server_id)) all_tasks = [] for call_ in flow.add.call_args_list: self.assertEqual(len(call_), 2) self.assertEqual(call_[1], {}) all_tasks += call_[0] self.assertEqual(all_tasks, [mock_sync_point(), start_event_mock(), retrieve_server_mock(), suspend_server_mock(), server_volumes_flow(), boot_server_mock(), floating_ips_flow(), terminate_server_mock(), delete_server_volumes_mock()])