Improve autoscaling:CreateLaunchConfiguration request validation (#3687)
AWS requires certain parameters to be mutually inclusive. Moto wasn't doing anything with the InstanceId parameter, which is now made clear with a TODO.
This commit is contained in:
parent
ae2865d559
commit
e8f1522d1a
@ -616,7 +616,19 @@ class AutoScalingBackend(BaseBackend):
|
|||||||
ebs_optimized,
|
ebs_optimized,
|
||||||
associate_public_ip_address,
|
associate_public_ip_address,
|
||||||
block_device_mappings,
|
block_device_mappings,
|
||||||
|
instance_id=None,
|
||||||
):
|
):
|
||||||
|
valid_requests = [
|
||||||
|
instance_id is not None,
|
||||||
|
image_id is not None and instance_type is not None,
|
||||||
|
]
|
||||||
|
if not any(valid_requests):
|
||||||
|
raise ValidationError(
|
||||||
|
"Valid requests must contain either the InstanceID parameter or both the ImageId and InstanceType parameters."
|
||||||
|
)
|
||||||
|
if instance_id is not None:
|
||||||
|
# TODO: https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-lc-with-instanceID.html
|
||||||
|
pass
|
||||||
launch_configuration = FakeLaunchConfiguration(
|
launch_configuration = FakeLaunchConfiguration(
|
||||||
name=name,
|
name=name,
|
||||||
image_id=image_id,
|
image_id=image_id,
|
||||||
|
@ -36,6 +36,7 @@ class AutoScalingResponse(BaseResponse):
|
|||||||
ebs_optimized=self._get_param("EbsOptimized"),
|
ebs_optimized=self._get_param("EbsOptimized"),
|
||||||
associate_public_ip_address=self._get_param("AssociatePublicIpAddress"),
|
associate_public_ip_address=self._get_param("AssociatePublicIpAddress"),
|
||||||
block_device_mappings=self._get_list_prefix("BlockDeviceMappings.member"),
|
block_device_mappings=self._get_list_prefix("BlockDeviceMappings.member"),
|
||||||
|
instance_id=self._get_param("InstanceId"),
|
||||||
)
|
)
|
||||||
template = self.response_template(CREATE_LAUNCH_CONFIGURATION_TEMPLATE)
|
template = self.response_template(CREATE_LAUNCH_CONFIGURATION_TEMPLATE)
|
||||||
return template.render()
|
return template.render()
|
||||||
|
@ -3,7 +3,9 @@ import boto
|
|||||||
import boto3
|
import boto3
|
||||||
from boto.ec2.autoscale.launchconfig import LaunchConfiguration
|
from boto.ec2.autoscale.launchconfig import LaunchConfiguration
|
||||||
from boto.ec2.blockdevicemapping import BlockDeviceType, BlockDeviceMapping
|
from boto.ec2.blockdevicemapping import BlockDeviceType, BlockDeviceMapping
|
||||||
|
from botocore.exceptions import ClientError
|
||||||
|
|
||||||
|
import pytest
|
||||||
import sure # noqa
|
import sure # noqa
|
||||||
|
|
||||||
from moto import mock_autoscaling_deprecated
|
from moto import mock_autoscaling_deprecated
|
||||||
@ -239,3 +241,31 @@ def test_launch_configuration_delete():
|
|||||||
|
|
||||||
conn.delete_launch_configuration("tester")
|
conn.delete_launch_configuration("tester")
|
||||||
conn.get_all_launch_configurations().should.have.length_of(0)
|
conn.get_all_launch_configurations().should.have.length_of(0)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"request_params",
|
||||||
|
[
|
||||||
|
pytest.param(
|
||||||
|
{"LaunchConfigurationName": "test"},
|
||||||
|
id="No InstanceId, ImageId, or InstanceType parameters",
|
||||||
|
),
|
||||||
|
pytest.param(
|
||||||
|
{"LaunchConfigurationName": "test", "ImageId": "ami-test"},
|
||||||
|
id="ImageId without InstanceType parameter",
|
||||||
|
),
|
||||||
|
pytest.param(
|
||||||
|
{"LaunchConfigurationName": "test", "InstanceType": "t2.medium"},
|
||||||
|
id="InstanceType without ImageId parameter",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
@mock_autoscaling
|
||||||
|
def test_invalid_launch_configuration_request_raises_error(request_params):
|
||||||
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
||||||
|
with pytest.raises(ClientError) as ex:
|
||||||
|
client.create_launch_configuration(**request_params)
|
||||||
|
ex.value.response["Error"]["Code"].should.equal("ValidationError")
|
||||||
|
ex.value.response["Error"]["Message"].should.match(
|
||||||
|
r"^Valid requests must contain.*"
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user