Example #1
0
def serialize_glance_image(image):

    # If we're being asked to index an ID, retrieve the full image information
    if isinstance(image, six.text_type):
        g_client = openstack_clients.get_glanceclient()
        image = g_client.images.get(image)

    members = _get_image_members(image)

    fields_to_ignore = ['schema', 'file', 'locations']

    document = {k: v for k, v in image.items() if k not in fields_to_ignore}

    members = list(members)
    older_glance_version = False
    # Make it backward compatibe with older glance version
    if members and len(members) > 0 and "deleted" in members[0]:
        older_glance_version = True

    if older_glance_version:
        document['members'] = [
            member['member'] for member in members
            if (member['status'] == 'accepted' and member['deleted'] == 0)]
    else:
        document['members'] = [
            member['member_id'] for member in members
            if (member['status'] == 'accepted')]

    return document
Example #2
0
def serialize_glance_image(image):

    # If we're being asked to index an ID, retrieve the full image information
    if isinstance(image, six.text_type):
        g_client = openstack_clients.get_glanceclient()
        image = g_client.images.get(image)

    members = _get_image_members(image)

    fields_to_ignore = ['schema', 'file', 'locations']

    document = {k: v for k, v in image.items() if k not in fields_to_ignore}

    members = list(members)
    older_glance_version = False
    # Make it backward compatibe with older glance version
    if members and len(members) > 0 and "deleted" in members[0]:
        older_glance_version = True

    if older_glance_version:
        document['members'] = [
            member['member'] for member in members
            if (member['status'] == 'accepted' and member['deleted'] == 0)]
    else:
        document['members'] = [
            member['member_id'] for member in members
            if (member['status'] == 'accepted')]

    return document
Example #3
0
def _get_image_members(image):
    if image['visibility'] == 'public':
        return []

    try:
        g_client = openstack_clients.get_glanceclient()
        members = g_client.image_members.list(image['id'])
        return members
    except glanceclient.exc.HTTPForbidden:
        LOG.warning(_LW("Could not list image members for %s; forbidden") %
                    image['id'])
        return []
Example #4
0
def _get_image_members(image):
    if image['visibility'] == 'public':
        return []

    try:
        g_client = openstack_clients.get_glanceclient()
        members = g_client.image_members.list(image['id'])
        return members
    except glanceclient.exc.Unauthorized:
        LOG.warning("Could not list image members for %s; forbidden" %
                    image['id'])
        return []
Example #5
0
def _get_image_members(image):
    if image['visibility'] in ['public', 'private']:
        return []

    try:
        g_client = openstack_clients.get_glanceclient()
        members = g_client.image_members.list(image['id'])
        return members
    except glanceclient.exc.Unauthorized:
        LOG.warning("Could not list image members for %s; forbidden" %
                    image['id'])
        return []
def get_glance_metadefs_with_pyclient():

    glance_client = openstack_clients.get_glanceclient()
    namespace_list = []
    metadefs_namespace_list = list(glance_client.metadefs_namespace.list())

    for namespace in metadefs_namespace_list:
        _namespace = glance_client.metadefs_namespace.get(
            namespace['namespace'])
        namespace_list.append(_namespace)

    metadef_namespace_json = json.dumps(namespace_list, indent=4)

    with open(METADEFS_FILE, "w") as f:
        f.write(metadef_namespace_json)
def get_glance_images_and_members_with_pyclient():

    glance_client = openstack_clients.get_glanceclient()
    images = glance_client.images.list()
    images_json = json.dumps(list(images), indent=4)
    with open(IMAGES_FILE, "w") as f:
        f.write(images_json)

    image_members_dict = dict()
    images = glance_client.images.list()
    for image in images:
        if image['visibility'] != 'public':
            image_members = glance_client.image_members.list(image['id'])
            image_members_list = []
            if image_members:
                image_members_list = list(image_members)
            if len(image_members_list) > 0:
                image_members_dict[image['id']] = image_members_list
    image_members_json = json.dumps(image_members_dict, indent=4)
    with open(IMAGE_MEMBERS_FILE, "w") as f:
        f.write(image_members_json)
