Skip to content
This repository was archived by the owner on Oct 15, 2024. It is now read-only.

CLOUD-1332 adds dynamodb items nuking #60

Merged
merged 1 commit into from
Dec 5, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions resources/dynamodb-items.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package resources

import (
"strings"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/dynamodb"
)

type DynamoDBTableItem struct {
svc *dynamodb.DynamoDB
id map[string]*dynamodb.AttributeValue
table Resource
}

func (n *DynamoDBNuke) ListItems() ([]Resource, error) {
tables, tablesErr := n.ListTables()
if tablesErr != nil {
return nil, tablesErr
}

resources := make([]Resource, 0)
for _, dynamoTable := range tables {
describeParams := &dynamodb.DescribeTableInput{
TableName: aws.String(dynamoTable.String()),
}

descResp, descErr := n.Service.DescribeTable(describeParams)
if descErr != nil {
return nil, descErr
}

key := *descResp.Table.KeySchema[0].AttributeName
params := &dynamodb.ScanInput{
TableName: aws.String(dynamoTable.String()),
ProjectionExpression: aws.String(key),
}

scanResp, scanErr := n.Service.Scan(params)
if scanErr != nil {
return nil, scanErr
}

for _, itemMap := range scanResp.Items {
resources = append(resources, &DynamoDBTableItem{
svc: n.Service,
id: itemMap,
table: dynamoTable,
})
}
}

return resources, nil
}

func (i *DynamoDBTableItem) Remove() error {
params := &dynamodb.DeleteItemInput{
Key: i.id,
TableName: aws.String(i.table.String()),
}

_, err := i.svc.DeleteItem(params)
if err != nil {
return err
}

return nil
}

func (i *DynamoDBTableItem) String() string {
table := i.table.String()
var keyField string

for _, value := range i.id {
value := strings.TrimSpace(value.String())
keyField = string([]rune(value)[8:(len([]rune(value)) - 3)])
}

return table + " -> " + keyField
}
45 changes: 45 additions & 0 deletions resources/dynamodb-tables.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package resources

import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/dynamodb"
)

type DynamoDBTable struct {
svc *dynamodb.DynamoDB
id string
}

func (n *DynamoDBNuke) ListTables() ([]Resource, error) {
resp, err := n.Service.ListTables(&dynamodb.ListTablesInput{})
if err != nil {
return nil, err
}

resources := make([]Resource, 0)
for _, tableName := range resp.TableNames {
resources = append(resources, &DynamoDBTable{
svc: n.Service,
id: *tableName,
})
}

return resources, nil
}

func (i *DynamoDBTable) Remove() error {
params := &dynamodb.DeleteTableInput{
TableName: aws.String(i.id),
}

_, err := i.svc.DeleteTable(params)
if err != nil {
return err
}

return nil
}

func (i *DynamoDBTable) String() string {
return i.id
}
4 changes: 4 additions & 0 deletions resources/listers.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/aws/aws-sdk-go/service/cloudformation"
"github.com/aws/aws-sdk-go/service/cloudtrail"
"github.com/aws/aws-sdk-go/service/cloudwatchevents"
"github.com/aws/aws-sdk-go/service/dynamodb"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/aws/aws-sdk-go/service/ecr"
"github.com/aws/aws-sdk-go/service/efs"
Expand Down Expand Up @@ -37,6 +38,7 @@ func GetListers(sess *session.Session) []ResourceLister {
kms = KMSNuke{kms.New(sess)}
lambda = LambdaNuke{lambda.New(sess)}
rds = RDSNuke{rds.New(sess)}
dynamodb = DynamoDBNuke{dynamodb.New(sess)}
route53 = Route53Nuke{route53.New(sess)}
s3 = S3Nuke{s3.New(sess)}
sns = SNSNuke{sns.New(sess)}
Expand Down Expand Up @@ -98,6 +100,8 @@ func GetListers(sess *session.Session) []ResourceLister {
rds.ListParameterGroups,
rds.ListSnapshots,
rds.ListSubnetGroups,
dynamodb.ListItems,
dynamodb.ListTables,
route53.ListHostedZones,
route53.ListResourceRecords,
s3.ListBuckets,
Expand Down
1 change: 1 addition & 0 deletions resources/rds-dbparametergroups.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package resources
import (
"fmt"
"strings"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/rds"
)
Expand Down
5 changes: 5 additions & 0 deletions resources/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"github.com/aws/aws-sdk-go/service/cloudformation"
"github.com/aws/aws-sdk-go/service/cloudtrail"
"github.com/aws/aws-sdk-go/service/cloudwatchevents"
"github.com/aws/aws-sdk-go/service/dynamodb"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/aws/aws-sdk-go/service/ecr"
"github.com/aws/aws-sdk-go/service/efs"
Expand Down Expand Up @@ -72,6 +73,10 @@ type RDSNuke struct {
Service *rds.RDS
}

type DynamoDBNuke struct {
Service *dynamodb.DynamoDB
}

type Route53Nuke struct {
Service *route53.Route53
}
Expand Down