in pkg/controllers/persistentvolumeclaim/controller.go [63:94]
func (c *Controller) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {
ctx = logging.WithLogger(ctx, logging.FromContext(ctx).Named(controllerName).With("resource", req.String()))
ctx = injection.WithNamespacedName(ctx, req.NamespacedName)
ctx = injection.WithControllerName(ctx, controllerName)
pvc := &v1.PersistentVolumeClaim{}
if err := c.kubeClient.Get(ctx, req.NamespacedName, pvc); err != nil {
if errors.IsNotFound(err) {
return reconcile.Result{}, nil
}
return reconcile.Result{}, err
}
pod, err := c.podForPvc(ctx, pvc)
if err != nil {
return reconcile.Result{}, err
}
if pod == nil {
return reconcile.Result{}, nil
}
if nodeName, ok := pvc.Annotations[SelectedNodeAnnotation]; ok && nodeName == pod.Spec.NodeName {
return reconcile.Result{}, nil
}
if !c.isBindable(pod) {
return reconcile.Result{}, nil
}
pvc.Annotations = functional.UnionStringMaps(pvc.Annotations, map[string]string{SelectedNodeAnnotation: pod.Spec.NodeName})
if err := c.kubeClient.Update(ctx, pvc); err != nil {
return reconcile.Result{}, fmt.Errorf("binding persistent volume claim for pod %s/%s to node %q, %w", pod.Namespace, pod.Name, pod.Spec.NodeName, err)
}
logging.FromContext(ctx).Infof("Bound persistent volume claim to node %s", pod.Spec.NodeName)
return reconcile.Result{}, nil
}