Fix ec2 wildcard tag filters (#4189)
This commit is contained in:
parent
2f5a702f1f
commit
27c9b31d3a
@ -362,8 +362,10 @@ def get_obj_tag_names(obj):
|
|||||||
return tags
|
return tags
|
||||||
|
|
||||||
|
|
||||||
def get_obj_tag_values(obj):
|
def get_obj_tag_values(obj, key=None):
|
||||||
tags = set((tag["value"] for tag in obj.get_tags()))
|
tags = set(
|
||||||
|
(tag["value"] for tag in obj.get_tags() if tag["key"] == key or key is None)
|
||||||
|
)
|
||||||
return tags
|
return tags
|
||||||
|
|
||||||
|
|
||||||
@ -381,7 +383,8 @@ def tag_filter_matches(obj, filter_name, filter_values):
|
|||||||
elif filter_name == "tag-value":
|
elif filter_name == "tag-value":
|
||||||
tag_values = get_obj_tag_values(obj)
|
tag_values = get_obj_tag_values(obj)
|
||||||
elif filter_name.startswith("tag:"):
|
elif filter_name.startswith("tag:"):
|
||||||
tag_values = get_obj_tag_values(obj)
|
key = filter_name[4:]
|
||||||
|
tag_values = get_obj_tag_values(obj, key=key)
|
||||||
else:
|
else:
|
||||||
tag_values = [get_obj_tag(obj, filter_name) or ""]
|
tag_values = [get_obj_tag(obj, filter_name) or ""]
|
||||||
|
|
||||||
|
@ -1724,3 +1724,32 @@ def test_warn_on_invalid_ami():
|
|||||||
match=r"Could not find AMI with image-id:invalid-ami.+",
|
match=r"Could not find AMI with image-id:invalid-ami.+",
|
||||||
):
|
):
|
||||||
ec2.create_instances(ImageId="invalid-ami", MinCount=1, MaxCount=1)
|
ec2.create_instances(ImageId="invalid-ami", MinCount=1, MaxCount=1)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
def test_filter_wildcard_in_specified_tag_only():
|
||||||
|
ec2_client = boto3.client("ec2", region_name="us-west-1")
|
||||||
|
|
||||||
|
tags_name = [{"Key": "Name", "Value": "alice in wonderland"}]
|
||||||
|
ec2_client.run_instances(
|
||||||
|
ImageId=EXAMPLE_AMI_ID,
|
||||||
|
MaxCount=1,
|
||||||
|
MinCount=1,
|
||||||
|
TagSpecifications=[{"ResourceType": "instance", "Tags": tags_name}],
|
||||||
|
)
|
||||||
|
|
||||||
|
tags_owner = [{"Key": "Owner", "Value": "alice in wonderland"}]
|
||||||
|
ec2_client.run_instances(
|
||||||
|
ImageId=EXAMPLE_AMI_ID,
|
||||||
|
MaxCount=1,
|
||||||
|
MinCount=1,
|
||||||
|
TagSpecifications=[{"ResourceType": "instance", "Tags": tags_owner}],
|
||||||
|
)
|
||||||
|
|
||||||
|
# should only match the Name tag
|
||||||
|
response = ec2_client.describe_instances(
|
||||||
|
Filters=[{"Name": "tag:Name", "Values": ["*alice*"]}]
|
||||||
|
)
|
||||||
|
instances = [i for r in response["Reservations"] for i in r["Instances"]]
|
||||||
|
instances.should.have.length_of(1)
|
||||||
|
instances[0]["Tags"][0].should.have.key("Key").should.equal("Name")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user