Skip to content
This repository has been archived by the owner on Aug 16, 2022. It is now read-only.

Commit

Permalink
feat: Add Tags for ECR Repo (#1369)
Browse files Browse the repository at this point in the history
  • Loading branch information
bbernays committed Aug 2, 2022
1 parent 0284a37 commit 3b31598
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 9 deletions.
20 changes: 20 additions & 0 deletions client/mocks/mock_ecr.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions client/services.go
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ type Ec2Client interface {
type EcrClient interface {
DescribeRepositories(ctx context.Context, params *ecr.DescribeRepositoriesInput, optFns ...func(*ecr.Options)) (*ecr.DescribeRepositoriesOutput, error)
DescribeImages(ctx context.Context, params *ecr.DescribeImagesInput, optFns ...func(*ecr.Options)) (*ecr.DescribeImagesOutput, error)
ListTagsForResource(ctx context.Context, params *ecr.ListTagsForResourceInput, optFns ...func(*ecr.Options)) (*ecr.ListTagsForResourceOutput, error)
}

//go:generate mockgen -package=mocks -destination=./mocks/mock_efs.go . EfsClient
Expand Down
1 change: 1 addition & 0 deletions docs/tables/aws_ecr_repositories.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ An object representing a repository.
| ------------- | ------------- | ----- |
|account_id|text|The AWS Account ID of the resource.|
|region|text|The AWS Region of the resource.|
|tags|jsonb||
|created_at|timestamp without time zone|The date and time, in JavaScript date format, when the repository was created.|
|encryption_configuration_encryption_type|text|The encryption type to use|
|encryption_configuration_kms_key|text|If you use the KMS encryption type, specify the KMS key to use for encryption. The alias, key ID, or full ARN of the KMS key can be specified|
Expand Down
35 changes: 27 additions & 8 deletions resources/services/ecr/repositories.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,13 @@ import (

func Repositories() *schema.Table {
return &schema.Table{
Name: "aws_ecr_repositories",
Description: "An object representing a repository.",
Resolver: fetchEcrRepositories,
Multiplex: client.ServiceAccountRegionMultiplexer("api.ecr"),
IgnoreError: client.IgnoreCommonErrors,
DeleteFilter: client.DeleteAccountRegionFilter,
Options: schema.TableCreationOptions{PrimaryKeys: []string{"account_id", "arn"}},
IgnoreInTests: true,
Name: "aws_ecr_repositories",
Description: "An object representing a repository.",
Resolver: fetchEcrRepositories,
Multiplex: client.ServiceAccountRegionMultiplexer("api.ecr"),
IgnoreError: client.IgnoreCommonErrors,
DeleteFilter: client.DeleteAccountRegionFilter,
Options: schema.TableCreationOptions{PrimaryKeys: []string{"account_id", "arn"}},
Columns: []schema.Column{
{
Name: "account_id",
Expand All @@ -34,6 +33,11 @@ func Repositories() *schema.Table {
Type: schema.TypeString,
Resolver: client.ResolveAWSRegion,
},
{
Name: "tags",
Type: schema.TypeJSON,
Resolver: resolveEcrRepositoryTags,
},
{
Name: "created_at",
Description: "The date and time, in JavaScript date format, when the repository was created.",
Expand Down Expand Up @@ -217,6 +221,21 @@ func fetchEcrRepositories(ctx context.Context, meta schema.ClientMeta, parent *s
}
return nil
}
func resolveEcrRepositoryTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error {
cl := meta.(*client.Client)
svc := cl.Services().ECR
repo := resource.Item.(types.Repository)

input := ecr.ListTagsForResourceInput{
ResourceArn: repo.RepositoryArn,
}
output, err := svc.ListTagsForResource(ctx, &input)
if err != nil {
return diag.WrapError(err)
}
return diag.WrapError(resource.Set(c.Name, client.TagsToMap(output.Tags)))
}

func fetchEcrRepositoryImages(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- interface{}) error {
maxResults := int32(1000)
p := parent.Item.(types.Repository)
Expand Down
5 changes: 4 additions & 1 deletion resources/services/ecr/repositories.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,10 @@ resource "aws" "ecr" "repositories" {
}
}


userDefinedColumn "tags" {
type = "json"
generate_resolver = true
}
user_relation "aws" "ecr" "images" {
path = "github.com/aws/aws-sdk-go-v2/service/ecr/types.ImageDetail"
userDefinedColumn "account_id" {
Expand Down
8 changes: 8 additions & 0 deletions resources/services/ecr/repositories_mock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ func buildEcrRepositoriesMock(t *testing.T, ctrl *gomock.Controller) client.Serv
&ecr.DescribeImagesOutput{
ImageDetails: []types.ImageDetail{i},
}, nil)

tagResponse := ecr.ListTagsForResourceOutput{}
err = faker.FakeData(&tagResponse)
if err != nil {
t.Fatal(err)
}
m.EXPECT().ListTagsForResource(gomock.Any(), gomock.Any(), gomock.Any()).Return(&tagResponse, nil)

return client.Services{
ECR: m,
}
Expand Down

0 comments on commit 3b31598

Please sign in to comment.