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 }