Skip to content

Commit 78d5a0f

Browse files
committed
Revert "Remove the assumption that a node's name == its hostname"
This reverts commit ea957ee.
1 parent 0efb5e9 commit 78d5a0f

File tree

1 file changed

+29
-32
lines changed

1 file changed

+29
-32
lines changed

Diff for: provisioner.go

+29-32
Original file line numberDiff line numberDiff line change
@@ -422,16 +422,20 @@ func (p *LocalPathProvisioner) provisionFor(opts pvController.ProvisionOptions,
422422
// affinity, as path is accessible from any node
423423
nodeAffinity = nil
424424
} else {
425+
valueNode, ok := node.GetLabels()[KeyNode]
426+
if !ok {
427+
valueNode = nodeName
428+
}
425429
nodeAffinity = &v1.VolumeNodeAffinity{
426430
Required: &v1.NodeSelector{
427431
NodeSelectorTerms: []v1.NodeSelectorTerm{
428432
{
429-
MatchFields: []v1.NodeSelectorRequirement{
433+
MatchExpressions: []v1.NodeSelectorRequirement{
430434
{
431-
Key: metav1.ObjectNameField,
435+
Key: KeyNode,
432436
Operator: v1.NodeSelectorOpIn,
433437
Values: []string{
434-
node.Name,
438+
valueNode,
435439
},
436440
},
437441
},
@@ -471,7 +475,7 @@ func (p *LocalPathProvisioner) deleteFor(pv *v1.PersistentVolume, c *StorageClas
471475
err = errors.Wrapf(err, "failed to delete volume %v", pv.Name)
472476
}()
473477

474-
path, node, nodeLabels, err := p.getPathAndNodeForPV(pv, c)
478+
path, node, err := p.getPathAndNodeForPV(pv, c)
475479
if err != nil {
476480
return err
477481
}
@@ -494,7 +498,6 @@ func (p *LocalPathProvisioner) deleteFor(pv *v1.PersistentVolume, c *StorageClas
494498
Mode: *pv.Spec.VolumeMode,
495499
SizeInBytes: storage.Value(),
496500
Node: node,
497-
NodeLabels: nodeLabels,
498501
}, c); err != nil {
499502
logrus.Infof("clean up volume %v failed: %v", pv.Name, err)
500503
return err
@@ -505,7 +508,7 @@ func (p *LocalPathProvisioner) deleteFor(pv *v1.PersistentVolume, c *StorageClas
505508
return nil
506509
}
507510

508-
func (p *LocalPathProvisioner) getPathAndNodeForPV(pv *v1.PersistentVolume, cfg *StorageClassConfig) (path, node string, nodeLabels map[string]string, err error) {
511+
func (p *LocalPathProvisioner) getPathAndNodeForPV(pv *v1.PersistentVolume, cfg *StorageClassConfig) (path, node string, err error) {
509512
defer func() {
510513
err = errors.Wrapf(err, "failed to delete volume %v", pv.Name)
511514
}()
@@ -516,55 +519,49 @@ func (p *LocalPathProvisioner) getPathAndNodeForPV(pv *v1.PersistentVolume, cfg
516519
} else if volumeSource.Local != nil && volumeSource.HostPath == nil {
517520
path = volumeSource.Local.Path
518521
} else {
519-
return "", "", nil, fmt.Errorf("no path set")
522+
return "", "", fmt.Errorf("no path set")
520523
}
521524

522525
sharedFS, err := p.isSharedFilesystem(cfg)
523526
if err != nil {
524-
return "", "", nil, err
527+
return "", "", err
525528
}
526529

527530
if sharedFS {
528531
// We don't have affinity and can use any node
529-
return path, "", nil, nil
532+
return path, "", nil
530533
}
531534

532535
// Dealing with local filesystem
533536

534537
nodeAffinity := pv.Spec.NodeAffinity
535538
if nodeAffinity == nil {
536-
return "", "", nil, fmt.Errorf("no NodeAffinity set")
539+
return "", "", fmt.Errorf("no NodeAffinity set")
537540
}
538541
required := nodeAffinity.Required
539542
if required == nil {
540-
return "", "", nil, fmt.Errorf("no NodeAffinity.Required set")
543+
return "", "", fmt.Errorf("no NodeAffinity.Required set")
541544
}
542545

543-
// If we have an explicit node, use that; otherwise use the selector.
544-
for _, selectorTerm := range required.NodeSelectorTerms {
545-
for _, expression := range selectorTerm.MatchFields {
546-
if expression.Key == metav1.ObjectNameField && expression.Operator == v1.NodeSelectorOpIn {
547-
if len(expression.Values) != 1 {
548-
return "", "", nil, fmt.Errorf("multiple values for the node affinity")
549-
}
550-
return path, expression.Values[0], nil, nil
551-
}
552-
}
553-
}
554-
// The scheduler must use the PV's node selector to schedule a helper pod.
546+
node = ""
555547
for _, selectorTerm := range required.NodeSelectorTerms {
556548
for _, expression := range selectorTerm.MatchExpressions {
557549
if expression.Key == KeyNode && expression.Operator == v1.NodeSelectorOpIn {
558550
if len(expression.Values) != 1 {
559-
return "", "", nil, fmt.Errorf("multiple values for the node affinity")
551+
return "", "", fmt.Errorf("multiple values for the node affinity")
560552
}
561-
return path, "", map[string]string{
562-
KeyNode: expression.Values[0],
563-
}, nil
553+
node = expression.Values[0]
554+
break
564555
}
565556
}
557+
if node != "" {
558+
break
559+
}
566560
}
567-
return "", "", nil, fmt.Errorf("cannot find affinited node")
561+
if node == "" {
562+
return "", "", fmt.Errorf("cannot find affinited node")
563+
}
564+
return path, node, nil
568565
}
569566

570567
type volumeOptions struct {
@@ -573,7 +570,6 @@ type volumeOptions struct {
573570
Mode v1.PersistentVolumeMode
574571
SizeInBytes int64
575572
Node string
576-
NodeLabels map[string]string
577573
}
578574

579575
func (p *LocalPathProvisioner) createHelperPod(action ActionType, cmd []string, o volumeOptions, cfg *StorageClassConfig) (err error) {
@@ -584,7 +580,7 @@ func (p *LocalPathProvisioner) createHelperPod(action ActionType, cmd []string,
584580
if err != nil {
585581
return err
586582
}
587-
if o.Name == "" || o.Path == "" || (!sharedFS && o.Node == "" && o.NodeLabels == nil) {
583+
if o.Name == "" || o.Path == "" || (!sharedFS && o.Node == "") {
588584
return fmt.Errorf("invalid empty name or path or node")
589585
}
590586
if !filepath.IsAbs(o.Path) {
@@ -665,8 +661,9 @@ func (p *LocalPathProvisioner) createHelperPod(action ActionType, cmd []string,
665661
helperPod.Name = helperPod.Name[:HelperPodNameMaxLength]
666662
}
667663
helperPod.Namespace = p.namespace
668-
helperPod.Spec.NodeName = o.Node
669-
helperPod.Spec.NodeSelector = o.NodeLabels
664+
if o.Node != "" {
665+
helperPod.Spec.NodeName = o.Node
666+
}
670667
helperPod.Spec.ServiceAccountName = p.serviceAccountName
671668
helperPod.Spec.RestartPolicy = v1.RestartPolicyNever
672669
helperPod.Spec.Tolerations = append(helperPod.Spec.Tolerations, lpvTolerations...)

0 commit comments

Comments
 (0)