def test_s3_create_bdm(self, spawn_n):
        glance = self.mock_glance()
        metadata = {'image_location': 'fake_bucket/fake_manifest',
                    'root_device_name': '/dev/sda1',
                    'block_device_mapping': [
                        {'device_name': '/dev/sda1',
                         'snapshot_id': fakes.ID_OS_SNAPSHOT_1,
                         'delete_on_termination': True},
                        {'device_name': '/dev/sda2',
                         'virtual_name': 'ephemeral0'},
                        {'device_name': '/dev/sdb0',
                         'no_device': True}]}
        fake_context = base.create_context()
        with mock.patch('ec2api.api.image._s3_conn') as s3_conn:

            (s3_conn.return_value.
             get_bucket.return_value.
             get_key.return_value.
             get_contents_as_string.return_value) = FILE_MANIFEST_XML

            image_api._s3_create(fake_context, metadata)

            glance.images.create.assert_called_once_with(
                disk_format='ami', container_format='ami',
                visibility='private', architecture='x86_64',
                image_state='pending', root_device_name='/dev/sda1',
                block_device_mapping=[{'device_name': '/dev/sda1',
                                       'snapshot_id': fakes.ID_OS_SNAPSHOT_1,
                                       'delete_on_termination': True},
                                      {'device_name': '/dev/sda2',
                                       'virtual_name': 'ephemeral0'},
                                      {'device_name': '/dev/sdb0',
                                       'no_device': True}],
                image_location='fake_bucket/fake_manifest')
Exemple #2
0
    def test_s3_create_bdm(self, spawn_n):
        glance = self.mock_glance()
        metadata = {'image_location': 'fake_bucket/fake_manifest',
                    'root_device_name': '/dev/sda1',
                    'block_device_mapping': [
                        {'device_name': '/dev/sda1',
                         'snapshot_id': fakes.ID_OS_SNAPSHOT_1,
                         'delete_on_termination': True},
                        {'device_name': '/dev/sda2',
                         'virtual_name': 'ephemeral0'},
                        {'device_name': '/dev/sdb0',
                         'no_device': True}]}
        fake_context = base.create_context()
        with mock.patch('ec2api.api.image._s3_conn') as s3_conn:

            (s3_conn.return_value.
             get_object.return_value) = {'Body': FILE_MANIFEST_XML}

            image_api._s3_create(fake_context, metadata)

            glance.images.create.assert_called_once_with(
                disk_format='ami', container_format='ami',
                visibility='private', architecture='x86_64',
                image_state='pending', root_device_name='/dev/sda1',
                block_device_mapping=[{'device_name': '/dev/sda1',
                                       'snapshot_id': fakes.ID_OS_SNAPSHOT_1,
                                       'delete_on_termination': True},
                                      {'device_name': '/dev/sda2',
                                       'virtual_name': 'ephemeral0'},
                                      {'device_name': '/dev/sdb0',
                                       'no_device': True}],
                image_location='fake_bucket/fake_manifest')
    def test_s3_create_bdm(self, spawn_n):
        metadata = {
            'properties': {
                'image_location':
                'fake_bucket/fake_manifest',
                'root_device_name':
                '/dev/sda1',
                'block_device_mapping': [{
                    'device_name': '/dev/sda1',
                    'snapshot_id': fakes.ID_OS_SNAPSHOT_1,
                    'delete_on_termination': True
                }, {
                    'device_name': '/dev/sda2',
                    'virtual_name': 'ephemeral0'
                }, {
                    'device_name': '/dev/sdb0',
                    'no_device': True
                }]
            }
        }
        fake_context = self._create_context()
        with mock.patch('ec2api.api.image._s3_conn') as s3_conn:

            (s3_conn.return_value.get_bucket.return_value.get_key.return_value.
             get_contents_as_string.return_value) = FILE_MANIFEST_XML

            image_api._s3_create(fake_context, metadata)

            self.glance.images.create.assert_called_once_with(
                disk_format='ami',
                container_format='ami',
                is_public=False,
                properties={
                    'architecture':
                    'x86_64',
                    'image_state':
                    'pending',
                    'root_device_name':
                    '/dev/sda1',
                    'block_device_mapping': [{
                        'device_name': '/dev/sda1',
                        'snapshot_id': fakes.ID_OS_SNAPSHOT_1,
                        'delete_on_termination': True
                    }, {
                        'device_name': '/dev/sda2',
                        'virtual_name': 'ephemeral0'
                    }, {
                        'device_name': '/dev/sdb0',
                        'no_device': True
                    }],
                    'image_location':
                    'fake_bucket/fake_manifest'
                })
