kernel_id and ramdisk_id parameters are not supported in novaclient create

remove them from ec2api

Signed-off-by: tikitavi <rtikitavi@gmail.com>
Change-Id: I0e647be2d3f1500b14deed72a64728a42a33db34
This commit is contained in:
tikitavi 2023-06-22 12:59:56 +03:00
parent aa9c1780de
commit a27cf4120e
2 changed files with 21 additions and 37 deletions

View File

@ -85,6 +85,12 @@ def run_instances(context, image_id, min_count, max_count,
network_interface=None, iam_instance_profile=None, network_interface=None, iam_instance_profile=None,
ebs_optimized=None): ebs_optimized=None):
if ramdisk_id:
raise exception.InvalidAttribute(attr='ramdisk_id')
if kernel_id:
raise exception.InvalidAttribute(attr='kernel_id')
_check_min_max_count(min_count, max_count) _check_min_max_count(min_count, max_count)
if client_token: if client_token:
@ -100,8 +106,7 @@ def run_instances(context, image_id, min_count, max_count,
LOG.error('Result: %s', reservations) LOG.error('Result: %s', reservations)
return reservations['reservationSet'][0] return reservations['reservationSet'][0]
os_image, os_kernel_id, os_ramdisk_id = _parse_image_parameters( os_image = _parse_image_parameters(context, image_id)
context, image_id, kernel_id, ramdisk_id)
nova = clients.nova(context) nova = clients.nova(context)
os_flavor = _get_os_flavor(instance_type, nova) os_flavor = _get_os_flavor(instance_type, nova)
@ -143,7 +148,6 @@ def run_instances(context, image_id, min_count, max_count,
'%s-%s' % (ec2_reservation_id, launch_index), '%s-%s' % (ec2_reservation_id, launch_index),
os_image.id, os_flavor, os_image.id, os_flavor,
min_count=1, max_count=1, min_count=1, max_count=1,
kernel_id=os_kernel_id, ramdisk_id=os_ramdisk_id,
availability_zone=availability_zone, availability_zone=availability_zone,
block_device_mapping_v2=bdm, block_device_mapping_v2=bdm,
key_name=key_name, userdata=user_data, key_name=key_name, userdata=user_data,
@ -872,11 +876,7 @@ def _check_min_max_count(min_count, max_count):
raise exception.InvalidParameterValue(msg) raise exception.InvalidParameterValue(msg)
def _parse_image_parameters(context, image_id, kernel_id, ramdisk_id): def _parse_image_parameters(context, image_id):
os_kernel_id = (ec2utils.get_os_image(context, kernel_id).id
if kernel_id else None)
os_ramdisk_id = (ec2utils.get_os_image(context, ramdisk_id).id
if ramdisk_id else None)
os_image = ec2utils.get_os_image(context, image_id) os_image = ec2utils.get_os_image(context, image_id)
if _cloud_get_image_state(os_image) != 'available': if _cloud_get_image_state(os_image) != 'available':
@ -884,7 +884,7 @@ def _parse_image_parameters(context, image_id, kernel_id, ramdisk_id):
msg = _('Image must be available') msg = _('Image must be available')
raise exception.InvalidAMIIDUnavailable(message=msg) raise exception.InvalidAMIIDUnavailable(message=msg)
return os_image, os_kernel_id, os_ramdisk_id return os_image
def _parse_block_device_mapping(context, block_device_mapping): def _parse_block_device_mapping(context, block_device_mapping):

View File

@ -55,8 +55,7 @@ class InstanceTestCase(base.ApiTestCase):
describe_instances): describe_instances):
"""Run instance with various network interface settings.""" """Run instance with various network interface settings."""
self.set_mock_db_items( self.set_mock_db_items(
fakes.DB_SUBNET_1, fakes.DB_NETWORK_INTERFACE_1, fakes.DB_IMAGE_1, fakes.DB_SUBNET_1, fakes.DB_NETWORK_INTERFACE_1, fakes.DB_IMAGE_1)
fakes.DB_IMAGE_ARI_1, fakes.DB_IMAGE_AKI_1)
self.glance.images.get.return_value = fakes.OSImage(fakes.OS_IMAGE_1) self.glance.images.get.return_value = fakes.OSImage(fakes.OS_IMAGE_1)
self.network_interface_api.create_network_interface.return_value = ( self.network_interface_api.create_network_interface.return_value = (
{'networkInterface': fakes.EC2_NETWORK_INTERFACE_1}) {'networkInterface': fakes.EC2_NETWORK_INTERFACE_1})
@ -114,7 +113,6 @@ class InstanceTestCase(base.ApiTestCase):
fakes.EC2_INSTANCE_1['privateDnsName'], fakes.EC2_INSTANCE_1['privateDnsName'],
fakes.ID_OS_IMAGE_1, self.fake_flavor, fakes.ID_OS_IMAGE_1, self.fake_flavor,
min_count=1, max_count=1, min_count=1, max_count=1,
kernel_id=None, ramdisk_id=None,
availability_zone=None, availability_zone=None,
block_device_mapping_v2=[], block_device_mapping_v2=[],
security_groups=None, security_groups=None,
@ -240,7 +238,6 @@ class InstanceTestCase(base.ApiTestCase):
'%s-%s' % (fakes.ID_EC2_RESERVATION_1, launch_index), '%s-%s' % (fakes.ID_EC2_RESERVATION_1, launch_index),
fakes.ID_OS_IMAGE_1, self.fake_flavor, fakes.ID_OS_IMAGE_1, self.fake_flavor,
min_count=1, max_count=1, min_count=1, max_count=1,
kernel_id=None, ramdisk_id=None,
availability_zone=None, availability_zone=None,
block_device_mapping_v2=[], block_device_mapping_v2=[],
security_groups=None, security_groups=None,
@ -270,13 +267,10 @@ class InstanceTestCase(base.ApiTestCase):
def test_run_instances_other_parameters(self, get_ec2_classic_os_network, def test_run_instances_other_parameters(self, get_ec2_classic_os_network,
describe_instances, describe_instances,
parse_block_device_mapping): parse_block_device_mapping):
self.set_mock_db_items( self.set_mock_db_items(fakes.DB_IMAGE_1)
fakes.DB_IMAGE_1, fakes.DB_IMAGE_AKI_1, fakes.DB_IMAGE_ARI_1)
self.glance.images.get.side_effect = ( self.glance.images.get.side_effect = (
tools.get_by_1st_arg_getter({ tools.get_by_1st_arg_getter({
fakes.ID_OS_IMAGE_1: fakes.OSImage(fakes.OS_IMAGE_1), fakes.ID_OS_IMAGE_1: fakes.OSImage(fakes.OS_IMAGE_1)}))
fakes.ID_OS_IMAGE_AKI_1: fakes.OSImage(fakes.OS_IMAGE_AKI_1),
fakes.ID_OS_IMAGE_ARI_1: fakes.OSImage(fakes.OS_IMAGE_ARI_1)}))
get_ec2_classic_os_network.return_value = {'id': fakes.random_os_id()} get_ec2_classic_os_network.return_value = {'id': fakes.random_os_id()}
user_data = base64.b64decode(fakes.USER_DATA_INSTANCE_2) user_data = base64.b64decode(fakes.USER_DATA_INSTANCE_2)
parse_block_device_mapping.return_value = [] parse_block_device_mapping.return_value = []
@ -291,8 +285,6 @@ class InstanceTestCase(base.ApiTestCase):
{'ImageId': fakes.ID_EC2_IMAGE_1, {'ImageId': fakes.ID_EC2_IMAGE_1,
'InstanceType': 'fake_flavor', 'InstanceType': 'fake_flavor',
'MinCount': '1', 'MaxCount': '1', 'MinCount': '1', 'MaxCount': '1',
'KernelId': fakes.ID_EC2_IMAGE_AKI_1,
'RamdiskId': fakes.ID_EC2_IMAGE_ARI_1,
'SecurityGroup.1': 'default', 'SecurityGroup.1': 'default',
'Placement.AvailabilityZone': 'fake_zone', 'Placement.AvailabilityZone': 'fake_zone',
'ClientToken': 'fake_client_token', 'ClientToken': 'fake_client_token',
@ -304,8 +296,7 @@ class InstanceTestCase(base.ApiTestCase):
self.nova.servers.create.assert_called_once_with( self.nova.servers.create.assert_called_once_with(
mock.ANY, mock.ANY, mock.ANY, min_count=1, max_count=1, mock.ANY, mock.ANY, mock.ANY, min_count=1, max_count=1,
userdata=user_data, kernel_id=fakes.ID_OS_IMAGE_AKI_1, userdata=user_data, key_name=None,
ramdisk_id=fakes.ID_OS_IMAGE_ARI_1, key_name=None,
block_device_mapping_v2=[], block_device_mapping_v2=[],
availability_zone='fake_zone', security_groups=['default'], availability_zone='fake_zone', security_groups=['default'],
**extra_kwargs) **extra_kwargs)
@ -540,7 +531,6 @@ class InstanceTestCase(base.ApiTestCase):
fakes.EC2_INSTANCE_DEFAULT['privateDnsName'], fakes.EC2_INSTANCE_DEFAULT['privateDnsName'],
fakes.ID_OS_IMAGE_2, self.fake_flavor, fakes.ID_OS_IMAGE_2, self.fake_flavor,
min_count=1, max_count=1, min_count=1, max_count=1,
kernel_id=None, ramdisk_id=None,
availability_zone=None, availability_zone=None,
block_device_mapping_v2=[], block_device_mapping_v2=[],
security_groups=None, security_groups=None,
@ -1428,27 +1418,21 @@ class InstancePrivateTestCase(base.BaseTestCase):
# NOTE(ft): check normal flow # NOTE(ft): check normal flow
os_image = fakes.OSImage(fakes.OS_IMAGE_1) os_image = fakes.OSImage(fakes.OS_IMAGE_1)
get_os_image.side_effect = [ get_os_image.side_effect = [os_image]
fakes.OSImage(fakes.OS_IMAGE_AKI_1),
fakes.OSImage(fakes.OS_IMAGE_ARI_1),
os_image]
self.assertEqual( self.assertEqual(
(os_image, fakes.ID_OS_IMAGE_AKI_1, fakes.ID_OS_IMAGE_ARI_1), (os_image),
instance_api._parse_image_parameters( instance_api._parse_image_parameters(
fake_context, fakes.ID_EC2_IMAGE_1, fake_context, fakes.ID_EC2_IMAGE_1))
fakes.ID_EC2_IMAGE_AKI_1, fakes.ID_EC2_IMAGE_ARI_1))
get_os_image.assert_has_calls( get_os_image.assert_has_calls(
[mock.call(fake_context, fakes.ID_EC2_IMAGE_AKI_1), [mock.call(fake_context, fakes.ID_EC2_IMAGE_1)])
mock.call(fake_context, fakes.ID_EC2_IMAGE_ARI_1),
mock.call(fake_context, fakes.ID_EC2_IMAGE_1)])
get_os_image.side_effect = None get_os_image.side_effect = None
get_os_image.return_value = os_image get_os_image.return_value = os_image
get_os_image.reset_mock() get_os_image.reset_mock()
self.assertEqual( self.assertEqual(
(os_image, None, None), (os_image),
instance_api._parse_image_parameters( instance_api._parse_image_parameters(
fake_context, fakes.ID_EC2_IMAGE_1, None, None)) fake_context, fakes.ID_EC2_IMAGE_1))
get_os_image.assert_called_once_with( get_os_image.assert_called_once_with(
fake_context, fakes.ID_EC2_IMAGE_1) fake_context, fakes.ID_EC2_IMAGE_1)
@ -1461,7 +1445,7 @@ class InstancePrivateTestCase(base.BaseTestCase):
self.assertRaises( self.assertRaises(
exception.InvalidAMIIDUnavailable, exception.InvalidAMIIDUnavailable,
instance_api._parse_image_parameters, instance_api._parse_image_parameters,
fake_context, fakes.random_ec2_id('ami'), None, None) fake_context, fakes.random_ec2_id('ami'))
os_image.status = 'active' os_image.status = 'active'
os_image.image_state = 'decrypting' os_image.image_state = 'decrypting'
@ -1469,7 +1453,7 @@ class InstancePrivateTestCase(base.BaseTestCase):
self.assertRaises( self.assertRaises(
exception.InvalidAMIIDUnavailable, exception.InvalidAMIIDUnavailable,
instance_api._parse_image_parameters, instance_api._parse_image_parameters,
fake_context, fakes.random_ec2_id('ami'), None, None) fake_context, fakes.random_ec2_id('ami'))
@mock.patch('ec2api.db.api.IMPL') @mock.patch('ec2api.db.api.IMPL')
def test_parse_block_device_mapping(self, db_api): def test_parse_block_device_mapping(self, db_api):