Skip to content

Commit 566bb86

Browse files
authored
Add support for Redshift Serverless namespaces, snapshots and workgroups. (#1194)
1 parent d6b1374 commit 566bb86

File tree

3 files changed

+206
-0
lines changed

3 files changed

+206
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package resources
2+
3+
import (
4+
"github.com/aws/aws-sdk-go/aws"
5+
"github.com/aws/aws-sdk-go/aws/session"
6+
"github.com/aws/aws-sdk-go/service/redshiftserverless"
7+
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
8+
)
9+
10+
type RedshiftServerlessNamespace struct {
11+
svc *redshiftserverless.RedshiftServerless
12+
namespace *redshiftserverless.Namespace
13+
}
14+
15+
func init() {
16+
register("RedshiftServerlessNamespace", ListRedshiftServerlessNamespaces)
17+
}
18+
19+
func ListRedshiftServerlessNamespaces(sess *session.Session) ([]Resource, error) {
20+
svc := redshiftserverless.New(sess)
21+
resources := []Resource{}
22+
23+
params := &redshiftserverless.ListNamespacesInput{
24+
MaxResults: aws.Int64(100),
25+
}
26+
27+
for {
28+
output, err := svc.ListNamespaces(params)
29+
if err != nil {
30+
return nil, err
31+
}
32+
33+
for _, namespace := range output.Namespaces {
34+
resources = append(resources, &RedshiftServerlessNamespace{
35+
svc: svc,
36+
namespace: namespace,
37+
})
38+
}
39+
40+
if output.NextToken == nil {
41+
break
42+
}
43+
44+
params.NextToken = output.NextToken
45+
}
46+
47+
return resources, nil
48+
}
49+
50+
func (n *RedshiftServerlessNamespace) Properties() types.Properties {
51+
properties := types.NewProperties().
52+
Set("CreationDate", n.namespace.CreationDate).
53+
Set("NamespaceName", n.namespace.NamespaceName)
54+
55+
return properties
56+
}
57+
58+
func (n *RedshiftServerlessNamespace) Remove() error {
59+
_, err := n.svc.DeleteNamespace(&redshiftserverless.DeleteNamespaceInput{
60+
NamespaceName: n.namespace.NamespaceName,
61+
})
62+
63+
return err
64+
}
65+
66+
func (n *RedshiftServerlessNamespace) String() string {
67+
return *n.namespace.NamespaceName
68+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package resources
2+
3+
import (
4+
"github.com/aws/aws-sdk-go/aws"
5+
"github.com/aws/aws-sdk-go/aws/session"
6+
"github.com/aws/aws-sdk-go/service/redshiftserverless"
7+
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
8+
)
9+
10+
type RedshiftServerlessSnapshot struct {
11+
svc *redshiftserverless.RedshiftServerless
12+
snapshot *redshiftserverless.Snapshot
13+
}
14+
15+
func init() {
16+
register("RedshiftServerlessSnapshot", ListRedshiftServerlessSnapshots)
17+
}
18+
19+
func ListRedshiftServerlessSnapshots(sess *session.Session) ([]Resource, error) {
20+
svc := redshiftserverless.New(sess)
21+
resources := []Resource{}
22+
23+
params := &redshiftserverless.ListSnapshotsInput{
24+
MaxResults: aws.Int64(100),
25+
}
26+
27+
for {
28+
output, err := svc.ListSnapshots(params)
29+
if err != nil {
30+
return nil, err
31+
}
32+
33+
for _, snapshot := range output.Snapshots {
34+
resources = append(resources, &RedshiftServerlessSnapshot{
35+
svc: svc,
36+
snapshot: snapshot,
37+
})
38+
}
39+
40+
if output.NextToken == nil {
41+
break
42+
}
43+
44+
params.NextToken = output.NextToken
45+
}
46+
47+
return resources, nil
48+
}
49+
50+
func (s *RedshiftServerlessSnapshot) Properties() types.Properties {
51+
properties := types.NewProperties().
52+
Set("CreateTime", s.snapshot.SnapshotCreateTime).
53+
Set("Namespace", s.snapshot.NamespaceName).
54+
Set("SnapshotName", s.snapshot.SnapshotName)
55+
56+
return properties
57+
}
58+
59+
func (s *RedshiftServerlessSnapshot) Remove() error {
60+
_, err := s.svc.DeleteSnapshot(&redshiftserverless.DeleteSnapshotInput{
61+
SnapshotName: s.snapshot.SnapshotName,
62+
})
63+
64+
return err
65+
}
66+
67+
func (s *RedshiftServerlessSnapshot) String() string {
68+
return *s.snapshot.SnapshotName
69+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package resources
2+
3+
import (
4+
"github.com/aws/aws-sdk-go/aws"
5+
"github.com/aws/aws-sdk-go/aws/session"
6+
"github.com/aws/aws-sdk-go/service/redshiftserverless"
7+
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
8+
)
9+
10+
type RedshiftServerlessWorkgroup struct {
11+
svc *redshiftserverless.RedshiftServerless
12+
workgroup *redshiftserverless.Workgroup
13+
}
14+
15+
func init() {
16+
register("RedshiftServerlessWorkgroup", ListRedshiftServerlessWorkgroups)
17+
}
18+
19+
func ListRedshiftServerlessWorkgroups(sess *session.Session) ([]Resource, error) {
20+
svc := redshiftserverless.New(sess)
21+
resources := []Resource{}
22+
23+
params := &redshiftserverless.ListWorkgroupsInput{
24+
MaxResults: aws.Int64(100),
25+
}
26+
27+
for {
28+
output, err := svc.ListWorkgroups(params)
29+
if err != nil {
30+
return nil, err
31+
}
32+
33+
for _, workgroup := range output.Workgroups {
34+
resources = append(resources, &RedshiftServerlessWorkgroup{
35+
svc: svc,
36+
workgroup: workgroup,
37+
})
38+
}
39+
40+
if output.NextToken == nil {
41+
break
42+
}
43+
44+
params.NextToken = output.NextToken
45+
}
46+
47+
return resources, nil
48+
}
49+
50+
func (w *RedshiftServerlessWorkgroup) Properties() types.Properties {
51+
properties := types.NewProperties().
52+
Set("CreationDate", w.workgroup.CreationDate).
53+
Set("Namespace", w.workgroup.NamespaceName).
54+
Set("WorkgroupName", w.workgroup.WorkgroupName)
55+
56+
return properties
57+
}
58+
59+
func (w *RedshiftServerlessWorkgroup) Remove() error {
60+
_, err := w.svc.DeleteWorkgroup(&redshiftserverless.DeleteWorkgroupInput{
61+
WorkgroupName: w.workgroup.WorkgroupName,
62+
})
63+
64+
return err
65+
}
66+
67+
func (w *RedshiftServerlessWorkgroup) String() string {
68+
return *w.workgroup.WorkgroupName
69+
}

0 commit comments

Comments
 (0)