Merge branch 'master' into master

This commit is contained in:
pixiake 2020-05-23 14:27:41 +08:00 committed by GitHub
commit e5c6b07411
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 126 additions and 20 deletions

View File

@ -9,7 +9,6 @@ import (
func NewCmdCreateCluster() *cobra.Command {
var (
clusterCfgFile string
//addons string
//pkgDir string
verbose bool
all bool

View File

@ -8,41 +8,64 @@ import (
log "github.com/sirupsen/logrus"
"gopkg.in/yaml.v2"
"io/ioutil"
"os"
"os/exec"
"os/user"
"path/filepath"
)
func ParseClusterCfg(clusterCfgPath string, all bool, logger *log.Logger) (*kubekeyapi.Cluster, error) {
clusterCfg := kubekeyapi.Cluster{}
if len(clusterCfgPath) == 0 {
user, _ := user.Current()
if user.Name != "root" {
return nil, errors.New(fmt.Sprintf("Current user is %s. Please use root!", user.Name))
}
clusterCfg = AllinoneCfg(user, all)
} else {
fp, err := filepath.Abs(clusterCfgPath)
currentDir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
return nil, errors.Wrap(err, "Failed to look up current directory")
}
content, err := ioutil.ReadFile(fp)
cfgFile := fmt.Sprintf("%s/config.yaml", currentDir)
if util.IsExist(cfgFile) {
clusterCfg, err := ParseCfg(cfgFile)
if err != nil {
return nil, err
}
return clusterCfg, nil
} else {
user, _ := user.Current()
if user.Name != "root" {
return nil, errors.New(fmt.Sprintf("Current user is %s. Please use root!", user.Name))
}
clusterCfg := AllinoneCfg(user, all)
return clusterCfg, nil
}
} else {
clusterCfg, err := ParseCfg(clusterCfgPath)
if err != nil {
return nil, errors.Wrap(err, "Unable to read the given cluster configuration file")
return nil, err
}
if err := yaml.Unmarshal(content, &clusterCfg); err != nil {
return nil, errors.Wrap(err, "Unable to convert file to yaml")
}
//output, _ := json.MarshalIndent(&clusterCfg, "", " ")
//fmt.Println(string(output))
return clusterCfg, nil
}
}
func ParseCfg(clusterCfgPath string) (*kubekeyapi.Cluster, error) {
clusterCfg := kubekeyapi.Cluster{}
fp, err := filepath.Abs(clusterCfgPath)
if err != nil {
return nil, errors.Wrap(err, "Failed to look up current directory")
}
content, err := ioutil.ReadFile(fp)
if err != nil {
return nil, errors.Wrap(err, "Unable to read the given cluster configuration file")
}
//output, _ := json.MarshalIndent(&clusterCfg, "", " ")
//fmt.Println(string(output))
if err := yaml.Unmarshal(content, &clusterCfg); err != nil {
return nil, errors.Wrap(err, "Unable to convert file to yaml")
}
return &clusterCfg, nil
}
func AllinoneCfg(user *user.User, all bool) kubekeyapi.Cluster {
func AllinoneCfg(user *user.User, all bool) *kubekeyapi.Cluster {
allinoneCfg := kubekeyapi.Cluster{}
if err := exec.Command("/bin/sh", "-c", "if [ ! -f \"$HOME/.ssh/id_rsa\" ]; then ssh-keygen -t rsa -P \"\" -f $HOME/.ssh/id_rsa && ls $HOME/.ssh;fi;").Run(); err != nil {
log.Fatalf("Failed to generate public key: %v", err)
@ -122,5 +145,5 @@ func AllinoneCfg(user *user.User, all bool) kubekeyapi.Cluster {
}
}
return allinoneCfg
return &allinoneCfg
}

View File

@ -2,6 +2,7 @@ package images
import (
kubekeyapi "github.com/kubesphere/kubekey/pkg/apis/kubekey/v1alpha1"
"github.com/kubesphere/kubekey/pkg/util"
"github.com/kubesphere/kubekey/pkg/util/manager"
"strings"
)
@ -15,8 +16,17 @@ const (
func GetImage(mgr *manager.Manager, name string) *Image {
var image Image
var pauseTag string
result := util.CompareVersion(strings.TrimSpace(mgr.Cluster.Kubernetes.Version), "v1.18.0")
if result == 0 || result == 1 {
pauseTag = "3.2"
} else {
pauseTag = "3.1"
}
ImageList := map[string]Image{
"pause": {RepoAddr: "", Namespace: mgr.Cluster.Kubernetes.ImageRepo, Repo: "pause", Tag: "3.1", Group: K8s, Enable: true},
"pause": {RepoAddr: "", Namespace: mgr.Cluster.Kubernetes.ImageRepo, Repo: "pause", Tag: pauseTag, Group: K8s, Enable: true},
"kube-apiserver": {RepoAddr: "", Namespace: mgr.Cluster.Kubernetes.ImageRepo, Repo: "kube-apiserver", Tag: mgr.Cluster.Kubernetes.Version, Group: Master, Enable: true},
"kube-controller-manager": {RepoAddr: "", Namespace: mgr.Cluster.Kubernetes.ImageRepo, Repo: "kube-controller-manager", Tag: mgr.Cluster.Kubernetes.Version, Group: Master, Enable: true},
"kube-scheduler": {RepoAddr: "", Namespace: mgr.Cluster.Kubernetes.ImageRepo, Repo: "kube-scheduler", Tag: mgr.Cluster.Kubernetes.Version, Group: Master, Enable: true},
@ -41,7 +51,7 @@ func GetImage(mgr *manager.Manager, name string) *Image {
}
if mgr.Cluster.Registry.PrivateRegistry != "" {
ImageList["pause"] = Image{RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: mgr.Cluster.Kubernetes.ImageRepo, Repo: "pause", Tag: "3.1", Group: K8s, Enable: true}
ImageList["pause"] = Image{RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: mgr.Cluster.Kubernetes.ImageRepo, Repo: "pause", Tag: pauseTag, Group: K8s, Enable: true}
ImageList["kube-apiserver"] = Image{RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: mgr.Cluster.Kubernetes.ImageRepo, Repo: "kube-apiserver", Tag: mgr.Cluster.Kubernetes.Version, Group: Master, Enable: true}
ImageList["kube-controller-manager"] = Image{RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: mgr.Cluster.Kubernetes.ImageRepo, Repo: "kube-controller-manager", Tag: mgr.Cluster.Kubernetes.Version, Group: Master, Enable: true}
ImageList["kube-scheduler"] = Image{RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: mgr.Cluster.Kubernetes.ImageRepo, Repo: "kube-scheduler", Tag: mgr.Cluster.Kubernetes.Version, Group: Master, Enable: true}

View File

@ -13,6 +13,9 @@ import (
const (
VERSION = "KubeKey Version v1.0.0-dev\nKubernetes Version v1.17.6\nKubeSphere Version 3.0.0"
VersionBig = 1
VersionSmall = 2
VersionEqual = 0
)
func InitLogger(verbose bool) *log.Logger {
@ -219,3 +222,74 @@ func LocalIP() string {
}
return localIp
}
// Compare Version Numbers
func CompareVersion(versionA, versionB string) int {
return compareStrVer(versionA, versionB)
}
func compareStrVer(verA, verB string) int {
verStrArrA := spliteStrByNet(verA)
verStrArrB := spliteStrByNet(verB)
lenStrA := len(verStrArrA)
lenStrB := len(verStrArrB)
if lenStrA != lenStrB {
panic("Inconsistent version number format!")
}
return compareArrStrVers(verStrArrA, verStrArrB)
}
func spliteStrByNet(strV string) []string {
return strings.Split(strV, ".")
}
func compareArrStrVers(verA, verB []string) int {
for index, _ := range verA {
littleResult := compareLittleVer(verA[index], verB[index])
if littleResult != VersionEqual {
return littleResult
}
}
return VersionEqual
}
func compareLittleVer(verA, verB string) int {
bytesA := []byte(verA)
bytesB := []byte(verB)
lenA := len(bytesA)
lenB := len(bytesB)
if lenA > lenB {
return VersionBig
}
if lenA < lenB {
return VersionSmall
}
return compareByBytes(bytesA, bytesB)
}
func compareByBytes(verA, verB []byte) int {
for index, _ := range verA {
if verA[index] > verB[index] {
return VersionBig
}
if verA[index] < verB[index] {
return VersionSmall
}
}
return VersionEqual
}