Skip to content

Commit 0c78aca

Browse files
bjfish25bfisher8
and
bfisher8
authored
Add option to ingore KMS errors due to permissions (#27)
* Add option to ingore KMS errors due to permissions * Add ignored option --------- Co-authored-by: bfisher8 <bradley.fisher@optum.com>
1 parent a391a0a commit 0c78aca

File tree

5 files changed

+35
-5
lines changed

5 files changed

+35
-5
lines changed

cmd/nuke.go

+9-5
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ func (n *Nuke) Run() error {
128128
time.Sleep(5 * time.Second)
129129
}
130130

131-
fmt.Printf("Nuke complete: %d failed, %d skipped, %d finished.\n\n",
132-
n.items.Count(ItemStateFailed), n.items.Count(ItemStateFiltered), n.items.Count(ItemStateFinished))
131+
fmt.Printf("Nuke complete: %d failed, %d skipped, %d ignored, %d finished.\n\n",
132+
n.items.Count(ItemStateFailed), n.items.Count(ItemStateFiltered), n.items.Count(ItemStateIgnored), n.items.Count(ItemStateFinished))
133133

134134
return nil
135135
}
@@ -264,14 +264,18 @@ func (n *Nuke) HandleQueue() {
264264
}
265265

266266
fmt.Println()
267-
fmt.Printf("Removal requested: %d waiting, %d failed, %d skipped, %d finished\n\n",
267+
fmt.Printf("Removal requested: %d waiting, %d failed, %d skipped, %d ignored, %d finished\n\n",
268268
n.items.Count(ItemStateWaiting, ItemStatePending), n.items.Count(ItemStateFailed),
269-
n.items.Count(ItemStateFiltered), n.items.Count(ItemStateFinished))
269+
n.items.Count(ItemStateFiltered), n.items.Count(ItemStateIgnored), n.items.Count(ItemStateFinished))
270270
}
271271

272272
func (n *Nuke) HandleRemove(item *Item) {
273273
err := item.Resource.Remove()
274-
if err != nil {
274+
if err != nil && err.Error() == "ignoring error" {
275+
item.State = ItemStateIgnored
276+
item.Reason = ""
277+
return
278+
} else if err != nil {
275279
item.State = ItemStateFailed
276280
item.Reason = err.Error()
277281
return

cmd/queue.go

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const (
1616
ItemStateFailed
1717
ItemStateFiltered
1818
ItemStateFinished
19+
ItemStateIgnored
1920
)
2021

2122
// An Item describes an actual AWS resource entity with the current state and
@@ -44,6 +45,8 @@ func (i *Item) Print() {
4445
Log(i.Region, i.Type, i.Resource, ReasonSkip, i.Reason)
4546
case ItemStateFinished:
4647
Log(i.Region, i.Type, i.Resource, ReasonSuccess, "removed")
48+
case ItemStateIgnored:
49+
Log(i.Region, i.Type, i.Resource, ReasonSuccess, "ignored")
4750
}
4851
}
4952

pkg/config/config.go

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ type FeatureFlags struct {
4040
DisableDeletionProtection DisableDeletionProtection `yaml:"disable-deletion-protection"`
4141
DisableEC2InstanceStopProtection bool `yaml:"disable-ec2-instance-stop-protection"`
4242
ForceDeleteLightsailAddOns bool `yaml:"force-delete-lightsail-addons"`
43+
DisableFailOnKMSError bool `yaml:"disable-fail-on-kms-error"`
4344
}
4445

4546
type DisableDeletionProtection struct {

resources/kms-aliases.go

+11
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@ import (
66

77
"github.com/aws/aws-sdk-go/aws/session"
88
"github.com/aws/aws-sdk-go/service/kms"
9+
"github.com/rebuy-de/aws-nuke/v2/pkg/config"
910
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
1011
)
1112

1213
type KMSAlias struct {
1314
svc *kms.KMS
1415
name string
16+
17+
featureFlags config.FeatureFlags
1518
}
1619

1720
func init() {
@@ -48,13 +51,21 @@ func (e *KMSAlias) Remove() error {
4851
_, err := e.svc.DeleteAlias(&kms.DeleteAliasInput{
4952
AliasName: &e.name,
5053
})
54+
if e.featureFlags.DisableFailOnKMSError && err != nil {
55+
fmt.Printf("Ignoring KMSAlias Remove error: %s\n", err.Error())
56+
return fmt.Errorf("ignoring error")
57+
}
5158
return err
5259
}
5360

5461
func (e *KMSAlias) String() string {
5562
return e.name
5663
}
5764

65+
func (e *KMSAlias) FeatureFlags(ff config.FeatureFlags) {
66+
e.featureFlags = ff
67+
}
68+
5869
func (e *KMSAlias) Properties() types.Properties {
5970
properties := types.NewProperties()
6071
properties.

resources/kms-keys.go

+11
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/aws/aws-sdk-go/aws"
77
"github.com/aws/aws-sdk-go/aws/session"
88
"github.com/aws/aws-sdk-go/service/kms"
9+
"github.com/rebuy-de/aws-nuke/v2/pkg/config"
910
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
1011
)
1112

@@ -15,6 +16,8 @@ type KMSKey struct {
1516
state string
1617
manager *string
1718
tags []*kms.Tag
19+
20+
featureFlags config.FeatureFlags
1821
}
1922

2023
func init() {
@@ -102,13 +105,21 @@ func (e *KMSKey) Remove() error {
102105
KeyId: &e.id,
103106
PendingWindowInDays: aws.Int64(7),
104107
})
108+
if e.featureFlags.DisableFailOnKMSError && err != nil {
109+
fmt.Printf("Ignoring KMSKey Remove error: %s\n", err.Error())
110+
return fmt.Errorf("ignoring error")
111+
}
105112
return err
106113
}
107114

108115
func (e *KMSKey) String() string {
109116
return e.id
110117
}
111118

119+
func (e *KMSKey) FeatureFlags(ff config.FeatureFlags) {
120+
e.featureFlags = ff
121+
}
122+
112123
func (i *KMSKey) Properties() types.Properties {
113124
properties := types.NewProperties()
114125
properties.

0 commit comments

Comments
 (0)