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 }