Example #8
0
def serialize_glance_image(image):
    g_client = openstack_clients.get_glanceclient()
    using_v1 = False

    # If we're being asked to index an ID, retrieve the full image information
    if isinstance(image, basestring):
        image = g_client.images.get(image)

    # If a v1 image, convert to dict so we can iterate over its properties
    if isinstance(image, v1_image):
        using_v1 = True
        image = image.to_dict()
    else:
        image['visibility'] = 'public' if image.pop('is_public') else 'private'

    try:
        members = g_client.image_members.list(image['id'])
        if using_v1:
            members = [member.to_dict() for member in members]
    except glanceclient.exc.HTTPForbidden:
        LOG.warning(_LW("Could not list image members for %s; forbidden") %
                    image['id'])
        members = []
        pass

    fields_to_ignore = ['ramdisk_id', 'schema', 'kernel_id', 'file',
                        'locations']
    extra_properties = image.pop('properties', [])
    document = dict((k, v) for k, v in six.iteritems(image)
                    if k not in fields_to_ignore)

    document['members'] = [
        member['member'] for member in members
        if (member['status'] == 'accepted' and member['deleted'] == 0)]

    for kv in extra_properties:
        document[kv['name']] = kv['value']

    return document
Example #9
0
def serialize_glance_image(image):
    g_client = openstack_clients.get_glanceclient()
    using_v1 = False

    # If we're being asked to index an ID, retrieve the full image information
    if isinstance(image, basestring):
        image = g_client.images.get(image)

    # TODO(lakshmiS): We shouldn't check for v1 since g_client is always v2.
    # If a v1 image, convert to dict so we can iterate over its properties
    if isinstance(image, v1_image):
        using_v1 = True
        image = image.to_dict()

    try:
        members = g_client.image_members.list(image['id'])
        # TODO(lakshmiS): Same as above. No need to check for v1.
        if using_v1:
            members = [member.to_dict() for member in members]
    except glanceclient.exc.HTTPForbidden:
        LOG.warning(_LW("Could not list image members for %s; forbidden") %
                    image['id'])
        members = []
        pass

    fields_to_ignore = ['ramdisk_id', 'schema', 'kernel_id', 'file',
                        'locations']

    document = dict((k, v) for k, v in six.iteritems(image)
                    if k not in fields_to_ignore)

    if image['visibility'] != 'public':
        document['members'] = [
            member['member'] for member in members
            if (member['status'] == 'accepted' and member['deleted'] == 0)]

    return document
Example #10
0
 def get_objects(self):
     from searchlight.elasticsearch.plugins import openstack_clients
     # Images include their properties and tags. Members are different
     return openstack_clients.get_glanceclient().images.list()
Example #11
0
 def get_objects(self):
     from searchlight.elasticsearch.plugins import openstack_clients
     gc = openstack_clients.get_glanceclient()
     return list(gc.metadefs_namespace.list())
Example #12
0
def serialize_glance_metadef_ns(metadef_namespace):
    def _serialize_tag(tag):
        return {'name': tag['name']}

    def _serialize_property(name, property):
        serialized_prop = copy.deepcopy(property)
        serialized_prop['name'] = name
        if 'default' in serialized_prop:
            serialized_prop['default'] = str(serialized_prop['default'])
        if 'enum' in serialized_prop:
            serialized_prop['enum'] = sorted(map(str, serialized_prop['enum']))

        return serialized_prop

    def _serialize_object(obj):
        serialized_obj = {
            'name': obj['name'],
            'description': obj['description']
        }
        serialized_obj['properties'] = sorted([
            _serialize_property(name, property)
            for name, property in six.iteritems(obj.get('properties', {}))
        ], key=operator.itemgetter('name'))
        return serialized_obj

    def _serialize_res_type(rt):
        return {
            'name': rt['name']
        }

    # TODO(sjmc7): test this better
    incomplete = 'objects' not in metadef_namespace or \
                 'properties' not in metadef_namespace or \
                 'tags' not in metadef_namespace
    if incomplete:
        LOG.debug("Retrieving metadef namespace '%s'",
                  metadef_namespace['namespace'])
        g_client = openstack_clients.get_glanceclient()
        metadef_namespace = g_client.metadefs_namespace.get(
            metadef_namespace['namespace'])

    # The CIS code specifically serialized some fields rather than indexing
    # everything; do the same.
    namespace_fields = ('namespace', 'display_name', 'description',
                        'visibility', 'owner', 'protected', 'created_at')
    document = {f: metadef_namespace.get(f, None) for f in namespace_fields}
    document['id'] = document['namespace']
    if document['display_name']:
        document['name'] = document['display_name']
    else:
        document['name'] = document['namespace']

    document['tags'] = sorted([
        _serialize_tag(tag) for tag in metadef_namespace.get('tags', [])
    ], key=operator.itemgetter('name'))
    document['properties'] = sorted([
        _serialize_property(name, property)
        for name, property in six.iteritems(
            metadef_namespace.get('properties', {}))
    ], key=operator.itemgetter('name'))
    document['objects'] = sorted([
        _serialize_object(obj) for obj in metadef_namespace.get('objects', [])
    ], key=operator.itemgetter('name'))
    document['resource_types'] = sorted([
        _serialize_res_type(rt)
        for rt in metadef_namespace.get('resource_type_associations', [])
    ], key=operator.itemgetter('name'))

    utils.normalize_date_fields(document, created_at=None,
                                updated_at='created_at')

    return document
