From be6e02e5fae996d5a673f8047716e006c9869f0c Mon Sep 17 00:00:00 2001 From: Brian Pandola Date: Wed, 27 Jul 2022 00:19:47 -0700 Subject: [PATCH] Add `key-name` filter for `ec2:DescribeInstances` (#5338) --- moto/ec2/utils.py | 1 + tests/test_ec2/test_instances.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/moto/ec2/utils.py b/moto/ec2/utils.py index 08ddcddf2..9511a7cfa 100644 --- a/moto/ec2/utils.py +++ b/moto/ec2/utils.py @@ -413,6 +413,7 @@ filter_dict_attribute_mapping = { "owner-id": "owner_id", "subnet-id": "subnet_id", "dns-name": "public_dns", + "key-name": "key_name", } diff --git a/tests/test_ec2/test_instances.py b/tests/test_ec2/test_instances.py index 750f91f73..0ec008aac 100644 --- a/tests/test_ec2/test_instances.py +++ b/tests/test_ec2/test_instances.py @@ -1565,6 +1565,25 @@ def test_run_instance_with_keypair(): instance.key_name.should.equal("keypair_name") +@mock_ec2 +def test_describe_instances_with_keypair_filter(): + ec2 = boto3.resource("ec2", region_name="us-east-1") + for i in range(3): + key_name = "kp-single" if i % 2 else "kp-multiple" + ec2.create_instances( + ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1, KeyName=key_name + ) + test_data = [ + (["kp-single"], 1), + (["kp-multiple"], 2), + (["kp-single", "kp-multiple"], 3), + ] + for filter_values, expected_instance_count in test_data: + _filter = [{"Name": "key-name", "Values": filter_values}] + instances_found = list(ec2.instances.filter(Filters=_filter)) + instances_found.should.have.length_of(expected_instance_count) + + @mock_ec2 @mock.patch( "moto.ec2.models.instances.settings.ENABLE_KEYPAIR_VALIDATION",