Exemple #4
0
        def do_test(s3_conn, s3_download_file, s3_decrypt_image,
                    s3_untarzip_image):
            (s3_conn.return_value.
             get_object.return_value) = {'Body': FILE_MANIFEST_XML}
            s3_download_file.return_value = tempf
            s3_untarzip_image.return_value = tempf
            os_image_id = fakes.random_os_id()
            (glance.images.create.return_value) = (
                fakes.OSImage({'id': os_image_id,
                               'status': 'queued'}))

            data = [
                ({'image_location': 'testbucket_1/test.img.manifest.xml'},
                 'testbucket_1', 'test.img.manifest.xml'),
                ({'image_location': '/testbucket_2/test.img.manifest.xml'},
                 'testbucket_2', 'test.img.manifest.xml')]
            for mdata, bucket, manifest in data:
                image = image_api._s3_create(fake_context, mdata)
                eventlet.sleep()
                self.glance.images.update.assert_called_with(
                    os_image_id, image_state='available')
                self.glance.images.upload.assert_any_call(
                    os_image_id, mock.ANY)
                s3_conn.return_value.get_object.assert_called_with(
                    Bucket=bucket, Key=manifest)
                s3_download_file.assert_called_with(
                    mock.ANY, bucket, 'foo', mock.ANY)
                s3_decrypt_image.assert_called_with(
                    fake_context, mock.ANY, 'foo', 'foo', mock.ANY)
                s3_untarzip_image.assert_called_with(mock.ANY, mock.ANY)

            do_test()
Exemple #5
0
        def do_test(s3_conn, s3_download_file, s3_decrypt_image,
                    s3_untarzip_image):
            (s3_conn.return_value.
             get_object.return_value) = {'Body': FILE_MANIFEST_XML}
            s3_download_file.return_value = tempf
            s3_untarzip_image.return_value = tempf
            os_image_id = fakes.random_os_id()
            (glance.images.create.return_value) = (
                fakes.OSImage({'id': os_image_id,
                               'status': 'queued'}))

            data = [
                ({'image_location': 'testbucket_1/test.img.manifest.xml'},
                 'testbucket_1', 'test.img.manifest.xml'),
                ({'image_location': '/testbucket_2/test.img.manifest.xml'},
                 'testbucket_2', 'test.img.manifest.xml')]
            for mdata, bucket, manifest in data:
                image = image_api._s3_create(fake_context, mdata)
                eventlet.sleep()
                self.glance.images.update.assert_called_with(
                    os_image_id, image_state='available')
                self.glance.images.upload.assert_any_call(
                    os_image_id, mock.ANY)
                s3_conn.return_value.get_object.assert_called_with(
                    Bucket=bucket, Key=manifest)
                s3_download_file.assert_called_with(
                    mock.ANY, bucket, 'foo', mock.ANY)
                s3_decrypt_image.assert_called_with(
                    fake_context, mock.ANY, 'foo', 'foo', mock.ANY)
                s3_untarzip_image.assert_called_with(mock.ANY, mock.ANY)

            do_test()
