Пример #1
0
def do_cluster_create(cs, args):
    """Creates a new cluster."""
    instances = []
    for instance_str in args.instances:
        instance_info = {}
        for z in instance_str.split(","):
            for (k, v) in [z.split("=", 1)[:2]]:
                if k == "flavor":
                    flavor_id = _find_flavor(cs, v).id
                    instance_info["flavorRef"] = str(flavor_id)
                elif k == "volume":
                    instance_info["volume"] = {"size": v}
                else:
                    instance_info[k] = v
        if not instance_info.get('flavorRef'):
            err_msg = ("flavor is required. %s." % INSTANCE_ERROR)
            raise exceptions.CommandError(err_msg)
        instances.append(instance_info)

    if len(instances) == 0:
        err_msg = ("An instance must be specified. %s." % INSTANCE_ERROR)
        raise exceptions.CommandError(err_msg)

    cluster = cs.clusters.create(args.name,
                                 args.datastore,
                                 args.datastore_version,
                                 instances=instances)
    cluster._info['task_name'] = cluster.task['name']
    cluster._info['task_description'] = cluster.task['description']
    del cluster._info['task']
    cluster._info['datastore'] = cluster.datastore['type']
    cluster._info['datastore_version'] = cluster.datastore['version']
    del cluster._info['instances']
    _print_object(cluster)
Пример #2
0
def do_cluster_create(cs, args):
    """Creates a new cluster."""
    instances = []
    for instance_str in args.instances:
        instance_info = {}
        for z in instance_str.split(","):
            for (k, v) in [z.split("=", 1)[:2]]:
                if k == "flavor_id":
                    instance_info["flavorRef"] = v
                elif k == "volume":
                    instance_info["volume"] = {"size": v}
                else:
                    instance_info[k] = v
        if not instance_info.get('flavorRef'):
            err_msg = ("flavor_id is required. Instance arguments must be "
                       "of the form --instance <flavor_id=flavor_id,"
                       "volume=volume>.")
            raise exceptions.CommandError(err_msg)
        instances.append(instance_info)
    cluster = cs.clusters.create(args.name,
                                 args.datastore,
                                 args.datastore_version,
                                 instances=instances)
    cluster._info['task_name'] = cluster.task['name']
    cluster._info['task_description'] = cluster.task['description']
    del cluster._info['task']
    cluster._info['datastore'] = cluster.datastore['type']
    cluster._info['datastore_version'] = cluster.datastore['version']
    del cluster._info['instances']
    _print_object(cluster)
Пример #3
0
 def take_action(self, parsed_args):
     datastore_client = self.app.client_manager.database.datastores
     try:
         datastore_client.delete(parsed_args.datastore)
     except Exception as e:
         msg = (_("Failed to delete datastore %(datastore)s: %(e)s")
                % {'datastore': parsed_args.datastore, 'e': e})
         raise exceptions.CommandError(msg)
Пример #4
0
 def take_action(self, parsed_args):
     client = self.app.client_manager.database.mgmt_ds_versions
     try:
         client.delete(parsed_args.datastore_version)
     except Exception as e:
         msg = (_("Failed to delete datastore version %(version)s: %(e)s")
                % {'version': parsed_args.datastore_version, 'e': e})
         raise exceptions.CommandError(msg)
Пример #5
0
 def take_action(self, parsed_args):
     db_configurations = self.app.client_manager.database.configurations
     try:
         configuration = osc_utils.find_resource(
             db_configurations, parsed_args.configuration_group)
         db_configurations.delete(configuration)
     except Exception as e:
         msg = (_("Failed to delete configuration %(c_group)s: %(e)s") % {
             'c_group': parsed_args.configuration_group,
             'e': e
         })
         raise exceptions.CommandError(msg)
 def take_action(self, parsed_args):
     db_instances = self.app.client_manager.database.instances
     instance = osc_utils.find_resource(db_instances, parsed_args.instance)
     db_instances.reset_status(instance)
     try:
         db_instances.delete(instance)
     except Exception as e:
         msg = (_("Failed to delete instance %(instance)s: %(e)s") % {
             'instance': parsed_args.instance,
             'e': e
         })
         raise exceptions.CommandError(msg)
