kubekey/cmd/kk/pkg/phase/binary/task.go
24sama 3dd48dc8df refactor KubeKey project structure
Signed-off-by: 24sama <jacksama@foxmail.com>
2022-10-06 11:58:06 +08:00

68 lines
2.2 KiB
Go
Executable File

package binary
import (
"fmt"
"github.com/pkg/errors"
kubekeyapiv1alpha2 "github.com/kubesphere/kubekey/cmd/kk/apis/kubekey/v1alpha2"
"github.com/kubesphere/kubekey/cmd/kk/pkg/common"
"github.com/kubesphere/kubekey/cmd/kk/pkg/core/cache"
"github.com/kubesphere/kubekey/cmd/kk/pkg/core/connector"
"github.com/kubesphere/kubekey/cmd/kk/pkg/files"
)
type GetBinaryPath struct {
common.KubeAction
Binaries []string
}
func (g *GetBinaryPath) Execute(runtime connector.Runtime) error {
cfg := g.KubeConf.Cluster
archMap := make(map[string]bool)
for _, host := range cfg.Hosts {
switch host.Arch {
case "amd64":
archMap["amd64"] = true
case "arm64":
archMap["arm64"] = true
default:
return errors.New(fmt.Sprintf("Unsupported architecture: %s", host.Arch))
}
}
for arch := range archMap {
if err := setBinaryPath(g.KubeConf, runtime.GetWorkDir(), arch, g.Binaries, g.PipelineCache); err != nil {
return err
}
}
return nil
}
func setBinaryPath(kubeConf *common.KubeConf, path, arch string, binaries []string, pipelineCache *cache.Cache) error {
binariesMap := make(map[string]*files.KubeBinary)
var kubeBinary *files.KubeBinary
for _, binary := range binaries {
switch binary {
case "etcd":
kubeBinary = files.NewKubeBinary(binary, arch, kubekeyapiv1alpha2.DefaultEtcdVersion, path, kubeConf.Arg.DownloadCommand)
case "docker":
kubeBinary = files.NewKubeBinary(binary, arch, kubekeyapiv1alpha2.DefaultDockerVersion, path, kubeConf.Arg.DownloadCommand)
case "containerd":
kubeBinary = files.NewKubeBinary(binary, arch, kubekeyapiv1alpha2.DefaultContainerdVersion, path, kubeConf.Arg.DownloadCommand)
case "helm":
kubeBinary = files.NewKubeBinary(binary, arch, kubekeyapiv1alpha2.DefaultHelmVersion, path, kubeConf.Arg.DownloadCommand)
case "crictl":
kubeBinary = files.NewKubeBinary("crictl", arch, kubekeyapiv1alpha2.DefaultCrictlVersion, path, kubeConf.Arg.DownloadCommand)
case "runc":
kubeBinary = files.NewKubeBinary("runc", arch, kubekeyapiv1alpha2.DefaultRuncVersion, path, kubeConf.Arg.DownloadCommand)
default:
return errors.New(fmt.Sprintf("Unsupported binary name: %s", binary))
}
binariesMap[kubeBinary.ID] = kubeBinary
}
pipelineCache.Set(common.KubeBinaries+"-"+arch, binariesMap)
return nil
}