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:
parent
aa9c1780de
commit
a27cf4120e
@ -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):
|
||||||
|
@ -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):
|
||||||
|
Loading…
Reference in New Issue
Block a user