Skip to content

Commit

Permalink
Added ECS discovery filters parsing from inventory config.
Browse files Browse the repository at this point in the history
Signed-off-by: Vasil Sirakov <sirakov97@gmail.com>
  • Loading branch information
VasilSirakov committed Sep 25, 2024
1 parent f983f66 commit 78a0956
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 17 deletions.
21 changes: 18 additions & 3 deletions providers/aws/connection/connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package connection
import (
"context"
"errors"
"strconv"
"strings"

"github.com/aws/aws-sdk-go-v2/aws"
Expand Down Expand Up @@ -129,7 +130,6 @@ func NewAwsConnection(id uint32, asset *inventory.Asset, conf *inventory.Config)
return c, nil
}

// TODO: @vasil - unit test.
func parseOptsToFilters(opts map[string]string) DiscoveryFilters {
d := DiscoveryFilters{
Ec2DiscoveryFilters: Ec2DiscoveryFilters{Tags: map[string]string{}, ExcludeTags: map[string]string{}},
Expand All @@ -147,16 +147,31 @@ func parseOptsToFilters(opts map[string]string) DiscoveryFilters {
d.Ec2DiscoveryFilters.Regions = append(d.Ec2DiscoveryFilters.Regions, v)
case strings.HasPrefix(k, "exclude:ec2:region"):
d.Ec2DiscoveryFilters.ExcludeRegions = append(d.Ec2DiscoveryFilters.ExcludeRegions, v)
case k == "all:region", k == "region":
case strings.HasPrefix(k, "all:region:"), strings.HasPrefix(k, "region:"):
d.GeneralDiscoveryFilters.Regions = append(d.GeneralDiscoveryFilters.Regions, v)
case strings.HasPrefix(k, "instance-id:"):
d.Ec2DiscoveryFilters.InstanceIds = append(d.Ec2DiscoveryFilters.InstanceIds, v)
case strings.HasPrefix(k, "exclude:instance-id:"):
d.Ec2DiscoveryFilters.ExcludeInstanceIds = append(d.Ec2DiscoveryFilters.ExcludeInstanceIds, v)
case strings.HasPrefix(k, "all:tag:"):
d.GeneralDiscoveryFilters.Tags[strings.TrimPrefix(k, "all:tag:")] = v
case k == "ecr:tag":
case strings.HasPrefix(k, "ecr:tag:"):
d.EcrDiscoveryFilters.Tags = append(d.EcrDiscoveryFilters.Tags, v)
case k == "ecs:only-running-containers":
parsed, err := strconv.ParseBool(v)
if err == nil {
d.EcsDiscoveryFilters.OnlyRunningContainers = parsed
}
case k == "ecs:discover-instances":
parsed, err := strconv.ParseBool(v)
if err == nil {
d.EcsDiscoveryFilters.DiscoverInstances = parsed
}
case k == "ecs:discover-images":
parsed, err := strconv.ParseBool(v)
if err == nil {
d.EcsDiscoveryFilters.DiscoverImages = parsed
}
}
}
return d
Expand Down
37 changes: 32 additions & 5 deletions providers/aws/connection/connection_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func compareFilters(t *testing.T, expected, actual DiscoveryFilters) {

require.Equal(t, expected.EcsDiscoveryFilters, actual.EcsDiscoveryFilters)

require.Equal(t, expected.EcrDiscoveryFilters.Tags, actual.EcrDiscoveryFilters.Tags)
require.ElementsMatch(t, expected.EcrDiscoveryFilters.Tags, actual.EcrDiscoveryFilters.Tags)

require.ElementsMatch(t, expected.GeneralDiscoveryFilters.Regions, actual.GeneralDiscoveryFilters.Regions)
require.Equal(t, expected.GeneralDiscoveryFilters.Tags, actual.GeneralDiscoveryFilters.Tags)
Expand All @@ -50,7 +50,20 @@ func TestParseOptsToFilters(t *testing.T) {
// Ec2DiscoveryFilters.ExcludeInstanceIds
"exclude:instance-id:iid-1": "iid-1",
"exclude:instance-id:iid-2": "iid-2",
// TODO: @vasil - include others?
// GeneralDiscoveryFilters.Regions
"all:region:us-east-1": "us-east-1",
"all:region:us-west-1": "us-west-1",
"region:eu-west-1": "eu-west-1",
// GeneralDiscoveryFilters.Tags
"all:tag:key1": "val1",
"all:tag:key2": "val2",
// EcrDiscoveryFilters.Tags
"ecr:tag:tag1": "tag1",
"ecr:tag:tag2": "tag2",
// EcsDiscoveryFilters
"ecs:only-running-containers": "true",
"ecs:discover-images": "T",
"ecs:discover-instances": "false",
}
expected := DiscoveryFilters{
Ec2DiscoveryFilters: Ec2DiscoveryFilters{
Expand All @@ -75,9 +88,23 @@ func TestParseOptsToFilters(t *testing.T) {
"key2": "val2",
},
},
EcsDiscoveryFilters: EcsDiscoveryFilters{},
EcrDiscoveryFilters: EcrDiscoveryFilters{Tags: []string{}},
GeneralDiscoveryFilters: GeneralResourceDiscoveryFilters{Tags: map[string]string{}},
EcsDiscoveryFilters: EcsDiscoveryFilters{
OnlyRunningContainers: true,
DiscoverImages: true,
DiscoverInstances: false,
},
EcrDiscoveryFilters: EcrDiscoveryFilters{Tags: []string{
"tag1", "tag2",
}},
GeneralDiscoveryFilters: GeneralResourceDiscoveryFilters{
Regions: []string{
"us-east-1", "us-west-1", "eu-west-1",
},
Tags: map[string]string{
"key1": "val1",
"key2": "val2",
},
},
}

actual := parseOptsToFilters(opts)
Expand Down
9 changes: 0 additions & 9 deletions providers/aws/resources/discovery.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,15 +96,6 @@ var AllAPIResources = []string{
DiscoverySagemakerNotebookInstances,
}

func contains(sl []string, s string) bool {
for i := range sl {
if sl[i] == s {
return true
}
}
return false
}

func containsInterfaceSlice(sl []interface{}, s string) bool {
for i := range sl {
if sl[i].(string) == s {
Expand Down

0 comments on commit 78a0956

Please sign in to comment.