diff --git a/pkg/upgrade/handle_upgrade.go b/pkg/upgrade/handle_upgrade.go index 810544d649b14b426e99191276ec7e1a118f3c13..2a0bfa7a280e79d410e9a1fc70cf71bc3d5a2e86 100644 --- a/pkg/upgrade/handle_upgrade.go +++ b/pkg/upgrade/handle_upgrade.go @@ -40,7 +40,7 @@ func (ctl *Controller) handlePlans(ctx context.Context) error { // validate plan, and generate events for transitions validated := upgradeapiv1.PlanSpecValidated validated.CreateUnknownIfNotExists(obj) - if err := upgradeplan.Validate(obj); err != nil { + if err := upgradeplan.Validate(obj, secretsCache); err != nil { if !validated.IsFalse(obj) { recorder.Eventf(obj, corev1.EventTypeWarning, "ValidateFailed", "Failed to validate plan: %v", err) } diff --git a/pkg/upgrade/job/job.go b/pkg/upgrade/job/job.go index fa17f260eb32655f4d44e1fd2a0871a52d9f4ba1..7e34f87b3f07c0dcb91c47892015329c7a1960e5 100644 --- a/pkg/upgrade/job/job.go +++ b/pkg/upgrade/job/job.go @@ -288,6 +288,7 @@ func New(plan *upgradeapiv1.Plan, node *corev1.Node, controllerName string) *bat VolumeSource: corev1.VolumeSource{ Secret: &corev1.SecretVolumeSource{ SecretName: secret.Name, + Optional: pointer.Bool(secret.IgnoreUpdates), }, }, }) diff --git a/pkg/upgrade/plan/plan.go b/pkg/upgrade/plan/plan.go index 0a9d46d84cc3091253116de8984679a1d345dd25..f7e2054da37c8f5790f76575f1470302353e936c 100644 --- a/pkg/upgrade/plan/plan.go +++ b/pkg/upgrade/plan/plan.go @@ -79,15 +79,17 @@ func DigestStatus(plan *upgradeapiv1.Plan, secretCache corectlv1.SecretCache) (u } for _, s := range plan.Spec.Secrets { - secret, err := secretCache.Get(plan.Namespace, s.Name) - if err != nil { - return plan.Status, err - } if !s.IgnoreUpdates { + secret, err := secretCache.Get(plan.Namespace, s.Name) + if err != nil { + return plan.Status, err + } + secretHash, err := hash.SecretHash(secret) if err != nil { return plan.Status, err } + h.Write([]byte(secretHash)) } } @@ -239,7 +241,7 @@ func sha256sum(s ...string) string { } // Validate performs validation of the plan spec, raising errors for any conflicting or invalid settings. -func Validate(plan *upgradeapiv1.Plan) error { +func Validate(plan *upgradeapiv1.Plan, secretCache corectlv1.SecretCache) error { if drainSpec := plan.Spec.Drain; drainSpec != nil { if drainSpec.DeleteEmptydirData != nil && drainSpec.DeleteLocalData != nil { return ErrDrainDeleteConflict @@ -262,5 +264,16 @@ func Validate(plan *upgradeapiv1.Plan) error { if delay := plan.Spec.PostCompleteDelay; delay != nil && delay.Duration < 0 { return ErrInvalidDelay } - return nil + + sErrs := []error{} + for _, secret := range plan.Spec.Secrets { + if secret.IgnoreUpdates { + continue + } + if _, err := secretCache.Get(plan.Namespace, secret.Name); err != nil { + sErrs = append(sErrs, err) + } + } + + return merr.NewErrors(sErrs...) }