diff --git a/cmd/werf/bundle/apply/apply.go b/cmd/werf/bundle/apply/apply.go index e857f91106..abb9a5a5c4 100644 --- a/cmd/werf/bundle/apply/apply.go +++ b/cmd/werf/bundle/apply/apply.go @@ -216,7 +216,7 @@ func runApply() error { helmUpgradeCmd, _ := helm_v3.NewUpgradeCmd(actionConfig, logboek.Context(ctx).OutStream(), helm_v3.UpgradeCmdOptions{ StagesSplitter: helm.NewStagesSplitter(), - StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter), + StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter, &namespace), ChainPostRenderer: bundle.ChainPostRenderer, ValueOpts: &values.Options{ ValueFiles: common.GetValues(&commonCmdData), diff --git a/cmd/werf/converge/converge.go b/cmd/werf/converge/converge.go index 4fb75068b8..fbfd159485 100644 --- a/cmd/werf/converge/converge.go +++ b/cmd/werf/converge/converge.go @@ -444,7 +444,7 @@ func run(ctx context.Context, containerBackend container_backend.ContainerBacken helmUpgradeCmd, _ := helm_v3.NewUpgradeCmd(actionConfig, logboek.OutStream(), helm_v3.UpgradeCmdOptions{ StagesSplitter: helm.NewStagesSplitter(), - StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter), + StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter, &namespace), ChainPostRenderer: wc.ChainPostRenderer, ValueOpts: valueOpts, CreateNamespace: common.NewBool(true), diff --git a/cmd/werf/helm/helm.go b/cmd/werf/helm/helm.go index 986c0d5ce5..40f70c8265 100644 --- a/cmd/werf/helm/helm.go +++ b/cmd/werf/helm/helm.go @@ -77,14 +77,14 @@ func NewCmd() *cobra.Command { helm_v3.NewHistoryCmd(actionConfig, os.Stdout), NewLintCmd(actionConfig, wc), helm_v3.NewListCmd(actionConfig, os.Stdout), - NewTemplateCmd(actionConfig, wc), + NewTemplateCmd(actionConfig, wc, &namespace), helm_v3.NewRepoCmd(os.Stdout), helm_v3.NewRollbackCmd(actionConfig, os.Stdout, helm_v3.RollbackCmdOptions{ StagesSplitter: helm.NewStagesSplitter(), - StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter), + StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter, &namespace), }), - NewInstallCmd(actionConfig, wc), - NewUpgradeCmd(actionConfig, wc), + NewInstallCmd(actionConfig, wc, &namespace), + NewUpgradeCmd(actionConfig, wc, &namespace), helm_v3.NewCreateCmd(os.Stdout), helm_v3.NewEnvCmd(os.Stdout), helm_v3.NewPackageCmd(actionConfig, os.Stdout), diff --git a/cmd/werf/helm/install.go b/cmd/werf/helm/install.go index 60daf39cb1..a16a6a25d4 100644 --- a/cmd/werf/helm/install.go +++ b/cmd/werf/helm/install.go @@ -17,10 +17,10 @@ import ( var installCmdData common.CmdData -func NewInstallCmd(actionConfig *action.Configuration, wc *chart_extender.WerfChartStub) *cobra.Command { +func NewInstallCmd(actionConfig *action.Configuration, wc *chart_extender.WerfChartStub, namespace *string) *cobra.Command { cmd, helmAction := helm_v3.NewInstallCmd(actionConfig, os.Stdout, helm_v3.InstallCmdOptions{ StagesSplitter: helm.NewStagesSplitter(), - StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter), + StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter, namespace), ChainPostRenderer: wc.ChainPostRenderer, }) SetupRenderRelatedWerfChartParams(cmd, &installCmdData) diff --git a/cmd/werf/helm/template.go b/cmd/werf/helm/template.go index 767c7bd5ef..6cac807171 100644 --- a/cmd/werf/helm/template.go +++ b/cmd/werf/helm/template.go @@ -15,10 +15,10 @@ import ( var templateCmdData common.CmdData -func NewTemplateCmd(actionConfig *action.Configuration, wc *chart_extender.WerfChartStub) *cobra.Command { +func NewTemplateCmd(actionConfig *action.Configuration, wc *chart_extender.WerfChartStub, namespace *string) *cobra.Command { cmd, _ := helm_v3.NewTemplateCmd(actionConfig, os.Stdout, helm_v3.TemplateCmdOptions{ StagesSplitter: helm.NewStagesSplitter(), - StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter), + StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter, namespace), ChainPostRenderer: wc.ChainPostRenderer, }) SetupRenderRelatedWerfChartParams(cmd, &templateCmdData) diff --git a/cmd/werf/helm/upgrade.go b/cmd/werf/helm/upgrade.go index 4eef633446..f3c0b5671c 100644 --- a/cmd/werf/helm/upgrade.go +++ b/cmd/werf/helm/upgrade.go @@ -17,10 +17,10 @@ import ( var upgradeCmdData common.CmdData -func NewUpgradeCmd(actionConfig *action.Configuration, wc *chart_extender.WerfChartStub) *cobra.Command { +func NewUpgradeCmd(actionConfig *action.Configuration, wc *chart_extender.WerfChartStub, namespace *string) *cobra.Command { cmd, _ := helm_v3.NewUpgradeCmd(actionConfig, os.Stdout, helm_v3.UpgradeCmdOptions{ StagesSplitter: helm.NewStagesSplitter(), - StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter), + StagesExternalDepsGenerator: helm.NewStagesExternalDepsGenerator(&actionConfig.RESTClientGetter, namespace), ChainPostRenderer: wc.ChainPostRenderer, }) SetupRenderRelatedWerfChartParams(cmd, &upgradeCmdData) diff --git a/go.mod b/go.mod index 1719e7fb03..7380486f55 100644 --- a/go.mod +++ b/go.mod @@ -59,16 +59,14 @@ require ( github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 github.com/werf/copy-recurse v0.2.4 - github.com/werf/kubedog v0.6.5-0.20220608151530-2555924b0ce9 + github.com/werf/kubedog v0.7.0 github.com/werf/lockgate v0.0.0-20200729113342-ec2c142f71ea github.com/werf/logboek v0.5.4 go.opentelemetry.io/otel v1.7.1-0.20220624212736-ef6c0da0de3b - go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.30.0 - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.30.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0 - go.opentelemetry.io/otel/metric v0.30.0 - go.opentelemetry.io/otel/sdk/metric v0.30.0 + go.opentelemetry.io/otel/sdk v1.7.0 + go.opentelemetry.io/otel/trace v1.7.0 golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 golang.org/x/net v0.0.0-20220225172249-27dd8689420f gopkg.in/errgo.v2 v2.1.0 @@ -278,8 +276,6 @@ require ( go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 // indirect go.opencensus.io v0.23.0 // indirect go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0 // indirect - go.opentelemetry.io/otel/sdk v1.7.0 // indirect - go.opentelemetry.io/otel/trace v1.7.0 // indirect go.opentelemetry.io/proto/otlp v0.16.0 // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect @@ -321,6 +317,6 @@ replace k8s.io/helm => github.com/werf/helm v0.0.0-20210202111118-81e74d46da0f replace github.com/deislabs/oras => github.com/werf/third-party-oras v0.9.1-0.20210927171747-6d045506f4c8 -replace helm.sh/helm/v3 => github.com/werf/3p-helm/v3 v3.0.0-20220623100852-5c5a193d6bc2 +replace helm.sh/helm/v3 => github.com/werf/3p-helm/v3 v3.0.0-20220705094850-89100634721a replace github.com/go-git/go-git/v5 => github.com/ZauberNerd/go-git/v5 v5.4.3-0.20220315170230-29ec1bc1e5db diff --git a/go.sum b/go.sum index e3217482b6..71d6f3c66d 100644 --- a/go.sum +++ b/go.sum @@ -310,8 +310,6 @@ github.com/bcicen/jstream v1.0.1/go.mod h1:9ielPxqFry7Y4Tg3j4BfjPocfJ3TbsRtXOAYX github.com/beevik/ntp v0.3.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -2047,14 +2045,14 @@ github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59b github.com/weppos/publicsuffix-go v0.4.0/go.mod h1:z3LCPQ38eedDQSwmsSRW4Y7t2L8Ln16JPQ02lHAdn5k= github.com/weppos/publicsuffix-go v0.5.0 h1:rutRtjBJViU/YjcI5d80t4JAVvDltS6bciJg2K1HrLU= github.com/weppos/publicsuffix-go v0.5.0/go.mod h1:z3LCPQ38eedDQSwmsSRW4Y7t2L8Ln16JPQ02lHAdn5k= -github.com/werf/3p-helm/v3 v3.0.0-20220623100852-5c5a193d6bc2 h1:e9OHFNHObGoDhxAyac/9FfBqbrOb6txkbJp9Cy29NTk= -github.com/werf/3p-helm/v3 v3.0.0-20220623100852-5c5a193d6bc2/go.mod h1:NxtE2KObf2PrzDl6SIamPFPKyAqWi10iWuvKlQn/Yao= +github.com/werf/3p-helm/v3 v3.0.0-20220705094850-89100634721a h1:Irr95zPrQQct+/+i8pILpWPsiemi1MXwOQaccRaOKqI= +github.com/werf/3p-helm/v3 v3.0.0-20220705094850-89100634721a/go.mod h1:NxtE2KObf2PrzDl6SIamPFPKyAqWi10iWuvKlQn/Yao= github.com/werf/copy-recurse v0.2.4 h1:kEyGUKhgS8WdEOjInNQKgk4lqPWzP2AgR27F3dcGsVc= github.com/werf/copy-recurse v0.2.4/go.mod h1:KVHSQ90p19xflWW0B7BJhLBwmSbEtuxIaBnjlUYRPhk= github.com/werf/helm v0.0.0-20210202111118-81e74d46da0f h1:81YscYTF9mmTf0ULOsCmm42YWQp+qWDzWi1HjWniZrg= github.com/werf/helm v0.0.0-20210202111118-81e74d46da0f/go.mod h1:OMONwLWU9zEENgaVjWEX+M+xik2QakejzKHG1+6mnUo= -github.com/werf/kubedog v0.6.5-0.20220608151530-2555924b0ce9 h1:EAGbbyVsin6oYLd7TerlIgr/0x/Qj6v43Nc7zzG3FlE= -github.com/werf/kubedog v0.6.5-0.20220608151530-2555924b0ce9/go.mod h1:543dUdVbkeJeH/PaB2fiVNR++rGnWmZMmKkD9nAfjI8= +github.com/werf/kubedog v0.7.0 h1:Gvxo2YjTLQchyZf0IcNZ2kvq/rjW2wT+1TXcgsiZ11Y= +github.com/werf/kubedog v0.7.0/go.mod h1:MIvQv19uLxcZMwATRE4sOtfUy36o99oBqmlXPk30U+A= github.com/werf/lockgate v0.0.0-20200729113342-ec2c142f71ea h1:R5tJUhL5a3YfHTrHWyuAdJW3h//fmONrpHJjjAZ79e4= github.com/werf/lockgate v0.0.0-20200729113342-ec2c142f71ea/go.mod h1:/CeY6KDiBSCU9PUmjt7zGhqpzp8FAPg/wNVfLZHQGWI= github.com/werf/logboek v0.5.4 h1:BZ2UJlvngf/lSkJ2NDt0DmIY7tI1GyraURC8s8Injlk= @@ -2157,23 +2155,16 @@ go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVj go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= go.opentelemetry.io/otel v1.7.1-0.20220624212736-ef6c0da0de3b h1:wZT15nCrRJsT1PJpZ3rYPTsPH2LnkDq8s6CNpgIsyiw= go.opentelemetry.io/otel v1.7.1-0.20220624212736-ef6c0da0de3b/go.mod h1:lnHkMUGUQfY3wBpkzmPQH6RuCyURze1hKrrF7xTxJ60= -go.opentelemetry.io/otel/exporters/otlp v0.20.0 h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0 h1:7Yxsak1q4XrJ5y7XBnNwqWx9amMZvoidCctv62XOQ6Y= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0/go.mod h1:M1hVZHNxcbkAlcvrOMlpQ4YOO3Awf+4N2dxkZL3xm04= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.30.0 h1:Os0ds8fJp2AUa9DNraFWIycgUzevz47i6UvnSh+8LQ0= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.30.0/go.mod h1:8Lz1GGcrx1kPGE3zqDrK7ZcPzABEfIQqBjq7roQa5ZA= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.30.0 h1:MrUowGDjf4jKGMgjDAIP5Czh6YGdCHc46gfTwlF6eQI= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.30.0/go.mod h1:WulNodDa6sY6ZADi664BgKD6SvXLLQXVZEQ81q5ps9U= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0 h1:giGm8w67Ja7amYNfYMdme7xSp2pIxThWopw8+QP51Yk= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0 h1:Ydage/P0fRrSPpZeCVxzjqGcI6iVmG2xb43+IR8cjqM= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/metric v0.30.0 h1:Hs8eQZ8aQgs0U49diZoaS6Uaxw3+bBE3lcMUKBFIk3c= -go.opentelemetry.io/otel/metric v0.30.0/go.mod h1:/ShZ7+TS4dHzDFmfi1kSXMhMVubNoP0oIaBp70J6UXU= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= @@ -2181,8 +2172,6 @@ go.opentelemetry.io/otel/sdk v1.7.0 h1:4OmStpcKVOfvDOgCt7UriAPtKolwIhxpnSNI/yK+1 go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU= go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/sdk/metric v0.30.0 h1:XTqQ4y3erR2Oj8xSAOL5ovO5011ch2ELg51z4fVkpME= -go.opentelemetry.io/otel/sdk/metric v0.30.0/go.mod h1:8AKFRi5HyvTR0RRty3paN1aMC9HMT+NzcEhw/BLkLX8= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= go.opentelemetry.io/otel/trace v1.7.0 h1:O37Iogk1lEkMRXewVtZ1BBTVn5JEp8GrJvP92bJqC6o= diff --git a/pkg/deploy/helm/external_deps_annotations_parser.go b/pkg/deploy/helm/external_deps_annotations_parser.go index 22b2d6c8a7..fd3126a897 100644 --- a/pkg/deploy/helm/external_deps_annotations_parser.go +++ b/pkg/deploy/helm/external_deps_annotations_parser.go @@ -9,11 +9,15 @@ import ( "github.com/werf/werf/pkg/slug" ) -func NewExternalDepsAnnotationsParser() *ExternalDepsAnnotationsParser { - return &ExternalDepsAnnotationsParser{} +func NewExternalDepsAnnotationsParser(defaultNamespace string) *ExternalDepsAnnotationsParser { + return &ExternalDepsAnnotationsParser{ + defaultNamespace: defaultNamespace, + } } -type ExternalDepsAnnotationsParser struct{} +type ExternalDepsAnnotationsParser struct { + defaultNamespace string +} func (s *ExternalDepsAnnotationsParser) Parse(annotations map[string]string) (externaldeps.ExternalDependencyList, error) { extDeps, err := s.parseResourceAnnotations(annotations) @@ -73,6 +77,12 @@ func (s *ExternalDepsAnnotationsParser) parseNamespaceAnnotations(extDeps extern } } + for _, extDep := range extDeps { + if extDep.Namespace == "" { + extDep.Namespace = s.defaultNamespace + } + } + return extDeps, nil } diff --git a/pkg/deploy/helm/external_deps_generator.go b/pkg/deploy/helm/external_deps_generator.go index 6338e52997..95e8bfbfb1 100644 --- a/pkg/deploy/helm/external_deps_generator.go +++ b/pkg/deploy/helm/external_deps_generator.go @@ -10,18 +10,21 @@ import ( "k8s.io/cli-runtime/pkg/resource" ) -func NewStagesExternalDepsGenerator(restClient *action.RESTClientGetter) *StagesExternalDepsGenerator { +func NewStagesExternalDepsGenerator(restClient *action.RESTClientGetter, defaultNamespace *string) *StagesExternalDepsGenerator { return &StagesExternalDepsGenerator{ - restClient: restClient, - metaAccessor: metadataAccessor, + defaultNamespace: defaultNamespace, + restClient: restClient, + metaAccessor: metadataAccessor, } } type StagesExternalDepsGenerator struct { - restClient *action.RESTClientGetter - gvkBuilder externaldeps.GVKBuilder - metaAccessor meta.MetadataAccessor - initialized bool + defaultNamespace *string + restClient *action.RESTClientGetter + mapper meta.RESTMapper + gvkBuilder externaldeps.GVKBuilder + metaAccessor meta.MetadataAccessor + initialized bool } func (s *StagesExternalDepsGenerator) init() error { @@ -33,6 +36,7 @@ func (s *StagesExternalDepsGenerator) init() error { if err != nil { return fmt.Errorf("error getting REST mapper: %w", err) } + s.mapper = mapper s.gvkBuilder = NewGVKBuilder(mapper) @@ -74,7 +78,7 @@ func (s *StagesExternalDepsGenerator) Generate(stages stages.SortedStageList) er } func (s *StagesExternalDepsGenerator) resourceExternalDepsFromAnnotations(annotations map[string]string) (externaldeps.ExternalDependencyList, error) { - extDepsList, err := NewExternalDepsAnnotationsParser().Parse(annotations) + extDepsList, err := NewExternalDepsAnnotationsParser(*s.defaultNamespace).Parse(annotations) if err != nil { return nil, fmt.Errorf("error parsing external dependencies annotations: %w", err) } @@ -84,7 +88,7 @@ func (s *StagesExternalDepsGenerator) resourceExternalDepsFromAnnotations(annota } for _, extDep := range extDepsList { - if err := extDep.GenerateInfo(s.gvkBuilder, s.metaAccessor); err != nil { + if err := extDep.GenerateInfo(s.gvkBuilder, s.metaAccessor, s.mapper); err != nil { return nil, fmt.Errorf("error generating Info for external dependency: %w", err) } } diff --git a/pkg/deploy/helm/resources_waiter.go b/pkg/deploy/helm/resources_waiter.go index e444a1377a..0595f862a5 100644 --- a/pkg/deploy/helm/resources_waiter.go +++ b/pkg/deploy/helm/resources_waiter.go @@ -17,7 +17,6 @@ import ( appsv1beta1 "k8s.io/api/apps/v1beta1" appsv1beta2 "k8s.io/api/apps/v1beta2" batchv1 "k8s.io/api/batch/v1" - v1 "k8s.io/api/core/v1" extensions "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -28,8 +27,10 @@ import ( "github.com/werf/kubedog/pkg/kube" "github.com/werf/kubedog/pkg/tracker" + "github.com/werf/kubedog/pkg/tracker/resid" "github.com/werf/kubedog/pkg/trackers/elimination" "github.com/werf/kubedog/pkg/trackers/rollout/multitrack" + "github.com/werf/kubedog/pkg/trackers/rollout/multitrack/generic" "github.com/werf/logboek" ) @@ -171,12 +172,6 @@ func (waiter *ResourcesWaiter) Wait(ctx context.Context, resources helm_kube.Res if spec != nil { specs.Jobs = append(specs.Jobs, *spec) } - case *v1.ReplicationController: - case *extensions.ReplicaSet: - case *appsv1beta2.ReplicaSet: - case *appsv1.ReplicaSet: - case *v1.PersistentVolumeClaim: - case *v1.Service: case *flaggerv1beta1.Canary: spec, err := makeMultitrackSpec(ctx, &value.ObjectMeta, allowedFailuresCountOptions{multiplier: 1, defaultPerReplica: 0}, "canary") if err != nil { @@ -185,7 +180,26 @@ func (waiter *ResourcesWaiter) Wait(ctx context.Context, resources helm_kube.Res if spec != nil { specs.Canaries = append(specs.Canaries, *spec) } - case *unstructured.Unstructured: + default: + obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(v.Object) + if err != nil { + return fmt.Errorf("error converting object to unstructured: %w", err) + } + + object := unstructured.Unstructured{ + Object: obj, + } + + resourceID := resid.NewResourceID(object.GetName(), object.GroupVersionKind(), resid.NewResourceIDOptions{ + Namespace: object.GetNamespace(), + }) + + if spec, err := makeGenericSpec(ctx, resourceID, waiter.StatusProgressPeriod, timeout, object.GetAnnotations()); err != nil { + logboek.Context(ctx).Warn().LogLn() + logboek.Context(ctx).Warn().LogF("WARNING %s\n", err) + } else if spec != nil { + specs.Generics = append(specs.Generics, spec) + } } } @@ -199,6 +213,9 @@ func (waiter *ResourcesWaiter) Wait(ctx context.Context, resources helm_kube.Res Timeout: timeout, LogsFromTime: waiter.LogsFromTime, }, + DynamicClient: kube.DynamicClient, + DiscoveryClient: kube.CachedDiscoveryClient, + Mapper: kube.Mapper, }) }) } @@ -363,6 +380,53 @@ mainLoop: return multitrackSpec, nil } +func makeGenericSpec(ctx context.Context, resID *resid.ResourceID, statusProgressPeriod, timeout time.Duration, annotations map[string]string) (*generic.Spec, error) { + genericSpec := &generic.Spec{ + ResourceID: resID, + Timeout: timeout, + StatusProgressPeriod: statusProgressPeriod, + } + +mainLoop: + for annoName, annoValue := range annotations { + invalidAnnoValueError := fmt.Errorf("%s annotation %s with invalid value %s", resID, annoName, annoValue) + + switch annoName { + case ShowEventsAnnoName: + boolValue, err := strconv.ParseBool(annoValue) + if err != nil { + return nil, fmt.Errorf("%s: bool expected: %w", invalidAnnoValueError, err) + } + + genericSpec.ShowServiceMessages = boolValue + case TrackTerminationModeAnnoName: + trackTerminationModeValue := generic.TrackTerminationMode(annoValue) + values := []generic.TrackTerminationMode{generic.WaitUntilResourceReady, generic.NonBlocking} + for _, value := range values { + if value == trackTerminationModeValue { + genericSpec.TrackTerminationMode = trackTerminationModeValue + continue mainLoop + } + } + + return nil, fmt.Errorf("%w: choose one of %v", invalidAnnoValueError, values) + case FailModeAnnoName: + failModeValue := generic.FailMode(annoValue) + values := []generic.FailMode{generic.IgnoreAndContinueDeployProcess, generic.FailWholeDeployProcessImmediately, generic.HopeUntilEndOfDeployProcess} + for _, value := range values { + if value == failModeValue { + genericSpec.FailMode = failModeValue + continue mainLoop + } + } + + return nil, fmt.Errorf("%w: choose one of %v", invalidAnnoValueError, values) + } + } + + return genericSpec, nil +} + func (waiter *ResourcesWaiter) WatchUntilReady(ctx context.Context, resources helm_kube.ResourceList, timeout time.Duration) error { if waiter.KubeInitializer != nil { if err := waiter.KubeInitializer.Init(ctx); err != nil { @@ -374,6 +438,7 @@ func (waiter *ResourcesWaiter) WatchUntilReady(ctx context.Context, resources he name := info.Name kind := info.Mapping.GroupVersionKind.Kind + // TODO: should this work with all resources, not just Jobs? switch value := asVersioned(info).(type) { case *batchv1.Job: specs := multitrack.MultitrackSpecs{} @@ -394,6 +459,9 @@ func (waiter *ResourcesWaiter) WatchUntilReady(ctx context.Context, resources he Timeout: timeout, LogsFromTime: waiter.LogsFromTime, }, + DynamicClient: kube.DynamicClient, + DiscoveryClient: kube.CachedDiscoveryClient, + Mapper: kube.Mapper, }) })