github.com/grafana/tanka@v0.26.1-0.20240506093700-c22cfc35c21a/cmd/tk/status.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"sort"
     7  	"text/tabwriter"
     8  
     9  	"github.com/fatih/structs"
    10  
    11  	"github.com/go-clix/cli"
    12  
    13  	"github.com/grafana/tanka/pkg/tanka"
    14  )
    15  
    16  func statusCmd() *cli.Command {
    17  	cmd := &cli.Command{
    18  		Use:   "status <path>",
    19  		Short: "display an overview of the environment, including contents and metadata.",
    20  		Args:  workflowArgs,
    21  	}
    22  
    23  	vars := workflowFlags(cmd.Flags())
    24  	getJsonnetOpts := jsonnetFlags(cmd.Flags())
    25  
    26  	cmd.Run = func(cmd *cli.Command, args []string) error {
    27  		status, err := tanka.Status(args[0], tanka.Opts{
    28  			JsonnetImplementation: vars.jsonnetImplementation,
    29  			JsonnetOpts:           getJsonnetOpts(),
    30  			Name:                  vars.name,
    31  		})
    32  		if err != nil {
    33  			return err
    34  		}
    35  
    36  		context := status.Client.Kubeconfig.Context
    37  		fmt.Println("Context:", context.Name)
    38  		fmt.Println("Cluster:", context.Context.Cluster)
    39  		fmt.Println("Environment:")
    40  
    41  		specMap := structs.Map(status.Env.Spec)
    42  		var keys []string
    43  		for k := range specMap {
    44  			keys = append(keys, k)
    45  		}
    46  		sort.Strings(keys)
    47  		for _, k := range keys {
    48  			v := specMap[k]
    49  			fmt.Printf("  %s: %v\n", k, v)
    50  		}
    51  
    52  		fmt.Println("Resources:")
    53  		f := "  %s\t%s/%s\n"
    54  		w := tabwriter.NewWriter(os.Stdout, 0, 0, 4, ' ', 0)
    55  		fmt.Fprintln(w, "  NAMESPACE\tOBJECTSPEC")
    56  		for _, r := range status.Resources {
    57  			fmt.Fprintf(w, f, r.Metadata().Namespace(), r.Kind(), r.Metadata().Name())
    58  		}
    59  		w.Flush()
    60  
    61  		return nil
    62  	}
    63  	return cmd
    64  }