func destroyECSAutoScaling()

in tools/workflow/clean_aws_resources.go [119:182]


func destroyECSAutoScaling() {
	//Set up aws go sdk ec2 client
	testSession, err := session.NewSession()

	if err != nil {
		log.Fatalf("Error creating session %v", err)
	}

	autoscalingclient := autoscaling.New(testSession)

	// Get list of autoscaling group
	//Autoscaling's tag filter
	autoscalingTagFilter := autoscaling.Filter{Name: aws.String("tag:Component"), Values: []*string{aws.String("aoc")}}

	//Allow to load all the auto scaling groups since the default respond is paginated auto scaling groups.
	//Look into the documentations and read the starting-token for more details
	//Documentation: https://docs.aws.amazon.com/cli/latest/reference/autoscaling/describe-auto-scaling-groups.html#options
	var nextToken *string

	for {
		describeAutoScalingInputs := &autoscaling.DescribeAutoScalingGroupsInput{Filters: []*autoscaling.Filter{&autoscalingTagFilter}, NextToken: nextToken}
		describeAutoScalingOutputs, err := autoscalingclient.DescribeAutoScalingGroups(describeAutoScalingInputs)

		if err != nil {
			log.Fatalf("Failed to get metadata from launch configuration because of %v", err)
		}

		for _, asg := range describeAutoScalingOutputs.AutoScalingGroups {
			//Skipping asg that does not older than 5 days
			if !time.Now().UTC().Add(pastDayDeleteCalculation).After(*asg.CreatedTime) {
				continue
			}

			deleteAutoScalingGroupInput := &autoscaling.DeleteAutoScalingGroupInput{
				AutoScalingGroupName: asg.AutoScalingGroupName,
				ForceDelete:          aws.Bool(true),
			}

			_, err = autoscalingclient.DeleteAutoScalingGroup(deleteAutoScalingGroupInput)

			if err != nil {
				log.Fatalf("Failed to delete asg %s because of %v", *asg.AutoScalingGroupName, err)
			}

			deleteLaunchConfigurationInput := &autoscaling.DeleteLaunchConfigurationInput{
				LaunchConfigurationName: asg.LaunchConfigurationName,
			}

			_, err = autoscalingclient.DeleteLaunchConfiguration(deleteLaunchConfigurationInput)

			if err != nil {
				log.Fatalf("Failed to delete lc of asg %s  because of %v", *asg.AutoScalingGroupName, err)
			}

			log.Printf("Delete asg %s successfully", *asg.AutoScalingGroupName)
		}

		if describeAutoScalingOutputs.NextToken == nil {
			break
		}

		nextToken = describeAutoScalingOutputs.NextToken
	}
}