mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-06 16:06:51 +00:00
- adding the -node-label flag to the kubelet which allows for a initial tagging / labelling of the node on cluster registration
- the labels can come from a series of key=pair value or file:///path_to_file which contains key pairs
This commit is contained in:
@@ -3460,6 +3460,176 @@ func TestRegisterExistingNodeWithApiserver(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetNodeLabels(t *testing.T) {
|
||||
kubelet := newTestKubelet(t).kubelet
|
||||
|
||||
testCases := []struct {
|
||||
Expecting map[string]string
|
||||
LabelOptions []string
|
||||
FileContent string
|
||||
Ok bool
|
||||
}{
|
||||
{
|
||||
Ok: true,
|
||||
Expecting: map[string]string{"key1": "pair1", "key2": "pair2", "key3": "pair3", "key4": "pair4", "key5": "pair5"},
|
||||
LabelOptions: []string{"key5=pair5"},
|
||||
FileContent: `---
|
||||
key1: pair1
|
||||
key2: pair2
|
||||
key3: pair3
|
||||
key4: pair4
|
||||
`,
|
||||
}, {
|
||||
Ok: true,
|
||||
Expecting: map[string]string{"key1": "pair1", "key2": "override"},
|
||||
LabelOptions: []string{"key2=override"},
|
||||
FileContent: `---
|
||||
key1: pair1
|
||||
key2: pair2
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
||||
for i, test := range testCases {
|
||||
fd := createTestNodeLabelFile(t, test.FileContent)
|
||||
defer func(f *os.File) {
|
||||
os.Remove(f.Name())
|
||||
}(fd)
|
||||
|
||||
kubelet.nodeLabels = test.LabelOptions
|
||||
kubelet.nodeLabelsFile = fd.Name()
|
||||
|
||||
list, err := kubelet.getNodeLabels()
|
||||
if test.Ok && err != nil {
|
||||
t.Errorf("test case %d should not have failed, error: %s", i, err)
|
||||
}
|
||||
if !reflect.DeepEqual(test.Expecting, list) {
|
||||
t.Errorf("test case %d are not the same, %v ~ %v", i, list, test.Expecting)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestRetrieveNodeLabels(t *testing.T) {
|
||||
kubelet := newTestKubelet(t).kubelet
|
||||
|
||||
testCases := []struct {
|
||||
Expecting map[string]string
|
||||
LabelOptions []string
|
||||
Ok bool
|
||||
}{
|
||||
{
|
||||
Expecting: map[string]string{"key1": "pair1", "key2": "pair2", "key3": "pair3", "key4": "pair4"},
|
||||
LabelOptions: []string{"key1=pair1", "key2=pair2", "key3=pair3", "key4=pair4"},
|
||||
Ok: true,
|
||||
},
|
||||
{
|
||||
Expecting: map[string]string{"key1": "pair1"},
|
||||
LabelOptions: []string{"key1=pair1", "key2paiwdsr2"},
|
||||
},
|
||||
}
|
||||
|
||||
for i, test := range testCases {
|
||||
list, err := kubelet.retrieveNodeLabels(test.LabelOptions)
|
||||
if test.Ok && err != nil {
|
||||
t.Errorf("test case %d should not have failed, error: %s", i, err)
|
||||
}
|
||||
if !reflect.DeepEqual(test.Expecting, list) {
|
||||
t.Errorf("test case %d are not the same, %v ~ %v", i, list, test.Expecting)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestRetrieveNodeLabelsFile(t *testing.T) {
|
||||
kubelet := newTestKubelet(t).kubelet
|
||||
|
||||
testCases := []struct {
|
||||
Expecting map[string]string
|
||||
Ok bool
|
||||
FileContent string
|
||||
}{
|
||||
{
|
||||
Expecting: map[string]string{"key1": "pair1", "key2": "pair2", "key3": "pair3", "key4": "pair4"},
|
||||
Ok: true,
|
||||
FileContent: `---
|
||||
key1: pair1
|
||||
key2: pair2
|
||||
key3: pair3
|
||||
key4: pair4`,
|
||||
}, {
|
||||
FileContent: `---
|
||||
key1: pair1
|
||||
hash_map:
|
||||
key2: pair2
|
||||
`,
|
||||
}, {
|
||||
Expecting: map[string]string{"key1": "pair1", "key2": "pair2"},
|
||||
Ok: true,
|
||||
FileContent: `
|
||||
|
||||
key1: pair1
|
||||
key2: pair2
|
||||
`,
|
||||
}, {
|
||||
FileContent: `---
|
||||
key1: pair1
|
||||
bad_key_pair
|
||||
`,
|
||||
}, {
|
||||
Expecting: nil,
|
||||
FileContent: `{
|
||||
"key1": "pair1",
|
||||
"key2": "pair2",
|
||||
"key3": "pair3",
|
||||
"key4": {
|
||||
"some_key": "some_value"
|
||||
}
|
||||
}`,
|
||||
}, {
|
||||
FileContent: "",
|
||||
}, {
|
||||
Expecting: map[string]string{"key1": "pair1", "key2": "pair2", "key3": "pair3", "key4": "pair4"},
|
||||
Ok: true,
|
||||
FileContent: `---
|
||||
key1: pair1
|
||||
key2: pair2
|
||||
key3: pair3
|
||||
key4: pair4
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
||||
for i, test := range testCases {
|
||||
fd := createTestNodeLabelFile(t, test.FileContent)
|
||||
defer func(f *os.File) {
|
||||
os.Remove(f.Name())
|
||||
}(fd)
|
||||
|
||||
labels, err := kubelet.retrieveNodeLabelsFile(fd.Name())
|
||||
if test.Ok && err != nil {
|
||||
t.Errorf("test case %d should not have returned an error, %s", i, err)
|
||||
continue
|
||||
}
|
||||
|
||||
if test.Expecting != nil && !reflect.DeepEqual(test.Expecting, labels) {
|
||||
t.Errorf("test case %d not as expected, got: %#v, expecting: %#v", i, labels, test.Expecting)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func createTestNodeLabelFile(t *testing.T, content string) *os.File {
|
||||
f, err := ioutil.TempFile("", "node_label_file")
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error creating node_label_file: %v", err)
|
||||
}
|
||||
f.Close()
|
||||
|
||||
if err := ioutil.WriteFile(f.Name(), []byte(content), 0700); err != nil {
|
||||
t.Fatalf("unexpected error writing node label file: %v", err)
|
||||
}
|
||||
|
||||
return f
|
||||
}
|
||||
|
||||
func TestMakePortMappings(t *testing.T) {
|
||||
tests := []struct {
|
||||
container *api.Container
|
||||
|
||||
Reference in New Issue
Block a user