Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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
Esempio n. 4
0
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)