Skip to content

Commit

Permalink
Refactor provider injection
Browse files Browse the repository at this point in the history
  • Loading branch information
romulets committed Mar 22, 2024
1 parent fc9381c commit 517c3df
Show file tree
Hide file tree
Showing 11 changed files with 37 additions and 55 deletions.
18 changes: 13 additions & 5 deletions internal/inventory/awsfetcher/awsfetchers.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,22 @@ import (

"github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud"
"github.com/elastic/cloudbeat/internal/inventory"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib/ec2"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib/iam"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib/s3"
)

func New(logger *logp.Logger, identity *cloud.Identity, cfg aws.Config) []inventory.AssetFetcher {
iamProvider := iam.NewIAMProvider(logger, cfg, &awslib.MultiRegionClientFactory[iam.AccessAnalyzerClient]{})
ec2Provider := ec2.NewEC2Provider(logger, identity.Account, cfg, &awslib.MultiRegionClientFactory[ec2.Client]{})
s3Provider := s3.NewProvider(logger, cfg, &awslib.MultiRegionClientFactory[s3.Client]{}, identity.Account)

return []inventory.AssetFetcher{
newEc2InstancesFetcher(logger, identity, cfg),
NewS3BucketFetcher(logger, identity, cfg),
newIamUserFetcher(logger, identity, cfg),
newIamRoleFetcher(logger, identity, cfg),
newIamPolicyFetcher(logger, identity, cfg),
newEc2InstancesFetcher(logger, identity, ec2Provider),
NewS3BucketFetcher(logger, identity, s3Provider),
newIamUserFetcher(logger, identity, iamProvider),
newIamRoleFetcher(logger, identity, iamProvider),
newIamPolicyFetcher(logger, identity, iamProvider),
}
}
5 changes: 1 addition & 4 deletions internal/inventory/awsfetcher/fetcher_ec2_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,10 @@ package awsfetcher
import (
"context"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/elastic/elastic-agent-libs/logp"

"github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud"
"github.com/elastic/cloudbeat/internal/inventory"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib/ec2"
"github.com/elastic/cloudbeat/internal/resources/utils/pointers"
)
Expand All @@ -48,8 +46,7 @@ var ec2InstanceClassification = inventory.AssetClassification{
SubType: inventory.SubTypeEC2,
}

