in controllers/route/route_controller.go [292:341]
func (rc *RouteController) updateNetworkingCondition(node *v1.Node, routesCreated bool) error {
_, condition := nodeutil.GetNodeCondition(&(node.Status), v1.NodeNetworkUnavailable)
if routesCreated && condition != nil && condition.Status == v1.ConditionFalse {
klog.V(2).Infof("set node %v with NodeNetworkUnavailable=false was canceled because it is already set", node.Name)
return nil
}
if !routesCreated && condition != nil && condition.Status == v1.ConditionTrue {
klog.V(2).Infof("set node %v with NodeNetworkUnavailable=true was canceled because it is already set", node.Name)
return nil
}
klog.Infof("Patching node status %v with %v previous condition was:%+v", node.Name, routesCreated, condition)
// either condition is not there, or has a value != to what we need
// start setting it
err := clientretry.RetryOnConflict(updateNetworkConditionBackoff, func() error {
var err error
// Patch could also fail, even though the chance is very slim. So we still do
// patch in the retry loop.
currentTime := metav1.Now()
if routesCreated {
err = nodeutil.SetNodeCondition(rc.kubeClient, types.NodeName(node.Name), v1.NodeCondition{
Type: v1.NodeNetworkUnavailable,
Status: v1.ConditionFalse,
Reason: "RouteCreated",
Message: "RouteController created a route",
LastTransitionTime: currentTime,
})
} else {
err = nodeutil.SetNodeCondition(rc.kubeClient, types.NodeName(node.Name), v1.NodeCondition{
Type: v1.NodeNetworkUnavailable,
Status: v1.ConditionTrue,
Reason: "NoRouteCreated",
Message: "RouteController failed to create a route",
LastTransitionTime: currentTime,
})
}
if err != nil {
klog.V(4).Infof("Error updating node %s, retrying: %v", types.NodeName(node.Name), err)
}
return err
})
if err != nil {
klog.Errorf("Error updating node %s: %v", node.Name, err)
}
return err
}