Skip to content

Commit

Permalink
refactor: make distro optional for default values
Browse files Browse the repository at this point in the history
  • Loading branch information
FabianKramm committed Apr 5, 2024
1 parent b204687 commit 6e911b8
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 94 deletions.
4 changes: 1 addition & 3 deletions cmd/vclusterctl/cmd/app/create/pro.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
"time"

"github.com/ghodss/yaml"
"github.com/go-logr/logr"
clusterv1 "github.com/loft-sh/agentapi/v3/pkg/apis/loft/cluster/v1"
agentstoragev1 "github.com/loft-sh/agentapi/v3/pkg/apis/loft/storage/v1"
managementv1 "github.com/loft-sh/api/v3/pkg/apis/management/v1"
Expand Down Expand Up @@ -517,8 +516,7 @@ func mergeValues(proClient procli.Client, options *Options, log log.Logger) (str
if err != nil {
return "", err
}
logger := logr.New(log.LogrLogSink())
chartValues, err := vclusterconfig.GetExtraValues(chartOptions, logger)
chartValues, err := vclusterconfig.GetExtraValues(chartOptions)
if err != nil {
return "", err
}
Expand Down
4 changes: 1 addition & 3 deletions cmd/vclusterctl/cmd/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
"strings"
"time"

"github.com/go-logr/logr"
"github.com/loft-sh/log/survey"
"github.com/loft-sh/log/terminal"
"github.com/loft-sh/vcluster/cmd/vclusterctl/cmd/app/localkubernetes"
Expand Down Expand Up @@ -197,8 +196,7 @@ func (cmd *CreateCmd) Run(ctx context.Context, args []string) error {
if err != nil {
return err
}
logger := logr.New(cmd.log.LogrLogSink())
chartValues, err := config.GetExtraValues(chartOptions, logger)
chartValues, err := config.GetExtraValues(chartOptions)
if err != nil {
return err
}
Expand Down
154 changes: 66 additions & 88 deletions config/default_extra_values.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,22 +87,6 @@ var EKSSchedulerVersionMap = map[string]string{
"1.25": "public.ecr.aws/eks-distro/kubernetes/kube-scheduler:v1.25.14-eks-1-25-23",
}

// EKSEtcdVersionMap holds the supported eks etcd
var EKSEtcdVersionMap = map[string]string{
"1.28": "public.ecr.aws/eks-distro/etcd-io/etcd:v3.5.9-eks-1-28-6",
"1.27": "public.ecr.aws/eks-distro/etcd-io/etcd:v3.5.8-eks-1-27-13",
"1.26": "public.ecr.aws/eks-distro/etcd-io/etcd:v3.5.8-eks-1-26-19",
"1.25": "public.ecr.aws/eks-distro/etcd-io/etcd:v3.5.8-eks-1-25-23",
}

// EKSCoreDNSVersionMap holds the supported eks core dns
var EKSCoreDNSVersionMap = map[string]string{
"1.28": "public.ecr.aws/eks-distro/coredns/coredns:v1.10.1-eks-1-28-6",
"1.27": "public.ecr.aws/eks-distro/coredns/coredns:v1.10.1-eks-1-27-13",
"1.26": "public.ecr.aws/eks-distro/coredns/coredns:v1.9.3-eks-1-26-19",
"1.25": "public.ecr.aws/eks-distro/coredns/coredns:v1.9.3-eks-1-25-23",
}

// ExtraValuesOptions holds the chart options
type ExtraValuesOptions struct {
Distro string
Expand All @@ -119,120 +103,112 @@ type ExtraValuesOptions struct {
PlatformUserID string
}

type Logger interface {
Info(msg string, keysAndValues ...any)
}

type KubernetesVersion struct {
Major string
Minor string
}

func GetExtraValues(options *ExtraValuesOptions, log Logger) (string, error) {
func GetExtraValues(options *ExtraValuesOptions) (string, error) {
fromConfig, err := NewDefaultConfig()
if err != nil {
return "", err
}

toConfig, err := getExtraValues(options, log)
toConfig, err := getExtraValues(options)
if err != nil {
return "", fmt.Errorf("get extra values: %w", err)
}

return Diff(fromConfig, toConfig)
}

func getExtraValues(options *ExtraValuesOptions, log Logger) (*Config, error) {
func getExtraValues(options *ExtraValuesOptions) (*Config, error) {
vConfig, err := NewDefaultConfig()
if err != nil {
return nil, err
}

switch options.Distro {
case K3SDistro:
return getK3SExtraValues(vConfig, options, log)
case K0SDistro:
return getK0SExtraValues(vConfig, options, log)
case K8SDistro:
return getK8SExtraValues(vConfig, options, log)
case EKSDistro:
return getEKSExtraValues(vConfig, options, log)
// apply k3s values
err = applyK3SExtraValues(vConfig, options)
if err != nil {
return nil, err
}

// apply k0s values
err = applyK0SExtraValues(vConfig, options)
if err != nil {
return nil, err
}

// apply k8s values
err = applyK8SExtraValues(vConfig, options)
if err != nil {
return nil, err
}

// apply eks values
err = applyEKSExtraValues(vConfig, options)
if err != nil {
return nil, err
}

// add common release values
addCommonReleaseValues(vConfig, options)
return vConfig, nil
}

var replaceRegEx = regexp.MustCompile("[^0-9]+")

func getK3SExtraValues(vConfig *Config, options *ExtraValuesOptions, log Logger) (*Config, error) {
func applyK3SExtraValues(vConfig *Config, options *ExtraValuesOptions) error {
// get k3s image
image, err := getImageByVersion(options.KubernetesVersion, K3SVersionMap, log)
image, err := getImageByVersion(options.KubernetesVersion, K3SVersionMap)
if err != nil {
return nil, err
return err
}

// build values
vConfig.ControlPlane.Distro.K3S.Enabled = true
if image != "" {
vConfig.ControlPlane.Distro.K3S.Image = parseImage(image)
}

// add common release values
addCommonReleaseValues(vConfig, options)
return vConfig, nil
return nil
}

func getK0SExtraValues(vConfig *Config, options *ExtraValuesOptions, log Logger) (*Config, error) {
func applyK0SExtraValues(vConfig *Config, options *ExtraValuesOptions) error {
// get k0s image
image, err := getImageByVersion(options.KubernetesVersion, K0SVersionMap, log)
image, err := getImageByVersion(options.KubernetesVersion, K0SVersionMap)
if err != nil {
return nil, err
return err
}

// build values
vConfig.ControlPlane.Distro.K0S.Enabled = true
if image != "" {
vConfig.ControlPlane.Distro.K0S.Image = parseImage(image)
}

// add common release values
addCommonReleaseValues(vConfig, options)
return vConfig, nil
return nil
}

func getEKSExtraValues(vConfig *Config, options *ExtraValuesOptions, log Logger) (*Config, error) {
func applyEKSExtraValues(vConfig *Config, options *ExtraValuesOptions) error {
// get api server image
apiImage, err := getImageByVersion(options.KubernetesVersion, EKSAPIVersionMap, log)
apiImage, err := getImageByVersion(options.KubernetesVersion, EKSAPIVersionMap)
if err != nil {
return nil, err
return err
}

// get controller image
controllerImage, err := getImageByVersion(options.KubernetesVersion, EKSControllerVersionMap, log)
controllerImage, err := getImageByVersion(options.KubernetesVersion, EKSControllerVersionMap)
if err != nil {
return nil, err
return err
}

// get scheduler image
schedulerImage, err := getImageByVersion(options.KubernetesVersion, EKSSchedulerVersionMap, log)
if err != nil {
return nil, err
}

// get etcd image
etcdImage, err := getImageByVersion(options.KubernetesVersion, EKSEtcdVersionMap, log)
schedulerImage, err := getImageByVersion(options.KubernetesVersion, EKSSchedulerVersionMap)
if err != nil {
return nil, err
}

// get coredns image
coreDNSImage, err := getImageByVersion(options.KubernetesVersion, EKSCoreDNSVersionMap, log)
if err != nil {
return nil, err
return err
}

// build values
vConfig.ControlPlane.Distro.EKS.Enabled = true
if apiImage != "" {
vConfig.ControlPlane.Distro.EKS.APIServer.Image = parseImage(apiImage)
}
Expand All @@ -242,40 +218,33 @@ func getEKSExtraValues(vConfig *Config, options *ExtraValuesOptions, log Logger)
if schedulerImage != "" {
vConfig.ControlPlane.Distro.EKS.Scheduler.Image = parseImage(schedulerImage)
}
if etcdImage != "" {
vConfig.ControlPlane.BackingStore.Etcd.Deploy.StatefulSet.Image = parseImage(etcdImage)
}
if coreDNSImage != "" {
vConfig.ControlPlane.CoreDNS.Deployment.Image = coreDNSImage
}

addCommonReleaseValues(vConfig, options)
return vConfig, nil
return nil
}

func getK8SExtraValues(vConfig *Config, options *ExtraValuesOptions, log Logger) (*Config, error) {
func applyK8SExtraValues(vConfig *Config, options *ExtraValuesOptions) error {
// get api server image
apiImage, err := getImageByVersion(options.KubernetesVersion, K8SAPIVersionMap, log)
apiImage, err := getImageByVersion(options.KubernetesVersion, K8SAPIVersionMap)
if err != nil {
return nil, err
return err
}

// get controller image
controllerImage, err := getImageByVersion(options.KubernetesVersion, K8SControllerVersionMap, log)
controllerImage, err := getImageByVersion(options.KubernetesVersion, K8SControllerVersionMap)
if err != nil {
return nil, err
return err
}

// get scheduler image
schedulerImage, err := getImageByVersion(options.KubernetesVersion, K8SSchedulerVersionMap, log)
schedulerImage, err := getImageByVersion(options.KubernetesVersion, K8SSchedulerVersionMap)
if err != nil {
return nil, err
return err
}

// get etcd image
etcdImage, err := getImageByVersion(options.KubernetesVersion, K8SEtcdVersionMap, log)
etcdImage, err := getImageByVersion(options.KubernetesVersion, K8SEtcdVersionMap)
if err != nil {
return nil, err
return err
}

// build values
Expand All @@ -292,8 +261,7 @@ func getK8SExtraValues(vConfig *Config, options *ExtraValuesOptions, log Logger)
vConfig.ControlPlane.BackingStore.Etcd.Deploy.StatefulSet.Image = parseImage(etcdImage)
}

addCommonReleaseValues(vConfig, options)
return vConfig, nil
return nil
}

func parseImage(image string) Image {
Expand All @@ -308,7 +276,7 @@ func parseImage(image string) Image {
return Image{}
}

func getImageByVersion(kubernetesVersion KubernetesVersion, versionImageMap map[string]string, log Logger) (string, error) {
func getImageByVersion(kubernetesVersion KubernetesVersion, versionImageMap map[string]string) (string, error) {
// check if there is a minor and major version
if kubernetesVersion.Minor == "" || kubernetesVersion.Major == "" {
return "", nil
Expand Down Expand Up @@ -347,10 +315,8 @@ func getImageByVersion(kubernetesVersion KubernetesVersion, versionImageMap map[
image, ok := versionImageMap[serverVersionString]
if !ok {
if serverMinorInt > highestMinorVersion {
log.Info(fmt.Sprintf("officially unsupported host server version %s, will fallback to virtual cluster version v1.%d", serverVersionString, highestMinorVersion))
image = versionImageMap["1."+strconv.Itoa(highestMinorVersion)]
} else {
log.Info(fmt.Sprintf("officially unsupported host server version %s, will fallback to virtual cluster version v1.%d", serverVersionString, lowestMinorVersion))
image = versionImageMap["1."+strconv.Itoa(lowestMinorVersion)]
}
}
Expand Down Expand Up @@ -385,6 +351,18 @@ func addCommonReleaseValues(config *Config, options *ExtraValuesOptions) {
config.Telemetry.PlatformInstanceID = options.PlatformInstanceID
config.Telemetry.MachineID = options.MachineID
}

if options.Distro != "" {
switch options.Distro {
case K3SDistro:
config.ControlPlane.Distro.K3S.Enabled = true
case K0SDistro:
config.ControlPlane.Distro.K0S.Enabled = true
case EKSDistro:
config.ControlPlane.Distro.EKS.Enabled = true
case K8SDistro:
}
}
}

func getKubernetesVersion(serverVersion KubernetesVersion) string {
Expand Down

0 comments on commit 6e911b8

Please sign in to comment.