github.com/Cloud-Foundations/Dominator@v0.3.4/cmd/imagetool/getImageUpdates.go (about) 1 package main 2 3 import ( 4 "errors" 5 "fmt" 6 "io" 7 8 "github.com/Cloud-Foundations/Dominator/lib/log" 9 "github.com/Cloud-Foundations/Dominator/lib/srpc" 10 proto "github.com/Cloud-Foundations/Dominator/proto/imageserver" 11 ) 12 13 func getImageUpdatesSubcommand(args []string, logger log.DebugLogger) error { 14 imageClient, _ := getClients() 15 if err := getImageUpdates(imageClient); err != nil { 16 return fmt.Errorf("error getting image updates: %s", err) 17 } 18 return nil 19 } 20 21 func getImageUpdates(imageSClient *srpc.Client) error { 22 conn, err := imageSClient.Call("ImageServer.GetImageUpdates") 23 if err != nil { 24 return err 25 } 26 var initialListReceived bool 27 for { 28 var imageUpdate proto.ImageUpdate 29 if err := conn.Decode(&imageUpdate); err != nil { 30 if err == io.EOF { 31 return err 32 } 33 return errors.New("decode err: " + err.Error()) 34 } 35 switch imageUpdate.Operation { 36 case proto.OperationAddImage: 37 if imageUpdate.Name == "" { // Initial list has been sent. 38 fmt.Println("INITIAL list received") 39 initialListReceived = true 40 } else if initialListReceived { 41 fmt.Printf("ADD: %s\n", imageUpdate.Name) 42 } else { 43 fmt.Printf("INIT: %s\n", imageUpdate.Name) 44 } 45 case proto.OperationDeleteImage: 46 fmt.Printf("DELETE: %s\n", imageUpdate.Name) 47 case proto.OperationMakeDirectory: 48 directory := imageUpdate.Directory 49 if directory == nil { 50 return errors.New("nil imageUpdate.Directory") 51 } 52 if initialListReceived { 53 fmt.Printf("MKDIR: %s\n", directory.Name) 54 } else { 55 fmt.Printf("DIR: %s\n", directory.Name) 56 } 57 } 58 } 59 }