From d4a059e370ee07c255050ea4bf2ae7e02a742a3f Mon Sep 17 00:00:00 2001 From: Vasil Sirakov Date: Wed, 25 Sep 2024 16:24:15 +0300 Subject: [PATCH] Use comma-separated values instead of individual keys in the filters map and implement parsing of CLI flags to opts matching them to known filter prefixes. Signed-off-by: Vasil Sirakov --- providers/aws/connection/connection.go | 20 +++++++++--------- providers/aws/provider/provider.go | 28 ++++++++++++++++++-------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/providers/aws/connection/connection.go b/providers/aws/connection/connection.go index 17c3c8dba..03b8fc21a 100644 --- a/providers/aws/connection/connection.go +++ b/providers/aws/connection/connection.go @@ -143,16 +143,16 @@ func parseOptsToFilters(opts map[string]string) DiscoveryFilters { d.Ec2DiscoveryFilters.Tags[strings.TrimPrefix(k, "ec2:tag:")] = v case strings.HasPrefix(k, "exclude:ec2:tag:"): d.Ec2DiscoveryFilters.ExcludeTags[strings.TrimPrefix(k, "exclude:ec2:tag:")] = v - case strings.HasPrefix(k, "ec2:region:"): - d.Ec2DiscoveryFilters.Regions = append(d.Ec2DiscoveryFilters.Regions, v) - case strings.HasPrefix(k, "exclude:ec2:region"): - d.Ec2DiscoveryFilters.ExcludeRegions = append(d.Ec2DiscoveryFilters.ExcludeRegions, v) - case strings.HasPrefix(k, "all:region:"), strings.HasPrefix(k, "region:"): - d.GeneralDiscoveryFilters.Regions = append(d.GeneralDiscoveryFilters.Regions, v) - case strings.HasPrefix(k, "ec2:instance-id:"): - d.Ec2DiscoveryFilters.InstanceIds = append(d.Ec2DiscoveryFilters.InstanceIds, v) - case strings.HasPrefix(k, "exclude:ec2:instance-id:"): - d.Ec2DiscoveryFilters.ExcludeInstanceIds = append(d.Ec2DiscoveryFilters.ExcludeInstanceIds, v) + case strings.HasPrefix(k, "ec2:regions"): + d.Ec2DiscoveryFilters.Regions = append(d.Ec2DiscoveryFilters.Regions, strings.Split(v, ",")...) + case strings.HasPrefix(k, "exclude:ec2:regions"): + d.Ec2DiscoveryFilters.ExcludeRegions = append(d.Ec2DiscoveryFilters.ExcludeRegions, strings.Split(v, ",")...) + case strings.HasPrefix(k, "all:regions"), strings.HasPrefix(k, "regions"): + d.GeneralDiscoveryFilters.Regions = append(d.GeneralDiscoveryFilters.Regions, strings.Split(v, ",")...) + case strings.HasPrefix(k, "ec2:instance-ids"): + d.Ec2DiscoveryFilters.InstanceIds = append(d.Ec2DiscoveryFilters.InstanceIds, strings.Split(v, ",")...) + case strings.HasPrefix(k, "exclude:ec2:instance-ids"): + d.Ec2DiscoveryFilters.ExcludeInstanceIds = append(d.Ec2DiscoveryFilters.ExcludeInstanceIds, strings.Split(v, ",")...) case strings.HasPrefix(k, "all:tag:"): d.GeneralDiscoveryFilters.Tags[strings.TrimPrefix(k, "all:tag:")] = v case strings.HasPrefix(k, "ecr:tag:"): diff --git a/providers/aws/provider/provider.go b/providers/aws/provider/provider.go index 1017eae4b..4aea2bd34 100644 --- a/providers/aws/provider/provider.go +++ b/providers/aws/provider/provider.go @@ -83,15 +83,27 @@ func parseFlagsToFiltersOpts(m map[string]*llx.Primitive) map[string]string { o := make(map[string]string, 0) if x, ok := m["filters"]; ok && len(x.Map) != 0 { + knownTagPrefixes := []string{ + "ec2:tag:", + "exclude:ec2:tag:", + "ec2:regions", + "exclude:ec2:regions", + "all:regions", + "regions", + "ec2:instance-ids", + "exclude:ec2:instance-ids", + "all:tag:", + "ecr:tag:", + "ecs:only-running-containers", + "ecs:discover-instances", + "ecs:discover-images", + } for k, v := range x.Map { - if strings.Contains(k, "tag:") { - o[k] = string(v.Value) - } - if k == "instance-id" { - o[k] = string(v.Value) - } - if strings.Contains(k, "region") { - o[k] = string(v.Value) + for _, prefix := range knownTagPrefixes { + if strings.HasPrefix(k, prefix) { + o[k] = string(v.Value) + break + } } } }