github.com/Cloud-Foundations/Dominator@v0.3.4/cmd/imagetool/listImagesNotInMdb.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/Cloud-Foundations/Dominator/imageserver/client"
     7  	"github.com/Cloud-Foundations/Dominator/lib/log"
     8  	"github.com/Cloud-Foundations/Dominator/lib/srpc"
     9  	"github.com/Cloud-Foundations/Dominator/lib/verstr"
    10  	"github.com/Cloud-Foundations/Dominator/proto/imageserver"
    11  	"github.com/Cloud-Foundations/Dominator/proto/mdbserver"
    12  )
    13  
    14  func listImagesNotInMdbSubcommand(args []string, logger log.DebugLogger) error {
    15  	imageSClient, _ := getClients()
    16  	mdbdSClient, err := dialMdbd()
    17  	if err != nil {
    18  		return err
    19  	}
    20  	if err := listImagesNotInMdb(imageSClient, mdbdSClient); err != nil {
    21  		return fmt.Errorf("error listing images not in MDB: %s", err)
    22  	}
    23  	return nil
    24  }
    25  
    26  func listImagesNotInMdb(imageSClient, mdbdSClient *srpc.Client) error {
    27  	allImageNames, err := client.ListSelectedImages(imageSClient,
    28  		imageserver.ListSelectedImagesRequest{
    29  			IgnoreExpiringImages: *ignoreExpiring,
    30  		})
    31  	if err != nil {
    32  		return err
    33  	}
    34  	request := mdbserver.ListImagesRequest{}
    35  	var reply mdbserver.ListImagesResponse
    36  	err = mdbdSClient.RequestReply("MdbServer.ListImages", request, &reply)
    37  	if err != nil {
    38  		return err
    39  	}
    40  	mdbImageNames := make(map[string]struct{},
    41  		len(reply.PlannedImages)+len(reply.RequiredImages))
    42  	for _, imageName := range reply.PlannedImages {
    43  		mdbImageNames[imageName] = struct{}{}
    44  	}
    45  	for _, imageName := range reply.RequiredImages {
    46  		mdbImageNames[imageName] = struct{}{}
    47  	}
    48  	var unrefImageNames []string
    49  	for _, imageName := range allImageNames {
    50  		if _, ok := mdbImageNames[imageName]; !ok {
    51  			unrefImageNames = append(unrefImageNames, imageName)
    52  		}
    53  	}
    54  	verstr.Sort(unrefImageNames)
    55  	for _, name := range unrefImageNames {
    56  		fmt.Println(name)
    57  	}
    58  	return nil
    59  }