small pixel drawing of a pufferfish cascade

command/list/members/members.go

package members

import (
	"flag"
	"fmt"
	"os"

	"git.j3s.sh/cascade/api"
)

const usage = `cascade ls members [options]

  this command lists the members of the cascade serf
  cluster.

options:

  -api
    address of the api to target (default = 127.0.0.1:8500)

  -l | -details
    show more details (default = nil)
`

type Flags struct {
	apiAddr string
	details bool
}

var membersFlags Flags

func Run(args []string) {
	flags := flag.NewFlagSet("agent", flag.ContinueOnError)
	flags.Usage = func() { fmt.Printf(usage) }
	flags.StringVar(&membersFlags.apiAddr, "api", "", "")
	flags.BoolVar(&membersFlags.details, "l", false, "")
	flags.BoolVar(&membersFlags.details, "details", false, "")
	flags.Parse(args)

	cfg := api.DefaultNonPooledConfig()
	client, err := api.NewClient(cfg)
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	members, err := client.Agent().Members()
	for _, m := range members {
		if membersFlags.details {
			fmt.Printf("%s  ", m.Name)
			fmt.Printf("%s:%d  ", m.Addr, m.Port)
			fmt.Printf("%s", m.StatusPretty())
			fmt.Printf("\n")
		} else {
			fmt.Printf("%s\n", m.Name)
		}
	}
}