From a98179dd8649f01d1667b262a8a4075570e4ff85 Mon Sep 17 00:00:00 2001 From: tylerslaton Date: Sun, 2 Jul 2023 17:35:53 -0400 Subject: [PATCH] Always set AutoUpgrade if it is implied (#1459) Signed-off-by: tylerslaton --- pkg/autoupgrade/daemon.go | 9 +++++++++ pkg/cli/run.go | 6 ++++++ pkg/server/registry/apigroups/acorn/apps/validator.go | 6 ++++++ 3 files changed, 21 insertions(+) diff --git a/pkg/autoupgrade/daemon.go b/pkg/autoupgrade/daemon.go index b651db2b15..f39928c9c1 100644 --- a/pkg/autoupgrade/daemon.go +++ b/pkg/autoupgrade/daemon.go @@ -319,6 +319,15 @@ func AutoUpgradePattern(image string) (string, bool) { return tag, strings.ContainsAny(tag, "#*") } +// ImpliedAutoUpgrade returns boolean indicating if auto-upgrade is implied either +// by a pattern in the app.Spec.image or app.Spec.AutoUpgradeInterval being specified. +func ImpliedAutoUpgrade(interval, image string) bool { + if _, isPattern := AutoUpgradePattern(image); isPattern || interval != "" { + return true + } + return false +} + func Mode(appSpec v1.AppInstanceSpec) (string, bool) { _, isPat := AutoUpgradePattern(appSpec.Image) on := appSpec.GetAutoUpgrade() || appSpec.GetNotifyUpgrade() || isPat diff --git a/pkg/cli/run.go b/pkg/cli/run.go index d0796f74c2..507537d179 100644 --- a/pkg/cli/run.go +++ b/pkg/cli/run.go @@ -10,6 +10,7 @@ import ( apiv1 "github.com/acorn-io/runtime/pkg/apis/api.acorn.io/v1" v1 "github.com/acorn-io/runtime/pkg/apis/internal.acorn.io/v1" + "github.com/acorn-io/runtime/pkg/autoupgrade" cli "github.com/acorn-io/runtime/pkg/cli/builder" "github.com/acorn-io/runtime/pkg/client" "github.com/acorn-io/runtime/pkg/dev" @@ -239,6 +240,11 @@ func (s *Run) Run(cmd *cobra.Command, args []string) (err error) { return err } + // Ensure opts.AutoUpgrade is set if is implied by opts.AutoUpgradeInterval or imageSource.Image's pattern. + if opts.AutoUpgrade == nil || !*opts.AutoUpgrade { + opts.AutoUpgrade = &[]bool{autoupgrade.ImpliedAutoUpgrade(opts.AutoUpgradeInterval, imageSource.Image)}[0] + } + // Force install prompt if needed _, err = c.Info(cmd.Context()) if err != nil { diff --git a/pkg/server/registry/apigroups/acorn/apps/validator.go b/pkg/server/registry/apigroups/acorn/apps/validator.go index 69733ed589..d3a6740168 100644 --- a/pkg/server/registry/apigroups/acorn/apps/validator.go +++ b/pkg/server/registry/apigroups/acorn/apps/validator.go @@ -96,6 +96,12 @@ func (s *Validator) Validate(ctx context.Context, obj runtime.Object) (result fi return } + au := app.Spec.AutoUpgrade + if (au == nil || !*au) && autoupgrade.ImpliedAutoUpgrade(app.Spec.AutoUpgradeInterval, app.Spec.Image) { + result = append(result, field.Invalid(field.NewPath("spec", "autoUpgrade"), app.Spec.AutoUpgrade, "must be true if autoupgrade options are set")) + return + } + var ( imageGrantedPerms []v1.Permissions checkImage = app.Spec.Image