Exemple #6
0
    def test_s3_create_image_locations(self, osimage_update):
        self.configure(image_decryption_dir=None)
        _handle, tempf = tempfile.mkstemp()
        fake_context = base.create_context()
        with contextlib.nested(
                mock.patch('ec2api.api.image._s3_conn'),
                mock.patch('ec2api.api.image._s3_download_file'),
                mock.patch('ec2api.api.image._s3_decrypt_image'),
                mock.patch('ec2api.api.image._s3_untarzip_image')) as (
                    s3_conn, s3_download_file, s3_decrypt_image,
                    s3_untarzip_image):

            (s3_conn.return_value.get_bucket.return_value.get_key.return_value.
             get_contents_as_string.return_value) = FILE_MANIFEST_XML
            s3_download_file.return_value = tempf
            s3_untarzip_image.return_value = tempf
            (self.glance.images.create.return_value) = (fakes.OSImage({
                'id':
                fakes.random_os_id(),
                'status':
                'queued'
            }))

            data = [({
                'properties': {
                    'image_location': 'testbucket_1/test.img.manifest.xml'
                }
            }, 'testbucket_1', 'test.img.manifest.xml'),
                    ({
                        'properties': {
                            'image_location':
                            '/testbucket_2/test.img.manifest.xml'
                        }
                    }, 'testbucket_2', 'test.img.manifest.xml')]
            for mdata, bucket, manifest in data:
                image = image_api._s3_create(fake_context, mdata)
                eventlet.sleep()
                osimage_update.assert_called_with(
                    image, properties={'image_state': 'available'})
                osimage_update.assert_any_call(image, data=mock.ANY)
                s3_conn.return_value.get_bucket.assert_called_with(bucket)
                (s3_conn.return_value.get_bucket.return_value.get_key.
                 assert_called_with(manifest))
                (s3_conn.return_value.get_bucket.return_value.get_key.
                 return_value.get_contents_as_string.assert_called_with())
                s3_download_file.assert_called_with(
                    s3_conn.return_value.get_bucket.return_value, 'foo',
                    mock.ANY)
                s3_decrypt_image.assert_called_with(fake_context, mock.ANY,
                                                    'foo', 'foo', mock.ANY)
                s3_untarzip_image.assert_called_with(mock.ANY, mock.ANY)
    def test_s3_create_bdm(self, spawn_n):
        glance = self.mock_glance()
        metadata = {'properties': {
                        'image_location': 'fake_bucket/fake_manifest',
                        'root_device_name': '/dev/sda1',
                        'block_device_mapping': [
                            {'device_name': '/dev/sda1',
                             'snapshot_id': fakes.ID_OS_SNAPSHOT_1,
                             'delete_on_termination': True},
                            {'device_name': '/dev/sda2',
                             'virtual_name': 'ephemeral0'},
                            {'device_name': '/dev/sdb0',
                             'no_device': True}]}}
        fake_context = base.create_context()
        with mock.patch('ec2api.api.image._s3_conn') as s3_conn:

            (s3_conn.return_value.
             get_bucket.return_value.
             get_key.return_value.
             get_contents_as_string.return_value) = FILE_MANIFEST_XML

            image_api._s3_create(fake_context, metadata)

            glance.images.create.assert_called_once_with(
                disk_format='ami', container_format='ami', is_public=False,
                properties={'architecture': 'x86_64',
                            'image_state': 'pending',
                            'root_device_name': '/dev/sda1',
                            'block_device_mapping': [
                                {'device_name': '/dev/sda1',
                                 'snapshot_id': fakes.ID_OS_SNAPSHOT_1,
                                 'delete_on_termination': True},
                                {'device_name': '/dev/sda2',
                                 'virtual_name': 'ephemeral0'},
                                {'device_name': '/dev/sdb0',
                                 'no_device': True}],
                            'image_location': 'fake_bucket/fake_manifest'})
Exemple #8
0
    def test_s3_create_image_locations(self, osimage_update):
        self.configure(image_decryption_dir=None)
        _handle, tempf = tempfile.mkstemp()
        fake_context = base.create_context()
        with contextlib.nested(
            mock.patch('ec2api.api.image._s3_conn'),
            mock.patch('ec2api.api.image._s3_download_file'),
            mock.patch('ec2api.api.image._s3_decrypt_image'),
            mock.patch('ec2api.api.image._s3_untarzip_image')
        ) as (s3_conn, s3_download_file, s3_decrypt_image, s3_untarzip_image):

            (s3_conn.return_value.
             get_bucket.return_value.
             get_key.return_value.
             get_contents_as_string.return_value) = FILE_MANIFEST_XML
            s3_download_file.return_value = tempf
            s3_untarzip_image.return_value = tempf
            (self.glance.images.create.return_value) = (
                fakes.OSImage({'id': fakes.random_os_id(),
                               'status': 'queued'}))

            data = [
                ({'properties': {
                    'image_location': 'testbucket_1/test.img.manifest.xml'}},
                 'testbucket_1', 'test.img.manifest.xml'),
                ({'properties': {
                    'image_location': '/testbucket_2/test.img.manifest.xml'}},
                 'testbucket_2', 'test.img.manifest.xml')]
            for mdata, bucket, manifest in data:
                image = image_api._s3_create(fake_context, mdata)
                eventlet.sleep()
                osimage_update.assert_called_with(
                    image, properties={'image_state': 'available'})
                osimage_update.assert_any_call(
                    image, data=mock.ANY)
                s3_conn.return_value.get_bucket.assert_called_with(bucket)
                (s3_conn.return_value.get_bucket.return_value.
                 get_key.assert_called_with(manifest))
                (s3_conn.return_value.get_bucket.return_value.
                 get_key.return_value.
                 get_contents_as_string.assert_called_with())
                s3_download_file.assert_called_with(
                    s3_conn.return_value.get_bucket.return_value,
                    'foo', mock.ANY)
                s3_decrypt_image.assert_called_with(
                    fake_context, mock.ANY, 'foo', 'foo', mock.ANY)
                s3_untarzip_image.assert_called_with(mock.ANY, mock.ANY)
