github.com/yasker/longhorn-engine@v0.0.0-20160621014712-6ed6cfca0729/app/ls_replica.go (about)

     1  package app
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"text/tabwriter"
     7  
     8  	"github.com/Sirupsen/logrus"
     9  	"github.com/codegangsta/cli"
    10  	"github.com/rancher/longhorn/controller/client"
    11  	replicaClient "github.com/rancher/longhorn/replica/client"
    12  )
    13  
    14  func LsReplicaCmd() cli.Command {
    15  	return cli.Command{
    16  		Name:      "ls-replica",
    17  		ShortName: "ls",
    18  		Action: func(c *cli.Context) {
    19  			if err := lsReplica(c); err != nil {
    20  				logrus.Fatalf("Error running ls command: %v", err)
    21  			}
    22  		},
    23  	}
    24  }
    25  
    26  func getCli(c *cli.Context) *client.ControllerClient {
    27  	url := c.GlobalString("url")
    28  	return client.NewControllerClient(url)
    29  
    30  }
    31  
    32  func lsReplica(c *cli.Context) error {
    33  	controllerClient := getCli(c)
    34  
    35  	reps, err := controllerClient.ListReplicas()
    36  	if err != nil {
    37  		return err
    38  	}
    39  
    40  	format := "%s\t%s\t%v\n"
    41  	tw := tabwriter.NewWriter(os.Stdout, 0, 20, 1, ' ', 0)
    42  	fmt.Fprintf(tw, format, "ADDRESS", "MODE", "CHAIN")
    43  	for _, r := range reps {
    44  		chain := interface{}("")
    45  		chainList, err := getChain(r.Address)
    46  		if err == nil {
    47  			chain = chainList
    48  		}
    49  		fmt.Fprintf(tw, format, r.Address, r.Mode, chain)
    50  	}
    51  	tw.Flush()
    52  
    53  	return nil
    54  }
    55  
    56  func getChain(address string) ([]string, error) {
    57  	repClient, err := replicaClient.NewReplicaClient(address)
    58  	if err != nil {
    59  		return nil, err
    60  	}
    61  
    62  	r, err := repClient.GetReplica()
    63  	if err != nil {
    64  		return nil, err
    65  	}
    66  
    67  	return r.Chain, err
    68  }