github.com/Cloud-Foundations/Dominator@v0.3.4/imagepublishers/amipublisher/listStreams.go (about)

     1  package amipublisher
     2  
     3  import (
     4  	"io/ioutil"
     5  	stdlog "log"
     6  
     7  	uclient "github.com/Cloud-Foundations/Dominator/imageunpacker/client"
     8  	"github.com/Cloud-Foundations/Dominator/lib/awsutil"
     9  	"github.com/Cloud-Foundations/Dominator/lib/log"
    10  	"github.com/aws/aws-sdk-go/service/ec2"
    11  )
    12  
    13  var nullLogger = stdlog.New(ioutil.Discard, "", 0)
    14  
    15  func listStreams(targets awsutil.TargetList, skipList awsutil.TargetList,
    16  	name string, logger log.Logger) (
    17  	map[string]struct{}, error) {
    18  	resultsChannel := make(chan map[string]struct{}, 1)
    19  	numTargets, err := awsutil.ForEachTarget(targets, skipList,
    20  		func(awsService *ec2.EC2, account, region string, logger log.Logger) {
    21  			results, err := listTargetStreams(awsService, name, logger)
    22  			if err != nil {
    23  				logger.Println(err)
    24  			}
    25  			resultsChannel <- results
    26  		},
    27  		logger)
    28  	// Collect results.
    29  	results := make(map[string]struct{})
    30  	for i := 0; i < numTargets; i++ {
    31  		result := <-resultsChannel
    32  		for stream := range result {
    33  			results[stream] = struct{}{}
    34  		}
    35  	}
    36  	return results, err
    37  }
    38  
    39  func listTargetStreams(awsService *ec2.EC2, name string, logger log.Logger) (
    40  	map[string]struct{}, error) {
    41  	_, srpcClient, err := getWorkingUnpacker(awsService, name, nullLogger)
    42  	if err != nil {
    43  		return nil, nil
    44  	}
    45  	defer srpcClient.Close()
    46  	status, err := uclient.GetStatus(srpcClient)
    47  	if err != nil {
    48  		logger.Println(err)
    49  		return nil, err
    50  	}
    51  	streams := make(map[string]struct{})
    52  	for stream := range status.ImageStreams {
    53  		streams[stream] = struct{}{}
    54  	}
    55  	return streams, nil
    56  }