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)
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)
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)
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)
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)
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)
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)
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'})
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()))