mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-07 03:03:59 +00:00
Merge pull request #69420 from ereslibre/fix-kubeadm-panic
kubeadm: do not panic if etcd local alpha phase is called when an external etcd config is used
This commit is contained in:
commit
b836fa432e
@ -37,6 +37,9 @@ const (
|
|||||||
|
|
||||||
// CreateLocalEtcdStaticPodManifestFile will write local etcd static pod manifest file.
|
// CreateLocalEtcdStaticPodManifestFile will write local etcd static pod manifest file.
|
||||||
func CreateLocalEtcdStaticPodManifestFile(manifestDir string, cfg *kubeadmapi.InitConfiguration) error {
|
func CreateLocalEtcdStaticPodManifestFile(manifestDir string, cfg *kubeadmapi.InitConfiguration) error {
|
||||||
|
if cfg.ClusterConfiguration.Etcd.External != nil {
|
||||||
|
return fmt.Errorf("etcd static pod manifest cannot be generated for cluster using external etcd")
|
||||||
|
}
|
||||||
glog.V(1).Infoln("creating local etcd static pod manifest file")
|
glog.V(1).Infoln("creating local etcd static pod manifest file")
|
||||||
// gets etcd StaticPodSpec, actualized for the current InitConfiguration
|
// gets etcd StaticPodSpec, actualized for the current InitConfiguration
|
||||||
spec := GetEtcdPodSpec(cfg)
|
spec := GetEtcdPodSpec(cfg)
|
||||||
|
@ -54,13 +54,16 @@ func TestGetEtcdPodSpec(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateLocalEtcdStaticPodManifestFile(t *testing.T) {
|
func TestCreateLocalEtcdStaticPodManifestFile(t *testing.T) {
|
||||||
|
|
||||||
// Create temp folder for the test case
|
// Create temp folder for the test case
|
||||||
tmpdir := testutil.SetupTempDir(t)
|
tmpdir := testutil.SetupTempDir(t)
|
||||||
defer os.RemoveAll(tmpdir)
|
defer os.RemoveAll(tmpdir)
|
||||||
|
|
||||||
// Creates a Master Configuration
|
var tests = []struct {
|
||||||
cfg := &kubeadmapi.InitConfiguration{
|
cfg *kubeadmapi.InitConfiguration
|
||||||
|
expectedError bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
cfg: &kubeadmapi.InitConfiguration{
|
||||||
ClusterConfiguration: kubeadmapi.ClusterConfiguration{
|
ClusterConfiguration: kubeadmapi.ClusterConfiguration{
|
||||||
KubernetesVersion: "v1.7.0",
|
KubernetesVersion: "v1.7.0",
|
||||||
Etcd: kubeadmapi.Etcd{
|
Etcd: kubeadmapi.Etcd{
|
||||||
@ -70,18 +73,45 @@ func TestCreateLocalEtcdStaticPodManifestFile(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
expectedError: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cfg: &kubeadmapi.InitConfiguration{
|
||||||
|
ClusterConfiguration: kubeadmapi.ClusterConfiguration{
|
||||||
|
KubernetesVersion: "v1.7.0",
|
||||||
|
Etcd: kubeadmapi.Etcd{
|
||||||
|
External: &kubeadmapi.ExternalEtcd{
|
||||||
|
Endpoints: []string{
|
||||||
|
"https://etcd-instance:2379",
|
||||||
|
},
|
||||||
|
CAFile: "/etc/kubernetes/pki/etcd/ca.crt",
|
||||||
|
CertFile: "/etc/kubernetes/pki/etcd/apiserver-etcd-client.crt",
|
||||||
|
KeyFile: "/etc/kubernetes/pki/etcd/apiserver-etcd-client.key",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedError: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
// Execute createStaticPodFunction
|
// Execute createStaticPodFunction
|
||||||
manifestPath := filepath.Join(tmpdir, kubeadmconstants.ManifestsSubDirName)
|
manifestPath := filepath.Join(tmpdir, kubeadmconstants.ManifestsSubDirName)
|
||||||
err := CreateLocalEtcdStaticPodManifestFile(manifestPath, cfg)
|
err := CreateLocalEtcdStaticPodManifestFile(manifestPath, test.cfg)
|
||||||
if err != nil {
|
|
||||||
t.Errorf("Error executing CreateEtcdStaticPodManifestFile: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if !test.expectedError {
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("CreateLocalEtcdStaticPodManifestFile failed when not expected: %v", err)
|
||||||
|
}
|
||||||
// Assert expected files are there
|
// Assert expected files are there
|
||||||
testutil.AssertFilesCount(t, manifestPath, 1)
|
testutil.AssertFilesCount(t, manifestPath, 1)
|
||||||
testutil.AssertFileExists(t, manifestPath, kubeadmconstants.Etcd+".yaml")
|
testutil.AssertFileExists(t, manifestPath, kubeadmconstants.Etcd+".yaml")
|
||||||
|
} else {
|
||||||
|
testutil.AssertError(t, err, "etcd static pod manifest cannot be generated for cluster using external etcd")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetEtcdCommand(t *testing.T) {
|
func TestGetEtcdCommand(t *testing.T) {
|
||||||
|
@ -143,6 +143,17 @@ func AssertFileExists(t *testing.T, dirName string, fileNames ...string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AssertError checks that the provided error matches the expected output
|
||||||
|
func AssertError(t *testing.T, err error, expected string) {
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("no error was found, but '%s' was expected", expected)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err.Error() != expected {
|
||||||
|
t.Errorf("error '%s' does not match expected error: '%s'", err.Error(), expected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// GetDefaultInternalConfig returns a defaulted kubeadmapi.InitConfiguration
|
// GetDefaultInternalConfig returns a defaulted kubeadmapi.InitConfiguration
|
||||||
func GetDefaultInternalConfig(t *testing.T) *kubeadmapi.InitConfiguration {
|
func GetDefaultInternalConfig(t *testing.T) *kubeadmapi.InitConfiguration {
|
||||||
internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig("", &kubeadmapiv1beta1.InitConfiguration{})
|
internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig("", &kubeadmapiv1beta1.InitConfiguration{})
|
||||||
|
Loading…
Reference in New Issue
Block a user