def take_action(self, args):
        # instantiate all clients:
        source_client = conf.get_source_openstack_client()
        destination_client = conf.get_destination_openstack_client()

        if args.src_tenant_id:
            src_tenant_id = args.src_tenant_id
        elif args.src_tenant_name:
            src_tenant_id = source_client.get_project_id(
                args.src_tenant_name)
        if args.dest_tenant_id:
            dest_tenant_id = args.dest_tenant_id
        elif args.dest_tenant_name:
            dest_tenant_id = destination_client.get_project_id(
                args.dest_tenant_name)

        secgroup_creation_payload = {
            "source_name": args.secgroup_name,
            "src_tenant_id": src_tenant_id,
            "dest_tenant_id": dest_tenant_id}

        secgroup_creation_action = (
            secgroup_actions.SecurityGroupCreationAction(
                secgroup_creation_payload,
                source_openstack_client=source_client,
                destination_openstack_client=destination_client))

        done = secgroup_creation_action.check_already_done()
        secgroup = []
        if done["done"]:
            LOG.info(
                "Security Group %s Creation seemingly done."
                % args.secgroup_name)
            secgroup = {
                'destination_name': done["result"],
                'destination_id': security_groups.get_security_group(
                    destination_client, dest_tenant_id, done["result"])['id'],
                'dest_tenant_id': dest_tenant_id,
                'dest_tenant_name': destination_client.get_project_name(
                    dest_tenant_id)}
        else:
            if args.not_drill:
                try:
                    secgroup = secgroup_creation_action.execute_operations()
                except (Exception, KeyboardInterrupt):
                    LOG.warn("Error occured while recreating security group "
                             "with name '%s'. Rolling back all changes.",
                             args.secgroup_name)
                    secgroup_creation_action.cleanup()
                    raise
            else:
                secgroup_creation_action.print_operations()
                secgroup = {
                    'destination_name': 'NOT DONE',
                    'destination_id': 'NOT DONE',
                    'dest_tenant_id': dest_tenant_id,
                    'dest_tenant_name': destination_client.get_project_name(
                        dest_tenant_id)}

        return SecurityMigrationFormatter().list_objects([secgroup])
def main():
    args = PARSER.parse_args()
    conf.CONF(
        # NOTE: passing the whole of sys.argv[1:] will make
        # oslo_conf error out with urecognized arguments:
        ["--config-file", args.conf_file],
        project=constants.PROJECT_NAME,
        version=constants.PROJECT_VERSION)

    migration_ids = args.migrations
    source_client = conf.get_source_openstack_client()
    coriolis = conf.get_coriolis_client()
    result_list = []
    for migration_id in migration_ids:
        result = instances.get_migration_assessment(source_client, coriolis,
                                                    migration_id)
        result_list.append(result)

    if args.format.lower() == "yaml":
        yaml_result = yaml.dump(result_list,
                                default_flow_style=False,
                                indent=4)
        print(yaml_result)
    elif args.format.lower() == "json":
        json_result = json.dumps(result_list, indent=4)
        print(json_result)
    elif args.format.lower() == "excel":
        write_excel(result_list, args.excel_filepath)
    else:
        raise ValueError("Undefinded output format.")
Ejemplo n.º 3
0
    def take_action(self, args):
        # instantiate all clients:
        source_client = conf.get_source_openstack_client()
        destination_client = conf.get_destination_openstack_client()

        if args.src_network_name:
            src_network_id = networks.get_network(
                source_client, args.src_network_name)['id']
        else:
            src_network_id = args.src_network_id

        if args.dest_tenant_name:
            dest_tenant_id = destination_client.get_project_id(
                args.dest_tenant_name)
        else:
            dest_tenant_id = args.dest_tenant_id

        network_creation_payload = {
            "src_network_id": src_network_id,
            "dest_tenant_id": dest_tenant_id}

        network_creation_action = network_actions.NetworkCreationAction(
            network_creation_payload,
            source_openstack_client=source_client,
            destination_openstack_client=destination_client)

        done = network_creation_action.check_already_done()
        if done["done"]:
            LOG.info(
                "Network Migration seemingly done with Network Id '%s' ."
                % done['result'])
            dest_network = networks.get_network(
                destination_client, done['result'])
            network = {
                'destination_name': dest_network['name'],
                'destination_id': done['result'],
                'dest_tenant_name': destination_client.get_project_name(
                    dest_tenant_id),
                'dest_tenant_id': dest_tenant_id}

        else:
            if args.not_drill:
                try:
                    network = network_creation_action.execute_operations()
                except (Exception, KeyboardInterrupt):
                    LOG.warn("Error occured while recreating network with id "
                             "'%s'. Rolling back all changes.", src_network_id)
                    network_creation_action.cleanup()
                    raise
            else:
                network_creation_action.print_operations()
                network = {
                    'destination_name': 'NOT DONE',
                    'destination_id': 'NOT DONE',
                    'dest_tenant_name': destination_client.get_project_name(
                        dest_tenant_id),
                    'dest_tenant_id': dest_tenant_id}

        return NetworkMigrationFormatter().list_objects([network])
