Skip to content

Commit

Permalink
added global accelerator resources (#524)
Browse files Browse the repository at this point in the history
* added global accelerator resources

* Update resources/ga-listeners.go

Co-authored-by: Björn Häuser <bjoernhaeuser@gmail.com>

* Update resources/ga-endpoints.go

Co-authored-by: Björn Häuser <bjoernhaeuser@gmail.com>

* Update resources/ga-accelerators.go

Co-authored-by: Björn Häuser <bjoernhaeuser@gmail.com>

* refactoring type names

Co-authored-by: Björn Häuser <bjoernhaeuser@gmail.com>
  • Loading branch information
jami and bjoernhaeuser committed Aug 11, 2020
1 parent 231fcf9 commit dd8b161
Show file tree
Hide file tree
Showing 3 changed files with 293 additions and 0 deletions.
71 changes: 71 additions & 0 deletions resources/ga-accelerators.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package resources

import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/globalaccelerator"
"github.com/rebuy-de/aws-nuke/pkg/types"
)

// GlobalAccelerator model
type GlobalAccelerator struct {
svc *globalaccelerator.GlobalAccelerator
ARN *string
}

func init() {
register("GlobalAccelerator", ListGlobalAccelerators)
}

// ListGlobalAccelerators enumerates all available accelerators
func ListGlobalAccelerators(sess *session.Session) ([]Resource, error) {
svc := globalaccelerator.New(sess)
resources := []Resource{}

params := &globalaccelerator.ListAcceleratorsInput{
MaxResults: aws.Int64(100),
}

for {
output, err := svc.ListAccelerators(params)
if err != nil {
return nil, err
}

for _, accelerator := range output.Accelerators {
resources = append(resources, &GlobalAccelerator{
svc: svc,
ARN: accelerator.AcceleratorArn,
})
}

if output.NextToken == nil {
break
}

params.NextToken = output.NextToken
}

return resources, nil
}

// Remove resource
func (ga *GlobalAccelerator) Remove() error {
_, err := ga.svc.DeleteAccelerator(&globalaccelerator.DeleteAcceleratorInput{
AcceleratorArn: ga.ARN,
})

return err
}

// Properties definition
func (ga *GlobalAccelerator) Properties() types.Properties {
properties := types.NewProperties()
properties.Set("ARN", ga.ARN)
return properties
}

// String representation
func (ga *GlobalAccelerator) String() string {
return *ga.ARN
}
124 changes: 124 additions & 0 deletions resources/ga-endpoints.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
package resources

import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/globalaccelerator"
"github.com/rebuy-de/aws-nuke/pkg/types"
)

// GlobalAcceleratorEndpointGroup model
type GlobalAcceleratorEndpointGroup struct {
svc *globalaccelerator.GlobalAccelerator
ARN *string
}

func init() {
register("GlobalAcceleratorEndpointGroup", ListGlobalAcceleratorEndpointGroups)
}

// ListGlobalAcceleratorEndpointGroups enumerates all available accelerators
func ListGlobalAcceleratorEndpointGroups(sess *session.Session) ([]Resource, error) {
svc := globalaccelerator.New(sess)
acceleratorARNs := []*string{}
listenerARNs := []*string{}
resources := []Resource{}

// get all accelerator arns
acceleratorParams := &globalaccelerator.ListAcceleratorsInput{
MaxResults: aws.Int64(100),
}

for {
output, err := svc.ListAccelerators(acceleratorParams)
if err != nil {
return nil, err
}

for _, accelerator := range output.Accelerators {
acceleratorARNs = append(acceleratorARNs, accelerator.AcceleratorArn)
}

if output.NextToken == nil {
break
}

acceleratorParams.NextToken = output.NextToken
}

// get all listerners arns of all accelerators
for _, acceleratorARN := range acceleratorARNs {
listenerParams := &globalaccelerator.ListListenersInput{
MaxResults: aws.Int64(100),
AcceleratorArn: acceleratorARN,
}

for {
output, err := svc.ListListeners(listenerParams)
if err != nil {
return nil, err
}

for _, listener := range output.Listeners {
listenerARNs = append(listenerARNs, listener.ListenerArn)
}

if output.NextToken == nil {
break
}

listenerParams.NextToken = output.NextToken
}
}

// get all endpoints based on all listeners based on all accelerator
for _, listenerArn := range listenerARNs {
params := &globalaccelerator.ListEndpointGroupsInput{
MaxResults: aws.Int64(100),
ListenerArn: listenerArn,
}

for {
output, err := svc.ListEndpointGroups(params)
if err != nil {
return nil, err
}

for _, endpointGroup := range output.EndpointGroups {
resources = append(resources, &GlobalAcceleratorEndpointGroup{
svc: svc,
ARN: endpointGroup.EndpointGroupArn,
})
}

if output.NextToken == nil {
break
}

params.NextToken = output.NextToken
}
}

return resources, nil
}

