in pkg/fake/ec2api.go [340:383]
func filterInstances(instances []ec2types.Instance, filters []ec2types.Filter) []ec2types.Instance {
var ret []ec2types.Instance
for _, instance := range instances {
passesFilter := true
OUTER:
for _, filter := range filters {
switch {
case aws.ToString(filter.Name) == "instance-state-name":
if !sets.New(filter.Values...).Has(string(instance.State.Name)) {
passesFilter = false
break OUTER
}
case aws.ToString(filter.Name) == "tag-key":
values := sets.New(filter.Values...)
if _, ok := lo.Find(instance.Tags, func(t ec2types.Tag) bool {
return values.Has(aws.ToString(t.Key))
}); !ok {
passesFilter = false
break OUTER
}
case strings.HasPrefix(aws.ToString(filter.Name), "tag:"):
k := strings.TrimPrefix(aws.ToString(filter.Name), "tag:")
tag, ok := lo.Find(instance.Tags, func(t ec2types.Tag) bool {
return aws.ToString(t.Key) == k
})
if !ok {
passesFilter = false
break OUTER
}
switch {
case lo.Contains(filter.Values, "*"):
case lo.Contains(filter.Values, aws.ToString(tag.Value)):
default:
passesFilter = false
break OUTER
}
}
}
if passesFilter {
ret = append(ret, instance)
}
}
return ret
}