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 }