package cli import ( "fmt" "io/ioutil" "os" "os/exec" "log" "github.com/urfave/cli/v2" ) var serverListCommand = &cli.Command{ Name: "list", Aliases: []string{"ls"}, Usage: "List locally-defined servers.", ArgsUsage: emptyArgsUsage, HideHelp: true, Action: func(c *cli.Context) error { abradir := os.Getenv("HOME") + "/.abra" servers, err := ioutil.ReadDir(abradir + "/servers") if err != nil { log.Fatal(err) } fmt.Println("\033[33mLoading status from", len(servers), "server(s), patience advised...\033[0m") fmt.Println(len(servers), "servers:\n") fmt.Println(" NAME\tCONNECTION") fmt.Println(" --\t--") for _, s := range servers { conn, err := exec.Command("docker", "context", "inspect", s.Name(), "-f", "{{.Endpoints.docker.Host}}").Output() if err != nil { log.Fatal(err) } fmt.Printf(" %s\t%s\n", s.Name(), string(conn)) } return nil }, } var serverAddCommand = &cli.Command{ Name: "add", Usage: "Add a server, reachable on <host>.", ArgsUsage: "<host> [<user>] [<port>]", Description: "[<user>], [<port>] SSH connection details", } var serverNewCommand = &cli.Command{ Name: "new", Usage: "Creates a VPS from a provider in your terminal!", Description: "Use a provider plugin to create an actual new server resource (VPS or otherwise) which can then be used to house a new Co-op Cloud installation.", ArgsUsage: "<provider>", HideHelp: true, } var serverRemoveCommand = &cli.Command{ Name: "remove", Aliases: []string{"rm"}, Usage: "Remove server <host>", HideHelp: true, } var serverInitCommand = &cli.Command{ Name: "init", Usage: "Set up a server for Docker swarm", HideHelp: true, ArgsUsage: "<host>", Description: `This initialisation explicitly chooses the "single host swarm" mode which uses the default IPv4 address as the advertising address. This can be re-configured later for more advanced use cases. POWERED BY docker swarm init docker network create ...`, } var serverAppsCommand = &cli.Command{ Name: "apps", Usage: `Alias for "abra app ls --server <host>"`, HideHelp: true, ArgsUsage: " ", // Removes "[arguments]" from help. Empty str's are ignored Flags: []cli.Flag{ &cli.BoolFlag{ Name: "status", Value: false, }, }, } // Reminder: The list commands are in is the order they appear in the help menu var ServerCommand = &cli.Command{ Name: "server", ArgsUsage: "<host>", Usage: "Interact with the servers hosting your Coop-Cloud apps", HideHelp: true, Subcommands: []*cli.Command{ serverNewCommand, serverInitCommand, serverAddCommand, serverListCommand, serverRemoveCommand, serverAppsCommand, }, Action: func(c *cli.Context) error { fmt.Println("server"); return nil }, }