Пример #7
0
def do_create(cs, args):
    """Creates a new instance."""
    volume = None
    if args.size:
        volume = {"size": args.size}
    restore_point = None
    if args.backup:
        restore_point = {"backupRef": args.backup}
    databases = [{'name': value} for value in args.databases]
    users = [{
        'name': n,
        'password': p,
        'databases': databases
    } for (n, p) in [z.split(':')[:2] for z in args.users]]
    nics = []
    for nic_str in args.nics:
        nic_info = dict([
            (k, v)
            for (k, v) in [z.split("=", 1)[:2] for z in nic_str.split(",")]
        ])
        if bool(nic_info.get('net-id')) == bool(nic_info.get('port-id')):
            err_msg = ("Invalid nic argument '%s'. Nic arguments must be of "
                       "the form --nic <net-id=net-uuid,v4-fixed-ip=ip-addr,"
                       "port-id=port-uuid>, with at minimum net-id or port-id "
                       "(but not both) specified." % nic_str)
            raise exceptions.CommandError(err_msg)
        nics.append(nic_info)
    instance = cs.instances.create(args.name,
                                   args.flavor_id,
                                   volume=volume,
                                   databases=databases,
                                   users=users,
                                   restorePoint=restore_point,
                                   availability_zone=args.availability_zone,
                                   datastore=args.datastore,
                                   datastore_version=args.datastore_version,
                                   nics=nics,
                                   configuration=args.configuration)
    if hasattr(instance, 'configuration'):
        instance._info['configuration'] = instance.configuration['id']
    instance._info['flavor'] = instance.flavor['id']
    if hasattr(instance, 'volume'):
        instance._info['volume'] = instance.volume['size']
    if hasattr(instance, 'datastore'):
        instance._info['datastore'] = instance.datastore['type']
        instance._info['datastore_version'] = instance.datastore['version']
    del (instance._info['links'])
    _print_instance(instance)
Пример #8
0
    def take_action(self, parsed_args):
        client = self.app.client_manager.database.mgmt_ds_versions

        image_tags = None
        if parsed_args.image_tags is not None:
            image_tags = parsed_args.image_tags.split(',')

        try:
            client.edit(
                parsed_args.datastore_version_id,
                datastore_manager=parsed_args.datastore_manager,
                image=parsed_args.image,
                image_tags=image_tags,
                active=parsed_args.enable, default=parsed_args.default,
                name=parsed_args.version_name
            )
        except Exception as e:
            msg = (_("Failed to update datastore version %(version)s: %(e)s")
                   % {'version': parsed_args.datastore_version_id, 'e': e})
            raise exceptions.CommandError(msg)
Пример #9
0
def do_flavor_list(cs, args):
    """Lists available flavors."""
    if args.datastore_type and args.datastore_version_id:
        flavors = cs.flavors.list_datastore_version_associated_flavors(
            args.datastore_type, args.datastore_version_id)
    elif not args.datastore_type and not args.datastore_version_id:
        flavors = cs.flavors.list()
    else:
        err_msg = ("Specify both <datastore_type> and <datastore_version_id>"
                   " to list datastore version associated flavors.")
        raise exceptions.CommandError(err_msg)

    # Fallback to str_id where necessary.
    _flavors = []
    for f in flavors:
        if not f.id and hasattr(f, 'str_id'):
            f.id = f.str_id
        _flavors.append(f)

    utils.print_list(_flavors, ['id', 'name', 'ram'], labels={'ram': 'RAM'})
