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 }