Merge pull request #25 from mwielgus/label-fix

Override hostname label when building a template node
This commit is contained in:
Marcin Wielgus 2017-04-27 17:25:43 +02:00 committed by GitHub
commit 6bafa2a940
2 changed files with 36 additions and 1 deletions

View File

@ -18,6 +18,7 @@ package core
import (
"fmt"
"math/rand"
"reflect"
"time"
@ -26,6 +27,7 @@ import (
"k8s.io/autoscaler/cluster-autoscaler/simulator"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
api "k8s.io/kubernetes/pkg/api"
apiv1 "k8s.io/kubernetes/pkg/api/v1"
kube_client "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
@ -142,7 +144,12 @@ func GetNodeInfosForGroups(nodes []*apiv1.Node, cloudProvider cloudprovider.Clou
}
id := nodeGroup.Id()
if _, found := result[id]; !found {
nodeInfo, err := simulator.BuildNodeInfoForNode(node, kubeClient)
sanitizedNode, err := sanitizeTemplateNodeLables(node)
if err != nil {
return map[string]*schedulercache.NodeInfo{}, err
}
nodeInfo, err := simulator.BuildNodeInfoForNode(sanitizedNode, kubeClient)
if err != nil {
return map[string]*schedulercache.NodeInfo{}, err
}
@ -152,6 +159,23 @@ func GetNodeInfosForGroups(nodes []*apiv1.Node, cloudProvider cloudprovider.Clou
return result, nil
}
func sanitizeTemplateNodeLables(node *apiv1.Node) (*apiv1.Node, error) {
obj, err := api.Scheme.DeepCopy(node)
if err != nil {
return nil, err
}
newNode := obj.(*apiv1.Node)
newNode.Labels = make(map[string]string, len(node.Labels))
for k, v := range node.Labels {
if k != metav1.LabelHostname {
newNode.Labels[k] = v
} else {
newNode.Labels[k] = fmt.Sprintf("template-node-for-cluster-autoscaler-%d", rand.Int63())
}
}
return newNode, nil
}
// Removes unregisterd nodes if needed. Returns true if anything was removed and error if such occurred.
func removeOldUnregisteredNodes(unregisteredNodes []clusterstate.UnregisteredNode, context *AutoscalingContext,
currentTime time.Time) (bool, error) {

View File

@ -26,6 +26,7 @@ import (
"k8s.io/autoscaler/cluster-autoscaler/simulator"
. "k8s.io/autoscaler/cluster-autoscaler/utils/test"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
apiv1 "k8s.io/kubernetes/pkg/api/v1"
"github.com/stretchr/testify/assert"
@ -104,6 +105,16 @@ func TestRemoveOldUnregisteredNodes(t *testing.T) {
assert.Equal(t, "ng1/ng1-2", deletedNode)
}
func testSanitizeLabels(t *testing.T) {
node := BuildTestNode("ng1-1", 1000, 1000)
node.Labels[metav1.LabelHostname] = "abc"
node.Labels["x"] = "y"
node, err := sanitizeTemplateNodeLables(node)
assert.NoError(t, err)
assert.NotEqual(t, node.Labels[metav1.LabelHostname], "abc")
assert.Equal(t, node.Labels["x"], "y")
}
func TestRemoveFixNodeTargetSize(t *testing.T) {
sizeChanges := make(chan string, 10)
now := time.Now()