Example #13
0
def serialize_glance_metadef_ns(metadef_namespace):
    def _serialize_tag(tag):
        return tag["name"]

    def _serialize_property(name, property):
        serialized_prop = copy.deepcopy(property)
        serialized_prop['name'] = name
        if 'default' in serialized_prop:
            serialized_prop['default'] = str(serialized_prop['default'])
        if 'enum' in serialized_prop:
            serialized_prop['enum'] = sorted(map(str, serialized_prop['enum']))

        return serialized_prop

    def _serialize_object(obj):
        serialized_obj = {
            'name': obj['name'],
            'description': obj['description']
        }
        serialized_obj['properties'] = sorted([
            _serialize_property(name, property)
            for name, property in obj.get('properties', {}).items()
        ], key=operator.itemgetter('name'))
        return serialized_obj

    def _serialize_res_type(rt):
        return {
            'name': rt['name']
        }

    # TODO(sjmc7): test this better
    incomplete = 'objects' not in metadef_namespace or \
                 'properties' not in metadef_namespace or \
                 'tags' not in metadef_namespace
    if incomplete:
        LOG.debug("Retrieving metadef namespace '%s'",
                  metadef_namespace['namespace'])
        g_client = openstack_clients.get_glanceclient()
        metadef_namespace = g_client.metadefs_namespace.get(
            metadef_namespace['namespace'])

    # The CIS code specifically serialized some fields rather than indexing
    # everything; do the same.
    namespace_fields = ('namespace', 'display_name', 'description',
                        'visibility', 'owner', 'protected', 'created_at',
                        'updated_at')
    document = {f: metadef_namespace.get(f, None) for f in namespace_fields}
    document['id'] = document['namespace']
    if document['display_name']:
        document['name'] = document['display_name']
    else:
        document['name'] = document['namespace']

    # Add project_id as a copy of 'owner'
    if 'project_id' not in document:
        document['project_id'] = document['owner']

    document['tags'] = sorted([
        _serialize_tag(tag) for tag in metadef_namespace.get('tags', [])])
    document['properties'] = sorted([
        _serialize_property(name, property)
        for name, property in metadef_namespace.get('properties', {}).items()
    ], key=operator.itemgetter('name'))
    document['objects'] = sorted([
        _serialize_object(obj) for obj in metadef_namespace.get('objects', [])
    ], key=operator.itemgetter('name'))
    document['resource_types'] = sorted([
        _serialize_res_type(rt)
        for rt in metadef_namespace.get('resource_type_associations', [])
    ], key=operator.itemgetter('name'))

    utils.normalize_date_fields(document)

    return document
Example #14
0
 def get_objects(self):
     from searchlight.elasticsearch.plugins import openstack_clients
     # Images include their properties and tags. Members are different
     return openstack_clients.get_glanceclient().images.list()
 def get_objects(self):
     from searchlight.elasticsearch.plugins import openstack_clients
     gc = openstack_clients.get_glanceclient()
     return list(gc.metadefs_namespace.list())