func filterInstances()

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
}