github.com/verrazzano/verrazzano@v1.7.0/tools/psr/psrctl/cmd/list/list.go (about) 1 // Copyright (c) 2022, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package list 5 6 import ( 7 "encoding/json" 8 "fmt" 9 10 "github.com/spf13/cobra" 11 "github.com/verrazzano/verrazzano/tools/psr/psrctl/cmd/constants" 12 "github.com/verrazzano/verrazzano/tools/psr/psrctl/pkg/scenario" 13 cmdhelpers "github.com/verrazzano/verrazzano/tools/vz/cmd/helpers" 14 "github.com/verrazzano/verrazzano/tools/vz/pkg/helpers" 15 ) 16 17 const ( 18 CommandName = "list" 19 helpShort = "List the running PSR scenarios" 20 helpLong = `The command 'list' lists the PSR scenarios that are running in the cluster or in the specified namespace` 21 helpExample = ` 22 psrctl list 23 psrctl list -A 24 psrctl list -n foo 25 ` 26 ) 27 28 var scenarioID string 29 var namespace string 30 var allNamepaces bool 31 var outputFormat string 32 33 func NewCmdList(vzHelper helpers.VZHelper) *cobra.Command { 34 cmd := cmdhelpers.NewCommand(vzHelper, CommandName, helpShort, helpLong) 35 cmd.RunE = func(cmd *cobra.Command, args []string) error { 36 return RunCmdList(cmd, vzHelper) 37 } 38 cmd.Example = helpExample 39 40 cmd.PersistentFlags().StringVarP(&scenarioID, constants.FlagScenario, constants.FlagsScenarioShort, "", constants.FlagScenarioHelp) 41 cmd.PersistentFlags().StringVarP(&namespace, constants.FlagNamespace, constants.FlagNamespaceShort, "default", constants.FlagNamespaceHelp) 42 cmd.PersistentFlags().BoolVarP(&allNamepaces, constants.FlagAll, constants.FlagAllShort, false, constants.FlagAllHelp) 43 cmd.PersistentFlags().StringVarP(&outputFormat, constants.OutputFormatName, constants.OutputFormatNameShort, "text", constants.OutputFormatHelp) 44 cmd.PersistentFlags().MarkHidden(constants.OutputFormatName) 45 46 return cmd 47 } 48 49 // RunCmdList - Run the "psrctl List" command 50 func RunCmdList(cmd *cobra.Command, vzHelper helpers.VZHelper) error { 51 if allNamepaces { 52 namespace = "" 53 } 54 scenarioMan, err := scenario.NewManager(namespace) 55 56 if err != nil { 57 return fmt.Errorf("Failed to create scenario ScenarioMananger %v", err) 58 } 59 60 scenarios, err := scenarioMan.FindRunningScenarios() 61 if err != nil { 62 return fmt.Errorf("Failed to find running scenarios %s: %v", scenarioID, err) 63 } 64 if len(scenarios) == 0 { 65 if len(namespace) == 0 { 66 fmt.Fprintln(vzHelper.GetOutputStream(), "There are no scenarios running in the cluster") 67 } else { 68 fmt.Fprintf(vzHelper.GetOutputStream(), "There are no scenarios running in namespace %s\n", namespace) 69 } 70 return nil 71 } 72 73 if outputFormat == "json" { 74 jsonOut, err := json.Marshal(scenarios) 75 if err != nil { 76 return err 77 } 78 fmt.Fprint(vzHelper.GetOutputStream(), string(jsonOut)) 79 return nil 80 } 81 82 fmt.Fprintln(vzHelper.GetOutputStream()) 83 if len(namespace) > 0 { 84 fmt.Fprintf(vzHelper.GetOutputStream(), "Scenarios running in namespace %s\n", namespace) 85 } else { 86 fmt.Fprintln(vzHelper.GetOutputStream(), "Scenarios running in the cluster") 87 } 88 89 for _, sc := range scenarios { 90 fmt.Fprintln(vzHelper.GetOutputStream(), "----------------") 91 fmt.Fprintf(vzHelper.GetOutputStream(), "Namespace: %s\n", sc.Namespace) 92 fmt.Fprintf(vzHelper.GetOutputStream(), "%s %s\n", "ID: ", sc.ID) 93 fmt.Fprintf(vzHelper.GetOutputStream(), "%s %s\n", "Description: ", sc.Description) 94 fmt.Fprintln(vzHelper.GetOutputStream(), "Helm releases:") 95 for _, h := range sc.HelmReleases { 96 fmt.Fprintf(vzHelper.GetOutputStream(), "%s/%s\n", h.Namespace, h.Name) 97 } 98 fmt.Fprintln(vzHelper.GetOutputStream()) 99 } 100 101 return nil 102 }