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  }