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
Example #2
0
    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())])