From c9c33dd785583d227d054922627c51336059f302 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Sun, 16 Jul 2023 16:33:55 +0200 Subject: [PATCH 01/21] adding code for removing custom origin request policies --- resources/cloudfront-origin-request-policy.go | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 resources/cloudfront-origin-request-policy.go diff --git a/resources/cloudfront-origin-request-policy.go b/resources/cloudfront-origin-request-policy.go new file mode 100644 index 000000000..2ca621b01 --- /dev/null +++ b/resources/cloudfront-origin-request-policy.go @@ -0,0 +1,68 @@ +package resources + +import ( + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/cloudfront" + "github.com/rebuy-de/aws-nuke/v2/pkg/types" +) + +type CloudFrontOriginRequestPolicy struct { + svc *cloudfront.CloudFront + ID *string +} + +func init() { + register("OriginRequestPolicy", ListCloudFrontOriginRequestPolicies) +} + +func ListCloudFrontOriginRequestPolicies(sess *session.Session) ([]Resource, error) { + svc := cloudfront.New(sess) + resources := []Resource{} + params := &cloudfront.ListOriginRequestPoliciesInput{} + + for { + resp, err := svc.ListOriginRequestPolicies(params) + if err != nil { + return nil, err + } + + for _, item := range resp.OriginRequestPolicyList.Items { + if *item.Type == "custom" { + resources = append(resources, &CloudFrontOriginRequestPolicy{ + svc: svc, + ID: item.OriginRequestPolicy.Id, + }) + } + } + + if resp.OriginRequestPolicyList.NextMarker == nil { + break + } + + params.Marker = resp.OriginRequestPolicyList.NextMarker + } + + return resources, nil +} + +func (f *CloudFrontOriginRequestPolicy) Remove() error { + resp, err := f.svc.GetOriginRequestPolicy(&cloudfront.GetOriginRequestPolicyInput{ + Id: f.ID, + }) + if err != nil { + return err + } + + _, err = f.svc.DeleteOriginRequestPolicy(&cloudfront.DeleteOriginRequestPolicyInput{ + Id: f.ID, + IfMatch: resp.ETag, + }) + + return err +} + +func (f *CloudFrontOriginRequestPolicy) Properties() types.Properties { + properties := types.NewProperties() + properties.Set("ID", f.ID) + return properties +} From 75f18ff9c53a9ae5d1660b80427cd8ca51781283 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Mon, 17 Jul 2023 16:06:25 +0200 Subject: [PATCH 02/21] rename resource --- go.mod | 6 +++--- go.sum | 14 +++++++------- resources/cloudfront-origin-request-policy.go | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index e0b410cfa..dffa3baf6 100644 --- a/go.mod +++ b/go.mod @@ -27,8 +27,8 @@ require ( github.com/mattn/go-isatty v0.0.17 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/mod v0.9.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/tools v0.7.0 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/tools v0.11.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/go.sum b/go.sum index e679694a0..399b9a7be 100644 --- a/go.sum +++ b/go.sum @@ -62,15 +62,15 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -88,8 +88,8 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -102,8 +102,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= +golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/resources/cloudfront-origin-request-policy.go b/resources/cloudfront-origin-request-policy.go index 2ca621b01..13e24718b 100644 --- a/resources/cloudfront-origin-request-policy.go +++ b/resources/cloudfront-origin-request-policy.go @@ -12,7 +12,7 @@ type CloudFrontOriginRequestPolicy struct { } func init() { - register("OriginRequestPolicy", ListCloudFrontOriginRequestPolicies) + register("CloudFrontOriginRequestPolicy", ListCloudFrontOriginRequestPolicies) } func ListCloudFrontOriginRequestPolicies(sess *session.Session) ([]Resource, error) { From ff6a0eef73813f95f7d196b0bb5cd6351399ed91 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Tue, 18 Jul 2023 08:30:48 +0200 Subject: [PATCH 03/21] test for replication --- resources/secretsmanager-secrets.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/resources/secretsmanager-secrets.go b/resources/secretsmanager-secrets.go index a0f615254..9a7b6d2a6 100644 --- a/resources/secretsmanager-secrets.go +++ b/resources/secretsmanager-secrets.go @@ -50,13 +50,25 @@ func ListSecretsManagerSecrets(sess *session.Session) ([]Resource, error) { } func (f *SecretsManagerSecret) Remove() error { + // wanna do something about replicated secrets here + RemoveReplicaRegions := []*string{} + wildcard := "*" - _, err := f.svc.DeleteSecret(&secretsmanager.DeleteSecretInput{ + _, RemoveRegionErr := f.svc.RemoveRegionsFromReplication(&secretsmanager.RemoveRegionsFromReplicationInput{ + SecretId: f.ARN, + RemoveReplicaRegions: append(RemoveReplicaRegions, &wildcard), + }) + + if RemoveRegionErr != nil { + return RemoveRegionErr + } + + _, DeleteSecretErr := f.svc.DeleteSecret(&secretsmanager.DeleteSecretInput{ SecretId: f.ARN, ForceDeleteWithoutRecovery: aws.Bool(true), }) - return err + return DeleteSecretErr } func (f *SecretsManagerSecret) Properties() types.Properties { From c4d9498473959ae35c978ee700da71e5e28082f7 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Tue, 18 Jul 2023 09:01:47 +0200 Subject: [PATCH 04/21] revert secretsmanager change --- resources/secretsmanager-secrets.go | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/resources/secretsmanager-secrets.go b/resources/secretsmanager-secrets.go index 9a7b6d2a6..8460d7d16 100644 --- a/resources/secretsmanager-secrets.go +++ b/resources/secretsmanager-secrets.go @@ -50,25 +50,12 @@ func ListSecretsManagerSecrets(sess *session.Session) ([]Resource, error) { } func (f *SecretsManagerSecret) Remove() error { - // wanna do something about replicated secrets here - RemoveReplicaRegions := []*string{} - wildcard := "*" - - _, RemoveRegionErr := f.svc.RemoveRegionsFromReplication(&secretsmanager.RemoveRegionsFromReplicationInput{ - SecretId: f.ARN, - RemoveReplicaRegions: append(RemoveReplicaRegions, &wildcard), - }) - - if RemoveRegionErr != nil { - return RemoveRegionErr - } - - _, DeleteSecretErr := f.svc.DeleteSecret(&secretsmanager.DeleteSecretInput{ + _, err := f.svc.DeleteSecret(&secretsmanager.DeleteSecretInput{ SecretId: f.ARN, ForceDeleteWithoutRecovery: aws.Bool(true), }) - return DeleteSecretErr + return err } func (f *SecretsManagerSecret) Properties() types.Properties { From 1d9fb357f2a41027b99abcc39be03a8a99a4f0c2 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Tue, 18 Jul 2023 09:08:29 +0200 Subject: [PATCH 05/21] undo this --- resources/secretsmanager-secrets.go | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/secretsmanager-secrets.go b/resources/secretsmanager-secrets.go index 8460d7d16..a0f615254 100644 --- a/resources/secretsmanager-secrets.go +++ b/resources/secretsmanager-secrets.go @@ -50,6 +50,7 @@ func ListSecretsManagerSecrets(sess *session.Session) ([]Resource, error) { } func (f *SecretsManagerSecret) Remove() error { + _, err := f.svc.DeleteSecret(&secretsmanager.DeleteSecretInput{ SecretId: f.ARN, ForceDeleteWithoutRecovery: aws.Bool(true), From 553cce18b0cc2a289683192e9b76545c2c032079 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Tue, 18 Jul 2023 09:10:03 +0200 Subject: [PATCH 06/21] revert mod and sum changes --- go.mod | 6 +++--- go.sum | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index dffa3baf6..e0b410cfa 100644 --- a/go.mod +++ b/go.mod @@ -27,8 +27,8 @@ require ( github.com/mattn/go-isatty v0.0.17 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/mod v0.12.0 // indirect - golang.org/x/sys v0.10.0 // indirect - golang.org/x/tools v0.11.0 // indirect + golang.org/x/mod v0.9.0 // indirect + golang.org/x/sys v0.6.0 // indirect + golang.org/x/tools v0.7.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/go.sum b/go.sum index 399b9a7be..e679694a0 100644 --- a/go.sum +++ b/go.sum @@ -62,15 +62,15 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -88,8 +88,8 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -102,8 +102,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= -golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= +golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 5ca24cc7a30174270403e92994b39acf38589fc3 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Wed, 19 Jul 2023 12:00:16 +0200 Subject: [PATCH 07/21] add resources for redshift scheduled actions --- resources/redshift-scheduled-action.go | 71 ++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 resources/redshift-scheduled-action.go diff --git a/resources/redshift-scheduled-action.go b/resources/redshift-scheduled-action.go new file mode 100644 index 000000000..a46fd79d0 --- /dev/null +++ b/resources/redshift-scheduled-action.go @@ -0,0 +1,71 @@ +package resources + +import ( + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/redshift" + "github.com/rebuy-de/aws-nuke/v2/pkg/types" +) + +type RedshiftScheduledAction struct { + svc *redshift.Redshift + scheduledActionName *string +} + +func init() { + register("RedshiftScheduledAction", ListRedshiftScheduledActions) +} + +func ListRedshiftScheduledActions(sess *session.Session) ([]Resource, error) { + svc := redshift.New(sess) + resources := []Resource{} + + params := &redshift.DescribeScheduledActionsInput{} + + for { + resp, err := svc.DescribeScheduledActions(params) + if err != nil { + return nil, err + } + + for _, item := range resp.ScheduledActions { + resources = append(resources, &RedshiftScheduledAction{ + svc: svc, + scheduledActionName: item.ScheduledActionName, + }) + } + + if resp.Marker == nil { + break + } + + params.Marker = resp.Marker + } + + return resources, nil +} + +// func (f *RedshiftScheduledAction) Properties() types.Properties { +// properties := types.NewProperties(). +// Set("CreatedTime", f.snapshot.SnapshotCreateTime) + +// for _, tag := range f.snapshot.Tags { +// properties.SetTag(tag.Key, tag.Value) +// } + +// return properties +// } + +func (f *RedshiftScheduledAction) Remove() error { + + _, err := f.svc.DeleteScheduledAction(&redshift.DeleteScheduledActionInput{ + ScheduledActionName: f.scheduledActionName, + }) + + return err +} + +func (f *RedshiftScheduledAction) Properties() types.Properties { + properties := types.NewProperties() + properties.Set("scheduledActionName", f.scheduledActionName) + return properties +} From 2a5509001f3070065d60533c9cd993d6d36e51c3 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Mon, 24 Jul 2023 13:47:57 +0200 Subject: [PATCH 08/21] remove cloudfront resource --- resources/cloudfront-origin-request-policy.go | 68 ------------------- 1 file changed, 68 deletions(-) delete mode 100644 resources/cloudfront-origin-request-policy.go diff --git a/resources/cloudfront-origin-request-policy.go b/resources/cloudfront-origin-request-policy.go deleted file mode 100644 index 13e24718b..000000000 --- a/resources/cloudfront-origin-request-policy.go +++ /dev/null @@ -1,68 +0,0 @@ -package resources - -import ( - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/cloudfront" - "github.com/rebuy-de/aws-nuke/v2/pkg/types" -) - -type CloudFrontOriginRequestPolicy struct { - svc *cloudfront.CloudFront - ID *string -} - -func init() { - register("CloudFrontOriginRequestPolicy", ListCloudFrontOriginRequestPolicies) -} - -func ListCloudFrontOriginRequestPolicies(sess *session.Session) ([]Resource, error) { - svc := cloudfront.New(sess) - resources := []Resource{} - params := &cloudfront.ListOriginRequestPoliciesInput{} - - for { - resp, err := svc.ListOriginRequestPolicies(params) - if err != nil { - return nil, err - } - - for _, item := range resp.OriginRequestPolicyList.Items { - if *item.Type == "custom" { - resources = append(resources, &CloudFrontOriginRequestPolicy{ - svc: svc, - ID: item.OriginRequestPolicy.Id, - }) - } - } - - if resp.OriginRequestPolicyList.NextMarker == nil { - break - } - - params.Marker = resp.OriginRequestPolicyList.NextMarker - } - - return resources, nil -} - -func (f *CloudFrontOriginRequestPolicy) Remove() error { - resp, err := f.svc.GetOriginRequestPolicy(&cloudfront.GetOriginRequestPolicyInput{ - Id: f.ID, - }) - if err != nil { - return err - } - - _, err = f.svc.DeleteOriginRequestPolicy(&cloudfront.DeleteOriginRequestPolicyInput{ - Id: f.ID, - IfMatch: resp.ETag, - }) - - return err -} - -func (f *CloudFrontOriginRequestPolicy) Properties() types.Properties { - properties := types.NewProperties() - properties.Set("ID", f.ID) - return properties -} From 6c050441801506dfb2b456805fc7c17b3bbace66 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Mon, 24 Jul 2023 13:48:43 +0200 Subject: [PATCH 09/21] clean up --- resources/redshift-scheduled-action.go | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/resources/redshift-scheduled-action.go b/resources/redshift-scheduled-action.go index a46fd79d0..e98b15691 100644 --- a/resources/redshift-scheduled-action.go +++ b/resources/redshift-scheduled-action.go @@ -44,17 +44,6 @@ func ListRedshiftScheduledActions(sess *session.Session) ([]Resource, error) { return resources, nil } -// func (f *RedshiftScheduledAction) Properties() types.Properties { -// properties := types.NewProperties(). -// Set("CreatedTime", f.snapshot.SnapshotCreateTime) - -// for _, tag := range f.snapshot.Tags { -// properties.SetTag(tag.Key, tag.Value) -// } - -// return properties -// } - func (f *RedshiftScheduledAction) Remove() error { _, err := f.svc.DeleteScheduledAction(&redshift.DeleteScheduledActionInput{ From 206b3891f8350629c1641e2dbe8e184eb28fa38b Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Mon, 24 Jul 2023 14:07:29 +0200 Subject: [PATCH 10/21] cloudwatch rum app --- resources/cloudwatch-rum-app.go | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 resources/cloudwatch-rum-app.go diff --git a/resources/cloudwatch-rum-app.go b/resources/cloudwatch-rum-app.go new file mode 100644 index 000000000..408c6c2b8 --- /dev/null +++ b/resources/cloudwatch-rum-app.go @@ -0,0 +1,60 @@ +package resources + +import ( + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/cloudwatchrum" + "github.com/rebuy-de/aws-nuke/v2/pkg/types" +) + +type CloudWatchRumApp struct { + svc *cloudwatchrum.CloudWatchRUM + appmonitorname *string +} + +func init() { + register("CloudWatchRumApp", ListCloudWatchRumApp) +} + +func ListCloudWatchRumApp(sess *session.Session) ([]Resource, error) { + svc := cloudwatchrum.New(sess) + resources := []Resource{} + + params := &cloudwatchrum.ListAppMonitorsInput{} + + for { + output, err := svc.ListAppMonitors(params) + if err != nil { + return nil, err + } + + for _, appEntry := range output.AppMonitorSummaries { + resources = append(resources, &CloudWatchRumApp{ + svc: svc, + appmonitorname: appEntry.Name, + }) + } + + if output.NextToken == nil { + break + } + + params.NextToken = output.NextToken + } + + return resources, nil +} + +func (f *CloudWatchRumApp) Remove() error { + + _, err := f.svc.DeleteAppMonitor(&cloudwatchrum.DeleteAppMonitorInput{ + Name: f.appmonitorname, + }) + + return err +} + +func (f *CloudWatchRumApp) Properties() types.Properties { + properties := types.NewProperties() + properties.Set("appmonitorname", f.appmonitorname) + return properties +} From 1381c2fd1da67c09fe9349379fe2677d9b3dd6a4 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Mon, 24 Jul 2023 20:31:45 +0200 Subject: [PATCH 11/21] remove rum --- resources/cloudwatch-rum-app.go | 60 --------------------------------- 1 file changed, 60 deletions(-) delete mode 100644 resources/cloudwatch-rum-app.go diff --git a/resources/cloudwatch-rum-app.go b/resources/cloudwatch-rum-app.go deleted file mode 100644 index 408c6c2b8..000000000 --- a/resources/cloudwatch-rum-app.go +++ /dev/null @@ -1,60 +0,0 @@ -package resources - -import ( - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/cloudwatchrum" - "github.com/rebuy-de/aws-nuke/v2/pkg/types" -) - -type CloudWatchRumApp struct { - svc *cloudwatchrum.CloudWatchRUM - appmonitorname *string -} - -func init() { - register("CloudWatchRumApp", ListCloudWatchRumApp) -} - -func ListCloudWatchRumApp(sess *session.Session) ([]Resource, error) { - svc := cloudwatchrum.New(sess) - resources := []Resource{} - - params := &cloudwatchrum.ListAppMonitorsInput{} - - for { - output, err := svc.ListAppMonitors(params) - if err != nil { - return nil, err - } - - for _, appEntry := range output.AppMonitorSummaries { - resources = append(resources, &CloudWatchRumApp{ - svc: svc, - appmonitorname: appEntry.Name, - }) - } - - if output.NextToken == nil { - break - } - - params.NextToken = output.NextToken - } - - return resources, nil -} - -func (f *CloudWatchRumApp) Remove() error { - - _, err := f.svc.DeleteAppMonitor(&cloudwatchrum.DeleteAppMonitorInput{ - Name: f.appmonitorname, - }) - - return err -} - -func (f *CloudWatchRumApp) Properties() types.Properties { - properties := types.NewProperties() - properties.Set("appmonitorname", f.appmonitorname) - return properties -} From b203bf704f918490fea6234f26072af45eff2ec1 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Mon, 24 Jul 2023 20:35:58 +0200 Subject: [PATCH 12/21] add cloudfront origin request policy --- resources/cloudfront-origin-request-policy.go | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 resources/cloudfront-origin-request-policy.go diff --git a/resources/cloudfront-origin-request-policy.go b/resources/cloudfront-origin-request-policy.go new file mode 100644 index 000000000..13e24718b --- /dev/null +++ b/resources/cloudfront-origin-request-policy.go @@ -0,0 +1,68 @@ +package resources + +import ( + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/cloudfront" + "github.com/rebuy-de/aws-nuke/v2/pkg/types" +) + +type CloudFrontOriginRequestPolicy struct { + svc *cloudfront.CloudFront + ID *string +} + +func init() { + register("CloudFrontOriginRequestPolicy", ListCloudFrontOriginRequestPolicies) +} + +func ListCloudFrontOriginRequestPolicies(sess *session.Session) ([]Resource, error) { + svc := cloudfront.New(sess) + resources := []Resource{} + params := &cloudfront.ListOriginRequestPoliciesInput{} + + for { + resp, err := svc.ListOriginRequestPolicies(params) + if err != nil { + return nil, err + } + + for _, item := range resp.OriginRequestPolicyList.Items { + if *item.Type == "custom" { + resources = append(resources, &CloudFrontOriginRequestPolicy{ + svc: svc, + ID: item.OriginRequestPolicy.Id, + }) + } + } + + if resp.OriginRequestPolicyList.NextMarker == nil { + break + } + + params.Marker = resp.OriginRequestPolicyList.NextMarker + } + + return resources, nil +} + +func (f *CloudFrontOriginRequestPolicy) Remove() error { + resp, err := f.svc.GetOriginRequestPolicy(&cloudfront.GetOriginRequestPolicyInput{ + Id: f.ID, + }) + if err != nil { + return err + } + + _, err = f.svc.DeleteOriginRequestPolicy(&cloudfront.DeleteOriginRequestPolicyInput{ + Id: f.ID, + IfMatch: resp.ETag, + }) + + return err +} + +func (f *CloudFrontOriginRequestPolicy) Properties() types.Properties { + properties := types.NewProperties() + properties.Set("ID", f.ID) + return properties +} From 4e5bbc27e608f843099185176200e15432414d73 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Mon, 24 Jul 2023 20:36:26 +0200 Subject: [PATCH 13/21] remove --- resources/redshift-scheduled-action.go | 60 -------------------------- 1 file changed, 60 deletions(-) delete mode 100644 resources/redshift-scheduled-action.go diff --git a/resources/redshift-scheduled-action.go b/resources/redshift-scheduled-action.go deleted file mode 100644 index e98b15691..000000000 --- a/resources/redshift-scheduled-action.go +++ /dev/null @@ -1,60 +0,0 @@ -package resources - -import ( - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/redshift" - "github.com/rebuy-de/aws-nuke/v2/pkg/types" -) - -type RedshiftScheduledAction struct { - svc *redshift.Redshift - scheduledActionName *string -} - -func init() { - register("RedshiftScheduledAction", ListRedshiftScheduledActions) -} - -func ListRedshiftScheduledActions(sess *session.Session) ([]Resource, error) { - svc := redshift.New(sess) - resources := []Resource{} - - params := &redshift.DescribeScheduledActionsInput{} - - for { - resp, err := svc.DescribeScheduledActions(params) - if err != nil { - return nil, err - } - - for _, item := range resp.ScheduledActions { - resources = append(resources, &RedshiftScheduledAction{ - svc: svc, - scheduledActionName: item.ScheduledActionName, - }) - } - - if resp.Marker == nil { - break - } - - params.Marker = resp.Marker - } - - return resources, nil -} - -func (f *RedshiftScheduledAction) Remove() error { - - _, err := f.svc.DeleteScheduledAction(&redshift.DeleteScheduledActionInput{ - ScheduledActionName: f.scheduledActionName, - }) - - return err -} - -func (f *RedshiftScheduledAction) Properties() types.Properties { - properties := types.NewProperties() - properties.Set("scheduledActionName", f.scheduledActionName) - return properties -} From 0c4f191f9b25e88db14750de66f64a089b386e03 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Wed, 26 Jul 2023 11:27:14 +0200 Subject: [PATCH 14/21] test release pipeline --- .github/workflows/release.yaml | 154 ++++++++++++++++----------------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e9831a42e..0ae967b01 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -12,93 +12,93 @@ jobs: name: Update Readme runs-on: ubuntu-22.04 steps: - - name: Checkout code - uses: actions/checkout@v3 - with: - fetch-depth: 0 - ref: main - - name: Update versions in readme - run: | - sed -r -i "s/aws-nuke:v[0-9]+\.[0-9]+\.[0-9]+/aws-nuke:${{ github.ref_name }}/" README.md - sed -r -i "s/aws-nuke-v[0-9]+\.[0-9]+\.[0-9]+/aws-nuke-${{ github.ref_name }}/" README.md - sed -r -i "s/\/v[0-9]+\.[0-9]+\.[0-9]+\//\/${{ github.ref_name }}\//" README.md - - uses: peter-evans/create-pull-request@v5 - name: Create Pull Request - with: - title: Update readme for ${{ github.ref_name }} release - commit-message: Update readme for ${{ github.ref_name }} release - body: Updating version references in the readme to ${{ github.ref_name }} - branch: update-readme-${{ github.ref_name }} - delete-branch: true + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + ref: main + - name: Update versions in readme + run: | + sed -r -i "s/aws-nuke:v[0-9]+\.[0-9]+\.[0-9]+/aws-nuke:${{ github.ref_name }}/" README.md + sed -r -i "s/aws-nuke-v[0-9]+\.[0-9]+\.[0-9]+/aws-nuke-${{ github.ref_name }}/" README.md + sed -r -i "s/\/v[0-9]+\.[0-9]+\.[0-9]+\//\/${{ github.ref_name }}\//" README.md + - uses: peter-evans/create-pull-request@v5 + name: Create Pull Request + with: + title: Update readme for ${{ github.ref_name }} release + commit-message: Update readme for ${{ github.ref_name }} release + body: Updating version references in the readme to ${{ github.ref_name }} + branch: update-readme-${{ github.ref_name }} + delete-branch: true release: name: Publish binaries runs-on: ubuntu-22.04 steps: - - name: Setup Go - uses: actions/setup-go@v3 - with: - go-version: '1.20' - - name: Checkout code - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Build Project binaries - env: - CGO_ENABLED: 0 - run: | - make xc - - name: Upload binaries to release - uses: svenstaro/upload-release-action@v2 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: dist/aws* - tag: ${{ github.ref }} - overwrite: true - file_glob: true + - name: Setup Go + uses: actions/setup-go@v3 + with: + go-version: "1.20" + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Build Project binaries + env: + CGO_ENABLED: 0 + run: | + make xc + - name: Upload binaries to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.TOKEN }} + file: dist/aws* + tag: ${{ github.ref }} + overwrite: true + file_glob: true - docker_build: - runs-on: ubuntu-22.04 - name: Docker Build + # docker_build: + # runs-on: ubuntu-22.04 + # name: Docker Build - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 + # steps: + # - uses: actions/checkout@v3 + # with: + # fetch-depth: 0 - - name: Generate image tags - shell: bash - run: echo "tags=quay.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/},docker.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT - id: generate_tags + # - name: Generate image tags + # shell: bash + # run: echo "tags=quay.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/},docker.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT + # id: generate_tags - - name: Set up QEMU - id: qemu - uses: docker/setup-qemu-action@v2 - with: - platforms: arm64 + # - name: Set up QEMU + # id: qemu + # uses: docker/setup-qemu-action@v2 + # with: + # platforms: arm64 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - install: true + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + # with: + # install: true - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} + # - name: Login to Docker Hub + # uses: docker/login-action@v2 + # with: + # username: ${{ secrets.DOCKER_USERNAME }} + # password: ${{ secrets.DOCKER_PASSWORD }} - - name: Login to Quay.io - uses: docker/login-action@v2 - with: - registry: quay.io - username: ${{ secrets.QUAY_USERNAME }} - password: ${{ secrets.QUAY_PASSWORD }} + # - name: Login to Quay.io + # uses: docker/login-action@v2 + # with: + # registry: quay.io + # username: ${{ secrets.QUAY_USERNAME }} + # password: ${{ secrets.QUAY_PASSWORD }} - - name: Build and push - uses: docker/build-push-action@v3 - with: - context: . - push: true - tags: ${{ steps.generate_tags.outputs.tags }} - platforms: linux/amd64,linux/arm64 + # - name: Build and push + # uses: docker/build-push-action@v3 + # with: + # context: . + # push: true + # tags: ${{ steps.generate_tags.outputs.tags }} + # platforms: linux/amd64,linux/arm64 From ee1845760f5f1e31d0bb4d40ae3e78fa4f288515 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Thu, 27 Jul 2023 09:25:46 +0200 Subject: [PATCH 15/21] add these two --- resources/cloudwatch-rum-app.go | 60 ++++++++++++++++++++++++++ resources/redshift-scheduled-action.go | 60 ++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 resources/cloudwatch-rum-app.go create mode 100644 resources/redshift-scheduled-action.go diff --git a/resources/cloudwatch-rum-app.go b/resources/cloudwatch-rum-app.go new file mode 100644 index 000000000..408c6c2b8 --- /dev/null +++ b/resources/cloudwatch-rum-app.go @@ -0,0 +1,60 @@ +package resources + +import ( + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/cloudwatchrum" + "github.com/rebuy-de/aws-nuke/v2/pkg/types" +) + +type CloudWatchRumApp struct { + svc *cloudwatchrum.CloudWatchRUM + appmonitorname *string +} + +func init() { + register("CloudWatchRumApp", ListCloudWatchRumApp) +} + +func ListCloudWatchRumApp(sess *session.Session) ([]Resource, error) { + svc := cloudwatchrum.New(sess) + resources := []Resource{} + + params := &cloudwatchrum.ListAppMonitorsInput{} + + for { + output, err := svc.ListAppMonitors(params) + if err != nil { + return nil, err + } + + for _, appEntry := range output.AppMonitorSummaries { + resources = append(resources, &CloudWatchRumApp{ + svc: svc, + appmonitorname: appEntry.Name, + }) + } + + if output.NextToken == nil { + break + } + + params.NextToken = output.NextToken + } + + return resources, nil +} + +func (f *CloudWatchRumApp) Remove() error { + + _, err := f.svc.DeleteAppMonitor(&cloudwatchrum.DeleteAppMonitorInput{ + Name: f.appmonitorname, + }) + + return err +} + +func (f *CloudWatchRumApp) Properties() types.Properties { + properties := types.NewProperties() + properties.Set("appmonitorname", f.appmonitorname) + return properties +} diff --git a/resources/redshift-scheduled-action.go b/resources/redshift-scheduled-action.go new file mode 100644 index 000000000..e98b15691 --- /dev/null +++ b/resources/redshift-scheduled-action.go @@ -0,0 +1,60 @@ +package resources + +import ( + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/redshift" + "github.com/rebuy-de/aws-nuke/v2/pkg/types" +) + +type RedshiftScheduledAction struct { + svc *redshift.Redshift + scheduledActionName *string +} + +func init() { + register("RedshiftScheduledAction", ListRedshiftScheduledActions) +} + +func ListRedshiftScheduledActions(sess *session.Session) ([]Resource, error) { + svc := redshift.New(sess) + resources := []Resource{} + + params := &redshift.DescribeScheduledActionsInput{} + + for { + resp, err := svc.DescribeScheduledActions(params) + if err != nil { + return nil, err + } + + for _, item := range resp.ScheduledActions { + resources = append(resources, &RedshiftScheduledAction{ + svc: svc, + scheduledActionName: item.ScheduledActionName, + }) + } + + if resp.Marker == nil { + break + } + + params.Marker = resp.Marker + } + + return resources, nil +} + +func (f *RedshiftScheduledAction) Remove() error { + + _, err := f.svc.DeleteScheduledAction(&redshift.DeleteScheduledActionInput{ + ScheduledActionName: f.scheduledActionName, + }) + + return err +} + +func (f *RedshiftScheduledAction) Properties() types.Properties { + properties := types.NewProperties() + properties.Set("scheduledActionName", f.scheduledActionName) + return properties +} From 52e10c20df1427f22f43e31bca1e6c523e48cd86 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Thu, 27 Jul 2023 10:58:05 +0200 Subject: [PATCH 16/21] update agent to self-hosted --- .github/workflows/release.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 0ae967b01..d4ea68241 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -10,7 +10,7 @@ permissions: jobs: update_readme: name: Update Readme - runs-on: ubuntu-22.04 + runs-on: self-hosted steps: - name: Checkout code uses: actions/checkout@v3 @@ -33,7 +33,7 @@ jobs: release: name: Publish binaries - runs-on: ubuntu-22.04 + runs-on: self-hosted steps: - name: Setup Go uses: actions/setup-go@v3 @@ -58,7 +58,7 @@ jobs: file_glob: true # docker_build: - # runs-on: ubuntu-22.04 + # runs-on: self-hosted # name: Docker Build # steps: From 4a692724474cb526637520dd752ef3b408381cb6 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Thu, 24 Aug 2023 14:43:17 +0200 Subject: [PATCH 17/21] initial commit without storing the latest tag, max tags = 1 --- resources/firehose-deliverystreams.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/resources/firehose-deliverystreams.go b/resources/firehose-deliverystreams.go index 831f457fd..f70f9f3ae 100644 --- a/resources/firehose-deliverystreams.go +++ b/resources/firehose-deliverystreams.go @@ -9,6 +9,7 @@ import ( type FirehoseDeliveryStream struct { svc *firehose.Firehose deliveryStreamName *string + tags []*firehose.Tag } func init() { @@ -18,6 +19,7 @@ func init() { func ListFirehoseDeliveryStreams(sess *session.Session) ([]Resource, error) { svc := firehose.New(sess) resources := []Resource{} + tags := []*firehose.Tag{} var lastDeliveryStreamName *string params := &firehose.ListDeliveryStreamsInput{ @@ -31,10 +33,29 @@ func ListFirehoseDeliveryStreams(sess *session.Session) ([]Resource, error) { } for _, deliveryStreamName := range output.DeliveryStreamNames { + tagParams := &firehose.ListTagsForDeliveryStreamInput{ + DeliveryStreamName: deliveryStreamName, + Limit: aws.Int64(100), + } + + for { + tagResp, tagErr := svc.ListTagsForDeliveryStream(tagParams) + if tagErr != nil { + return nil, tagErr + } + + tags = append(tags, tagResp.Tags...) + if *tagResp.HasMoreTags == false { + break + } + } + resources = append(resources, &FirehoseDeliveryStream{ svc: svc, deliveryStreamName: deliveryStreamName, + tags: tags, }) + lastDeliveryStreamName = deliveryStreamName } From ee3fd060623f6d8f35f153b88ec9af0b4866f1ca Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Thu, 24 Aug 2023 14:43:36 +0200 Subject: [PATCH 18/21] initial commit without storing the latest tag, max tags = 1 --- resources/firehose-deliverystreams.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/firehose-deliverystreams.go b/resources/firehose-deliverystreams.go index f70f9f3ae..f07c62c4a 100644 --- a/resources/firehose-deliverystreams.go +++ b/resources/firehose-deliverystreams.go @@ -35,7 +35,7 @@ func ListFirehoseDeliveryStreams(sess *session.Session) ([]Resource, error) { for _, deliveryStreamName := range output.DeliveryStreamNames { tagParams := &firehose.ListTagsForDeliveryStreamInput{ DeliveryStreamName: deliveryStreamName, - Limit: aws.Int64(100), + Limit: aws.Int64(1), // todo put 100 } for { From bdc843e786cf166873d3bc1ede9e5fee62535b4e Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Thu, 24 Aug 2023 14:44:21 +0200 Subject: [PATCH 19/21] simplified the if-statement --- resources/firehose-deliverystreams.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/firehose-deliverystreams.go b/resources/firehose-deliverystreams.go index f07c62c4a..ac3dcb7d0 100644 --- a/resources/firehose-deliverystreams.go +++ b/resources/firehose-deliverystreams.go @@ -45,7 +45,7 @@ func ListFirehoseDeliveryStreams(sess *session.Session) ([]Resource, error) { } tags = append(tags, tagResp.Tags...) - if *tagResp.HasMoreTags == false { + if !*tagResp.HasMoreTags { break } } @@ -59,7 +59,7 @@ func ListFirehoseDeliveryStreams(sess *session.Session) ([]Resource, error) { lastDeliveryStreamName = deliveryStreamName } - if *output.HasMoreDeliveryStreams == false { + if !*output.HasMoreDeliveryStreams { break } From f7d27ccbba5a1a09e8ca0ec6759e8e2272ba9776 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Thu, 24 Aug 2023 15:52:02 +0200 Subject: [PATCH 20/21] PR ready --- .github/workflows/release.yaml | 80 +++++++++++++------------- resources/cloudwatch-rum-app.go | 60 ------------------- resources/firehose-deliverystreams.go | 15 ++++- resources/redshift-scheduled-action.go | 60 ------------------- 4 files changed, 54 insertions(+), 161 deletions(-) delete mode 100644 resources/cloudwatch-rum-app.go delete mode 100644 resources/redshift-scheduled-action.go diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 7f293d739..9712c97c5 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -10,7 +10,7 @@ permissions: jobs: update_readme: name: Update Readme - runs-on: self-hosted + runs-on: ubuntu-22.04 steps: - name: Checkout code uses: actions/checkout@v3 @@ -33,7 +33,7 @@ jobs: release: name: Publish binaries - runs-on: self-hosted + runs-on: ubuntu-22.04 steps: - name: Setup Go uses: actions/setup-go@v3 @@ -57,48 +57,48 @@ jobs: overwrite: true file_glob: true - # docker_build: - # runs-on: self-hosted - # name: Docker Build + docker_build: + runs-on: ubuntu-22.04 + name: Docker Build - # steps: - # - uses: actions/checkout@v3 - # with: - # fetch-depth: 0 + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 - # - name: Generate image tags - # shell: bash - # run: echo "tags=quay.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/},docker.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT - # id: generate_tags + - name: Generate image tags + shell: bash + run: echo "tags=quay.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/},docker.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT + id: generate_tags - # - name: Set up QEMU - # id: qemu - # uses: docker/setup-qemu-action@v2 - # with: - # platforms: arm64 + - name: Set up QEMU + id: qemu + uses: docker/setup-qemu-action@v2 + with: + platforms: arm64 - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v2 - # with: - # install: true + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + install: true - # - name: Login to Docker Hub - # uses: docker/login-action@v2 - # with: - # username: ${{ secrets.DOCKER_USERNAME }} - # password: ${{ secrets.DOCKER_PASSWORD }} + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} - # - name: Login to Quay.io - # uses: docker/login-action@v2 - # with: - # registry: quay.io - # username: ${{ secrets.QUAY_USERNAME }} - # password: ${{ secrets.QUAY_PASSWORD }} + - name: Login to Quay.io + uses: docker/login-action@v2 + with: + registry: quay.io + username: ${{ secrets.QUAY_USERNAME }} + password: ${{ secrets.QUAY_PASSWORD }} - # - name: Build and push - # uses: docker/build-push-action@v3 - # with: - # context: . - # push: true - # tags: ${{ steps.generate_tags.outputs.tags }} - # platforms: linux/amd64,linux/arm64 + - name: Build and push + uses: docker/build-push-action@v3 + with: + context: . + push: true + tags: ${{ steps.generate_tags.outputs.tags }} + platforms: linux/amd64,linux/arm64 diff --git a/resources/cloudwatch-rum-app.go b/resources/cloudwatch-rum-app.go deleted file mode 100644 index 408c6c2b8..000000000 --- a/resources/cloudwatch-rum-app.go +++ /dev/null @@ -1,60 +0,0 @@ -package resources - -import ( - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/cloudwatchrum" - "github.com/rebuy-de/aws-nuke/v2/pkg/types" -) - -type CloudWatchRumApp struct { - svc *cloudwatchrum.CloudWatchRUM - appmonitorname *string -} - -func init() { - register("CloudWatchRumApp", ListCloudWatchRumApp) -} - -func ListCloudWatchRumApp(sess *session.Session) ([]Resource, error) { - svc := cloudwatchrum.New(sess) - resources := []Resource{} - - params := &cloudwatchrum.ListAppMonitorsInput{} - - for { - output, err := svc.ListAppMonitors(params) - if err != nil { - return nil, err - } - - for _, appEntry := range output.AppMonitorSummaries { - resources = append(resources, &CloudWatchRumApp{ - svc: svc, - appmonitorname: appEntry.Name, - }) - } - - if output.NextToken == nil { - break - } - - params.NextToken = output.NextToken - } - - return resources, nil -} - -func (f *CloudWatchRumApp) Remove() error { - - _, err := f.svc.DeleteAppMonitor(&cloudwatchrum.DeleteAppMonitorInput{ - Name: f.appmonitorname, - }) - - return err -} - -func (f *CloudWatchRumApp) Properties() types.Properties { - properties := types.NewProperties() - properties.Set("appmonitorname", f.appmonitorname) - return properties -} diff --git a/resources/firehose-deliverystreams.go b/resources/firehose-deliverystreams.go index ac3dcb7d0..dc8c7580d 100644 --- a/resources/firehose-deliverystreams.go +++ b/resources/firehose-deliverystreams.go @@ -4,6 +4,7 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/firehose" + "github.com/rebuy-de/aws-nuke/v2/pkg/types" ) type FirehoseDeliveryStream struct { @@ -35,7 +36,7 @@ func ListFirehoseDeliveryStreams(sess *session.Session) ([]Resource, error) { for _, deliveryStreamName := range output.DeliveryStreamNames { tagParams := &firehose.ListTagsForDeliveryStreamInput{ DeliveryStreamName: deliveryStreamName, - Limit: aws.Int64(1), // todo put 100 + Limit: aws.Int64(50), } for { @@ -48,6 +49,8 @@ func ListFirehoseDeliveryStreams(sess *session.Session) ([]Resource, error) { if !*tagResp.HasMoreTags { break } + + tagParams.ExclusiveStartTagKey = tagResp.Tags[len(tagResp.Tags)-1].Key } resources = append(resources, &FirehoseDeliveryStream{ @@ -81,3 +84,13 @@ func (f *FirehoseDeliveryStream) Remove() error { func (f *FirehoseDeliveryStream) String() string { return *f.deliveryStreamName } + +func (f *FirehoseDeliveryStream) Properties() types.Properties { + properties := types.NewProperties() + for _, tag := range f.tags { + properties.SetTag(tag.Key, tag.Value) + } + + properties.Set("Name", f.deliveryStreamName) + return properties +} diff --git a/resources/redshift-scheduled-action.go b/resources/redshift-scheduled-action.go deleted file mode 100644 index e98b15691..000000000 --- a/resources/redshift-scheduled-action.go +++ /dev/null @@ -1,60 +0,0 @@ -package resources - -import ( - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/redshift" - "github.com/rebuy-de/aws-nuke/v2/pkg/types" -) - -type RedshiftScheduledAction struct { - svc *redshift.Redshift - scheduledActionName *string -} - -func init() { - register("RedshiftScheduledAction", ListRedshiftScheduledActions) -} - -func ListRedshiftScheduledActions(sess *session.Session) ([]Resource, error) { - svc := redshift.New(sess) - resources := []Resource{} - - params := &redshift.DescribeScheduledActionsInput{} - - for { - resp, err := svc.DescribeScheduledActions(params) - if err != nil { - return nil, err - } - - for _, item := range resp.ScheduledActions { - resources = append(resources, &RedshiftScheduledAction{ - svc: svc, - scheduledActionName: item.ScheduledActionName, - }) - } - - if resp.Marker == nil { - break - } - - params.Marker = resp.Marker - } - - return resources, nil -} - -func (f *RedshiftScheduledAction) Remove() error { - - _, err := f.svc.DeleteScheduledAction(&redshift.DeleteScheduledActionInput{ - ScheduledActionName: f.scheduledActionName, - }) - - return err -} - -func (f *RedshiftScheduledAction) Properties() types.Properties { - properties := types.NewProperties() - properties.Set("scheduledActionName", f.scheduledActionName) - return properties -} From d655e004aa077f522ee094b9ea048c9cf385079d Mon Sep 17 00:00:00 2001 From: Mike Schouw <49021968+MikeSchouw@users.noreply.github.com> Date: Thu, 24 Aug 2023 15:53:37 +0200 Subject: [PATCH 21/21] Update release.yaml --- .github/workflows/release.yaml | 146 ++++++++++++++++----------------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 9712c97c5..738d27606 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -12,93 +12,93 @@ jobs: name: Update Readme runs-on: ubuntu-22.04 steps: - - name: Checkout code - uses: actions/checkout@v3 - with: - fetch-depth: 0 - ref: main - - name: Update versions in readme - run: | - sed -r -i "s/aws-nuke:v[0-9]+\.[0-9]+\.[0-9]+/aws-nuke:${{ github.ref_name }}/" README.md - sed -r -i "s/aws-nuke-v[0-9]+\.[0-9]+\.[0-9]+/aws-nuke-${{ github.ref_name }}/" README.md - sed -r -i "s/\/v[0-9]+\.[0-9]+\.[0-9]+\//\/${{ github.ref_name }}\//" README.md - - uses: peter-evans/create-pull-request@v5 - name: Create Pull Request - with: - title: Update readme for ${{ github.ref_name }} release - commit-message: Update readme for ${{ github.ref_name }} release - body: Updating version references in the readme to ${{ github.ref_name }} - branch: update-readme-${{ github.ref_name }} - delete-branch: true + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + ref: main + - name: Update versions in readme + run: | + sed -r -i "s/aws-nuke:v[0-9]+\.[0-9]+\.[0-9]+/aws-nuke:${{ github.ref_name }}/" README.md + sed -r -i "s/aws-nuke-v[0-9]+\.[0-9]+\.[0-9]+/aws-nuke-${{ github.ref_name }}/" README.md + sed -r -i "s/\/v[0-9]+\.[0-9]+\.[0-9]+\//\/${{ github.ref_name }}\//" README.md + - uses: peter-evans/create-pull-request@v5 + name: Create Pull Request + with: + title: Update readme for ${{ github.ref_name }} release + commit-message: Update readme for ${{ github.ref_name }} release + body: Updating version references in the readme to ${{ github.ref_name }} + branch: update-readme-${{ github.ref_name }} + delete-branch: true release: name: Publish binaries runs-on: ubuntu-22.04 steps: - - name: Setup Go - uses: actions/setup-go@v3 - with: - go-version: "1.21" - - name: Checkout code - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Build Project binaries - env: - CGO_ENABLED: 0 - run: | - make xc - - name: Upload binaries to release - uses: svenstaro/upload-release-action@v2 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: dist/aws* - tag: ${{ github.ref }} - overwrite: true - file_glob: true + - name: Setup Go + uses: actions/setup-go@v3 + with: + go-version: '1.21' + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Build Project binaries + env: + CGO_ENABLED: 0 + run: | + make xc + - name: Upload binaries to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: dist/aws* + tag: ${{ github.ref }} + overwrite: true + file_glob: true docker_build: runs-on: ubuntu-22.04 name: Docker Build steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 + - uses: actions/checkout@v3 + with: + fetch-depth: 0 - - name: Generate image tags - shell: bash - run: echo "tags=quay.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/},docker.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT - id: generate_tags + - name: Generate image tags + shell: bash + run: echo "tags=quay.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/},docker.io/rebuy/aws-nuke:${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT + id: generate_tags - - name: Set up QEMU - id: qemu - uses: docker/setup-qemu-action@v2 - with: - platforms: arm64 + - name: Set up QEMU + id: qemu + uses: docker/setup-qemu-action@v2 + with: + platforms: arm64 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - install: true + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + install: true - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} - - name: Login to Quay.io - uses: docker/login-action@v2 - with: - registry: quay.io - username: ${{ secrets.QUAY_USERNAME }} - password: ${{ secrets.QUAY_PASSWORD }} + - name: Login to Quay.io + uses: docker/login-action@v2 + with: + registry: quay.io + username: ${{ secrets.QUAY_USERNAME }} + password: ${{ secrets.QUAY_PASSWORD }} - - name: Build and push - uses: docker/build-push-action@v3 - with: - context: . - push: true - tags: ${{ steps.generate_tags.outputs.tags }} - platforms: linux/amd64,linux/arm64 + - name: Build and push + uses: docker/build-push-action@v3 + with: + context: . + push: true + tags: ${{ steps.generate_tags.outputs.tags }} + platforms: linux/amd64,linux/arm64