Exemple #9
0
        def do_test(s3_conn, s3_download_file, s3_decrypt_image,
                    s3_untarzip_image):
            (s3_conn.return_value.get_bucket.return_value.get_key.return_value.
             get_contents_as_string.return_value) = FILE_MANIFEST_XML
            s3_download_file.return_value = tempf
            s3_untarzip_image.return_value = tempf
            (glance.images.create.return_value) = (fakes.OSImage({
                'id':
                fakes.random_os_id(),
                'status':
                'queued'
            }))

            data = [({
                'properties': {
                    'image_location': 'testbucket_1/test.img.manifest.xml'
                }
            }, 'testbucket_1', 'test.img.manifest.xml'),
                    ({
                        'properties': {
                            'image_location':
                            '/testbucket_2/test.img.manifest.xml'
                        }
                    }, 'testbucket_2', 'test.img.manifest.xml')]
            for mdata, bucket, manifest in data:
                image = image_api._s3_create(fake_context, mdata)
                eventlet.sleep()
                osimage_update.assert_called_with(
                    image, properties={'image_state': 'available'})
                osimage_update.assert_any_call(image, data=mock.ANY)
                s3_conn.return_value.get_bucket.assert_called_with(bucket)
                (s3_conn.return_value.get_bucket.return_value.get_key.
                 assert_called_with(manifest))
                (s3_conn.return_value.get_bucket.return_value.get_key.
                 return_value.get_contents_as_string.assert_called_with())
                s3_download_file.assert_called_with(
                    s3_conn.return_value.get_bucket.return_value, 'foo',
                    mock.ANY)
                s3_decrypt_image.assert_called_with(fake_context, mock.ANY,
                                                    'foo', 'foo', mock.ANY)
                s3_untarzip_image.assert_called_with(mock.ANY, mock.ANY)

            do_test()
Exemple #10
0
        def do_test(s3_conn, s3_download_file, s3_decrypt_image,
                    s3_untarzip_image):
            (s3_conn.return_value.
             get_bucket.return_value.
             get_key.return_value.
             get_contents_as_string.return_value) = FILE_MANIFEST_XML
            s3_download_file.return_value = tempf
            s3_untarzip_image.return_value = tempf
            (glance.images.create.return_value) = (
                fakes.OSImage({'id': fakes.random_os_id(),
                               'status': 'queued'}))

            data = [
                ({'properties': {
                    'image_location': 'testbucket_1/test.img.manifest.xml'}},
                 'testbucket_1', 'test.img.manifest.xml'),
                ({'properties': {
                    'image_location': '/testbucket_2/test.img.manifest.xml'}},
                 'testbucket_2', 'test.img.manifest.xml')]
            for mdata, bucket, manifest in data:
                image = image_api._s3_create(fake_context, mdata)
                eventlet.sleep()
                osimage_update.assert_called_with(
                    image, properties={'image_state': 'available'})
                osimage_update.assert_any_call(
                    image, data=mock.ANY)
                s3_conn.return_value.get_bucket.assert_called_with(bucket)
                (s3_conn.return_value.get_bucket.return_value.
                 get_key.assert_called_with(manifest))
                (s3_conn.return_value.get_bucket.return_value.
                 get_key.return_value.
                 get_contents_as_string.assert_called_with())
                s3_download_file.assert_called_with(
                    s3_conn.return_value.get_bucket.return_value,
                    'foo', mock.ANY)
                s3_decrypt_image.assert_called_with(
                    fake_context, mock.ANY, 'foo', 'foo', mock.ANY)
                s3_untarzip_image.assert_called_with(mock.ANY, mock.ANY)

            do_test()