mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-20 17:38:50 +00:00
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:
@@ -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 {
|
||||
|
@@ -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")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user