github.com/verrazzano/verrazzano@v1.7.1/tools/psr/psrctl/cmd/start/start.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 start
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/spf13/cobra"
    10  	helmcli "github.com/verrazzano/verrazzano/pkg/helm"
    11  	"github.com/verrazzano/verrazzano/tools/psr/psrctl/cmd/constants"
    12  	"github.com/verrazzano/verrazzano/tools/psr/psrctl/pkg/manifest"
    13  	"github.com/verrazzano/verrazzano/tools/psr/psrctl/pkg/scenario"
    14  	cmdhelpers "github.com/verrazzano/verrazzano/tools/vz/cmd/helpers"
    15  	"github.com/verrazzano/verrazzano/tools/vz/pkg/helpers"
    16  )
    17  
    18  const (
    19  	CommandName = "start"
    20  	helpShort   = "Start a PSR scenario"
    21  	helpLong    = `The command 'start' starts a PSR scenario in the specified namespace. 
    22  Multiple scenarios can be started in the same namespace.`
    23  	helpExample = `psrctl start -s ops-s1`
    24  )
    25  
    26  var scenarioID string
    27  var namespace string
    28  var scenarioDir string
    29  var workerImage string
    30  var imagePullSecret string
    31  
    32  func NewCmdStart(vzHelper helpers.VZHelper) *cobra.Command {
    33  	cmd := cmdhelpers.NewCommand(vzHelper, CommandName, helpShort, helpLong)
    34  	cmd.RunE = func(cmd *cobra.Command, args []string) error {
    35  		return RunCmdStart(cmd, vzHelper)
    36  	}
    37  	cmd.Example = helpExample
    38  
    39  	cmd.PersistentFlags().StringVarP(&scenarioID, constants.FlagScenario, constants.FlagsScenarioShort, "", constants.FlagScenarioHelp)
    40  	cmd.PersistentFlags().StringVarP(&namespace, constants.FlagNamespace, constants.FlagNamespaceShort, "default", constants.FlagNamespaceHelp)
    41  	cmd.PersistentFlags().StringVarP(&scenarioDir, constants.FlagScenarioDir, constants.FlagScenarioDirShort, "", constants.FlagScenarioDirHelp)
    42  	cmd.PersistentFlags().StringVarP(&workerImage, constants.WorkerImageName, constants.WorkerImageNameShort, constants.GetDefaultWorkerImage(), constants.WorkerImageNameHelp)
    43  	cmd.PersistentFlags().StringVarP(&imagePullSecret, constants.ImagePullSecretName, constants.ImagePullSecretNameShort, constants.ImagePullSecDefault, constants.ImagePullSecretNameHelp)
    44  
    45  	return cmd
    46  }
    47  
    48  // RunCmdStart - Run the "psrctl start" command
    49  func RunCmdStart(cmd *cobra.Command, vzHelper helpers.VZHelper) error {
    50  	// GetScenarioManifest gets the ScenarioManifest for the given scenarioID
    51  	manifestMan, err := manifest.NewManager(scenarioDir)
    52  	if err != nil {
    53  		return fmt.Errorf("Failed to create scenario ScenarioMananger %v", err)
    54  	}
    55  	scenarioMan, err := manifestMan.FindScenarioManifestByID(scenarioID)
    56  	if err != nil {
    57  		return fmt.Errorf("Failed to find scenario manifest %s: %v", scenarioID, err)
    58  	}
    59  	if scenarioMan == nil {
    60  		return fmt.Errorf("Failed to find scenario manifest with ID %s", scenarioID)
    61  	}
    62  
    63  	m, err := scenario.NewManager(namespace, buildHelmOverrides()...)
    64  	if err != nil {
    65  		return fmt.Errorf("Failed to create scenario ScenarioMananger %v", err)
    66  	}
    67  
    68  	fmt.Fprintf(vzHelper.GetOutputStream(), "Starting scenario %s\n", scenarioMan.ID)
    69  	msg, err := m.StartScenario(manifestMan, scenarioMan, vzHelper)
    70  	if err != nil {
    71  		// Cobra will display failure message
    72  		return fmt.Errorf("Failed to start scenario %s/%s: %v\n%s", namespace, scenarioID, err, msg)
    73  	}
    74  	fmt.Fprintf(vzHelper.GetOutputStream(), "Scenario %s successfully started\n", scenarioMan.ID)
    75  
    76  	return nil
    77  }
    78  
    79  func buildHelmOverrides() []helmcli.HelmOverrides {
    80  	return []helmcli.HelmOverrides{
    81  		{SetOverrides: fmt.Sprintf("%s=%s", constants.ImageNameKey, workerImage)},
    82  		{SetOverrides: fmt.Sprintf("%s=%s", constants.ImagePullSecKey, imagePullSecret)},
    83  	}
    84  }