From 4bf022ded261f49a43e6f3028333a2da434f27d2 Mon Sep 17 00:00:00 2001 From: Kimmo Lehto Date: Mon, 4 Nov 2024 15:16:14 +0200 Subject: [PATCH 1/2] Restore sans manipulation that was removed in #772 Signed-off-by: Kimmo Lehto --- phase/configure_k0s.go | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/phase/configure_k0s.go b/phase/configure_k0s.go index 8fc86086..8e0047d8 100644 --- a/phase/configure_k0s.go +++ b/phase/configure_k0s.go @@ -5,6 +5,7 @@ import ( "context" "fmt" gopath "path" + "slices" "time" "github.com/k0sproject/dig" @@ -285,13 +286,49 @@ func (p *ConfigureK0s) configFor(h *cluster.Host) (string, error) { cfg = p.newBaseConfig.Dup() } - var addr string + var ( + sans []string + addr string + ) + if h.PrivateAddress != "" { addr = h.PrivateAddress } else { addr = h.Address() } + // convert sans from unmarshaled config into []string + oldsans := cfg.Dig("spec", "api", "sans") + switch oldsans := oldsans.(type) { + case []interface{}: + for _, v := range oldsans { + if s, ok := v.(string); ok { + sans = append(sans, s) + } + } + case []string: + sans = append(sans, oldsans...) + } + + if !slices.Contains(sans, addr) { + sans = append(sans, addr) + log.Infof("%s: added %s to spec.api.sans", h, addr) + } + + for i, c := range p.Config.Spec.Hosts.Controllers() { + if !slices.Contains(sans, c.Address()) { + sans = append(sans, c.Address()) + log.Infof("%s: added controller %d address %s to spec.api.sans", h, i+1, c.Address()) + } + if c.PrivateAddress != "" && !slices.Contains(sans, c.PrivateAddress) { + sans = append(sans, c.PrivateAddress) + log.Infof("%s: added controller %d private address %s to spec.api.sans", h, i+1, c.PrivateAddress) + } + } + + log.Debugf("%s: using k0s spec.api.sans: %v", h, sans) + cfg.DigMapping("spec", "api")["sans"] = sans + if cfg.DigString("spec", "api", "address") == "" { if onlyBindAddr, ok := cfg.Dig("spec", "api", "onlyBindToAddress").(bool); ok && onlyBindAddr { cfg.DigMapping("spec", "api")["address"] = addr From 27b65e13307fe0abc620f9d1f05fe794d5221f2f Mon Sep 17 00:00:00 2001 From: Kimmo Lehto Date: Thu, 7 Nov 2024 13:44:36 +0200 Subject: [PATCH 2/2] Make sans global Signed-off-by: Kimmo Lehto --- phase/configure_k0s.go | 73 +++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/phase/configure_k0s.go b/phase/configure_k0s.go index 8e0047d8..ac198b71 100644 --- a/phase/configure_k0s.go +++ b/phase/configure_k0s.go @@ -75,6 +75,42 @@ func (p *ConfigureK0s) Prepare(config *v1beta1.Cluster) error { } } + // convert sans from unmarshaled config into []string + var sans []string + oldsans := p.newBaseConfig.Dig("spec", "api", "sans") + switch oldsans := oldsans.(type) { + case []interface{}: + for _, v := range oldsans { + if s, ok := v.(string); ok { + sans = append(sans, s) + } + } + log.Tracef("converted sans from %T to []string", oldsans) + case []string: + sans = append(sans, oldsans...) + log.Tracef("sans was readily %T", oldsans) + default: + // do nothing - base k0s config does not contain any existing SANs + } + + // populate SANs with all controller addresses + for i, c := range p.Config.Spec.Hosts.Controllers() { + if c.Reset { + continue + } + if !slices.Contains(sans, c.Address()) { + sans = append(sans, c.Address()) + log.Debugf("added controller %d address %s to spec.api.sans", i+1, c.Address()) + } + if c.PrivateAddress != "" && !slices.Contains(sans, c.PrivateAddress) { + sans = append(sans, c.PrivateAddress) + log.Debugf("added controller %d private address %s to spec.api.sans", i+1, c.PrivateAddress) + } + } + + // assign populated sans to the base config + p.newBaseConfig.DigMapping("spec", "api")["sans"] = sans + for _, h := range p.Config.Spec.Hosts.Controllers() { if h.Reset { continue @@ -286,10 +322,7 @@ func (p *ConfigureK0s) configFor(h *cluster.Host) (string, error) { cfg = p.newBaseConfig.Dup() } - var ( - sans []string - addr string - ) + var addr string if h.PrivateAddress != "" { addr = h.PrivateAddress @@ -297,38 +330,6 @@ func (p *ConfigureK0s) configFor(h *cluster.Host) (string, error) { addr = h.Address() } - // convert sans from unmarshaled config into []string - oldsans := cfg.Dig("spec", "api", "sans") - switch oldsans := oldsans.(type) { - case []interface{}: - for _, v := range oldsans { - if s, ok := v.(string); ok { - sans = append(sans, s) - } - } - case []string: - sans = append(sans, oldsans...) - } - - if !slices.Contains(sans, addr) { - sans = append(sans, addr) - log.Infof("%s: added %s to spec.api.sans", h, addr) - } - - for i, c := range p.Config.Spec.Hosts.Controllers() { - if !slices.Contains(sans, c.Address()) { - sans = append(sans, c.Address()) - log.Infof("%s: added controller %d address %s to spec.api.sans", h, i+1, c.Address()) - } - if c.PrivateAddress != "" && !slices.Contains(sans, c.PrivateAddress) { - sans = append(sans, c.PrivateAddress) - log.Infof("%s: added controller %d private address %s to spec.api.sans", h, i+1, c.PrivateAddress) - } - } - - log.Debugf("%s: using k0s spec.api.sans: %v", h, sans) - cfg.DigMapping("spec", "api")["sans"] = sans - if cfg.DigString("spec", "api", "address") == "" { if onlyBindAddr, ok := cfg.Dig("spec", "api", "onlyBindToAddress").(bool); ok && onlyBindAddr { cfg.DigMapping("spec", "api")["address"] = addr