Merge pull request #1855 from hanweisen/karmadainit
when type wrong etcd-storage-mode throw error
This commit is contained in:
commit
08fe6a6df0
|
@ -2,6 +2,7 @@ package cmdinit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
|
@ -57,7 +58,7 @@ func NewCmdInit(parentCommand string) *cobra.Command {
|
||||||
flags.StringVar(&opts.Context, "context", "", "The name of the kubeconfig context to use")
|
flags.StringVar(&opts.Context, "context", "", "The name of the kubeconfig context to use")
|
||||||
// etcd
|
// etcd
|
||||||
flags.StringVarP(&opts.EtcdStorageMode, "etcd-storage-mode", "", "emptyDir",
|
flags.StringVarP(&opts.EtcdStorageMode, "etcd-storage-mode", "", "emptyDir",
|
||||||
"etcd data storage mode(emptyDir,hostPath,PVC). value is PVC, specify --storage-classes-name")
|
fmt.Sprintf("etcd data storage mode(%s). value is PVC, specify --storage-classes-name", strings.Join(kubernetes.SupportedStorageMode(), ",")))
|
||||||
flags.StringVarP(&opts.EtcdImage, "etcd-image", "", "", "etcd image")
|
flags.StringVarP(&opts.EtcdImage, "etcd-image", "", "", "etcd image")
|
||||||
flags.StringVarP(&opts.EtcdInitImage, "etcd-init-image", "", "docker.io/alpine:3.15.1", "etcd init container image")
|
flags.StringVarP(&opts.EtcdInitImage, "etcd-init-image", "", "docker.io/alpine:3.15.1", "etcd init container image")
|
||||||
flags.Int32VarP(&opts.EtcdReplicas, "etcd-replicas", "", 1, "etcd replica set, cluster 3,5...singular")
|
flags.Int32VarP(&opts.EtcdReplicas, "etcd-replicas", "", 1, "etcd replica set, cluster 3,5...singular")
|
||||||
|
|
|
@ -47,6 +47,12 @@ var (
|
||||||
defaultKubeControllerManagerImage = "kube-controller-manager:v1.22.10"
|
defaultKubeControllerManagerImage = "kube-controller-manager:v1.22.10"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
etcdStorageModePVC = "PVC"
|
||||||
|
etcdStorageModeEmptyDir = "emptyDir"
|
||||||
|
etcdStorageModeHostPath = "hostPath"
|
||||||
|
)
|
||||||
|
|
||||||
// CommandInitOption holds all flags options for init.
|
// CommandInitOption holds all flags options for init.
|
||||||
type CommandInitOption struct {
|
type CommandInitOption struct {
|
||||||
KubeImageRegistry string
|
KubeImageRegistry string
|
||||||
|
@ -87,22 +93,31 @@ type CommandInitOption struct {
|
||||||
|
|
||||||
// Validate Check that there are enough flags to run the command.
|
// Validate Check that there are enough flags to run the command.
|
||||||
func (i *CommandInitOption) Validate(parentCommand string) error {
|
func (i *CommandInitOption) Validate(parentCommand string) error {
|
||||||
if i.EtcdStorageMode == "hostPath" && i.EtcdHostDataPath == "" {
|
if i.EtcdStorageMode == etcdStorageModeHostPath && i.EtcdHostDataPath == "" {
|
||||||
return fmt.Errorf("when etcd storage mode is hostPath, dataPath is not empty. See '%s init --help'", parentCommand)
|
return fmt.Errorf("when etcd storage mode is hostPath, dataPath is not empty. See '%s init --help'", parentCommand)
|
||||||
}
|
}
|
||||||
|
|
||||||
if i.EtcdStorageMode == "hostPath" && i.EtcdNodeSelectorLabels != "" && utils.StringToMap(i.EtcdNodeSelectorLabels) == nil {
|
if i.EtcdStorageMode == etcdStorageModeHostPath && i.EtcdNodeSelectorLabels != "" && utils.StringToMap(i.EtcdNodeSelectorLabels) == nil {
|
||||||
return fmt.Errorf("the label does not seem to be 'key=value'")
|
return fmt.Errorf("the label does not seem to be 'key=value'")
|
||||||
}
|
}
|
||||||
|
|
||||||
if i.EtcdStorageMode == "hostPath" && i.EtcdReplicas != 1 {
|
if i.EtcdStorageMode == etcdStorageModeHostPath && i.EtcdReplicas != 1 {
|
||||||
return fmt.Errorf("for data security,when etcd storage mode is hostPath,etcd-replicas can only be 1")
|
return fmt.Errorf("for data security,when etcd storage mode is hostPath,etcd-replicas can only be 1")
|
||||||
}
|
}
|
||||||
|
|
||||||
if i.EtcdStorageMode == "PVC" && i.StorageClassesName == "" {
|
if i.EtcdStorageMode == etcdStorageModePVC && i.StorageClassesName == "" {
|
||||||
return fmt.Errorf("when etcd storage mode is PVC, storageClassesName is not empty. See '%s init --help'", parentCommand)
|
return fmt.Errorf("when etcd storage mode is PVC, storageClassesName is not empty. See '%s init --help'", parentCommand)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
supportedStorageMode := SupportedStorageMode()
|
||||||
|
if i.EtcdStorageMode != "" {
|
||||||
|
for _, mode := range supportedStorageMode {
|
||||||
|
if i.EtcdStorageMode == mode {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fmt.Errorf("unsupported etcd-storage-mode %s. See '%s init --help'", i.EtcdStorageMode, parentCommand)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -509,3 +524,8 @@ func homeDir() string {
|
||||||
}
|
}
|
||||||
return os.Getenv("USERPROFILE") // windows
|
return os.Getenv("USERPROFILE") // windows
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SupportedStorageMode Return install etcd supported storage mode
|
||||||
|
func SupportedStorageMode() []string {
|
||||||
|
return []string{etcdStorageModeEmptyDir, etcdStorageModeHostPath, etcdStorageModePVC}
|
||||||
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@ func (i CommandInitOption) etcdVolume() (*[]corev1.Volume, *corev1.PersistentVol
|
||||||
Volumes = append(Volumes, secretVolume, configVolume)
|
Volumes = append(Volumes, secretVolume, configVolume)
|
||||||
|
|
||||||
switch i.EtcdStorageMode {
|
switch i.EtcdStorageMode {
|
||||||
case "PVC":
|
case etcdStorageModePVC:
|
||||||
mode := corev1.PersistentVolumeFilesystem
|
mode := corev1.PersistentVolumeFilesystem
|
||||||
persistentVolumeClaim := corev1.PersistentVolumeClaim{
|
persistentVolumeClaim := corev1.PersistentVolumeClaim{
|
||||||
TypeMeta: metav1.TypeMeta{
|
TypeMeta: metav1.TypeMeta{
|
||||||
|
@ -83,7 +83,7 @@ func (i CommandInitOption) etcdVolume() (*[]corev1.Volume, *corev1.PersistentVol
|
||||||
}
|
}
|
||||||
return &Volumes, &persistentVolumeClaim
|
return &Volumes, &persistentVolumeClaim
|
||||||
|
|
||||||
case "hostPath":
|
case etcdStorageModeHostPath:
|
||||||
t := corev1.HostPathDirectoryOrCreate
|
t := corev1.HostPathDirectoryOrCreate
|
||||||
hostPath := corev1.Volume{
|
hostPath := corev1.Volume{
|
||||||
Name: etcdContainerDataVolumeMountName,
|
Name: etcdContainerDataVolumeMountName,
|
||||||
|
|
Loading…
Reference in New Issue