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  }