pkg/util/node: update GetZoneKey to check both beta and GA labels

Signed-off-by: Andrew Sy Kim <kiman@vmware.com>
This commit is contained in:
Andrew Sy Kim 2019-08-28 12:59:09 -04:00
parent 4c194d52da
commit 07229d6c51
4 changed files with 294 additions and 88 deletions

View File

@ -197,8 +197,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
fakeNow := metav1.Date(2015, 1, 1, 12, 0, 0, 0, time.UTC)
evictionTimeout := 10 * time.Minute
labels := map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
}
// Because of the logic that prevents NC from evicting anything when all Nodes are NotReady
@ -234,8 +236,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node0",
CreationTimestamp: fakeNow,
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
},
@ -244,8 +248,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -314,8 +320,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -334,8 +342,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -378,8 +388,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -398,8 +410,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -469,8 +483,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -489,8 +505,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -533,8 +551,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -553,8 +573,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -597,8 +619,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -617,8 +641,10 @@ func TestMonitorNodeHealthEvictPods(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -762,8 +788,10 @@ func TestPodStatusChange(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -930,8 +958,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -950,8 +980,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -985,8 +1017,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -1005,8 +1039,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region2",
v1.LabelZoneFailureDomain: "zone2",
v1.LabelZoneRegionStable: "region2",
v1.LabelZoneFailureDomainStable: "zone2",
v1.LabelZoneRegion: "region2",
v1.LabelZoneFailureDomain: "zone2",
},
},
Status: v1.NodeStatus{
@ -1047,8 +1083,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -1067,8 +1105,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone2",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone2",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone2",
},
},
Status: v1.NodeStatus{
@ -1108,8 +1148,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -1128,8 +1170,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node-master",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -1167,8 +1211,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -1187,8 +1233,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone2",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone2",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone2",
},
},
Status: v1.NodeStatus{
@ -1229,8 +1277,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -1249,8 +1299,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -1269,8 +1321,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node2",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -1289,8 +1343,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node3",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -1309,8 +1365,10 @@ func TestMonitorNodeHealthEvictPodsWithDisruption(t *testing.T) {
Name: "node4",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -2584,8 +2642,10 @@ func TestApplyNoExecuteTaints(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -2606,8 +2666,10 @@ func TestApplyNoExecuteTaints(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -2627,8 +2689,10 @@ func TestApplyNoExecuteTaints(t *testing.T) {
Name: "node2",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -2731,8 +2795,10 @@ func TestSwapUnreachableNotReadyTaints(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -2754,8 +2820,10 @@ func TestSwapUnreachableNotReadyTaints(t *testing.T) {
Name: "node1",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -2880,8 +2948,10 @@ func TestTaintsNodeByCondition(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -2939,8 +3009,10 @@ func TestTaintsNodeByCondition(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -2969,8 +3041,10 @@ func TestTaintsNodeByCondition(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -2999,8 +3073,10 @@ func TestTaintsNodeByCondition(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -3023,8 +3099,10 @@ func TestTaintsNodeByCondition(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -3145,8 +3223,10 @@ func TestReconcileNodeLabels(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegion: "region1",
v1.LabelZoneFailureDomain: "zone1",
},
},
Status: v1.NodeStatus{
@ -3201,12 +3281,12 @@ func TestReconcileNodeLabels(t *testing.T) {
Name: "node0",
CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
Labels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneRegionStable: "region1",
},
},
},
ExpectedLabels: map[string]string{
v1.LabelZoneRegion: "region1",
v1.LabelZoneRegionStable: "region1",
},
},
{

View File

@ -108,7 +108,30 @@ var allNodes = []*v1.Node{
v1.LabelZoneFailureDomain: "zone-2",
},
},
}}
},
// Node 9: a node with zone + region label and the deprecated zone + region label
{
ObjectMeta: metav1.ObjectMeta{
Name: "node-9",
Labels: map[string]string{
v1.LabelZoneRegionStable: "region-2",
v1.LabelZoneFailureDomainStable: "zone-2",
v1.LabelZoneRegion: "region-2",
v1.LabelZoneFailureDomain: "zone-2",
},
},
},
// Node 10: a node with only the deprecated zone + region labels
{
ObjectMeta: metav1.ObjectMeta{
Name: "node-10",
Labels: map[string]string{
v1.LabelZoneRegion: "region-2",
v1.LabelZoneFailureDomain: "zone-3",
},
},
},
}
func verifyNodeTree(t *testing.T, nt *nodeTree, expectedTree map[string]*nodeArray) {
expectedNumNodes := int(0)
@ -164,6 +187,14 @@ func TestNodeTree_AddNode(t *testing.T) {
"region-2:\x00:zone-2": {[]string{"node-6"}, 0},
},
},
{
name: "nodes also using deprecated zone/region label",
nodesToAdd: allNodes[9:],
expectedTree: map[string]*nodeArray{
"region-2:\x00:zone-2": {[]string{"node-9"}, 0},
"region-2:\x00:zone-3": {[]string{"node-10"}, 0},
},
},
}
for _, test := range tests {
@ -400,7 +431,7 @@ func TestNodeTreeMultiOperations(t *testing.T) {
nodesToAdd: append(allNodes[4:9], allNodes[3]),
nodesToRemove: nil,
operations: []string{"add", "add", "add", "add", "add", "next", "next", "next", "next", "add", "next", "next", "next"},
expectedOutput: []string{"node-4", "node-5", "node-6", "node-7", "node-3", "node-8", "node-4"},
expectedOutput: []string{"node-4", "node-6", "node-7", "node-8", "node-3", "node-4", "node-6"},
},
{
name: "remove zone and add new to ensure exhausted is reset correctly",

View File

@ -139,23 +139,37 @@ func GetNodeIP(client clientset.Interface, hostname string) net.IP {
// GetZoneKey is a helper function that builds a string identifier that is unique per failure-zone;
// it returns empty-string for no zone.
// Since there are currently two separate zone keys:
// * "failure-domain.beta.kubernetes.io/zone"
// * "topology.kubernetes.io/zone"
// GetZoneKey will first check failure-domain.beta.kubernetes.io/zone and if not exists, will then check
// topology.kubernetes.io/zone
func GetZoneKey(node *v1.Node) string {
labels := node.Labels
if labels == nil {
return ""
}
region, _ := labels[v1.LabelZoneRegion]
failureDomain, _ := labels[v1.LabelZoneFailureDomain]
// TODO: prefer stable labels for zone in v1.18
zone, ok := labels[v1.LabelZoneFailureDomain]
if !ok {
zone, _ = labels[v1.LabelZoneFailureDomainStable]
}
if region == "" && failureDomain == "" {
// TODO: prefer stable labels for region in v1.18
region, ok := labels[v1.LabelZoneRegion]
if !ok {
region, _ = labels[v1.LabelZoneRegionStable]
}
if region == "" && zone == "" {
return ""
}
// We include the null character just in case region or failureDomain has a colon
// (We do assume there's no null characters in a region or failureDomain)
// As a nice side-benefit, the null character is not printed by fmt.Print or glog
return region + ":\x00:" + failureDomain
return region + ":\x00:" + zone
}
type nodeForConditionPatch struct {

View File

@ -120,3 +120,84 @@ func TestGetHostname(t *testing.T) {
}
}
func Test_GetZoneKey(t *testing.T) {
tests := []struct {
name string
node *v1.Node
zone string
}{
{
name: "has no zone or region keys",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{},
},
},
zone: "",
},
{
name: "has beta zone and region keys",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegion: "region1",
},
},
},
zone: "region1:\x00:zone1",
},
{
name: "has GA zone and region keys",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegionStable: "region1",
},
},
},
zone: "region1:\x00:zone1",
},
{
name: "has both beta and GA zone and region keys",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomain: "zone1",
v1.LabelZoneRegion: "region1",
},
},
},
zone: "region1:\x00:zone1",
},
{
name: "has both beta and GA zone and region keys, beta labels take precedent",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
v1.LabelZoneFailureDomainStable: "zone1",
v1.LabelZoneRegionStable: "region1",
v1.LabelZoneFailureDomain: "zone2",
v1.LabelZoneRegion: "region2",
},
},
},
zone: "region2:\x00:zone2",
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
zone := GetZoneKey(test.node)
if zone != test.zone {
t.Logf("actual zone key: %q", zone)
t.Logf("expected zone key: %q", test.zone)
t.Errorf("unexpected zone key")
}
})
}
}