Move GetZoneKey function to component-helpers

This commit is contained in:
Mike Dame
2021-01-07 15:02:16 -05:00
parent e4e9c31218
commit af045087d9
10 changed files with 174 additions and 121 deletions

View File

@@ -174,42 +174,6 @@ func GetNodeIP(client clientset.Interface, name string) net.IP {
return nodeIP
}
// 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 ""
}
// TODO: "failure-domain.beta..." names are deprecated, but will
// stick around a long time due to existing on old extant objects like PVs.
// Maybe one day we can stop considering them (see #88493).
zone, ok := labels[v1.LabelFailureDomainBetaZone]
if !ok {
zone, _ = labels[v1.LabelTopologyZone]
}
region, ok := labels[v1.LabelFailureDomainBetaRegion]
if !ok {
region, _ = labels[v1.LabelTopologyRegion]
}
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:" + zone
}
type nodeForConditionPatch struct {
Status nodeStatusForPatch `json:"status"`
}

View File

@@ -266,84 +266,3 @@ 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.LabelFailureDomainBetaZone: "zone1",
v1.LabelFailureDomainBetaRegion: "region1",
},
},
},
zone: "region1:\x00:zone1",
},
{
name: "has GA zone and region keys",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
v1.LabelTopologyZone: "zone1",
v1.LabelTopologyRegion: "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.LabelTopologyZone: "zone1",
v1.LabelTopologyRegion: "region1",
v1.LabelFailureDomainBetaZone: "zone1",
v1.LabelFailureDomainBetaRegion: "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.LabelTopologyZone: "zone1",
v1.LabelTopologyRegion: "region1",
v1.LabelFailureDomainBetaZone: "zone2",
v1.LabelFailureDomainBetaRegion: "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")
}
})
}
}