예제 #1
0
 def test_describe_new_local_bdm_image_from_local_image(self):
     image = self._get_new_ebs_image(
         image_project_id=fakes.ID_OS_PROJECT,
         bdm_image_project_id=fakes.ID_OS_PROJECT)
     image_id = self._find_snapshot_id_in_bdm(image, '/dev/vdi')
     image_api.describe_images(self.context, image_id=[image_id])
     self.assert_image_project(fakes.ID_OS_PROJECT, image_id)
예제 #2
0
 def test_describe_new_alien_bdm_image_from_new_alien_image(self):
     alien_project_id = fakes.random_os_id()
     image = self._get_new_ebs_image(image_project_id=alien_project_id,
                                     bdm_image_project_id=alien_project_id)
     image_id = self._find_snapshot_id_in_bdm(image, '/dev/vdi')
     image_api.describe_images(self.context, image_id=[image_id])
     self.assert_image_project(None, image_id)
 def test_describe_new_alien_bdm_image_from_new_alien_image(self):
     alien_project_id = fakes.random_os_id()
     image = self._get_new_ebs_image(
         image_project_id=alien_project_id,
         bdm_image_project_id=alien_project_id)
     image_id = self._find_snapshot_id_in_bdm(image, '/dev/vdi')
     image_api.describe_images(self.context, image_id=[image_id])
     self.assert_image_project(None, image_id)
예제 #4
0
    def _test_describe_new_instance_then_its_image(self, image_project_id):
        os_instance_id = fakes.random_os_id()
        os_image_id = fakes.random_os_id()
        os_instance = {
            'id': os_instance_id,
            'flavor': {'id': 'fake'},
            'image': {'id': os_image_id},
        }
        os_image = {
            'id': os_image_id,
            'owner': image_project_id,
            'is_public': True,
        }
        self.nova_admin.servers.list.return_value = [
            fakes.OSInstance_full(os_instance)]
        self.glance.images.list.return_value = [fakes.OSImage(os_image)]

        reservations = instance_api.describe_instances(self.context)
        instance = reservations['reservationSet'][0]['instancesSet'][0]
        image_id = instance['imageId']
        image = (image_api.describe_images(self.context, image_id=[image_id])
                 ['imagesSet'][0])
        self.assertEqual(image_id, image['imageId'])
        self.assertEqual(image_project_id, image['imageOwnerId'])
        expected_project_id = (fakes.ID_OS_PROJECT
                               if image_project_id == fakes.ID_OS_PROJECT else
                               None)
        self.assert_image_project(expected_project_id, image['imageId'])