Пример #10
0
    def take_action(self, parsed_args):
        client = self.app.client_manager.database.mgmt_ds_versions

        image_tags = []
        if parsed_args.image_tags:
            image_tags = parsed_args.image_tags.split(',')

        try:
            client.create(
                parsed_args.version_name,
                parsed_args.datastore_name,
                parsed_args.datastore_manager,
                parsed_args.image_id,
                image_tags=image_tags,
                active='true' if parsed_args.active else 'false',
                default='true' if parsed_args.default else 'false',
                version=parsed_args.version_number
            )
        except Exception as e:
            msg = (_("Failed to create datastore version %(version)s: %(e)s")
                   % {'version': parsed_args.version_name, 'e': e})
            raise exceptions.CommandError(msg)
    def take_action(self, parsed_args):
        db_instances = self.app.client_manager.database.instances

        # Used for batch deletion
        self.delete_func = (db_instances.force_delete
                            if parsed_args.force else db_instances.delete)
        self.resource = 'database instance'

        ids = []
        for instance_id in parsed_args.instance:
            if not uuidutils.is_uuid_like(instance_id):
                try:
                    instance_id = trove_utils.get_resource_id_by_name(
                        db_instances, instance_id)
                except Exception as e:
                    msg = ("Failed to get database instance %s, error: %s" %
                           (instance_id, str(e)))
                    raise exceptions.CommandError(msg)

            ids.append(instance_id)

        self.delete_resources(ids)
    def take_action(self, parsed_args):
        database = self.app.client_manager.database
        db_instances = database.instances

        if not parsed_args.replica_of and not parsed_args.flavor:
            raise exceptions.CommandError(_("Please specify a flavor"))

        if parsed_args.replica_of and parsed_args.flavor:
            print("Warning: Flavor is ignored for creating replica.")

        if not parsed_args.replica_of:
            flavor_id = osc_utils.find_resource(database.flavors,
                                                parsed_args.flavor).id
        else:
            flavor_id = None

        volume = None
        if parsed_args.size is not None and parsed_args.size <= 0:
            raise exceptions.ValidationError(
                _("Volume size '%s' must be an integer and greater than 0.") %
                parsed_args.size)
        elif parsed_args.size:
            volume = {
                "size": parsed_args.size,
                "type": parsed_args.volume_type
            }
        restore_point = None
        if parsed_args.backup:
            restore_point = {
                "backupRef":
                osc_utils.find_resource(database.backups,
                                        parsed_args.backup).id
            }
        replica_of = None
        replica_count = parsed_args.replica_count
        if parsed_args.replica_of:
            replica_of = osc_utils.find_resource(db_instances,
                                                 parsed_args.replica_of)
            replica_count = replica_count or 1
        locality = None
        if parsed_args.locality:
            locality = parsed_args.locality
            if replica_of:
                raise exceptions.ValidationError(
                    _('Cannot specify locality when adding replicas '
                      'to existing master.'))
        databases = [{'name': value} for value in parsed_args.databases]
        users = [{
            'name': n,
            'password': p,
            'databases': databases
        } for (n, p) in [z.split(':')[:2] for z in parsed_args.users]]

        nics = []
        if parsed_args.nics:
            nic_info = {}
            allowed_keys = {
                'net-id': 'network_id',
                'subnet-id': 'subnet_id',
                'ip-address': 'ip_address'
            }
            fields = parsed_args.nics.split(',')
            for field in fields:
                field = field.strip()
                k, v = field.split('=', 1)
                k = k.strip()
                v = v.strip()
                if k not in allowed_keys.keys():
                    raise exceptions.ValidationError(f"{k} is not allowed.")
                if v:
                    nic_info[allowed_keys[k]] = v
            nics.append(nic_info)

        modules = []
        for module in parsed_args.modules:
            modules.append(
                osc_utils.find_resource(database.modules, module).id)

        access = {'is_public': False}
        if parsed_args.is_public:
            access['is_public'] = True
        if parsed_args.allowed_cidrs:
            access['allowed_cidrs'] = parsed_args.allowed_cidrs

        instance = db_instances.create(
            parsed_args.name,
            flavor_id=flavor_id,
            volume=volume,
            databases=databases,
            users=users,
            restorePoint=restore_point,
            availability_zone=(parsed_args.availability_zone),
            datastore=parsed_args.datastore,
            datastore_version=(parsed_args.datastore_version),
            datastore_version_number=(parsed_args.datastore_version_number),
            nics=nics,
            configuration=parsed_args.configuration,
            replica_of=replica_of,
            replica_count=replica_count,
            modules=modules,
            locality=locality,
            region_name=parsed_args.region,
            access=access)
        instance = set_attributes_for_print_detail(instance)
        return zip(*sorted(instance.items()))