From 97c4b102ce9b5826106a2b74ba73060d875dff63 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Steenis Date: Tue, 6 Jul 2021 10:23:00 +0200 Subject: [PATCH] Validate Ingress Webhook and pass to template --- cluster/addons.go | 2 ++ cluster/defaults.go | 1 + cluster/validation.go | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/cluster/addons.go b/cluster/addons.go index c11a8a14..83f1a87b 100644 --- a/cluster/addons.go +++ b/cluster/addons.go @@ -71,6 +71,7 @@ type ingressOptions struct { AlpineImage string IngressImage string IngressBackend string + IngressWebhook string HTTPPort int HTTPSPort int NetworkMode string @@ -588,6 +589,7 @@ func (c *Cluster) deployIngress(ctx context.Context, data map[string]interface{} DNSPolicy: c.Ingress.DNSPolicy, IngressImage: c.SystemImages.Ingress, IngressBackend: c.SystemImages.IngressBackend, + IngressWebhook: c.SystemImages.IngressWebhook, ExtraEnvs: c.Ingress.ExtraEnvs, ExtraVolumes: c.Ingress.ExtraVolumes, ExtraVolumeMounts: c.Ingress.ExtraVolumeMounts, diff --git a/cluster/defaults.go b/cluster/defaults.go index 4b1c5800..216ebaeb 100644 --- a/cluster/defaults.go +++ b/cluster/defaults.go @@ -509,6 +509,7 @@ func (c *Cluster) setClusterImageDefaults() error { &c.SystemImages.WeaveCNI: d(imageDefaults.WeaveCNI, privRegURL), &c.SystemImages.Ingress: d(imageDefaults.Ingress, privRegURL), &c.SystemImages.IngressBackend: d(imageDefaults.IngressBackend, privRegURL), + &c.SystemImages.IngressWebhook: d(imageDefaults.IngressWebhook, privRegURL), &c.SystemImages.MetricsServer: d(imageDefaults.MetricsServer, privRegURL), &c.SystemImages.Nodelocal: d(imageDefaults.Nodelocal, privRegURL), &c.SystemImages.AciCniDeployContainer: d(imageDefaults.AciCniDeployContainer, privRegURL), diff --git a/cluster/validation.go b/cluster/validation.go index 6f07e97b..06beb112 100644 --- a/cluster/validation.go +++ b/cluster/validation.go @@ -580,6 +580,25 @@ func validateIngressImages(c *Cluster) error { if len(c.SystemImages.IngressBackend) == 0 { return errors.New("ingress backend image is not populated") } + // Ingress Webhook image is used starting with k8s 1.21 + k8sVersion := c.RancherKubernetesEngineConfig.Version + toMatch, err := semver.Make(k8sVersion[1:]) + if err != nil { + return fmt.Errorf("%s is not valid semver", k8sVersion) + } + logrus.Debugf("Checking if ingress webhook image is required for cluster version [%s]", k8sVersion) + + IngressWebhookImageRequiredRange, err := semver.ParseRange(">=1.21.0-rancher0") + if err != nil { + logrus.Warnf("Failed to parse semver range for checking required ingress webhook image") + } + if IngressWebhookImageRequiredRange(toMatch) { + logrus.Debugf("Cluster version [%s] uses ingress webhook image, checking if image is populated", k8sVersion) + if len(c.SystemImages.IngressWebhook) == 0 { + return errors.New("ingress webhook image is not populated") + } + + } } return nil }