github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/imagepublishers/amipublisher/setTags.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/aws" 7 "github.com/aws/aws-sdk-go/service/ec2" 8 ) 9 10 func setTags(targets awsutil.TargetList, skipList awsutil.TargetList, 11 name string, tags map[string]string, logger log.Logger) error { 12 resultsChannel := make(chan error, 1) 13 numTargets, err := awsutil.ForEachTarget(targets, skipList, 14 func(awsService *ec2.EC2, account, region string, logger log.Logger) { 15 err := setTagsInTarget(awsService, name, tags, logger) 16 if err != nil { 17 logger.Println(err) 18 } 19 resultsChannel <- err 20 }, 21 logger) 22 // Collect results. 23 for i := 0; i < numTargets; i++ { 24 e := <-resultsChannel 25 if e != nil && err == nil { 26 err = e 27 } 28 } 29 return err 30 } 31 32 func setTagsInTarget(awsService *ec2.EC2, name string, tags map[string]string, 33 logger log.Logger) error { 34 unpackerInstances, err := getInstances(awsService, name) 35 if err != nil { 36 return err 37 } 38 if len(unpackerInstances) < 1 { 39 return nil 40 } 41 var firstError error 42 for _, instance := range unpackerInstances { 43 err := createTags(awsService, aws.StringValue(instance.InstanceId), 44 tags) 45 if err != nil && firstError == nil { 46 firstError = err 47 } 48 } 49 return firstError 50 }