Skip to content

Commit 6bdca4a

Browse files
committed
fix(deploy): improve values handling and add more trace logging; undo many reverts
This reverts commit 1fc5833. Signed-off-by: Ilya Lesikov <ilya@lesikov.com>
1 parent 4862fcf commit 6bdca4a

File tree

31 files changed

+263
-173
lines changed

31 files changed

+263
-173
lines changed

cmd/werf/bundle/apply/apply.go

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@ import (
1515
"github.com/samber/lo"
1616
"github.com/spf13/cobra"
1717

18-
"github.com/werf/3p-helm/pkg/chart"
19-
"github.com/werf/3p-helm/pkg/chartutil"
20-
"github.com/werf/3p-helm/pkg/werf/secrets"
21-
"github.com/werf/common-go/pkg/secrets_manager"
18+
"github.com/werf/3p-helm/pkg/werf/helmopts"
2219
"github.com/werf/common-go/pkg/util"
2320
"github.com/werf/nelm/pkg/action"
2421
"github.com/werf/werf/v2/cmd/werf/common"
@@ -119,6 +116,8 @@ func NewCmd(ctx context.Context) *cobra.Command {
119116
common.SetupRollbackGraphPath(&commonCmdData, cmd)
120117

121118
common.SetupRenderSubchartNotes(&commonCmdData, cmd)
119+
common.SetupNoInstallCRDs(&commonCmdData, cmd)
120+
common.SetupReleaseLabel(&commonCmdData, cmd)
122121

123122
defaultTag := os.Getenv("WERF_TAG")
124123
if defaultTag == "" {
@@ -180,9 +179,7 @@ func runApply(ctx context.Context) error {
180179

181180
registryCredentialsPath := docker.GetDockerConfigCredentialsFile(*commonCmdData.DockerConfig)
182181

183-
secrets.CoalesceTablesFunc = chartutil.CoalesceTables
184-
secrets_manager.DisableSecretsDecryption = *commonCmdData.IgnoreSecretKey
185-
chartutil.ServiceValues, err = helpers.GetBundleServiceValues(ctx, helpers.ServiceValuesOptions{
182+
serviceValues, err := helpers.GetBundleServiceValues(ctx, helpers.ServiceValuesOptions{
186183
Env: *commonCmdData.Environment,
187184
Namespace: releaseNamespace,
188185
SetDockerConfigJsonValue: *commonCmdData.SetDockerConfigJsonValue,
@@ -196,9 +193,18 @@ func runApply(ctx context.Context) error {
196193
if err != nil {
197194
return fmt.Errorf("get current working directory: %w", err)
198195
}
199-
secrets.SecretsWorkingDir = secretWorkDir
200196

201-
if err := bundles.Pull(ctx, fmt.Sprintf("%s:%s", repoAddress, cmdData.Tag), bundlePath, bundlesRegistryClient); err != nil {
197+
if err := bundles.Pull(ctx, fmt.Sprintf("%s:%s", repoAddress, cmdData.Tag), bundlePath, bundlesRegistryClient, helmopts.HelmOptions{
198+
ChartLoadOpts: helmopts.ChartLoadOptions{
199+
ChartDir: bundlePath,
200+
NoDecryptSecrets: *commonCmdData.IgnoreSecretKey,
201+
NoDefaultSecretValues: *commonCmdData.DisableDefaultSecretValues,
202+
NoDefaultValues: *commonCmdData.DisableDefaultValues,
203+
SecretValuesFiles: common.GetSecretValues(&commonCmdData),
204+
SecretsWorkingDir: secretWorkDir,
205+
ExtraValues: serviceValues,
206+
},
207+
}); err != nil {
202208
return fmt.Errorf("pull bundle: %w", err)
203209
}
204210

@@ -207,7 +213,10 @@ func runApply(ctx context.Context) error {
207213
return fmt.Errorf("get annotations and labels: %w", err)
208214
}
209215

210-
chart.CurrentChartType = chart.ChartTypeBundle
216+
releaseLabels, err := common.GetReleaseLabels(&commonCmdData)
217+
if err != nil {
218+
return fmt.Errorf("get release labels: %w", err)
219+
}
211220

212221
ctx = action.SetupLogging(ctx, cmp.Or(common.GetNelmLogLevel(&commonCmdData), action.DefaultReleaseInstallLogLevel), action.SetupLoggingOptions{
213222
ColorMode: *commonCmdData.LogColorMode,
@@ -236,13 +245,17 @@ func runApply(ctx context.Context) error {
236245
KubeSkipTLSVerify: *commonCmdData.SkipTlsVerifyKube,
237246
KubeTLSServerName: *commonCmdData.KubeTlsServer,
238247
KubeToken: *commonCmdData.KubeToken,
248+
LegacyChartType: helmopts.ChartTypeBundle,
249+
LegacyExtraValues: serviceValues,
239250
LogRegistryStreamOut: os.Stdout,
240251
NetworkParallelism: common.GetNetworkParallelism(&commonCmdData),
252+
NoInstallCRDs: *commonCmdData.NoInstallCRDs,
241253
NoProgressTablePrint: *commonCmdData.StatusProgressPeriodSeconds == -1,
242254
ProgressTablePrintInterval: time.Duration(*commonCmdData.StatusProgressPeriodSeconds) * time.Second,
243255
RegistryCredentialsPath: registryCredentialsPath,
244256
ReleaseHistoryLimit: *commonCmdData.ReleasesHistoryMax,
245257
ReleaseInfoAnnotations: serviceAnnotations,
258+
ReleaseLabels: releaseLabels,
246259
ReleaseStorageDriver: os.Getenv("HELM_DRIVER"),
247260
RollbackGraphPath: common.GetRollbackGraphPath(&commonCmdData),
248261
SecretKeyIgnore: *commonCmdData.IgnoreSecretKey,

cmd/werf/bundle/copy/copy.go

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@ import (
88
"github.com/spf13/cobra"
99

1010
helm_v3 "github.com/werf/3p-helm/cmd/helm"
11-
"github.com/werf/3p-helm/pkg/chart"
12-
"github.com/werf/3p-helm/pkg/chartutil"
13-
"github.com/werf/3p-helm/pkg/werf/secrets"
14-
"github.com/werf/common-go/pkg/secrets_manager"
11+
"github.com/werf/3p-helm/pkg/werf/helmopts"
1512
"github.com/werf/logboek"
1613
"github.com/werf/werf/v2/cmd/werf/common"
1714
"github.com/werf/werf/v2/pkg/deploy/bundles"
@@ -133,17 +130,6 @@ func runCopy(ctx context.Context) error {
133130
return fmt.Errorf("incompatible options specified, could not use --helm-compatible-chart and --rename-chart=%q at the same time", *commonCmdData.RenameChart)
134131
}
135132

136-
secrets.CoalesceTablesFunc = chartutil.CoalesceTables
137-
secrets_manager.DisableSecretsDecryption = true
138-
139-
secretWorkDir, err := os.Getwd()
140-
if err != nil {
141-
return fmt.Errorf("get current working directory: %w", err)
142-
}
143-
secrets.SecretsWorkingDir = secretWorkDir
144-
145-
chart.CurrentChartType = chart.ChartTypeBundle
146-
147133
return logboek.Context(ctx).LogProcess("Copy bundle").DoError(func() error {
148134
logboek.Context(ctx).LogFDetails("From: %s\n", fromAddr.String())
149135
logboek.Context(ctx).LogFDetails("To: %s\n", toAddr.String())
@@ -154,6 +140,12 @@ func runCopy(ctx context.Context) error {
154140
ToRegistryClient: toRegistry,
155141
HelmCompatibleChart: *commonCmdData.HelmCompatibleChart,
156142
RenameChart: *commonCmdData.RenameChart,
143+
HelmOptions: helmopts.HelmOptions{
144+
ChartLoadOpts: helmopts.ChartLoadOptions{
145+
ChartType: helmopts.ChartTypeBundle,
146+
NoSecrets: true,
147+
},
148+
},
157149
})
158150
})
159151
}

cmd/werf/bundle/publish/publish.go

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ import (
2323
"github.com/werf/3p-helm/pkg/cli/values"
2424
"github.com/werf/3p-helm/pkg/downloader"
2525
"github.com/werf/3p-helm/pkg/getter"
26-
"github.com/werf/3p-helm/pkg/werf/chartextender"
26+
"github.com/werf/3p-helm/pkg/werf/file"
27+
"github.com/werf/3p-helm/pkg/werf/helmopts"
2728
"github.com/werf/3p-helm/pkg/werf/secrets"
2829
"github.com/werf/3p-helm/pkg/werf/secrets/runtimedata"
2930
"github.com/werf/common-go/pkg/secrets_manager"
@@ -331,7 +332,7 @@ func runPublish(ctx context.Context, imageNameListFromArgs []string) error {
331332
return err
332333
}
333334

334-
loader.ChartFileReader = giterminismManager.FileReader()
335+
file.ChartFileReader = giterminismManager.FileReader()
335336

336337
headHash, err := giterminismManager.LocalGitRepo().HeadCommitHash(ctx)
337338
if err != nil {
@@ -343,7 +344,7 @@ func runPublish(ctx context.Context, imageNameListFromArgs []string) error {
343344
return fmt.Errorf("getting HEAD commit time failed: %w", err)
344345
}
345346

346-
chartutil.ServiceValues, err = helpers.GetServiceValues(ctx, werfConfig.Meta.Project, imagesRepo, imagesInfoGetters, helpers.ServiceValuesOptions{
347+
serviceValues, err := helpers.GetServiceValues(ctx, werfConfig.Meta.Project, imagesRepo, imagesInfoGetters, helpers.ServiceValuesOptions{
347348
Env: *commonCmdData.Environment,
348349
CommitHash: headHash,
349350
CommitDate: headTime,
@@ -354,17 +355,6 @@ func runPublish(ctx context.Context, imageNameListFromArgs []string) error {
354355

355356
helm_v3.Settings.Debug = *commonCmdData.LogDebug
356357

357-
loader.WithoutDefaultSecretValues = *commonCmdData.DisableDefaultSecretValues
358-
loader.WithoutDefaultValues = *commonCmdData.DisableDefaultValues
359-
secrets.CoalesceTablesFunc = chartutil.CoalesceTables
360-
secrets.SecretsWorkingDir = giterminismManager.ProjectDir()
361-
secrets_manager.DisableSecretsDecryption = *commonCmdData.IgnoreSecretKey
362-
363-
chartextender.DefaultChartAPIVersion = chart.APIVersionV2
364-
chartextender.DefaultChartName = werfConfig.Meta.Project
365-
chartextender.DefaultChartVersion = "1.0.0"
366-
chartextender.ChartAppVersion = common.GetHelmChartConfigAppVersion(werfConfig)
367-
368358
// FIXME(1.3): compatibility mode with older 1.2 versions, which do not require WERF_SECRET_KEY in the 'werf bundle publish' command
369359
if err := secrets_manager.Manager.AllowMissedSecretKeyMode(giterminismManager.ProjectDir()); err != nil {
370360
return err
@@ -379,23 +369,35 @@ func runPublish(ctx context.Context, imageNameListFromArgs []string) error {
379369
bundleTmpDir := filepath.Join(werf.GetServiceDir(), "tmp", "bundles", uuid.NewString())
380370
defer os.RemoveAll(bundleTmpDir)
381371

382-
downloader := &downloader.Manager{
383-
Out: logboek.Context(ctx).OutStream(),
384-
ChartPath: bundleTmpDir,
385-
AllowMissingRepos: true,
386-
Getters: getter.All(helm_v3.Settings),
387-
RegistryClient: helmRegistryClient,
388-
RepositoryConfig: helm_v3.Settings.RepositoryConfig,
389-
RepositoryCache: helm_v3.Settings.RepositoryCache,
390-
Debug: helm_v3.Settings.Debug,
372+
opts := helmopts.HelmOptions{
373+
ChartLoadOpts: helmopts.ChartLoadOptions{
374+
ChartAppVersion: common.GetHelmChartConfigAppVersion(werfConfig),
375+
ChartDir: bundleTmpDir,
376+
DefaultChartAPIVersion: chart.APIVersionV2,
377+
DefaultChartName: werfConfig.Meta.Project,
378+
DefaultChartVersion: "1.0.0",
379+
DepDownloader: &downloader.Manager{
380+
Out: logboek.Context(ctx).OutStream(),
381+
ChartPath: bundleTmpDir,
382+
AllowMissingRepos: true,
383+
Getters: getter.All(helm_v3.Settings),
384+
RegistryClient: helmRegistryClient,
385+
RepositoryConfig: helm_v3.Settings.RepositoryConfig,
386+
RepositoryCache: helm_v3.Settings.RepositoryCache,
387+
Debug: helm_v3.Settings.Debug,
388+
},
389+
NoDecryptSecrets: *commonCmdData.IgnoreSecretKey,
390+
NoDefaultSecretValues: *commonCmdData.DisableDefaultSecretValues,
391+
NoDefaultValues: *commonCmdData.DisableDefaultValues,
392+
SecretValuesFiles: common.GetSecretValues(&commonCmdData),
393+
SecretsWorkingDir: giterminismManager.ProjectDir(),
394+
ExtraValues: serviceValues,
395+
},
391396
}
392-
loader.SetChartPathFunc = downloader.SetChartPath
393-
loader.DepsBuildFunc = downloader.Build
394-
395-
loader.SetServiceDir(werf.GetServiceDir())
396397

397398
if err = createNewBundle(
398399
ctx,
400+
serviceValues,
399401
extraAnnotations,
400402
serviceAnnotations,
401403
extraLabels,
@@ -409,6 +411,7 @@ func runPublish(ctx context.Context, imageNameListFromArgs []string) error {
409411
Values: common.GetSet(&commonCmdData),
410412
FileValues: common.GetSetFile(&commonCmdData),
411413
},
414+
opts,
412415
); err != nil {
413416
return fmt.Errorf("create bundle: %w", err)
414417
}
@@ -420,16 +423,18 @@ func runPublish(ctx context.Context, imageNameListFromArgs []string) error {
420423
bundleRepo = stagesStorage.Address()
421424
}
422425

423-
chart.CurrentChartType = chart.ChartTypeBundle
426+
opts.ChartLoadOpts.ChartType = helmopts.ChartTypeBundle
424427

425428
return bundles.Publish(ctx, bundleTmpDir, fmt.Sprintf("%s:%s", bundleRepo, cmdData.Tag), bundlesRegistryClient, bundles.PublishOptions{
426429
HelmCompatibleChart: *commonCmdData.HelmCompatibleChart,
427430
RenameChart: *commonCmdData.RenameChart,
431+
HelmOptions: opts,
428432
})
429433
}
430434

431435
func createNewBundle(
432436
ctx context.Context,
437+
serviceValues map[string]interface{},
433438
extraAnnotations map[string]string,
434439
serviceAnnotations map[string]string,
435440
extraLabels map[string]string,
@@ -438,22 +443,23 @@ func createNewBundle(
438443
destDir string,
439444
chartVersion string,
440445
vals *values.Options,
446+
opts helmopts.HelmOptions,
441447
) error {
442448
chartPath := filepath.Join(projectDir, chartDir)
443-
chrt, err := loader.LoadDir(chartPath)
449+
chrt, err := loader.LoadDir(chartPath, opts)
444450
if err != nil {
445451
return fmt.Errorf("error loading chart %q: %w", chartPath, err)
446452
}
447453

448454
var valsData []byte
449455
{
450456
p := getter.All(helm_v3.Settings)
451-
vals, err := vals.MergeValues(p)
457+
vals, err := vals.MergeValues(p, opts)
452458
if err != nil {
453459
return fmt.Errorf("unable to merge input values: %w", err)
454460
}
455461

456-
bundleVals, err := makeBundleValues(chrt, vals)
462+
bundleVals, err := makeBundleValues(chrt, vals, serviceValues)
457463
if err != nil {
458464
return fmt.Errorf("unable to construct bundle values: %w", err)
459465
}
@@ -466,7 +472,7 @@ func createNewBundle(
466472

467473
var secretValsData []byte
468474
if chrt.SecretsRuntimeData != nil && !secrets_manager.Manager.IsMissedSecretKeyModeEnabled() {
469-
vals, err := makeBundleSecretValues(ctx, chrt.SecretsRuntimeData)
475+
vals, err := makeBundleSecretValues(ctx, chrt.SecretsRuntimeData, opts)
470476
if err != nil {
471477
return fmt.Errorf("unable to construct bundle secret values: %w", err)
472478
}
@@ -481,7 +487,7 @@ func createNewBundle(
481487
destDir = chrt.Metadata.Name
482488
}
483489

484-
secrets.ChartDir = destDir
490+
opts.ChartLoadOpts.ChartDir = destDir
485491

486492
if err := os.RemoveAll(destDir); err != nil {
487493
return fmt.Errorf("unable to remove %q: %w", destDir, err)
@@ -642,10 +648,9 @@ func writeBundleJsonMap(dataMap map[string]string, path string) error {
642648
func makeBundleValues(
643649
chrt *chart.Chart,
644650
inputVals map[string]interface{},
651+
serviceValues map[string]interface{},
645652
) (map[string]interface{}, error) {
646-
chartutil.DebugPrintValues(context.Background(), "input", inputVals)
647-
648-
vals, err := chartutil.MergeInternal(context.Background(), inputVals, chartutil.ServiceValues, nil)
653+
vals, err := chartutil.MergeInternal(context.Background(), inputVals, serviceValues, nil)
649654
if err != nil {
650655
return nil, fmt.Errorf("failed to coalesce werf chart values: %w", err)
651656
}
@@ -663,17 +668,13 @@ func makeBundleValues(
663668

664669
chartutil.CoalesceChartValues(chrt, valsCopy, true)
665670

666-
chartutil.DebugPrintValues(context.Background(), "all", valsCopy)
667-
668671
return valsCopy, nil
669672
}
670673

671674
func makeBundleSecretValues(
672675
ctx context.Context,
673676
secretsRuntimeData runtimedata.RuntimeData,
677+
opts helmopts.HelmOptions,
674678
) (map[string]interface{}, error) {
675-
if chartutil.DebugSecretValues() {
676-
chartutil.DebugPrintValues(context.Background(), "secret", secretsRuntimeData.GetDecryptedSecretValues())
677-
}
678-
return secretsRuntimeData.GetEncodedSecretValues(ctx, secrets_manager.Manager, false)
679+
return secretsRuntimeData.GetEncodedSecretValues(ctx, secrets_manager.Manager, opts.ChartLoadOpts.SecretsWorkingDir, opts.ChartLoadOpts.NoDecryptSecrets)
679680
}

0 commit comments

Comments
 (0)