func newEc2InstancesFetcher(logger *logp.Logger, identity *cloud.Identity, cfg aws.Config) inventory.AssetFetcher {
provider := ec2.NewEC2Provider(logger, identity.Account, cfg, &awslib.MultiRegionClientFactory[ec2.Client]{})
func newEc2InstancesFetcher(logger *logp.Logger, identity *cloud.Identity, provider ec2InstancesProvider) inventory.AssetFetcher {
return &Ec2InstanceFetcher{
logger: logger,
provider: provider,
Expand Down
9 changes: 3 additions & 6 deletions internal/inventory/awsfetcher/fetcher_ec2_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/elastic/elastic-agent-libs/logp"
"github.com/stretchr/testify/mock"

"github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud"
"github.com/elastic/cloudbeat/internal/inventory"
ec2beat "github.com/elastic/cloudbeat/internal/resources/providers/awslib/ec2"
"github.com/elastic/cloudbeat/internal/resources/utils/pointers"
Expand Down Expand Up @@ -154,12 +155,8 @@ func TestEC2InstanceFetcher_Fetch(t *testing.T) {
provider := newMockEc2InstancesProvider(t)
provider.EXPECT().DescribeInstances(mock.Anything).Return(in, nil)

fetcher := &Ec2InstanceFetcher{
logger: logger,
provider: provider,
AccountId: "123",
AccountName: "alias",
}
identity := &cloud.Identity{Account: "123", AccountAlias: "alias"}
fetcher := newEc2InstancesFetcher(logger, identity, provider)

collectResourcesAndMatch(t, fetcher, expected)
}
4 changes: 1 addition & 3 deletions internal/inventory/awsfetcher/fetcher_iam_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ package awsfetcher
import (
"context"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/elastic/elastic-agent-libs/logp"

"github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud"
Expand Down Expand Up @@ -48,8 +47,7 @@ var iamPolicyClassification = inventory.AssetClassification{
SubType: inventory.SubTypeIAM,
}

func newIamPolicyFetcher(logger *logp.Logger, identity *cloud.Identity, cfg aws.Config) inventory.AssetFetcher {
provider := iam.NewIAMProvider(logger, cfg, &awslib.MultiRegionClientFactory[iam.AccessAnalyzerClient]{})
func newIamPolicyFetcher(logger *logp.Logger, identity *cloud.Identity, provider IamPolicyProvider) inventory.AssetFetcher {
return &IamPolicyFetcher{
logger: logger,
provider: provider,
Expand Down
17 changes: 7 additions & 10 deletions internal/inventory/awsfetcher/fetcher_iam_policy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/elastic/elastic-agent-libs/logp"
"github.com/stretchr/testify/mock"

"github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud"
"github.com/elastic/cloudbeat/internal/inventory"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib/iam"
Expand Down Expand Up @@ -100,7 +101,7 @@ func TestIAMPolicyFetcher_Fetch(t *testing.T) {

in := []awslib.AwsResource{policy1, nil, policy2, policy3}

cloud := inventory.AssetCloud{
cloudField := inventory.AssetCloud{
Provider: inventory.AwsCloudProvider,
Region: "global",
Account: inventory.AssetCloudAccount{
Expand All @@ -118,7 +119,7 @@ func TestIAMPolicyFetcher_Fetch(t *testing.T) {
"arn:aws:iam::0000:policy/policy-1",
"policy-1",
inventory.WithRawAsset(policy1),
inventory.WithCloud(cloud),
inventory.WithCloud(cloudField),
inventory.WithTags(map[string]string{
"key-1": "value-1",
"key-2": "value-2",
Expand All @@ -141,7 +142,7 @@ func TestIAMPolicyFetcher_Fetch(t *testing.T) {
"arn:aws:iam::0000:policy/policy-2",
"policy-2",
inventory.WithRawAsset(policy2),
inventory.WithCloud(cloud),
inventory.WithCloud(cloudField),
inventory.WithTags(map[string]string{
"key-1": "value-1",
}),
Expand All @@ -158,20 +159,16 @@ func TestIAMPolicyFetcher_Fetch(t *testing.T) {
"arn:aws:iam::0000:policy/policy-3",
"policy-3",
inventory.WithRawAsset(policy3),
inventory.WithCloud(cloud),
inventory.WithCloud(cloudField),
),
}

logger := logp.NewLogger("test_fetcher_iam_role")
provider := NewMockIamPolicyProvider(t)
provider.EXPECT().GetPolicies(mock.Anything).Return(in, nil)

fetcher := &IamPolicyFetcher{
logger: logger,
provider: provider,
AccountId: "123",
AccountName: "alias",
}
identity := &cloud.Identity{Account: "123", AccountAlias: "alias"}
fetcher := newIamPolicyFetcher(logger, identity, provider)

collectResourcesAndMatch(t, fetcher, expected)
}
4 changes: 1 addition & 3 deletions internal/inventory/awsfetcher/fetcher_iam_role.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ package awsfetcher
import (
"context"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/elastic/elastic-agent-libs/logp"

"github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud"
Expand Down Expand Up @@ -48,8 +47,7 @@ var iamRoleClassification = inventory.AssetClassification{
SubType: inventory.SubTypeIAM,
}

func newIamRoleFetcher(logger *logp.Logger, identity *cloud.Identity, cfg aws.Config) inventory.AssetFetcher {
provider := iam.NewIAMProvider(logger, cfg, &awslib.MultiRegionClientFactory[iam.AccessAnalyzerClient]{})
func newIamRoleFetcher(logger *logp.Logger, identity *cloud.Identity, provider IamRoleProvider) inventory.AssetFetcher {
return &IamRoleFetcher{
logger: logger,
provider: provider,
Expand Down
9 changes: 3 additions & 6 deletions internal/inventory/awsfetcher/fetcher_iam_role_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/elastic/elastic-agent-libs/logp"
"github.com/stretchr/testify/mock"

"github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud"
"github.com/elastic/cloudbeat/internal/inventory"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib/iam"
"github.com/elastic/cloudbeat/internal/resources/utils/pointers"
Expand Down Expand Up @@ -109,12 +110,8 @@ func TestIAMRoleFetcher_Fetch(t *testing.T) {
provider := NewMockIamRoleProvider(t)
provider.EXPECT().ListRoles(mock.Anything).Return(in, nil)

fetcher := &IamRoleFetcher{
logger: logger,
provider: provider,
AccountId: "123",
AccountName: "alias",
}
identity := &cloud.Identity{Account: "123", AccountAlias: "alias"}
fetcher := newIamRoleFetcher(logger, identity, provider)

collectResourcesAndMatch(t, fetcher, expected)
}
4 changes: 1 addition & 3 deletions internal/inventory/awsfetcher/fetcher_iam_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ package awsfetcher
import (
"context"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/elastic/elastic-agent-libs/logp"

"github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud"
Expand All @@ -47,8 +46,7 @@ var iamUserClassification = inventory.AssetClassification{
SubType: inventory.SubTypeIAM,
}

func newIamUserFetcher(logger *logp.Logger, identity *cloud.Identity, cfg aws.Config) inventory.AssetFetcher {
provider := iam.NewIAMProvider(logger, cfg, &awslib.MultiRegionClientFactory[iam.AccessAnalyzerClient]{})
func newIamUserFetcher(logger *logp.Logger, identity *cloud.Identity, provider IamUserProvider) inventory.AssetFetcher {
return &IamUserFetcher{
logger: logger,
provider: provider,
Expand Down
9 changes: 3 additions & 6 deletions internal/inventory/awsfetcher/fetcher_iam_user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/elastic/elastic-agent-libs/logp"
"github.com/stretchr/testify/mock"

"github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud"
"github.com/elastic/cloudbeat/internal/inventory"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib/iam"
Expand Down Expand Up @@ -123,12 +124,8 @@ func TestIAMUserFetcher_Fetch(t *testing.T) {
provider := NewMockIamUserProvider(t)
provider.EXPECT().GetUsers(mock.Anything).Return(in, nil)

fetcher := &IamUserFetcher{
logger: logger,
provider: provider,
AccountId: "123",
AccountName: "alias",
}
identity := &cloud.Identity{Account: "123", AccountAlias: "alias"}
fetcher := newIamUserFetcher(logger, identity, provider)

collectResourcesAndMatch(t, fetcher, expected)
}
4 changes: 1 addition & 3 deletions internal/inventory/awsfetcher/fetcher_s3_bucket.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ package awsfetcher
import (
"context"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/elastic/elastic-agent-libs/logp"
"github.com/samber/lo"

Expand Down Expand Up @@ -48,8 +47,7 @@ type s3BucketProvider interface {
DescribeBuckets(ctx context.Context) ([]awslib.AwsResource, error)
}

func NewS3BucketFetcher(logger *logp.Logger, identity *cloud.Identity, cfg aws.Config) inventory.AssetFetcher {
provider := s3.NewProvider(logger, cfg, &awslib.MultiRegionClientFactory[s3.Client]{}, identity.Account)
func NewS3BucketFetcher(logger *logp.Logger, identity *cloud.Identity, provider s3BucketProvider) inventory.AssetFetcher {
return &S3BucketFetcher{
logger: logger,
provider: provider,
Expand Down
9 changes: 3 additions & 6 deletions internal/inventory/awsfetcher/fetcher_s3_bucket_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/elastic/elastic-agent-libs/logp"
"github.com/stretchr/testify/mock"

"github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud"
"github.com/elastic/cloudbeat/internal/inventory"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib"
"github.com/elastic/cloudbeat/internal/resources/providers/awslib/s3"
Expand Down Expand Up @@ -166,12 +167,8 @@ func TestS3BucketFetcher_Fetch(t *testing.T) {
provider := newMockS3BucketProvider(t)
provider.EXPECT().DescribeBuckets(mock.Anything).Return(in, nil)

fetcher := &S3BucketFetcher{
logger: logger,
provider: provider,
AccountId: "123",
AccountName: "alias",
}
identity := &cloud.Identity{Account: "123", AccountAlias: "alias"}
fetcher := NewS3BucketFetcher(logger, identity, provider)

collectResourcesAndMatch(t, fetcher, expected)
}

0 comments on commit 517c3df

Please sign in to comment.