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 }