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  }