Ejemplo n.º 4
0
    def take_action(self, args):
        # instantiate all clients:
        source_client = conf.get_source_openstack_client()
        destination_client = conf.get_destination_openstack_client()

        src_router_id = None
        if args.src_router_name:
            src_router_id = routers.get_router(source_client,
                                               args.src_router_name)['id']
        else:
            src_router_id = args.src_router_id

        dest_tenant_id = None
        if args.dest_tenant_name:
            dest_tenant_id = destination_client.get_project_id(
                args.dest_tenant_name)
        else:
            dest_tenant_id = args.dest_tenant_id

        router_creation_payload = {
            'src_router_id': src_router_id,
            'dest_tenant_id': dest_tenant_id
        }

        if args.copy_routes:
            router_creation_payload['copy_routes'] = True

        router_creation_action = network_actions.RouterCreationAction(
            router_creation_payload,
            source_openstack_client=source_client,
            destination_openstack_client=destination_client)

        done = router_creation_action.check_already_done()
        router = None
        if done["done"]:
            router = routers.get_router(destination_client, done['result'])
            LOG.info("Router '%s' Migration seemingly done." % router['name'])
        else:
            if args.not_drill:
                try:
                    router = router_creation_action.execute_operations()
                except (Exception, KeyboardInterrupt):
                    LOG.warn(
                        "Error occured while recreating router with id "
                        "'%s'. Rolling back all changes", src_router_id)
                    router_creation_action.cleanup()
                    raise
            else:
                router_creation_action.print_operations()
                router = {
                    'name': 'NOT DONE',
                    'id': 'NOT DONE',
                    'tenant_id': 'NOT DONE'
                }

        return RouterMigrationFormatter().list_objects([router])
Ejemplo n.º 5
0
    def take_action(self, args):
        # instantiate all clients:
        coriolis = conf.get_coriolis_client()
        source_client = conf.get_source_openstack_client()
        destination_client = conf.get_destination_openstack_client()
        dest_env = conf.get_destination_openstack_environment()

        source_vms = args.instances
        batch_name = args.batch_name
        migration_payload = {"instances": source_vms, "batch_name": batch_name}
        batch_migration_action = (
            coriolis_transfer_actions.BatchMigrationAction(
                migration_payload,
                source_openstack_client=source_client,
                destination_openstack_client=destination_client,
                coriolis_client=coriolis,
                destination_env=dest_env))

        migrations = []
        done = batch_migration_action.check_already_done()
        if done["done"]:
            LOG.info("Batch seemingly done. (a migration for each VM in the "
                     "batch which has equivalent endpoint details was found)")
        else:
            if args.not_drill:
                try:
                    migrations = batch_migration_action.execute_operations()
                except (Exception, KeyboardInterrupt):
                    LOG.warn(
                        "Error occured while creating migrations for "
                        "instances '%s'. Rolling back all changes", source_vms)
                    batch_migration_action.cleanup()
                    raise
            else:
                batch_migration_action.print_operations()

        if args.replicate_flavors:
            for flavor in source_client.nova.flavors.list(is_public=None):
                flavor_migration_action = (flavor_actions.FlavorCreationAction(
                    {'src_flavor_id': flavor.id},
                    source_openstack_client=source_client,
                    destination_openstack_client=destination_client,
                    coriolis_client=coriolis))
                try:
                    if args.not_drill:
                        flavor_migration_action.execute_operations()
                    else:
                        flavor_migration_action.print_operations()
                except (Exception, KeyboardInterrupt):
                    LOG.warn(
                        "Error occured while recreating flavor "
                        "'%s'. Rolling back all changes", flavor.id)
                    flavor_migration_action.cleanup()
                    raise

        return MigrationFormatter().list_objects(migrations)
