mirror of
https://github.com/kubernetes-sigs/kind.git
synced 2025-12-01 07:26:05 +07:00
cover merging, improve errors
This commit is contained in:
@@ -29,13 +29,13 @@ func KINDClusterKey(clusterName string) string {
|
||||
// our expectations, namely on the number of entries
|
||||
func checkKubeadmExpectations(cfg *Config) error {
|
||||
if len(cfg.Clusters) != 1 {
|
||||
return errors.Errorf("kubeadm KUBECONFIG should only have one cluster, but read %d", len(cfg.Clusters))
|
||||
return errors.Errorf("kubeadm KUBECONFIG should have one cluster, but read %d", len(cfg.Clusters))
|
||||
}
|
||||
if len(cfg.Users) != 1 {
|
||||
return errors.Errorf("kubeadm KUBECONFIG should only have one user, but read %d", len(cfg.Users))
|
||||
return errors.Errorf("kubeadm KUBECONFIG should have one user, but read %d", len(cfg.Users))
|
||||
}
|
||||
if len(cfg.Contexts) != 1 {
|
||||
return errors.Errorf("kubeadm KUBECONFIG should only have one context, but read %d", len(cfg.Contexts))
|
||||
return errors.Errorf("kubeadm KUBECONFIG should have one context, but read %d", len(cfg.Contexts))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -17,6 +17,9 @@ limitations under the License.
|
||||
package kubeconfig
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
@@ -220,3 +223,220 @@ func TestMerge(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestWriteMerged(t *testing.T) {
|
||||
t.Run("normal merge", testWriteMergedNormal)
|
||||
t.Run("bad kind config", testWriteMergedBogusConfig)
|
||||
t.Run("merge into non-existent file", testWriteMergedNoExistingFile)
|
||||
}
|
||||
|
||||
func testWriteMergedNormal(t *testing.T) {
|
||||
t.Parallel()
|
||||
dir, err := ioutil.TempDir("", "kind-testwritemerged")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create tempdir: %d", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
// create an existing kubeconfig
|
||||
const existingConfig = `clusters:
|
||||
- cluster:
|
||||
certificate-authority-data: definitelyacert
|
||||
server: https://192.168.9.4:6443
|
||||
name: kind-foo
|
||||
contexts:
|
||||
- context:
|
||||
cluster: kind-foo
|
||||
user: kind-foo
|
||||
name: kind-foo
|
||||
current-context: kind-foo
|
||||
kind: Config
|
||||
apiVersion: v1
|
||||
preferences: {}
|
||||
users:
|
||||
- name: kind-foo
|
||||
user:
|
||||
client-certificate-data: seemslegit
|
||||
client-key-data: yep
|
||||
`
|
||||
existingConfigPath := filepath.Join(dir, "existing-kubeconfig")
|
||||
if err := ioutil.WriteFile(existingConfigPath, []byte(existingConfig), os.ModePerm); err != nil {
|
||||
t.Fatalf("Failed to create existing kubeconfig: %d", err)
|
||||
}
|
||||
|
||||
kindConfig := &Config{
|
||||
Clusters: []NamedCluster{
|
||||
{
|
||||
Name: "kind-kind",
|
||||
Cluster: Cluster{
|
||||
Server: "https://127.0.0.1:6443",
|
||||
OtherFields: map[string]interface{}{
|
||||
"certificate-authority-data": "definitelyacert",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Contexts: []NamedContext{
|
||||
{
|
||||
Name: "kind-kind",
|
||||
Context: Context{
|
||||
User: "kind-kind",
|
||||
Cluster: "kind-kind",
|
||||
},
|
||||
},
|
||||
},
|
||||
Users: []NamedUser{
|
||||
{
|
||||
Name: "kind-kind",
|
||||
User: map[string]interface{}{
|
||||
"client-certificate-data": "seemslegit",
|
||||
"client-key-data": "yep",
|
||||
},
|
||||
},
|
||||
},
|
||||
CurrentContext: "kind-kind",
|
||||
OtherFields: map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "Config",
|
||||
"preferences": map[string]interface{}{},
|
||||
},
|
||||
}
|
||||
// ensure that we can write this merged config
|
||||
if err := WriteMerged(kindConfig, existingConfigPath); err != nil {
|
||||
t.Fatalf("Failed to write merged kubeconfig: %v", err)
|
||||
}
|
||||
|
||||
// ensure the output matches expected
|
||||
f, err := os.Open(existingConfigPath)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to open merged kubeconfig: %v", err)
|
||||
}
|
||||
contents, err := ioutil.ReadAll(f)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to read merged kubeconfig: %v", err)
|
||||
}
|
||||
expected := `apiVersion: v1
|
||||
clusters:
|
||||
- cluster:
|
||||
certificate-authority-data: definitelyacert
|
||||
server: https://192.168.9.4:6443
|
||||
name: kind-foo
|
||||
- cluster:
|
||||
certificate-authority-data: definitelyacert
|
||||
server: https://127.0.0.1:6443
|
||||
name: kind-kind
|
||||
contexts:
|
||||
- context:
|
||||
cluster: kind-foo
|
||||
user: kind-foo
|
||||
name: kind-foo
|
||||
- context:
|
||||
cluster: kind-kind
|
||||
user: kind-kind
|
||||
name: kind-kind
|
||||
current-context: kind-kind
|
||||
kind: Config
|
||||
preferences: {}
|
||||
users:
|
||||
- name: kind-foo
|
||||
user:
|
||||
client-certificate-data: seemslegit
|
||||
client-key-data: yep
|
||||
- name: kind-kind
|
||||
user:
|
||||
client-certificate-data: seemslegit
|
||||
client-key-data: yep
|
||||
`
|
||||
assert.StringEqual(t, expected, string(contents))
|
||||
}
|
||||
|
||||
func testWriteMergedBogusConfig(t *testing.T) {
|
||||
t.Parallel()
|
||||
dir, err := ioutil.TempDir("", "kind-testwritemerged")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create tempdir: %d", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
err = WriteMerged(&Config{}, filepath.Join(dir, "bogus"))
|
||||
assert.ExpectError(t, true, err)
|
||||
}
|
||||
|
||||
func testWriteMergedNoExistingFile(t *testing.T) {
|
||||
t.Parallel()
|
||||
dir, err := ioutil.TempDir("", "kind-testwritemerged")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create tempdir: %d", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
kindConfig := &Config{
|
||||
Clusters: []NamedCluster{
|
||||
{
|
||||
Name: "kind-kind",
|
||||
Cluster: Cluster{
|
||||
Server: "https://127.0.0.1:6443",
|
||||
OtherFields: map[string]interface{}{
|
||||
"certificate-authority-data": "definitelyacert",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Contexts: []NamedContext{
|
||||
{
|
||||
Name: "kind-kind",
|
||||
Context: Context{
|
||||
User: "kind-kind",
|
||||
Cluster: "kind-kind",
|
||||
},
|
||||
},
|
||||
},
|
||||
Users: []NamedUser{
|
||||
{
|
||||
Name: "kind-kind",
|
||||
User: map[string]interface{}{
|
||||
"client-certificate-data": "seemslegit",
|
||||
"client-key-data": "yep",
|
||||
},
|
||||
},
|
||||
},
|
||||
CurrentContext: "kind-kind",
|
||||
OtherFields: map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "Config",
|
||||
"preferences": map[string]interface{}{},
|
||||
},
|
||||
}
|
||||
|
||||
nonExistentPath := filepath.Join(dir, "bogus")
|
||||
err = WriteMerged(kindConfig, nonExistentPath)
|
||||
assert.ExpectError(t, false, err)
|
||||
|
||||
// ensure the output matches expected
|
||||
f, err := os.Open(nonExistentPath)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to open merged kubeconfig: %v", err)
|
||||
}
|
||||
contents, err := ioutil.ReadAll(f)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to read merged kubeconfig: %v", err)
|
||||
}
|
||||
expected := `clusters:
|
||||
- cluster:
|
||||
certificate-authority-data: definitelyacert
|
||||
server: https://127.0.0.1:6443
|
||||
name: kind-kind
|
||||
contexts:
|
||||
- context:
|
||||
cluster: kind-kind
|
||||
user: kind-kind
|
||||
name: kind-kind
|
||||
current-context: kind-kind
|
||||
users:
|
||||
- name: kind-kind
|
||||
user:
|
||||
client-certificate-data: seemslegit
|
||||
client-key-data: yep
|
||||
`
|
||||
assert.StringEqual(t, expected, string(contents))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user