예제 #5
0
    def _get_new_ebs_image(self,
                           image_project_id=None,
                           bdm_image_project_id=None):
        os_image_id = fakes.random_os_id()
        os_snapshot_id = fakes.random_os_id()
        os_bdm_image_id = fakes.random_os_id()
        os_image = {
            'id':
            os_image_id,
            'owner':
            image_project_id,
            'is_public':
            True,
            'container_format':
            'ami',
            'bdm_v2':
            True,
            'block_device_mapping': [{
                'device_name': '/dev/vds',
                'source_type': 'snapshot',
                'destination_type': 'volume',
                'snapshot_id': os_snapshot_id
            }],
        }
        if os_bdm_image_id:
            os_image['block_device_mapping'].append({
                'device_name': '/dev/vdi',
                'source_type': 'image',
                'destination_type': 'volume',
                'image_id': os_bdm_image_id,
                'size': 100
            })
        os_snapshot = {
            'id': os_snapshot_id,
        }
        os_bdm_image = {
            'id': os_bdm_image_id,
            'owner': bdm_image_project_id,
            'is_public': True,
        }
        os_images = [fakes.OSImage(os_image)]
        if bdm_image_project_id:
            os_images.append(fakes.OSImage(os_bdm_image))
        self.glance.images.list.return_value = os_images
        self.cinder.volume_snapshots.list.return_value = ([
            fakes.OSSnapshot(os_snapshot)
        ] if image_project_id == fakes.ID_OS_PROJECT else [])

        images = image_api.describe_images(self.context)
        return next(i for i in images['imagesSet'] if i['blockDeviceMapping'])
    def _get_new_ebs_image(self, image_project_id=None,
                           bdm_image_project_id=None):
        os_image_id = fakes.random_os_id()
        os_snapshot_id = fakes.random_os_id()
        os_bdm_image_id = fakes.random_os_id()
        os_image = {
            'id': os_image_id,
            'owner': image_project_id,
            'is_public': True,
            'container_format': 'ami',
            'properties': {
                'bdm_v2': True,
                'block_device_mapping': [{'device_name': '/dev/vds',
                                          'source_type': 'snapshot',
                                          'destination_type': 'volume',
                                          'snapshot_id': os_snapshot_id}],
            },
        }
        if os_bdm_image_id:
            os_image['properties']['block_device_mapping'].append({
                'device_name': '/dev/vdi',
                'source_type': 'image',
                'destination_type': 'volume',
                'image_id': os_bdm_image_id,
                'size': 100})
        os_snapshot = {
            'id': os_snapshot_id,
        }
        os_bdm_image = {
            'id': os_bdm_image_id,
            'owner': bdm_image_project_id,
            'is_public': True,
        }
        os_images = [fakes.OSImage(os_image)]
        if bdm_image_project_id:
            os_images.append(fakes.OSImage(os_bdm_image))
        self.glance.images.list.return_value = os_images
        self.cinder.volume_snapshots.list.return_value = (
            [fakes.OSSnapshot(os_snapshot)]
            if image_project_id == fakes.ID_OS_PROJECT else
            [])

        images = image_api.describe_images(self.context)
        return next(i for i in images['imagesSet']
                    if i['blockDeviceMapping'])
예제 #7
0
    def _test_describe_new_images(self, image_project_id=None,
                                  aki_image_project_id=None,
                                  with_id_mapping=False):
        os_image_id = fakes.random_os_id()
        os_aki_image_id = fakes.random_os_id()
        os_image = {
            'id': os_image_id,
            'owner': image_project_id,
            'is_public': True,
            'container_format': 'ami',
            'properties': {
                'kernel_id': os_aki_image_id,
            },
        }
        os_aki_image = {
            'id': os_aki_image_id,
            'owner': aki_image_project_id,
            'is_public': True,
            'container_format': 'aki',
        }
        self.glance.images.list.return_value = (
            [fakes.OSImage(os_image), fakes.OSImage(os_aki_image)]
            if with_id_mapping else
            [fakes.OSImage(os_aki_image), fakes.OSImage(os_image)])

        images = image_api.describe_images(self.context)
        image = next(i for i in images['imagesSet']
                     if i['imageType'] == 'machine')
        aki_image = next(i for i in images['imagesSet']
                         if i['imageType'] == 'kernel')
        self.assertEqual(image_project_id, image['imageOwnerId'])
        self.assert_image_project(
            (image_project_id
             if image_project_id == fakes.ID_OS_PROJECT else
             None),
            image['imageId'])
        self.assertEqual(aki_image_project_id, aki_image['imageOwnerId'])
        self.assert_image_project(
            (aki_image_project_id
             if aki_image_project_id == fakes.ID_OS_PROJECT else
             None),
            aki_image['imageId'])