Ejemplo n.º 6
0
    def take_action(self, args):
        # instantiate all clients:
        source_client = conf.get_source_openstack_client()
        destination_client = conf.get_destination_openstack_client()
        coriolis_client = conf.get_coriolis_client()

        if args.src_tenant_id:
            src_tenant_name = source_client.get_project_name(
                args.src_tenant_id)
        elif args.src_tenant_name:
            src_tenant_name = args.src_tenant_name

        tenant_creation_payload = {
            "tenant_name": src_tenant_name,
            "use_replicas": args.use_replicas,
            "execute_replicas": args.execute_replicas,
            "replicate_flavors": args.replicate_flavors
        }
        if args.no_instances:
            tenant_creation_payload['instances'] = None
        elif args.all_instances:
            tenant_creation_payload['instances'] = []
        elif args.instances:
            tenant_creation_payload['instances'] = args.instances

        tenant_creation_action = (tenant_actions.WholeTenantCreationAction(
            tenant_creation_payload,
            source_openstack_client=source_client,
            destination_openstack_client=destination_client,
            coriolis_client=coriolis_client))

        done = tenant_creation_action.check_already_done()
        tenant = None
        if done["done"]:
            LOG.info("Tenant %s Creation seemingly done." % done["result"])
            tenant = {
                'name': done["result"],
                'id': destination_client.get_project_id(done["result"])
            }
        else:
            if args.not_drill:
                try:
                    tenant = tenant_creation_action.execute_operations()
                except (Exception, KeyboardInterrupt):
                    LOG.warn(
                        "Error occured while recreating source tenant "
                        "'%s'. Rolling back changes", src_tenant_name)
                    tenant_creation_action.cleanup()
                    raise
            else:
                tenant_creation_action.print_operations()
                tenant = {'id': 'NOT DONE', 'name': 'NOT DONE'}

        return TenantMigrationFormatter().list_objects([tenant])
Ejemplo n.º 7
0
    def take_action(self, args):
        # instantiate all clients:
        source_client = conf.get_source_openstack_client()
        destination_client = conf.get_destination_openstack_client()

        src_flavor_id = None
        if args.src_flavor_id:
            src_flavor_id = args.src_flavor_id
        else:
            src_flavor_id = source_client.nova.flavors.find(
                is_public=None, name=args.src_flavor_name)

        flavor_creation_payload = {
                'src_flavor_id': src_flavor_id}

        flavor_creation_action = flavor_actions.FlavorCreationAction(
            flavor_creation_payload,
            source_openstack_client=source_client,
            destination_openstack_client=destination_client)

        done = flavor_creation_action.check_already_done()
        flavor = None
        if done["done"]:
            flavor = done["result"]
            LOG.info(
                "Flavor '%s' Migration seemingly done."
                % flavor['name'])
        else:
            if args.not_drill:
                try:
                    flavor = flavor_creation_action.execute_operations()
                except (Exception, KeyboardInterrupt):
                    LOG.warn("Error occured while recreating flavor "
                             "'%s'. Rolling back all changes", src_flavor_id)
                    flavor_creation_action.cleanup()
                    raise
            else:
                flavor_creation_action.print_operations()
                flavor = {
                    'name': 'NOT DONE',
                    'id': 'NOT DONE',
                    'vcpus': 'NOT DONE',
                    'ram': 'NOT DONE',
                    'disk': 'NOT DONE'}

        return FlavorMigrationFormatter().list_objects([flavor])
 def take_action(self, args):
     source_client = conf.get_source_openstack_client()
     instance_names = args.instances
     result = instances.get_instances_assessment(
         source_client, instance_names)
     assessment_info_format = r'Migration Assessment Info: %s'
     if args.format:
         if args.format.lower() == "yaml":
             yaml_result = yaml.dump(
                 result, default_flow_style=False, indent=4)
             LOG.info(assessment_info_format % yaml_result)
         elif args.format.lower() == "json":
             json_result = json.dumps(result, indent=4)
             LOG.info(assessment_info_format % json_result)
         else:
             raise ValueError("Undefinded output format")
     else:
         json_result = json.dumps(result, indent=4)
         LOG.info(json_result)
