def parse_image_ref(image_href): """Parse an image href into composite parts. :param image_href: href of an image :returns: a tuple of the form (image_id, host, port) :raises ValueError """ if '/' not in str(image_href): image_id = image_href (glance_host, glance_port, use_ssl) = _get_api_server() return (image_id, glance_host, glance_port, use_ssl) else: try: url = urlparse.urlparse(image_href) if url.scheme == 'glance': (glance_host, glance_port, use_ssl) = _get_api_server() image_id = image_href.split('/')[-1] else: glance_port = url.port or 80 glance_host = url.netloc.split(':', 1)[0] image_id = url.path.split('/')[-1] use_ssl = (url.scheme == 'https') return (image_id, glance_host, glance_port, use_ssl) except ValueError: raise exception.InvalidImageRef(image_href=image_href)
def parse_image_ref(image_href): """Parse an image href. :param image_href: href of an image :returns: a tuple (image ID, glance URL, whether to use SSL) :raises ValueError: when input image href is invalid """ if '/' not in six.text_type(image_href): endpoint = _get_api_server() return (image_href, endpoint, endpoint.startswith('https')) else: try: url = urlparse.urlparse(image_href) if url.scheme == 'glance': endpoint = _get_api_server() image_id = image_href.split('/')[-1] return (image_id, endpoint, endpoint.startswith('https')) else: glance_port = url.port or 80 glance_host = url.netloc.split(':', 1)[0] image_id = url.path.split('/')[-1] use_ssl = (url.scheme == 'https') endpoint = '%s://%s:%s' % (url.scheme, glance_host, glance_port) return (image_id, endpoint, use_ssl) except ValueError: raise exception.InvalidImageRef(image_href=image_href)
def parse_image_id(image_href): """Parse an image id from image href. :param image_href: href of an image :returns: image id parsed from image_href :raises InvalidImageRef: when input image href is invalid """ image_href = str(image_href) if uuidutils.is_uuid_like(image_href): image_id = image_href elif image_href.startswith('glance://'): image_id = image_href.split('/')[-1] if not uuidutils.is_uuid_like(image_id): raise exception.InvalidImageRef(image_href=image_href) else: raise exception.InvalidImageRef(image_href=image_href) return image_id
def get_glance_api_server(image_href): """Construct a glance API url from config options Returns a random server from the CONF.glance.glance_api_servers list of servers. :param image_href: href of an image :returns: glance API URL :raises InvalidImageRef: when input image href is invalid """ image_href = six.text_type(image_href) if not is_glance_image(image_href): raise exception.InvalidImageRef(image_href=image_href) global _GLANCE_API_SERVER if not _GLANCE_API_SERVER: _GLANCE_API_SERVER = itertools.cycle( random.sample(CONF.glance.glance_api_servers, len(CONF.glance.glance_api_servers))) return six.next(_GLANCE_API_SERVER)