Beispiel #1
0
def format_image_notification(image):
    """
    Given a xmonitor.domain.Image object, return a dictionary of relevant
    notification information. We purposely do not include 'location'
    as it may contain credentials.
    """
    return {
        'id': image.image_id,
        'name': image.name,
        'status': image.status,
        'created_at': timeutils.isotime(image.created_at),
        'updated_at': timeutils.isotime(image.updated_at),
        'min_disk': image.min_disk,
        'min_ram': image.min_ram,
        'protected': image.protected,
        'checksum': image.checksum,
        'owner': image.owner,
        'disk_format': image.disk_format,
        'container_format': image.container_format,
        'size': image.size,
        'virtual_size': image.virtual_size,
        'is_public': image.visibility == 'public',
        'properties': dict(image.extra_properties),
        'tags': list(image.tags),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #2
0
def format_image_notification(image):
    """
    Given a xmonitor.domain.Image object, return a dictionary of relevant
    notification information. We purposely do not include 'location'
    as it may contain credentials.
    """
    return {
        'id': image.image_id,
        'name': image.name,
        'status': image.status,
        'created_at': timeutils.isotime(image.created_at),
        'updated_at': timeutils.isotime(image.updated_at),
        'min_disk': image.min_disk,
        'min_ram': image.min_ram,
        'protected': image.protected,
        'checksum': image.checksum,
        'owner': image.owner,
        'disk_format': image.disk_format,
        'container_format': image.container_format,
        'size': image.size,
        'virtual_size': image.virtual_size,
        'is_public': image.visibility == 'public',
        'properties': dict(image.extra_properties),
        'tags': list(image.tags),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #3
0
    def _format_image(self, image):
        def _get_image_locations(image):
            try:
                return list(image.locations)
            except exception.Forbidden:
                return []

        try:
            image_view = dict(image.extra_properties)
            attributes = [
                'name', 'disk_format', 'container_format', 'visibility',
                'size', 'virtual_size', 'status', 'checksum', 'protected',
                'min_ram', 'min_disk', 'owner'
            ]
            for key in attributes:
                image_view[key] = getattr(image, key)
            image_view['id'] = image.image_id
            image_view['created_at'] = timeutils.isotime(image.created_at)
            image_view['updated_at'] = timeutils.isotime(image.updated_at)

            if CONF.show_multiple_locations:
                locations = _get_image_locations(image)
                if locations:
                    image_view['locations'] = []
                    for loc in locations:
                        tmp = dict(loc)
                        tmp.pop('id', None)
                        tmp.pop('status', None)
                        image_view['locations'].append(tmp)
                else:
                    # NOTE (flwang): We will still show "locations": [] if
                    # image.locations is None to indicate it's allowed to show
                    # locations but it's just non-existent.
                    image_view['locations'] = []
                    LOG.debug(
                        "There is not available location "
                        "for image %s", image.image_id)

            if CONF.show_image_direct_url:
                locations = _get_image_locations(image)
                if locations:
                    # Choose best location configured strategy
                    l = location_strategy.choose_best_location(locations)
                    image_view['direct_url'] = l['url']
                else:
                    LOG.debug(
                        "There is not available location "
                        "for image %s", image.image_id)

            image_view['tags'] = list(image.tags)
            image_view['self'] = self._get_image_href(image)
            image_view['file'] = self._get_image_href(image, 'file')
            image_view['schema'] = '/v2/schemas/image'
            image_view = self.schema.filter(image_view)  # domain
            return image_view
        except exception.Forbidden as e:
            raise webob.exc.HTTPForbidden(explanation=e.msg)
Beispiel #4
0
 def _format_image_member(self, member):
     member_view = {}
     attributes = ['member_id', 'image_id', 'status']
     for key in attributes:
         member_view[key] = getattr(member, key)
     member_view['created_at'] = timeutils.isotime(member.created_at)
     member_view['updated_at'] = timeutils.isotime(member.updated_at)
     member_view['schema'] = '/v2/schemas/member'
     member_view = self.schema.filter(member_view)
     return member_view
Beispiel #5
0
 def _format_image_member(self, member):
     member_view = {}
     attributes = ['member_id', 'image_id', 'status']
     for key in attributes:
         member_view[key] = getattr(member, key)
     member_view['created_at'] = timeutils.isotime(member.created_at)
     member_view['updated_at'] = timeutils.isotime(member.updated_at)
     member_view['schema'] = '/v2/schemas/member'
     member_view = self.schema.filter(member_view)
     return member_view
Beispiel #6
0
def format_metadef_tag_notification(metadef_tag):
    return {
        'namespace': metadef_tag.namespace,
        'name': metadef_tag.name,
        'name_old': metadef_tag.name,
        'created_at': timeutils.isotime(metadef_tag.created_at),
        'updated_at': timeutils.isotime(metadef_tag.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #7
0
def format_metadef_tag_notification(metadef_tag):
    return {
        'namespace': metadef_tag.namespace,
        'name': metadef_tag.name,
        'name_old': metadef_tag.name,
        'created_at': timeutils.isotime(metadef_tag.created_at),
        'updated_at': timeutils.isotime(metadef_tag.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #8
0
def format_metadef_resource_type_notification(metadef_resource_type):
    return {
        'namespace': metadef_resource_type.namespace,
        'name': metadef_resource_type.name,
        'name_old': metadef_resource_type.name,
        'prefix': metadef_resource_type.prefix,
        'properties_target': metadef_resource_type.properties_target,
        'created_at': timeutils.isotime(metadef_resource_type.created_at),
        'updated_at': timeutils.isotime(metadef_resource_type.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #9
0
def format_metadef_resource_type_notification(metadef_resource_type):
    return {
        'namespace': metadef_resource_type.namespace,
        'name': metadef_resource_type.name,
        'name_old': metadef_resource_type.name,
        'prefix': metadef_resource_type.prefix,
        'properties_target': metadef_resource_type.properties_target,
        'created_at': timeutils.isotime(metadef_resource_type.created_at),
        'updated_at': timeutils.isotime(metadef_resource_type.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #10
0
def format_image_member_notification(image_member):
    """Given a xmonitor.domain.ImageMember object, return a dictionary of relevant
    notification information.
    """
    return {
        'image_id': image_member.image_id,
        'member_id': image_member.member_id,
        'status': image_member.status,
        'created_at': timeutils.isotime(image_member.created_at),
        'updated_at': timeutils.isotime(image_member.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #11
0
def format_image_member_notification(image_member):
    """Given a xmonitor.domain.ImageMember object, return a dictionary of relevant
    notification information.
    """
    return {
        'image_id': image_member.image_id,
        'member_id': image_member.member_id,
        'status': image_member.status,
        'created_at': timeutils.isotime(image_member.created_at),
        'updated_at': timeutils.isotime(image_member.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #12
0
def format_metadef_namespace_notification(metadef_namespace):
    return {
        'namespace': metadef_namespace.namespace,
        'namespace_old': metadef_namespace.namespace,
        'display_name': metadef_namespace.display_name,
        'protected': metadef_namespace.protected,
        'visibility': metadef_namespace.visibility,
        'owner': metadef_namespace.owner,
        'description': metadef_namespace.description,
        'created_at': timeutils.isotime(metadef_namespace.created_at),
        'updated_at': timeutils.isotime(metadef_namespace.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #13
0
def format_metadef_namespace_notification(metadef_namespace):
    return {
        'namespace': metadef_namespace.namespace,
        'namespace_old': metadef_namespace.namespace,
        'display_name': metadef_namespace.display_name,
        'protected': metadef_namespace.protected,
        'visibility': metadef_namespace.visibility,
        'owner': metadef_namespace.owner,
        'description': metadef_namespace.description,
        'created_at': timeutils.isotime(metadef_namespace.created_at),
        'updated_at': timeutils.isotime(metadef_namespace.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #14
0
 def test_task_create_notification(self):
     self.task_repo_proxy.add(self.task_stub_proxy)
     output_logs = self.notifier.get_logs()
     self.assertEqual(1, len(output_logs))
     output_log = output_logs[0]
     self.assertEqual('INFO', output_log['notification_type'])
     self.assertEqual('task.create', output_log['event_type'])
     self.assertEqual(self.task.task_id, output_log['payload']['id'])
     self.assertEqual(timeutils.isotime(self.task.updated_at),
                      output_log['payload']['updated_at'])
     self.assertEqual(timeutils.isotime(self.task.created_at),
                      output_log['payload']['created_at'])
     if 'location' in output_log['payload']:
         self.fail('Notification contained location field.')
Beispiel #15
0
 def _format_task_stub(self, schema, task):
     task_view = {
         'id': task.task_id,
         'type': task.type,
         'status': task.status,
         'owner': task.owner,
         'created_at': timeutils.isotime(task.created_at),
         'updated_at': timeutils.isotime(task.updated_at),
         'self': self._get_task_location(task),
         'schema': '/v2/schemas/task'
     }
     if task.expires_at:
         task_view['expires_at'] = timeutils.isotime(task.expires_at)
     task_view = schema.filter(task_view)  # domain
     return task_view
Beispiel #16
0
def format_task_notification(task):
    # NOTE(nikhil): input is not passed to the notifier payload as it may
    # contain sensitive info.
    return {
        'id': task.task_id,
        'type': task.type,
        'status': task.status,
        'result': None,
        'owner': task.owner,
        'message': None,
        'expires_at': timeutils.isotime(task.expires_at),
        'created_at': timeutils.isotime(task.created_at),
        'updated_at': timeutils.isotime(task.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #17
0
    def to_wsme_model(model, db_entity, self_link=None, schema=None):
        # Return the wsme_attributes names:values as a dict
        names = []
        for attribute in model._wsme_attributes:
            names.append(attribute.name)

        values = {}
        for name in names:
            value = getattr(db_entity, name, None)
            if value is not None:
                if type(value) == datetime:
                    iso_datetime_value = timeutils.isotime(value)
                    values.update({name: iso_datetime_value})
                else:
                    values.update({name: value})

        if schema:
            values['schema'] = schema

        model_object = model(**values)

        # 'self' kwarg is used in wsme.types.Base.__init__(self, ..) and
        # conflicts during initialization. self_link is a proxy field to self.
        if self_link:
            model_object.self = self_link

        return model_object
Beispiel #18
0
    def to_wsme_model(model, db_entity, self_link=None, schema=None):
        # Return the wsme_attributes names:values as a dict
        names = []
        for attribute in model._wsme_attributes:
            names.append(attribute.name)

        values = {}
        for name in names:
            value = getattr(db_entity, name, None)
            if value is not None:
                if type(value) == datetime:
                    iso_datetime_value = timeutils.isotime(value)
                    values.update({name: iso_datetime_value})
                else:
                    values.update({name: value})

        if schema:
            values['schema'] = schema

        model_object = model(**values)

        # 'self' kwarg is used in wsme.types.Base.__init__(self, ..) and
        # conflicts during initialization. self_link is a proxy field to self.
        if self_link:
            model_object.self = self_link

        return model_object
Beispiel #19
0
def format_task_notification(task):
    # NOTE(nikhil): input is not passed to the notifier payload as it may
    # contain sensitive info.
    return {
        'id': task.task_id,
        'type': task.type,
        'status': task.status,
        'result': None,
        'owner': task.owner,
        'message': None,
        'expires_at': timeutils.isotime(task.expires_at),
        'created_at': timeutils.isotime(task.created_at),
        'updated_at': timeutils.isotime(task.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #20
0
 def remove(self, image):
     super(ImageRepoProxy, self).remove(image)
     self.send_notification('image.delete',
                            image,
                            extra_payload={
                                'deleted': True,
                                'deleted_at': timeutils.isotime()
                            })
Beispiel #21
0
 def remove(self, metadef_namespace):
     result = super(MetadefNamespaceRepoProxy, self).remove(
         metadef_namespace)
     self.send_notification(
         'metadef_namespace.delete', metadef_namespace,
         extra_payload={'deleted': True, 'deleted_at': timeutils.isotime()}
     )
     return result
Beispiel #22
0
 def remove(self, member):
     super(ImageMemberRepoProxy, self).remove(member)
     self.send_notification('image.member.delete',
                            member,
                            extra_payload={
                                'deleted': True,
                                'deleted_at': timeutils.isotime()
                            })
Beispiel #23
0
    def test_get_image_details_with_changes_since(self):
        """Tests that a detailed call can be filtered by changes-since"""
        dt1 = timeutils.utcnow() - datetime.timedelta(1)
        iso1 = timeutils.isotime(dt1)

        dt2 = timeutils.utcnow() + datetime.timedelta(1)
        iso2 = timeutils.isotime(dt2)

        dt3 = timeutils.utcnow() + datetime.timedelta(2)

        dt4 = timeutils.utcnow() + datetime.timedelta(3)
        iso4 = timeutils.isotime(dt4)

        UUID3 = _gen_uuid()
        extra_fixture = self.get_fixture(id=UUID3, name='fake image #3')

        db_api.image_create(self.context, extra_fixture)
        db_api.image_destroy(self.context, UUID3)

        UUID4 = _gen_uuid()
        extra_fixture = self.get_fixture(id=UUID4,
                                         name='fake image #4',
                                         created_at=dt3,
                                         updated_at=dt3)

        db_api.image_create(self.context, extra_fixture)

        # Check a standard list, 4 images in db (2 deleted)
        images = self.client.get_images_detailed(filters={})
        self.assertEqualImages(images, (UUID4, UUID2), unjsonify=False)

        # Expect 3 images (1 deleted)
        filters = {'changes-since': iso1}
        images = self.client.get_images(filters=filters)
        self.assertEqualImages(images, (UUID4, UUID3, UUID2), unjsonify=False)

        # Expect 1 images (0 deleted)
        filters = {'changes-since': iso2}
        images = self.client.get_images_detailed(filters=filters)
        self.assertEqualImages(images, (UUID4, ), unjsonify=False)

        # Expect 0 images (0 deleted)
        filters = {'changes-since': iso4}
        images = self.client.get_images(filters=filters)
        self.assertEqualImages(images, (), unjsonify=False)
Beispiel #24
0
 def test_task_create_notification(self):
     self.task_repo_proxy.add(self.task_stub_proxy)
     output_logs = self.notifier.get_logs()
     self.assertEqual(1, len(output_logs))
     output_log = output_logs[0]
     self.assertEqual('INFO', output_log['notification_type'])
     self.assertEqual('task.create', output_log['event_type'])
     self.assertEqual(self.task.task_id, output_log['payload']['id'])
     self.assertEqual(
         timeutils.isotime(self.task.updated_at),
         output_log['payload']['updated_at']
     )
     self.assertEqual(
         timeutils.isotime(self.task.created_at),
         output_log['payload']['created_at']
     )
     if 'location' in output_log['payload']:
         self.fail('Notification contained location field.')
Beispiel #25
0
    def _assert_image_member_with_notifier(self, output_log, deleted=False):
        self.assertEqual(self.image_member.member_id,
                         output_log['payload']['member_id'])
        self.assertEqual(self.image_member.image_id,
                         output_log['payload']['image_id'])
        self.assertEqual(self.image_member.status,
                         output_log['payload']['status'])
        self.assertEqual(timeutils.isotime(self.image_member.created_at),
                         output_log['payload']['created_at'])
        self.assertEqual(timeutils.isotime(self.image_member.updated_at),
                         output_log['payload']['updated_at'])

        if deleted:
            self.assertTrue(output_log['payload']['deleted'])
            self.assertIsNotNone(output_log['payload']['deleted_at'])
        else:
            self.assertFalse(output_log['payload']['deleted'])
            self.assertIsNone(output_log['payload']['deleted_at'])
Beispiel #26
0
 def remove(self, task):
     result = super(TaskRepoProxy, self).remove(task)
     self.send_notification('task.delete',
                            task,
                            extra_payload={
                                'deleted': True,
                                'deleted_at': timeutils.isotime()
                            })
     return result
Beispiel #27
0
    def _assert_image_member_with_notifier(self, output_log, deleted=False):
        self.assertEqual(self.image_member.member_id,
                         output_log['payload']['member_id'])
        self.assertEqual(self.image_member.image_id,
                         output_log['payload']['image_id'])
        self.assertEqual(self.image_member.status,
                         output_log['payload']['status'])
        self.assertEqual(timeutils.isotime(self.image_member.created_at),
                         output_log['payload']['created_at'])
        self.assertEqual(timeutils.isotime(self.image_member.updated_at),
                         output_log['payload']['updated_at'])

        if deleted:
            self.assertTrue(output_log['payload']['deleted'])
            self.assertIsNotNone(output_log['payload']['deleted_at'])
        else:
            self.assertFalse(output_log['payload']['deleted'])
            self.assertIsNone(output_log['payload']['deleted_at'])
Beispiel #28
0
 def remove(self, metadef_tag):
     result = super(MetadefTagRepoProxy, self).remove(metadef_tag)
     self.send_notification('metadef_tag.delete',
                            metadef_tag,
                            extra_payload={
                                'deleted': True,
                                'deleted_at': timeutils.isotime(),
                                'namespace': metadef_tag.namespace.namespace
                            })
     return result
Beispiel #29
0
 def remove(self, metadef_namespace):
     result = super(MetadefNamespaceRepoProxy,
                    self).remove(metadef_namespace)
     self.send_notification('metadef_namespace.delete',
                            metadef_namespace,
                            extra_payload={
                                'deleted': True,
                                'deleted_at': timeutils.isotime()
                            })
     return result
Beispiel #30
0
def format_metadef_object_notification(metadef_object):
    object_properties = metadef_object.properties or {}
    properties = []
    for name, prop in six.iteritems(object_properties):
        object_property = _format_metadef_object_property(name, prop)
        properties.append(object_property)

    return {
        'namespace': metadef_object.namespace,
        'name': metadef_object.name,
        'name_old': metadef_object.name,
        'properties': properties,
        'required': metadef_object.required,
        'description': metadef_object.description,
        'created_at': timeutils.isotime(metadef_object.created_at),
        'updated_at': timeutils.isotime(metadef_object.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #31
0
def format_metadef_object_notification(metadef_object):
    object_properties = metadef_object.properties or {}
    properties = []
    for name, prop in six.iteritems(object_properties):
        object_property = _format_metadef_object_property(name, prop)
        properties.append(object_property)

    return {
        'namespace': metadef_object.namespace,
        'name': metadef_object.name,
        'name_old': metadef_object.name,
        'properties': properties,
        'required': metadef_object.required,
        'description': metadef_object.description,
        'created_at': timeutils.isotime(metadef_object.created_at),
        'updated_at': timeutils.isotime(metadef_object.updated_at),
        'deleted': False,
        'deleted_at': None,
    }
Beispiel #32
0
 def remove(self, metadef_tag):
     result = super(MetadefTagRepoProxy, self).remove(metadef_tag)
     self.send_notification(
         'metadef_tag.delete', metadef_tag,
         extra_payload={
             'deleted': True,
             'deleted_at': timeutils.isotime(),
             'namespace': metadef_tag.namespace.namespace
         }
     )
     return result
Beispiel #33
0
 def remove(self, md_resource_type):
     result = super(MetadefResourceTypeRepoProxy, self).remove(
         md_resource_type)
     self.send_notification(
         'metadef_resource_type.delete', md_resource_type,
         extra_payload={
             'deleted': True,
             'deleted_at': timeutils.isotime(),
             'namespace': md_resource_type.namespace.namespace
         }
     )
     return result
Beispiel #34
0
 def remove(self, md_resource_type):
     result = super(MetadefResourceTypeRepoProxy,
                    self).remove(md_resource_type)
     self.send_notification('metadef_resource_type.delete',
                            md_resource_type,
                            extra_payload={
                                'deleted':
                                True,
                                'deleted_at':
                                timeutils.isotime(),
                                'namespace':
                                md_resource_type.namespace.namespace
                            })
     return result
Beispiel #35
0
 def test_isotimei_micro_second_precision(self):
     with mock.patch('datetime.datetime') as datetime_mock:
         datetime_mock.utcnow.return_value = self.skynet_self_aware_ms_time
         dt = timeutils.isotime(subsecond=True)
         self.assertEqual(dt, self.skynet_self_aware_time_ms_str)
Beispiel #36
0
 def test_iso8601_from_timestamp(self):
     utcnow = timeutils.utcnow()
     iso = timeutils.isotime(utcnow)
     ts = calendar.timegm(utcnow.timetuple())
     self.assertEqual(iso, timeutils.iso8601_from_timestamp(ts))
Beispiel #37
0
 def remove(self, image):
     super(ImageRepoProxy, self).remove(image)
     self.send_notification('image.delete', image, extra_payload={
         'deleted': True, 'deleted_at': timeutils.isotime()
     })
Beispiel #38
0
 def remove(self, member):
     super(ImageMemberRepoProxy, self).remove(member)
     self.send_notification('image.member.delete', member, extra_payload={
         'deleted': True, 'deleted_at': timeutils.isotime()
     })
Beispiel #39
0
 def test_zulu_roundtrip(self):
     time_str = '2012-02-14T20:53:07Z'
     zulu = timeutils.parse_isotime(time_str)
     self.assertEqual(zulu.tzinfo, iso8601.iso8601.UTC)
     self.assertEqual(timeutils.isotime(zulu), time_str)
Beispiel #40
0
 def test_west_roundtrip(self):
     time_str = '2012-02-14T20:53:07+11:30'
     west = timeutils.parse_isotime(time_str)
     self.assertEqual(west.tzinfo.tzname(None), '+11:30')
     self.assertEqual(timeutils.isotime(west), time_str)
Beispiel #41
0
 def test_east_roundtrip(self):
     time_str = '2012-02-14T20:53:07-07:00'
     east = timeutils.parse_isotime(time_str)
     self.assertEqual(east.tzinfo.tzname(None), '-07:00')
     self.assertEqual(timeutils.isotime(east), time_str)
Beispiel #42
0
 def test_isotime(self):
     with mock.patch('datetime.datetime') as datetime_mock:
         datetime_mock.utcnow.return_value = self.skynet_self_aware_time
         dt = timeutils.isotime()
         self.assertEqual(dt, self.skynet_self_aware_time_str)
Beispiel #43
0
 def remove(self, task):
     result = super(TaskRepoProxy, self).remove(task)
     self.send_notification('task.delete', task, extra_payload={
         'deleted': True, 'deleted_at': timeutils.isotime()
     })
     return result
Beispiel #44
0
 def test_now_roundtrip(self):
     time_str = timeutils.isotime()
     now = timeutils.parse_isotime(time_str)
     self.assertEqual(now.tzinfo, iso8601.iso8601.UTC)
     self.assertEqual(timeutils.isotime(now), time_str)