Ejemplo n.º 9
0
    def take_action(self, args):
        # instantiate all clients:
        coriolis = conf.get_coriolis_client()
        source_client = conf.get_source_openstack_client()
        destination_client = conf.get_destination_openstack_client()
        dest_env = conf.get_destination_openstack_environment()

        source_vms = args.instances
        batch_name = args.batch_name
        execute_replica = args.execute_replica
        replica_payload = {
            "instances": source_vms,
            "batch_name": batch_name,
            "execute_replica": execute_replica
        }
        batch_replica_action = (coriolis_transfer_actions.BatchReplicaAction(
            replica_payload,
            source_openstack_client=source_client,
            destination_openstack_client=destination_client,
            coriolis_client=coriolis,
            destination_env=dest_env))

        replicas = []
        done = batch_replica_action.check_already_done()
        if done["done"]:
            LOG.info("Batch seemingly done. (a replica for each VM in the "
                     "batch which has equivalent endpoint details was found)")
        else:
            if args.not_drill:
                try:
                    replicas = batch_replica_action.execute_operations()
                except (Exception, KeyboardInterrupt):
                    LOG.warn(
                        "Error occured while creating replicas for "
                        "instances '%s'. Rolling back all changes", source_vms)
                    batch_replica_action.cleanup()
                    raise

            else:
                batch_replica_action.print_operations()

        return ReplicaFormatter().list_objects(replicas)
def main():
    args = PARSER.parse_args()
    conf.CONF(
        # NOTE: passing the whole of sys.argv[1:] will make
        # oslo_conf error out with urecognized arguments:
        ["--config-file", args.conf_file],
        project=constants.PROJECT_NAME,
        version=constants.PROJECT_VERSION)

    # instantiate all clients:
    coriolis = conf.get_coriolis_client()
    source_client = conf.get_source_openstack_client()
    destination_client = conf.get_destination_openstack_client()
    dest_env = conf.get_destination_openstack_environment()

    source_vms = args.instances
    batch_name = args.batch_name
    migration_payload = {
        "instances": source_vms,
        "batch_name": batch_name,
        "create_tenants": not args.dont_recreate_tenants
    }
    batch_migration_action = actions.BatchMigrationAction(
        source_client,
        coriolis,
        migration_payload,
        destination_openstack_client=destination_client,
        destination_env=dest_env)

    done = batch_migration_action.check_already_done()
    if done["done"]:
        LOG.info("Batch seemingly done. (a migration for each VM in the "
                 "batch which has equivalent endpoint details was found)")
        migration_ids = done["result"]
        LOG.info("All migration IDs for this batch: %s", migration_ids)
    else:
        if args.not_drill:
            migration_ids = batch_migration_action.execute_operations()
            LOG.info("All migration IDs for this batch: %s", migration_ids)
        else:
            batch_migration_action.print_operations()
 def take_action(self, args):
     migration_ids = args.migrations
     source_client = conf.get_source_openstack_client()
     coriolis = conf.get_coriolis_client()
     result_list = []
     for migration_id in migration_ids:
         result = instances.get_migration_assessment(
             source_client, coriolis, migration_id)
         result_list.append(result)
     assessment_info_format = r'Instance Assessment Info: %s'
     if args.format.lower() == "yaml":
         yaml_result = yaml.dump(result_list,
                                 default_flow_style=False,
                                 indent=4)
         LOG.info(assessment_info_format % yaml_result)
     elif args.format.lower() == "json":
         json_result = json.dumps(result_list, indent=4)
         LOG.info(assessment_info_format % json_result)
     elif args.format.lower() == "excel":
         write_excel(result_list, args.excel_filepath)
     else:
         raise ValueError("Undefinded output format.")
