use GA topology labels for vsphere

This commit is contained in:
Divyen Patel 2021-05-28 12:31:48 -07:00
parent bd0196e8ba
commit 518844fd25
6 changed files with 23 additions and 8 deletions

View File

@ -433,7 +433,7 @@ func (v *vsphereVolumeProvisioner) Provision(selectedNode *v1.Node, allowedTopol
for k, v := range labels {
pv.Labels[k] = v
var values []string
if k == v1.LabelFailureDomainBetaZone {
if k == v1.LabelTopologyZone || k == v1.LabelFailureDomainBetaZone {
values, err = volumehelpers.LabelZonesToList(v)
if err != nil {
return nil, fmt.Errorf("failed to convert label string for Zone: %s to a List: %v", v, err)

View File

@ -29,6 +29,16 @@ import (
func TestTranslatevSphereInTreeStorageClassToCSI(t *testing.T) {
translator := NewvSphereCSITranslator()
topologySelectorTerm := v1.TopologySelectorTerm{[]v1.TopologySelectorLabelRequirement{
{
Key: v1.LabelTopologyZone,
Values: []string{"zone-a"},
},
{
Key: v1.LabelTopologyRegion,
Values: []string{"region-a"},
},
}}
topologySelectorTermWithBetaLabels := v1.TopologySelectorTerm{[]v1.TopologySelectorLabelRequirement{
{
Key: v1.LabelFailureDomainBetaZone,
Values: []string{"zone-a"},
@ -85,6 +95,11 @@ func TestTranslatevSphereInTreeStorageClassToCSI(t *testing.T) {
sc: NewStorageClass(map[string]string{"storagepolicyname": "test-policy-name"}, []v1.TopologySelectorTerm{topologySelectorTerm}),
expSc: NewStorageClass(map[string]string{"storagepolicyname": "test-policy-name", paramcsiMigration: "true"}, []v1.TopologySelectorTerm{topologySelectorTerm}),
},
{
name: "translate with storagepolicyname and allowedTopology beta labels",
sc: NewStorageClass(map[string]string{"storagepolicyname": "test-policy-name"}, []v1.TopologySelectorTerm{topologySelectorTermWithBetaLabels}),
expSc: NewStorageClass(map[string]string{"storagepolicyname": "test-policy-name", paramcsiMigration: "true"}, []v1.TopologySelectorTerm{topologySelectorTermWithBetaLabels}),
},
{
name: "translate with raw vSAN policy parameters, datastore and diskformat",
sc: NewStorageClass(map[string]string{"hostfailurestotolerate": "2", "datastore": "vsanDatastore", "diskformat": "thin"}, []v1.TopologySelectorTerm{topologySelectorTerm}),

View File

@ -219,8 +219,8 @@ func (nm *NodeManager) DiscoverNode(node *v1.Node) error {
}
}
// Get the node zone information
nodeFd := node.ObjectMeta.Labels[v1.LabelFailureDomainBetaZone]
nodeRegion := node.ObjectMeta.Labels[v1.LabelFailureDomainBetaRegion]
nodeFd := node.ObjectMeta.Labels[v1.LabelTopologyZone]
nodeRegion := node.ObjectMeta.Labels[v1.LabelTopologyRegion]
nodeZone := &cloudprovider.Zone{FailureDomain: nodeFd, Region: nodeRegion}
nodeInfo := &NodeInfo{dataCenter: res.datacenter, vm: vm, vcServer: res.vc, vmUUID: nodeUUID, zone: nodeZone}
nm.addNodeInfo(node.ObjectMeta.Name, nodeInfo)

View File

@ -1776,8 +1776,8 @@ func (vs *VSphere) GetVolumeLabels(volumePath string) (map[string]string, error)
// FIXME: For now, pick the first zone of datastore as the zone of volume
labels := make(map[string]string)
if len(dsZones) > 0 {
labels[v1.LabelFailureDomainBetaRegion] = dsZones[0].Region
labels[v1.LabelFailureDomainBetaZone] = dsZones[0].FailureDomain
labels[v1.LabelTopologyRegion] = dsZones[0].Region
labels[v1.LabelTopologyZone] = dsZones[0].FailureDomain
}
return labels, nil
}

View File

@ -226,7 +226,7 @@ func getVSphereStorageClassSpec(name string, scParameters map[string]string, zon
term := v1.TopologySelectorTerm{
MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{
{
Key: v1.LabelFailureDomainBetaZone,
Key: v1.LabelTopologyZone,
Values: zones,
},
},

View File

@ -369,7 +369,7 @@ var _ = utils.SIGDescribe("Zone Support [Feature:vsphere]", func() {
zones = append(zones, zoneA)
nodeSelectorMap := map[string]string{
// nodeSelector set as zoneB
v1.LabelFailureDomainBetaZone: zoneB,
v1.LabelTopologyZone: zoneB,
}
verifyPodSchedulingFails(client, namespace, nodeSelectorMap, scParameters, zones, storagev1.VolumeBindingWaitForFirstConsumer)
})
@ -518,7 +518,7 @@ func verifyPVZoneLabels(client clientset.Interface, timeouts *framework.TimeoutC
ginkgo.By("Verify zone information is present in the volume labels")
for _, pv := range persistentvolumes {
// Multiple zones are separated with "__"
pvZoneLabels := strings.Split(pv.ObjectMeta.Labels["failure-domain.beta.kubernetes.io/zone"], "__")
pvZoneLabels := strings.Split(pv.ObjectMeta.Labels[v1.LabelTopologyZone], "__")
for _, zone := range zones {
gomega.Expect(pvZoneLabels).Should(gomega.ContainElement(zone), "Incorrect or missing zone labels in pv.")
}