forked from toolshed/abra
		
	
		
			
				
	
	
		
			105 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package server
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strings"
 | |
| 
 | |
| 	"coopcloud.tech/abra/cli/internal"
 | |
| 	"coopcloud.tech/abra/pkg/config"
 | |
| 	contextPkg "coopcloud.tech/abra/pkg/context"
 | |
| 	"coopcloud.tech/abra/pkg/formatter"
 | |
| 	"coopcloud.tech/abra/pkg/i18n"
 | |
| 	"coopcloud.tech/abra/pkg/log"
 | |
| 	"github.com/docker/cli/cli/connhelper/ssh"
 | |
| 	"github.com/spf13/cobra"
 | |
| )
 | |
| 
 | |
| var ServerListCommand = &cobra.Command{
 | |
| 	Use:     i18n.G("list [flags]"),
 | |
| 	Aliases: []string{i18n.G("ls")},
 | |
| 	Short:   i18n.G("List managed servers"),
 | |
| 	Args:    cobra.NoArgs,
 | |
| 	Run: func(cmd *cobra.Command, args []string) {
 | |
| 		dockerContextStore := contextPkg.NewDefaultDockerContextStore()
 | |
| 		contexts, err := dockerContextStore.Store.List()
 | |
| 		if err != nil {
 | |
| 			log.Fatal(err)
 | |
| 		}
 | |
| 
 | |
| 		table, err := formatter.CreateTable()
 | |
| 		if err != nil {
 | |
| 			log.Fatal(err)
 | |
| 		}
 | |
| 
 | |
| 		headers := []string{i18n.G("NAME"), i18n.G("HOST")}
 | |
| 		table.Headers(headers...)
 | |
| 
 | |
| 		serverNames, err := config.ReadServerNames()
 | |
| 		if err != nil {
 | |
| 			log.Fatal(err)
 | |
| 		}
 | |
| 
 | |
| 		var rows [][]string
 | |
| 		for _, serverName := range serverNames {
 | |
| 			var row []string
 | |
| 			for _, dockerCtx := range contexts {
 | |
| 				endpoint, err := contextPkg.GetContextEndpoint(dockerCtx)
 | |
| 				if err != nil && strings.Contains(err.Error(), "does not exist") {
 | |
| 					// No local context found, we can continue safely
 | |
| 					continue
 | |
| 				}
 | |
| 
 | |
| 				if dockerCtx.Name == serverName {
 | |
| 					sp, err := ssh.ParseURL(endpoint)
 | |
| 					if err != nil {
 | |
| 						log.Fatal(err)
 | |
| 					}
 | |
| 
 | |
| 					if sp.Host == "" {
 | |
| 						sp.Host = i18n.G("unknown")
 | |
| 					}
 | |
| 
 | |
| 					row = []string{serverName, sp.Host}
 | |
| 					rows = append(rows, row)
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			if len(row) == 0 {
 | |
| 				if serverName == "default" {
 | |
| 					row = []string{serverName, i18n.G("local")}
 | |
| 				} else {
 | |
| 					row = []string{serverName, i18n.G("unknown")}
 | |
| 				}
 | |
| 				rows = append(rows, row)
 | |
| 			}
 | |
| 
 | |
| 			table.Row(row...)
 | |
| 		}
 | |
| 
 | |
| 		if internal.MachineReadable {
 | |
| 			out, err := formatter.ToJSON(headers, rows)
 | |
| 			if err != nil {
 | |
| 				log.Fatal(i18n.G("unable to render to JSON: %s", err))
 | |
| 			}
 | |
| 
 | |
| 			fmt.Println(out)
 | |
| 
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		if err := formatter.PrintTable(table); err != nil {
 | |
| 			log.Fatal(err)
 | |
| 		}
 | |
| 	},
 | |
| }
 | |
| 
 | |
| func init() {
 | |
| 	ServerListCommand.Flags().BoolVarP(
 | |
| 		&internal.MachineReadable,
 | |
| 		i18n.G("machine"),
 | |
| 		i18n.G("m"),
 | |
| 		false,
 | |
| 		i18n.G("print machine-readable output"),
 | |
| 	)
 | |
| }
 |