Ejemplo n.º 12
0
    def take_action(self, args):
        # instantiate all clients:
        source_client = conf.get_source_openstack_client()
        destination_client = conf.get_destination_openstack_client()

        src_port_id = args.src_port_id
        dest_network_id = args.dest_network_id

        port_creation_payload = {
            'src_port_id': src_port_id,
            'dest_network_id': dest_network_id
        }

        port_creation_action = network_actions.PortCreationAction(
            port_creation_payload,
            source_openstack_client=source_client,
            destination_openstack_client=destination_client)

        done = port_creation_action.check_already_done()
        port = []
        if done["done"]:
            port = done["result"]
            LOG.info("port with info '%s' Migration seemingly done." % port)

        else:
            if args.not_drill:
                try:
                    port = port_creation_action.execute_operations()
                except Exception as action_exception:
                    LOG.warn(
                        "Error occured while recreating port with id"
                        " '%s'. Rolling back all changes", src_port_id)
                    port_creation_action.cleanup()
                    raise action_exception
            else:
                port_creation_action.print_operations()
                port = {'name': 'NOT DONE', 'id': 'NOT DONE'}

        return PortMigrationFormatter().list_objects([port])
Ejemplo n.º 13
0
    def take_action(self, args):
        # instantiate all clients:
        source_client = conf.get_source_openstack_client()
        destination_client = conf.get_destination_openstack_client()

        keypair_creation_payload = {'src_keypair_name': args.src_keypair_name}
        keypair_creation_action = keypair_actions.KeypairCreationAction(
            keypair_creation_payload,
            source_openstack_client=source_client,
            destination_openstack_client=destination_client)

        done = keypair_creation_action.check_already_done()
        keypair = []
        if done["done"]:
            keypair = done["result"]
            LOG.info("Keypair '%s' Migration seemingly done." %
                     keypair['name'])
        else:
            if args.not_drill:
                try:
                    keypair = keypair_creation_action.execute_operations()
                except (Exception, KeyboardInterrupt):
                    LOG.warn(
                        "Error occured while recreating keypair"
                        " \"%s\". Rolling back all changes",
                        args.src_keypair_name)
                    keypair_creation_action.cleanup()
                    raise
            else:
                keypair_creation_action.print_operations()
                keypair = {
                    'name': 'NOT DONE',
                    'fingerprint': 'NOT DONE',
                    'user_id': 'NOT DONE'
                }

        return KeypairMigrationFormatter().list_objects([keypair])
def main():
    args = PARSER.parse_args()
    conf.CONF(
        # NOTE: passing the whole of sys.argv[1:] will make
        # oslo_conf error out with urecognized arguments:
        ["--config-file", args.conf_file],
        project=constants.PROJECT_NAME,
        version=constants.PROJECT_VERSION)

    source_client = conf.get_source_openstack_client()
    instance_names = args.instances
    result = instances.get_instances_assessment(source_client, instance_names)
    if args.format:
        if args.format.lower() == "yaml":
            yaml_result = yaml.dump(result, default_flow_style=False, indent=4)
            print(yaml_result)
        elif args.format.lower() == "json":
            json_result = json.dumps(result, indent=4)
            print(json_result)
        else:
            raise ValueError("Undefinded output format")
    else:
        json_result = json.dumps(result, indent=4)
        print(json_result)
