def _init_completion_cache(self): cache_write = getattr(self.manager, 'write_to_completion_cache', None) if not cache_write: return # NOTE(sirp): ensure `id` is already present because if it isn't we'll # enter an infinite loop of __getattr__ -> get -> __init__ -> # __getattr__ -> ... if 'id' in self.__dict__ and uuidutils.is_uuid_like(self.id): cache_write('uuid', self.id) if self.human_id: cache_write('human_id', self.human_id)
def _init_completion_cache(self): cache_write = getattr(self.manager, "write_to_completion_cache", None) if not cache_write: return # NOTE(sirp): ensure `id` is already present because if it isn't we'll # enter an infinite loop of __getattr__ -> get -> __init__ -> # __getattr__ -> ... if "id" in self.__dict__ and uuidutils.is_uuid_like(self.id): cache_write("uuid", self.id) if self.human_id: cache_write("human_id", self.human_id)
def create(self, name, ram, vcpus, disk, flavorid=None, ephemeral=0, swap=0, rxtx_factor=1.0, is_public=True): """ Create (allocate) a floating ip for a tenant :param name: Descriptive name of the flavor :param ram: Memory in MB for the flavor :param vcpu: Number of VCPUs for the flavor :param disk: Size of local disk in GB :param flavorid: ID for the flavor (optional). You can use the reserved value ``"auto"`` to have Nova generate a UUID for the flavor in cases where you cannot simply pass ``None``. :param swap: Swap space in MB :param rxtx_factor: RX/TX factor :rtype: :class:`Flavor` """ try: ram = int(ram) except (TypeError, ValueError): raise exceptions.CommandError("Ram must be an integer.") try: vcpus = int(vcpus) except (TypeError, ValueError): raise exceptions.CommandError("VCPUs must be an integer.") try: disk = int(disk) except (TypeError, ValueError): raise exceptions.CommandError("Disk must be an integer.") if flavorid == "auto": flavorid = None elif not uuidutils.is_uuid_like(flavorid): try: flavorid = int(flavorid) except (TypeError, ValueError): raise exceptions.CommandError("Flavor ID must be an integer " "or a UUID or auto.") try: swap = int(swap) except (TypeError, ValueError): raise exceptions.CommandError("Swap must be an integer.") try: ephemeral = int(ephemeral) except (TypeError, ValueError): raise exceptions.CommandError("Ephemeral must be an integer.") try: rxtx_factor = float(rxtx_factor) except (TypeError, ValueError): raise exceptions.CommandError("rxtx_factor must be a float.") try: is_public = utils.bool_from_str(is_public) except Exception: raise exceptions.CommandError("is_public must be a boolean.") body = { "flavor": { "name": name, "ram": ram, "vcpus": vcpus, "disk": disk, "id": flavorid, "swap": swap, "OS-FLV-EXT-DATA:ephemeral": ephemeral, "rxtx_factor": rxtx_factor, "os-flavor-access:is_public": is_public, } } return self._create("/flavors", body, "flavor")
def find_resource(manager, name_or_id, **find_args): """Look for resource in a given manager. Used as a helper for the _find_* methods. Example: def _find_hypervisor(cs, hypervisor): #Get a hypervisor by name or ID. return cliutils.find_resource(cs.hypervisors, hypervisor) """ # first try to get entity as integer id try: return manager.get(int(name_or_id)) except (TypeError, ValueError, exceptions.NotFound): pass # now try to get entity as uuid try: tmp_id = strutils.safe_encode(name_or_id) if uuidutils.is_uuid_like(tmp_id): return manager.get(tmp_id) except (TypeError, ValueError, exceptions.NotFound): pass # for str id which is not uuid if getattr(manager, 'is_alphanum_id_allowed', False): try: return manager.get(name_or_id) except exceptions.NotFound: pass try: try: return manager.find(human_id=name_or_id, **find_args) except exceptions.NotFound: pass # finally try to find entity by name try: resource = getattr(manager, 'resource_class', None) name_attr = resource.NAME_ATTR if resource else 'name' kwargs = {name_attr: name_or_id} kwargs.update(find_args) return manager.find(**kwargs) except exceptions.NotFound: msg = _("No %(name)s with a name or " "ID of '%(name_or_id)s' exists.") % \ { "name": manager.resource_class.__name__.lower(), "name_or_id": name_or_id } raise exceptions.CommandError(msg) except exceptions.NoUniqueMatch: msg = _("Multiple %(name)s matches found for " "'%(name_or_id)s', use an ID to be more specific.") % \ { "name": manager.resource_class.__name__.lower(), "name_or_id": name_or_id } raise exceptions.CommandError(msg)
def create(self, name, ram, vcpus, disk, flavorid=None, ephemeral=0, swap=0, rxtx_factor=1.0, is_public=True): """ Create (allocate) a floating ip for a tenant :param name: Descriptive name of the flavor :param ram: Memory in MB for the flavor :param vcpu: Number of VCPUs for the flavor :param disk: Size of local disk in GB :param flavorid: ID for the flavor (optional). You can use the reserved value ``"auto"`` to have Nova generate a UUID for the flavor in cases where you cannot simply pass ``None``. :param swap: Swap space in MB :param rxtx_factor: RX/TX factor :rtype: :class:`Flavor` """ try: ram = int(ram) except (TypeError, ValueError): raise exceptions.CommandError("Ram must be an integer.") try: vcpus = int(vcpus) except (TypeError, ValueError): raise exceptions.CommandError("VCPUs must be an integer.") try: disk = int(disk) except (TypeError, ValueError): raise exceptions.CommandError("Disk must be an integer.") if flavorid == "auto": flavorid = None elif not uuidutils.is_uuid_like(flavorid): try: flavorid = int(flavorid) except (TypeError, ValueError): raise exceptions.CommandError("Flavor ID must be an integer " "or a UUID or auto.") try: swap = int(swap) except (TypeError, ValueError): raise exceptions.CommandError("Swap must be an integer.") try: ephemeral = int(ephemeral) except (TypeError, ValueError): raise exceptions.CommandError("Ephemeral must be an integer.") try: rxtx_factor = float(rxtx_factor) except (TypeError, ValueError): raise exceptions.CommandError("rxtx_factor must be a float.") try: is_public = utils.bool_from_str(is_public) except: raise exceptions.CommandError("is_public must be a boolean.") body = { "flavor": { "name": name, "ram": ram, "vcpus": vcpus, "disk": disk, "id": flavorid, "swap": swap, "OS-FLV-EXT-DATA:ephemeral": ephemeral, "rxtx_factor": rxtx_factor, "os-flavor-access:is_public": is_public, } } return self._create("/flavors", body, "flavor")
def find_resource(manager, name_or_id, **find_args): """Look for resource in a given manager. Used as a helper for the _find_* methods. Example: .. code-block:: python def _find_hypervisor(cs, hypervisor): #Get a hypervisor by name or ID. return cliutils.find_resource(cs.hypervisors, hypervisor) """ # first try to get entity as integer id try: return manager.get(int(name_or_id)) except (TypeError, ValueError, exceptions.NotFound): pass # now try to get entity as uuid try: if six.PY2: tmp_id = encodeutils.safe_encode(name_or_id) else: tmp_id = encodeutils.safe_decode(name_or_id) if uuidutils.is_uuid_like(tmp_id): return manager.get(tmp_id) except (TypeError, ValueError, exceptions.NotFound): pass # for str id which is not uuid if getattr(manager, 'is_alphanum_id_allowed', False): try: return manager.get(name_or_id) except exceptions.NotFound: pass try: try: return manager.find(human_id=name_or_id, **find_args) except exceptions.NotFound: pass # finally try to find entity by name try: resource = getattr(manager, 'resource_class', None) name_attr = resource.NAME_ATTR if resource else 'name' kwargs = {name_attr: name_or_id} kwargs.update(find_args) return manager.find(**kwargs) except exceptions.NotFound: msg = _("No %(name)s with a name or " "ID of '%(name_or_id)s' exists.") % \ { "name": manager.resource_class.__name__.lower(), "name_or_id": name_or_id } raise exceptions.CommandError(msg) except exceptions.NoUniqueMatch: msg = _("Multiple %(name)s matches found for " "'%(name_or_id)s', use an ID to be more specific.") % \ { "name": manager.resource_class.__name__.lower(), "name_or_id": name_or_id } raise exceptions.CommandError(msg)