From 1c3885aeeb30cc17f410553a5125ce98e9f0b82b Mon Sep 17 00:00:00 2001 From: stephan lindauer Date: Tue, 16 Oct 2018 15:10:08 +0200 Subject: [PATCH] Adds ASG lifecycle hooks --- resources/autoscaling-lifecyclehooks.go | 63 +++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 resources/autoscaling-lifecyclehooks.go diff --git a/resources/autoscaling-lifecyclehooks.go b/resources/autoscaling-lifecyclehooks.go new file mode 100644 index 000000000..8c8978dfc --- /dev/null +++ b/resources/autoscaling-lifecyclehooks.go @@ -0,0 +1,63 @@ +package resources + +import ( + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/autoscaling" +) + +func init() { + register("LifecycleHook", ListLifecycleHooks) +} + +func ListLifecycleHooks(s *session.Session) ([]Resource, error) { + svc := autoscaling.New(s) + + asgResp, err := svc.DescribeAutoScalingGroups(&autoscaling.DescribeAutoScalingGroupsInput{}) + if err != nil { + return nil, err + } + + resources := make([]Resource, 0) + for _, asg := range asgResp.AutoScalingGroups { + lchResp, err := svc.DescribeLifecycleHooks(&autoscaling.DescribeLifecycleHooksInput{ + AutoScalingGroupName: asg.AutoScalingGroupName, + }) + if err != nil { + return nil, err + } + + for _, lch := range lchResp.LifecycleHooks { + resources = append(resources, &LifecycleHook{ + svc: svc, + lifecycleHookName: lch.LifecycleHookName, + autoScalingGroupName: lch.AutoScalingGroupName, + }) + } + } + + return resources, nil +} + +type LifecycleHook struct { + svc *autoscaling.AutoScaling + lifecycleHookName *string + autoScalingGroupName *string +} + +func (lch *LifecycleHook) Remove() error { + params := &autoscaling.DeleteLifecycleHookInput{ + AutoScalingGroupName: lch.autoScalingGroupName, + LifecycleHookName: lch.lifecycleHookName, + } + + _, err := lch.svc.DeleteLifecycleHook(params) + if err != nil { + return err + } + + return nil +} + +func (lch *LifecycleHook) String() string { + return *lch.lifecycleHookName +}