2021-07-15 02:44:07 +00:00
package cli
import (
"fmt"
2021-07-15 15:04:40 +00:00
"io/ioutil"
"os"
"os/exec"
"log"
2021-07-15 02:44:07 +00:00
"github.com/urfave/cli/v2"
)
var serverListCommand = & cli . Command {
Name : "list" ,
Aliases : [ ] string { "ls" } ,
Usage : "List locally-defined servers." ,
ArgsUsage : emptyArgsUsage ,
HideHelp : true ,
2021-07-15 15:04:40 +00:00
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
} ,
2021-07-15 02:44:07 +00:00
}
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 } ,
}