EC2: fix launch template names not being reusable after delete (#5726)

This commit is contained in:
Viren Nadkarni 2022-12-02 18:47:06 +05:30 committed by GitHub
parent 42597decb5
commit 08c65a9a3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 11 deletions

View File

@ -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

View File

@ -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."
)

View File

@ -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