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 }