Ejemplo n.º 15
0
    def take_action(self, args):
        # instantiate all clients:
        source_client = conf.get_source_openstack_client()
        destination_client = conf.get_destination_openstack_client()

        src_user_id = None
        if args.src_user_name:
            user_list = users.list_users(source_client,
                                         filters={'name': args.src_user_name})
            if len(user_list) == 1:
                src_user_id = user_list[0].id
            elif len(user_list) > 1:
                raise Exception(
                    "Multiple users with name '%s' found! Please rename "
                    "source user or use --src-user-id parameter." %
                    args.src_user_name)
            elif not user_list:
                raise Exception("No users with name '%s' found!" %
                                args.src_user_name)
        else:
            src_user_id = args.src_user_id

        user_creation_payload = {'src_user_id': src_user_id}

        if args.admin_role_tenants:
            user_creation_payload[
                'admin_role_tenants'] = args.admin_role_tenants

        user_creation_action = tenant_actions.UserCreationAction(
            user_creation_payload,
            source_openstack_client=source_client,
            destination_openstack_client=destination_client)

        done = user_creation_action.check_already_done()
        user = []
        src_nova_client = source_client.nova
        latest_src_nova_version = src_nova_client.versions.get_current(
        ).version
        if latest_src_nova_version:
            session = src_nova_client.client.session
            src_nova_client = nova_client.Client(latest_src_nova_version,
                                                 session=session)

        if done["done"]:
            user = users.get_user(destination_client, done['result']).to_dict()
            user['tenants'] = users.get_user_admin_tenants(
                destination_client, user['id'])
            LOG.info("User '%s' Migration seemingly done." % user['name'])

        else:
            if args.not_drill:
                try:
                    user = user_creation_action.execute_operations()
                    if args.replicate_keypairs:
                        src_nova_version = float(
                            src_nova_client.api_version.get_string())
                        if src_nova_version < 2.2:
                            raise Exception(
                                "Source nova client microversion \"%s\" too "
                                "low for keypair user_id association. "
                                "Unable to replicate keypairs associated to "
                                "user." %
                                (src_nova_client.api_version.get_string()))
                        for keypair in src_nova_client.keypairs.list(
                                user_id=src_user_id):
                            keypair_creation_action = (
                                keypair_actions.KeypairCreationAction(
                                    {
                                        'src_keypair_name': keypair.id,
                                        'src_user_id': src_user_id
                                    },
                                    source_openstack_client=source_client,
                                    destination_openstack_client=(
                                        destination_client)))
                            try:
                                action = keypair_creation_action
                                action.execute_operations()
                            except (Exception, KeyboardInterrupt):
                                LOG.warn("Error occured while recreating "
                                         "keypair \"%s\". Rolling back all "
                                         "changes." % keypair.id)
                                keypair_creation_action.cleanup()
                except (Exception, KeyboardInterrupt):
                    LOG.warn(
                        "Error occured while recreating user with id"
                        " '%s'. Rolling back all changes", src_user_id)
                    user_creation_action.cleanup()
                    raise
            else:
                user_creation_action.print_operations()
                user = {
                    'name': 'NOT DONE',
                    'id': 'NOT DONE',
                    'tenants': 'NOT DONE'
                }

        return UserMigrationFormatter().list_objects([user])
Ejemplo n.º 16
0
    def take_action(self, args):
        # instantiate all clients:
        source_client = conf.get_source_openstack_client()
        destination_client = conf.get_destination_openstack_client()

        if args.src_network_id:
            src_network_id = args.src_network_id
            src_network_name = networks.get_network(
                source_client, args.src_network_id)['name']
        elif args.src_network_name:
            src_network_id = networks.get_network(source_client,
                                                  args.src_network_name)['id']
            src_network_name = args.src_network_name

        dest_network_name = CONF.destination.new_network_name_format % {
            "original": src_network_name
        }
        dest_network_id = networks.get_network(destination_client,
                                               dest_network_name)['id']

        subnet_creation_payload = {
            "source_name": args.subnet_name,
            "src_network_id": src_network_id,
            "dest_network_id": dest_network_id
        }

        subnet_creation_action = network_actions.SubnetCreationAction(
            subnet_creation_payload,
            source_openstack_client=source_client,
            destination_openstack_client=destination_client)

        done = subnet_creation_action.check_already_done()
        subnet = []
        if done["done"]:
            LOG.info("Subnet Migration seemingly done.")
            subnet = {
                'destination_name':
                (subnet_creation_action.get_new_subnet_name()),
                'destination_id': done['result'],
                'dest_network_id': dest_network_id,
                'dest_network_name': dest_network_name
            }

        else:
            if args.not_drill:
                try:
                    subnet = subnet_creation_action.execute_operations()
                except (Exception, KeyboardInterrupt):
                    LOG.warn(
                        "Error occured while recreating subnet '%s'."
                        "Rolling back all changes", args.subnet_name)
                    subnet_creation_action.cleanup()
                    raise
            else:
                subnet_creation_action.print_operations()
                subnet = {
                    'destination_name': 'NOT DONE',
                    'destination_id': 'NOT DONE',
                    'dest_network_id': dest_network_id,
                    'dest_network_name': dest_network_name
                }

        return SubnetMigrationFormatter().list_objects([subnet])