Esempio n. 1
0
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
Esempio n. 2
0
    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()])