tool/clean/clean_launch_configuration/clean_launch_configuration.go (52 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT
package main
import (
"context"
"errors"
"log"
"strings"
"time"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/autoscaling"
"github.com/aws/amazon-cloudwatch-agent/tool/clean"
)
func main() {
err := cleanLaunchConfiguration()
if err != nil {
log.Fatalf("errors cleaning %v", err)
}
}
func cleanLaunchConfiguration() error {
expirationDate := time.Now().UTC().Add(clean.KeepDurationSixtyDay)
ctx := context.Background()
defaultConfig, err := config.LoadDefaultConfig(ctx)
if err != nil {
return err
}
autoScalingClient := autoscaling.NewFromConfig(defaultConfig)
describeLaunchConfigurationsInput := autoscaling.DescribeLaunchConfigurationsInput{}
launchConfigOut, err := autoScalingClient.DescribeLaunchConfigurations(ctx, &describeLaunchConfigurationsInput)
if err != nil {
return err
}
if len(launchConfigOut.LaunchConfigurations) == 0 {
return errors.New("no launch configuration found")
}
log.Printf("Found %d launch configurations", len(launchConfigOut.LaunchConfigurations))
for _, launchConfig := range launchConfigOut.LaunchConfigurations {
log.Printf("Found %s with creation date: %v", *launchConfig.LaunchConfigurationName, *launchConfig.CreatedTime)
// if not cwagent-integ-test ignore it
if !strings.Contains(*launchConfig.LaunchConfigurationName, "integ") {
continue
}
if expirationDate.After(*launchConfig.CreatedTime) {
log.Printf("Try to delete %s", *launchConfig.LaunchConfigurationName)
_, err := autoScalingClient.DeleteLaunchConfiguration(ctx, &autoscaling.DeleteLaunchConfigurationInput{
LaunchConfigurationName: launchConfig.LaunchConfigurationName,
})
if err != nil {
return err
}
log.Printf("Succesfully deleted %s", *launchConfig.LaunchConfigurationName)
}
}
return nil
}