EC2: fix launch template names not being reusable after delete (#5726)
This commit is contained in:
parent
42597decb5
commit
08c65a9a3c
@ -12,6 +12,7 @@ from ..exceptions import (
|
|||||||
InvalidLaunchTemplateNameAlreadyExistsError,
|
InvalidLaunchTemplateNameAlreadyExistsError,
|
||||||
InvalidLaunchTemplateNameNotFoundError,
|
InvalidLaunchTemplateNameNotFoundError,
|
||||||
InvalidLaunchTemplateNameNotFoundWithNameError,
|
InvalidLaunchTemplateNameNotFoundWithNameError,
|
||||||
|
MissingParameterError,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -189,8 +190,14 @@ class LaunchTemplateBackend:
|
|||||||
|
|
||||||
def delete_launch_template(self, name, tid):
|
def delete_launch_template(self, name, tid):
|
||||||
if name:
|
if name:
|
||||||
tid = self.launch_template_name_to_ids[name]
|
tid = self.launch_template_name_to_ids.get(name)
|
||||||
return self.launch_templates.pop(tid)
|
if tid is None:
|
||||||
|
raise MissingParameterError("launch template ID or launch template name")
|
||||||
|
if tid not in self.launch_templates:
|
||||||
|
raise InvalidLaunchTemplateNameNotFoundError()
|
||||||
|
template = self.launch_templates.pop(tid)
|
||||||
|
self.launch_template_name_to_ids.pop(template.name, None)
|
||||||
|
return template
|
||||||
|
|
||||||
def describe_launch_templates(
|
def describe_launch_templates(
|
||||||
self, template_names=None, template_ids=None, filters=None
|
self, template_names=None, template_ids=None, filters=None
|
||||||
|
@ -938,6 +938,10 @@ def test_launch_template_delete():
|
|||||||
|
|
||||||
cf.delete_stack(StackName=stack_name)
|
cf.delete_stack(StackName=stack_name)
|
||||||
|
|
||||||
ec2.describe_launch_templates(LaunchTemplateNames=[launch_template_name])[
|
with pytest.raises(ClientError) as exc:
|
||||||
"LaunchTemplates"
|
ec2.describe_launch_templates(LaunchTemplateNames=[launch_template_name])
|
||||||
].should.have.length_of(0)
|
err = exc.value.response["Error"]
|
||||||
|
err.should.have.key("Code").equals("InvalidLaunchTemplateName.NotFoundException")
|
||||||
|
err.should.have.key("Message").equals(
|
||||||
|
"At least one of the launch templates specified in the request does not exist."
|
||||||
|
)
|
||||||
|
@ -482,9 +482,21 @@ def test_delete_launch_template__by_name():
|
|||||||
|
|
||||||
cli.delete_launch_template(LaunchTemplateName=template_name)
|
cli.delete_launch_template(LaunchTemplateName=template_name)
|
||||||
|
|
||||||
|
with pytest.raises(ClientError) as exc:
|
||||||
cli.describe_launch_templates(LaunchTemplateNames=[template_name])[
|
cli.describe_launch_templates(LaunchTemplateNames=[template_name])[
|
||||||
"LaunchTemplates"
|
"LaunchTemplates"
|
||||||
].should.have.length_of(0)
|
]
|
||||||
|
err = exc.value.response["Error"]
|
||||||
|
err.should.have.key("Code").equals("InvalidLaunchTemplateName.NotFoundException")
|
||||||
|
err.should.have.key("Message").equals(
|
||||||
|
"At least one of the launch templates specified in the request does not exist."
|
||||||
|
)
|
||||||
|
|
||||||
|
# Ensure deleted template name can be reused
|
||||||
|
cli.create_launch_template(
|
||||||
|
LaunchTemplateName=template_name,
|
||||||
|
LaunchTemplateData={"ImageId": "ami-abc123"},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@mock_ec2
|
@mock_ec2
|
||||||
@ -492,6 +504,15 @@ def test_delete_launch_template__by_id():
|
|||||||
cli = boto3.client("ec2", region_name="us-east-1")
|
cli = boto3.client("ec2", region_name="us-east-1")
|
||||||
|
|
||||||
template_name = str(uuid4())
|
template_name = str(uuid4())
|
||||||
|
|
||||||
|
with pytest.raises(ClientError) as exc:
|
||||||
|
cli.delete_launch_template()
|
||||||
|
err = exc.value.response["Error"]
|
||||||
|
err.should.have.key("Code").equals("MissingParameter")
|
||||||
|
err.should.have.key("Message").equals(
|
||||||
|
"The request must contain the parameter launch template ID or launch template name"
|
||||||
|
)
|
||||||
|
|
||||||
template_id = cli.create_launch_template(
|
template_id = cli.create_launch_template(
|
||||||
LaunchTemplateName=template_name, LaunchTemplateData={"ImageId": "ami-abc123"}
|
LaunchTemplateName=template_name, LaunchTemplateData={"ImageId": "ami-abc123"}
|
||||||
)["LaunchTemplate"]["LaunchTemplateId"]
|
)["LaunchTemplate"]["LaunchTemplateId"]
|
||||||
@ -502,9 +523,21 @@ def test_delete_launch_template__by_id():
|
|||||||
|
|
||||||
cli.delete_launch_template(LaunchTemplateId=template_id)
|
cli.delete_launch_template(LaunchTemplateId=template_id)
|
||||||
|
|
||||||
|
with pytest.raises(ClientError) as exc:
|
||||||
cli.describe_launch_templates(LaunchTemplateNames=[template_name])[
|
cli.describe_launch_templates(LaunchTemplateNames=[template_name])[
|
||||||
"LaunchTemplates"
|
"LaunchTemplates"
|
||||||
].should.have.length_of(0)
|
]
|
||||||
|
err = exc.value.response["Error"]
|
||||||
|
err.should.have.key("Code").equals("InvalidLaunchTemplateName.NotFoundException")
|
||||||
|
err.should.have.key("Message").equals(
|
||||||
|
"At least one of the launch templates specified in the request does not exist."
|
||||||
|
)
|
||||||
|
|
||||||
|
# Ensure deleted template name can be reused
|
||||||
|
cli.create_launch_template(
|
||||||
|
LaunchTemplateName=template_name,
|
||||||
|
LaunchTemplateData={"ImageId": "ami-abc123"},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def retrieve_all_templates(client, filters=[]): # pylint: disable=W0102
|
def retrieve_all_templates(client, filters=[]): # pylint: disable=W0102
|
||||||
|
Loading…
x
Reference in New Issue
Block a user