// Remove resource
func (gaeg *GlobalAcceleratorEndpointGroup) Remove() error {
_, err := gaeg.svc.DeleteEndpointGroup(&globalaccelerator.DeleteEndpointGroupInput{
EndpointGroupArn: gaeg.ARN,
})

return err
}

// Properties definition
func (gaeg *GlobalAcceleratorEndpointGroup) Properties() types.Properties {
properties := types.NewProperties()
properties.Set("ARN", gaeg.ARN)
return properties
}

// String representation
func (gaeg *GlobalAcceleratorEndpointGroup) String() string {
return *gaeg.ARN
}
98 changes: 98 additions & 0 deletions resources/ga-listeners.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package resources

import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/globalaccelerator"
"github.com/rebuy-de/aws-nuke/pkg/types"
)

// GlobalAcceleratorListener model
type GlobalAcceleratorListener struct {
svc *globalaccelerator.GlobalAccelerator
ARN *string
}

func init() {
register("GlobalAcceleratorListener", ListGlobalAcceleratorListeners)
}

// ListGlobalAcceleratorListeners enumerates all available listeners of all available accelerators
func ListGlobalAcceleratorListeners(sess *session.Session) ([]Resource, error) {
svc := globalaccelerator.New(sess)
acceleratorARNs := []*string{}
resources := []Resource{}

// get all accelerator arns
acceleratorParams := &globalaccelerator.ListAcceleratorsInput{
MaxResults: aws.Int64(100),
}

for {
output, err := svc.ListAccelerators(acceleratorParams)
if err != nil {
return nil, err
}

for _, accelerator := range output.Accelerators {
acceleratorARNs = append(acceleratorARNs, accelerator.AcceleratorArn)
}

if output.NextToken == nil {
break
}

acceleratorParams.NextToken = output.NextToken
}

// get all listerners
for _, acceleratorARN := range acceleratorARNs {
params := &globalaccelerator.ListListenersInput{
MaxResults: aws.Int64(100),
AcceleratorArn: acceleratorARN,
}

for {
output, err := svc.ListListeners(params)
if err != nil {
return nil, err
}

for _, listener := range output.Listeners {
resources = append(resources, &GlobalAcceleratorListener{
svc: svc,
ARN: listener.ListenerArn,
})
}

if output.NextToken == nil {
break
}

params.NextToken = output.NextToken
}
}

return resources, nil
}

// Remove resource
func (gal *GlobalAcceleratorListener) Remove() error {
_, err := gal.svc.DeleteListener(&globalaccelerator.DeleteListenerInput{
ListenerArn: gal.ARN,
})

return err
}

// Properties definition
func (gal *GlobalAcceleratorListener) Properties() types.Properties {
properties := types.NewProperties()
properties.Set("ARN", gal.ARN)
return properties
}

// String representation
func (gal *GlobalAcceleratorListener) String() string {
return *gal.ARN
}

0 comments on commit dd8b161

Please sign in to comment.