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_migrate_secgroup(self, flow_mock, retrieve_secgroup_mock, ensure_secgroup_mock): secgroup_binding = "secgroup-{}".format(self.test_secgroup_id) secgroup_retrieve = "{}-retrieve".format(secgroup_binding) flow = secgroup.migrate_secgroup( self.context, self.test_secgroup_id, self.test_tenant_id, self.test_user_id) self.assertEqual({secgroup_retrieve: self.test_secgroup_id}, self.context.store) flow_mock.assert_called_once_with("migrate-secgroup-{}" .format(self.test_secgroup_id)) self.assertEqual(flow.add.call_args_list, [call(retrieve_secgroup_mock()), call(ensure_secgroup_mock())])