From e846cf71a1041ff86d085071860d20ad00f85f0a Mon Sep 17 00:00:00 2001 From: Kimmo Lehto Date: Mon, 6 May 2024 14:44:46 +0300 Subject: [PATCH] Clean up version: null from "k0sctl init" output (#641) Signed-off-by: Kimmo Lehto --- phase/default_k0s_version.go | 2 +- .../v1beta1/cluster/k0s.go | 30 +++++++++++++++---- .../v1beta1/cluster/spec.go | 17 +++++++++-- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/phase/default_k0s_version.go b/phase/default_k0s_version.go index 571cd1ad..1a88a1a6 100644 --- a/phase/default_k0s_version.go +++ b/phase/default_k0s_version.go @@ -21,7 +21,7 @@ func (p *DefaultK0sVersion) Title() string { } func (p *DefaultK0sVersion) Run() error { - isStable := p.Config.Spec.K0s.VersionChannel == "stable" + isStable := p.Config.Spec.K0s.VersionChannel == "" || p.Config.Spec.K0s.VersionChannel == "stable" var msg string if isStable { diff --git a/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/k0s.go b/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/k0s.go index 315125ec..453bd80b 100644 --- a/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/k0s.go +++ b/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/k0s.go @@ -31,10 +31,10 @@ var ( // K0s holds configuration for bootstraping a k0s cluster type K0s struct { - Version *version.Version `yaml:"version"` - VersionChannel string `yaml:"versionChannel" default:"stable"` - DynamicConfig bool `yaml:"dynamicConfig"` - Config dig.Mapping `yaml:"config"` + Version *version.Version `yaml:"version,omitempty"` + VersionChannel string `yaml:"versionChannel,omitempty"` + DynamicConfig bool `yaml:"dynamicConfig,omitempty" default:"false"` + Config dig.Mapping `yaml:"config,omitempty"` Metadata K0sMetadata `yaml:"-"` } @@ -56,6 +56,26 @@ func (k *K0s) UnmarshalYAML(unmarshal func(interface{}) error) error { return defaults.Set(k) } +// MarshalYAML implements yaml.Marshaler interface +func (k *K0s) MarshalYAML() (interface{}, error) { + if k == nil { + return nil, nil + } + type k0s K0s + yk := (*k0s)(k) + + yml, err := yaml.Marshal(yk) + if err != nil { + return nil, fmt.Errorf("marshal k0s: %w", err) + } + + if string(yml) == "{}\n" { + return nil, nil + } + + return yk, nil +} + // SetDefaults sets default values func (k *K0s) SetDefaults() { if k.Version == nil { @@ -88,7 +108,7 @@ func (k *K0s) Validate() error { return validation.ValidateStruct(k, validation.Field(&k.Version, validation.By(validateVersion)), validation.Field(&k.DynamicConfig, validation.By(k.validateMinDynamic())), - validation.Field(&k.VersionChannel, validation.In("stable", "latest")), + validation.Field(&k.VersionChannel, validation.In("stable", "latest"), validation.When(k.VersionChannel != "")), ) } diff --git a/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/spec.go b/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/spec.go index e25c7b8c..02a6dc49 100644 --- a/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/spec.go +++ b/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/spec.go @@ -9,8 +9,8 @@ import ( // Spec defines cluster config spec section type Spec struct { - Hosts Hosts `yaml:"hosts"` - K0s *K0s `yaml:"k0s"` + Hosts Hosts `yaml:"hosts,omitempty"` + K0s *K0s `yaml:"k0s,omitempty"` k0sLeader *Host } @@ -28,6 +28,19 @@ func (s *Spec) UnmarshalYAML(unmarshal func(interface{}) error) error { return defaults.Set(s) } +// MarshalYAML implements yaml.Marshaler interface +func (s *Spec) MarshalYAML() (interface{}, error) { + k0s, err := s.K0s.MarshalYAML() + if err != nil { + return nil, err + } + if k0s == nil { + return Spec{Hosts: s.Hosts}, nil + } + + return s, nil +} + // SetDefaults sets defaults func (s *Spec) SetDefaults() { if s.K0s == nil {