github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/imagepublishers/amipublisher/terminateInstances.go (about)

     1  package amipublisher
     2  
     3  import (
     4  	"github.com/Cloud-Foundations/Dominator/lib/awsutil"
     5  	"github.com/Cloud-Foundations/Dominator/lib/log"
     6  	"github.com/aws/aws-sdk-go/service/ec2"
     7  )
     8  
     9  func terminateInstances(targets awsutil.TargetList, skipList awsutil.TargetList,
    10  	name string, logger log.Logger) error {
    11  	resultsChannel := make(chan error, 1)
    12  	numTargets, err := awsutil.ForEachTarget(targets, skipList,
    13  		func(awsService *ec2.EC2, account, region string, logger log.Logger) {
    14  			err := terminateInstancesInTarget(awsService, name, logger)
    15  			if err != nil {
    16  				logger.Println(err)
    17  			}
    18  			resultsChannel <- err
    19  		},
    20  		logger)
    21  	// Collect results.
    22  	for i := 0; i < numTargets; i++ {
    23  		e := <-resultsChannel
    24  		if e != nil && err == nil {
    25  			err = e
    26  		}
    27  	}
    28  	return err
    29  }
    30  
    31  func terminateInstancesInTarget(awsService *ec2.EC2, name string,
    32  	logger log.Logger) error {
    33  	instances, err := getInstances(awsService, name)
    34  	if err != nil {
    35  		return err
    36  	}
    37  	if len(instances) < 1 {
    38  		return nil
    39  	}
    40  	return libTerminateInstances(awsService, getInstanceIds(instances)...)
    41  }