github.com/verrazzano/verrazzano@v1.7.1/tools/psr/psrctl/pkg/scenario/update.go (about) 1 // Copyright (c) 2022, 2023, 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 scenario 5 6 import ( 7 "fmt" 8 "os" 9 "path/filepath" 10 11 helmcli "github.com/verrazzano/verrazzano/pkg/helm" 12 "github.com/verrazzano/verrazzano/tools/psr/psrctl/pkg/manifest" 13 "github.com/verrazzano/verrazzano/tools/vz/pkg/helpers" 14 ) 15 16 var UpdateUpgradeFunc = helmcli.Upgrade 17 var UpdateGetValuesFunc = helmcli.GetValues 18 19 // UpdateScenario updates a running Scenario 20 // The scenario manifest directory can be different that the one used to start the 21 // scenario. However, the scenario.yaml must be identical. In fact, the scenario.yaml 22 // is ignored during update, the code uses the scenario YAML information stored in the ConfigMap. 23 func (m ScenarioMananger) UpdateScenario(manifestMan manifest.ManifestManager, scman *manifest.ScenarioManifest, vzHelper helpers.VZHelper) (string, error) { 24 // Make sure the scenario is running 25 scenario, err := m.FindRunningScenarioByID(scman.ID) 26 if err != nil { 27 return "", err 28 } 29 30 // Helm upgrade each use case 31 for _, hr := range scenario.HelmReleases { 32 stderr, err := m.doHelmUpgrade(manifestMan, scman, hr, vzHelper) 33 if err != nil { 34 return stderr, err 35 } 36 } 37 return "", nil 38 } 39 40 // doHelmUpgrade runs the Helm upgrade command, applying helm overrides. 41 func (m ScenarioMananger) doHelmUpgrade(manifestMan manifest.ManifestManager, scman *manifest.ScenarioManifest, hr HelmRelease, vzHelper helpers.VZHelper) (string, error) { 42 // Create the set of HelmOverrides, initialized from the manager settings 43 helmOverrides := m.HelmOverrides 44 45 // Get existing Helm values for the release. These need to be passed since --reuse-values is not used. 46 stdout, err := UpdateGetValuesFunc(m.Log, hr.Name, hr.Namespace) 47 if err != nil { 48 return "", err 49 } 50 51 // Create a temp file with the existing values and add to helm overrides 52 tmpPath := filepath.Join(manifestMan.Manifest.RootTmpDir, fmt.Sprintf("upgrade-%s-%s", hr.Namespace, hr.Name)) 53 // delete any existing update tmp file, shouldn't exist but just in case 54 os.RemoveAll(tmpPath) 55 err = os.WriteFile(tmpPath, stdout, 0600) 56 if err != nil { 57 return "", fmt.Errorf("Failed to create temporary file %s", tmpPath) 58 } 59 defer os.RemoveAll(tmpPath) 60 helmOverrides = append(helmOverrides, helmcli.HelmOverrides{FileOverride: tmpPath}) 61 62 // Build scenario override absolute path for the use case, E.G manifests/scenarios/opensearch/s1/usecase-overrides/getlogs-fast.yaml 63 scOverride := filepath.Join(scman.ScenarioUsecaseOverridesAbsDir, hr.OverrideFile) 64 helmOverrides = append(helmOverrides, helmcli.HelmOverrides{FileOverride: scOverride}) 65 66 if m.Verbose { 67 fmt.Fprintf(vzHelper.GetOutputStream(), fmt.Sprintf("Updating use case %s for Helm release %s/%s\n", hr.Usecase.UsecasePath, hr.Namespace, hr.Name)) 68 } 69 _, err = UpdateUpgradeFunc(m.Log, hr.Name, m.Namespace, manifestMan.Manifest.WorkerChartAbsDir, true, m.DryRun, helmOverrides) 70 if err != nil { 71 return err.Error(), err 72 } 73 return "", nil 74 }