From c9c33dd785583d227d054922627c51336059f302 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Sun, 16 Jul 2023 16:33:55 +0200 Subject: [PATCH 01/14] 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/14] 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/14] 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/14] 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/14] 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/14] 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/14] 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/14] 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/14] 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/14] 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 118865c0a57a3e8f85fe16e2ddd568ca5ed40906 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Sat, 29 Jul 2023 18:47:12 +0200 Subject: [PATCH 11/14] first attempt at apprunner-service --- resources/apprunner-service.go | 64 ++++++++++++++++ .../cloudfront-origin-access-identities.go | 76 +++++++++---------- 2 files changed, 102 insertions(+), 38 deletions(-) create mode 100644 resources/apprunner-service.go diff --git a/resources/apprunner-service.go b/resources/apprunner-service.go new file mode 100644 index 000000000..896016ba1 --- /dev/null +++ b/resources/apprunner-service.go @@ -0,0 +1,64 @@ +package resources + +import ( + "github.com/aws/aws-sdk-go/aws/session" + "github.com/rebuy-de/aws-nuke/v2/pkg/types" +) + +type AppRunnerService struct { + svc *apprunner.Apprunner + ServiceArn *string + ServiceId *string + ServiceName *string +} + +func init() { + register("AppRunnerService", ListAppRunnerServices) +} + +func ListAppRunnerServices(sess *session.Session) ([]Resource, error) { + svc := apprunner.New(sess) + resources := []Resource{} + + params := &apprunner.ListServicesInput{} + + for { + resp, err := svc.ListServices(params) + if err != nil { + return nil, err + } + + for _, item := range resp.ServiceSummaryList { + resources = append(resources, &AppRunnerService{ + svc: svc, + ServiceArn: item.ServiceArn, + ServiceId: item.ServiceId, + ServiceName: item.ServiceName, + }) + } + + if resp.NextToken == nil { + break + } + + params.NextToken = resp.NextToken + } + + return resources, nil +} + +func (f *AppRunnerService) Remove() error { + _, err := f.svc.DeleteService(&apprunner.DeleteServiceInput{ + ServiceArn: f.ServiceArn, + }) + + return err +} + +func (f *AppRunnerService) Properties() types.Properties { + properties := types.NewProperties() + properties.Set("ServiceArn", f.ServiceArn) + properties.Set("ServiceId", f.ServiceId) + properties.Set("ServiceName", f.ServiceName) + return properties +} diff --git a/resources/cloudfront-origin-access-identities.go b/resources/cloudfront-origin-access-identities.go index 375121f60..943886ad6 100644 --- a/resources/cloudfront-origin-access-identities.go +++ b/resources/cloudfront-origin-access-identities.go @@ -1,58 +1,58 @@ package resources import ( - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/cloudfront" + "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 CloudFrontOriginAccessIdentity struct { - svc *cloudfront.CloudFront - ID *string + svc *cloudfront.CloudFront + ID *string } func init() { - register("CloudFrontOriginAccessIdentity", ListCloudFrontOriginAccessIdentities) + register("CloudFrontOriginAccessIdentity", ListCloudFrontOriginAccessIdentities) } func ListCloudFrontOriginAccessIdentities(sess *session.Session) ([]Resource, error) { - svc := cloudfront.New(sess) - resources := []Resource{} - - for { - resp, err := svc.ListCloudFrontOriginAccessIdentities(nil) - if err != nil { - return nil, err - } - - for _, item := range resp.CloudFrontOriginAccessIdentityList.Items { - resources = append(resources,&CloudFrontOriginAccessIdentity{ - svc: svc, - ID: item.Id, - }) - } - return resources, nil - } + svc := cloudfront.New(sess) + resources := []Resource{} + + for { + resp, err := svc.ListCloudFrontOriginAccessIdentities(nil) + if err != nil { + return nil, err + } + + for _, item := range resp.CloudFrontOriginAccessIdentityList.Items { + resources = append(resources, &CloudFrontOriginAccessIdentity{ + svc: svc, + ID: item.Id, + }) + } + return resources, nil + } } func (f *CloudFrontOriginAccessIdentity) Remove() error { - resp, err := f.svc.GetCloudFrontOriginAccessIdentity(&cloudfront.GetCloudFrontOriginAccessIdentityInput{ - Id: f.ID, - }) - if err != nil { - return err - } - - _, err = f.svc.DeleteCloudFrontOriginAccessIdentity(&cloudfront.DeleteCloudFrontOriginAccessIdentityInput{ - Id: f.ID, - IfMatch: resp.ETag, - }) - - return err + resp, err := f.svc.GetCloudFrontOriginAccessIdentity(&cloudfront.GetCloudFrontOriginAccessIdentityInput{ + Id: f.ID, + }) + if err != nil { + return err + } + + _, err = f.svc.DeleteCloudFrontOriginAccessIdentity(&cloudfront.DeleteCloudFrontOriginAccessIdentityInput{ + Id: f.ID, + IfMatch: resp.ETag, + }) + + return err } func (f *CloudFrontOriginAccessIdentity) Properties() types.Properties { - properties := types.NewProperties() - properties.Set("ID", f.ID) - return properties + properties := types.NewProperties() + properties.Set("ID", f.ID) + return properties } From 07aec9667477cfe3db9efc13ba3bebb7b97b3231 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Sat, 29 Jul 2023 18:50:33 +0200 Subject: [PATCH 12/14] first attempt at apprunner-service --- resources/apprunner-service.go | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/apprunner-service.go b/resources/apprunner-service.go index 896016ba1..c623092b2 100644 --- a/resources/apprunner-service.go +++ b/resources/apprunner-service.go @@ -2,6 +2,7 @@ package resources import ( "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/apprunner" "github.com/rebuy-de/aws-nuke/v2/pkg/types" ) From 5f8c3efe2db989c2614a59f21bec83a3bc381227 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Sun, 30 Jul 2023 09:25:02 +0200 Subject: [PATCH 13/14] add apprunner connection as well --- resources/apprunner-connection.go | 62 +++++++++++++++++++++++++++++++ resources/apprunner-service.go | 2 +- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 resources/apprunner-connection.go diff --git a/resources/apprunner-connection.go b/resources/apprunner-connection.go new file mode 100644 index 000000000..271974378 --- /dev/null +++ b/resources/apprunner-connection.go @@ -0,0 +1,62 @@ +package resources + +import ( + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/apprunner" + "github.com/rebuy-de/aws-nuke/v2/pkg/types" +) + +type AppRunnerConnection struct { + svc *apprunner.AppRunner + ConnectionArn *string + ConnectionName *string +} + +func init() { + register("AppRunnerConnection", ListAppRunnerConnections) +} + +func ListAppRunnerConnections(sess *session.Session) ([]Resource, error) { + svc := apprunner.New(sess) + resources := []Resource{} + + params := &apprunner.ListConnectionsInput{} + + for { + resp, err := svc.ListConnections(params) + if err != nil { + return nil, err + } + + for _, item := range resp.ConnectionSummaryList { + resources = append(resources, &AppRunnerConnection{ + svc: svc, + ConnectionArn: item.ConnectionArn, + ConnectionName: item.ConnectionName, + }) + } + + if resp.NextToken == nil { + break + } + + params.NextToken = resp.NextToken + } + + return resources, nil +} + +func (f *AppRunnerConnection) Remove() error { + _, err := f.svc.DeleteConnection(&apprunner.DeleteConnectionInput{ + ConnectionArn: f.ConnectionArn, + }) + + return err +} + +func (f *AppRunnerConnection) Properties() types.Properties { + properties := types.NewProperties() + properties.Set("ConnectionArn", f.ConnectionArn) + properties.Set("ConnectionName", f.ConnectionName) + return properties +} diff --git a/resources/apprunner-service.go b/resources/apprunner-service.go index c623092b2..9a2abdc4c 100644 --- a/resources/apprunner-service.go +++ b/resources/apprunner-service.go @@ -7,7 +7,7 @@ import ( ) type AppRunnerService struct { - svc *apprunner.Apprunner + svc *apprunner.AppRunner ServiceArn *string ServiceId *string ServiceName *string From a143e112059223af8c8d5a251293d182ef4bb278 Mon Sep 17 00:00:00 2001 From: Mike Schouw Date: Sun, 30 Jul 2023 09:46:15 +0200 Subject: [PATCH 14/14] clean up --- resources/cloudwatch-rum-app.go | 60 -------------------------- resources/redshift-scheduled-action.go | 60 -------------------------- 2 files changed, 120 deletions(-) delete mode 100644 resources/cloudwatch-rum-app.go delete mode 100644 resources/redshift-scheduled-action.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 -} 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 -}