예제 #8
0
    def test_describe_images_being_created(self):
        db_api = self.mock_db()
        glance = self.mock_glance()
        context = base.create_context()
        image_id = fakes.random_ec2_id('ami')
        image = {
            'id': image_id,
            'os_id': None,
            'is_public': False,
            'description': 'fake desc'
        }
        db_api.set_mock_items(image)
        db_api.get_public_items.return_value = []

        # describe cases when no glance image exists
        glance.images.list.return_value = []
        expected = {
            'imagesSet': [{
                'imageId': image_id,
                'description': 'fake desc',
                'imageOwnerId': fakes.ID_OS_PROJECT,
                'imageState': 'pending',
                'imageType': 'machine',
                'isPublic': False
            }]
        }

        # describe all images
        result = image_api.describe_images(context)
        self.assertEqual(expected, result)

        # describe the image
        result = image_api.describe_images(context, image_id=[image_id])
        self.assertEqual(expected, result)

        # describe failed image
        image['state'] = 'failed'
        expected['imagesSet'][0]['imageState'] = 'failed'
        result = image_api.describe_images(base.create_context())
        self.assertEqual(expected, result)

        # describe cases when glance image exists, db item is yet not updated
        del image['state']
        os_image_id = fakes.random_os_id()
        os_image = {
            'id': os_image_id,
            'owner': fakes.ID_OS_PROJECT,
            'status': 'active',
            'is_public': False,
            'properties': {
                'ec2_id': image_id
            }
        }
        glance.images.list.return_value = [fakes.OSImage(os_image)]
        expected['imagesSet'] = [{
            'architecture': None,
            'creationDate': None,
            'description': 'fake desc',
            'imageId': image_id,
            'imageLocation': 'None (None)',
            'imageOwnerId': fakes.ID_OS_PROJECT,
            'imageState': 'available',
            'imageType': 'machine',
            'isPublic': False,
            'name': None,
            'rootDeviceType': 'instance-store'
        }]

        # describe all images
        result = image_api.describe_images(context)
        self.assertEqual(expected, result)
        db_api.update_item.assert_called_once_with(
            context, tools.update_dict(image, {'os_id': os_image_id}))

        # describe the image
        db_api.reset_mock()
        result = image_api.describe_images(context, image_id=[image_id])
        self.assertEqual(expected, result)
        db_api.update_item.assert_called_once_with(
            context, tools.update_dict(image, {'os_id': os_image_id}))
예제 #9
0
    def test_describe_images_being_created(self):
        db_api = self.mock_db()
        glance = self.mock_glance()
        context = base.create_context()
        image_id = fakes.random_ec2_id('ami')
        image = {'id': image_id,
                 'os_id': None,
                 'is_public': False,
                 'description': 'fake desc'}
        db_api.set_mock_items(image)
        db_api.get_public_items.return_value = []

        # describe cases when no glance image exists
        glance.images.list.return_value = []
        expected = {'imagesSet': [{'imageId': image_id,
                                   'description': 'fake desc',
                                   'imageOwnerId': fakes.ID_OS_PROJECT,
                                   'imageState': 'pending',
                                   'imageType': 'machine',
                                   'isPublic': False}]}

        # describe all images
        result = image_api.describe_images(context)
        self.assertEqual(expected, result)

        # describe the image
        result = image_api.describe_images(context, image_id=[image_id])
        self.assertEqual(expected, result)

        # describe with filter
        result = image_api.describe_images(
            context, filter=[{'name': 'name', 'value': 'noname'}])
        self.assertEqual({'imagesSet': []}, result)

        # describe failed image
        image['state'] = 'failed'
        expected['imagesSet'][0]['imageState'] = 'failed'
        result = image_api.describe_images(base.create_context())
        self.assertEqual(expected, result)

        # describe cases when glance image exists, db item is yet not updated
        del image['state']
        os_image_id = fakes.random_os_id()
        os_image = {'id': os_image_id,
                    'owner': fakes.ID_OS_PROJECT,
                    'status': 'active',
                    'visibility': 'private',
                    'ec2_id': image_id}
        glance.images.list.return_value = [fakes.OSImage(os_image)]
        expected['imagesSet'] = [{
            'architecture': None,
            'creationDate': None,
            'description': 'fake desc',
            'imageId': image_id,
            'imageLocation': 'None (None)',
            'imageOwnerId': fakes.ID_OS_PROJECT,
            'imageState': 'available',
            'imageType': 'machine',
            'isPublic': False,
            'name': None,
            'rootDeviceType': 'instance-store'}]

        # describe all images
        result = image_api.describe_images(context)
        self.assertEqual(expected, result)
        db_api.update_item.assert_called_once_with(
            context, tools.update_dict(image, {'os_id': os_image_id}))

        # describe the image
        db_api.reset_mock()
        result = image_api.describe_images(context, image_id=[image_id])
        self.assertEqual(expected, result)
        db_api.update_item.assert_called_once_with(
            context, tools.update_dict(image, {'os_id': os_image_id}))