From c7988bae61f123c6d35ddaaf2dd54def42e02612 Mon Sep 17 00:00:00 2001 From: Nic Cope Date: Thu, 11 Jan 2018 17:50:07 -0800 Subject: [PATCH] Get the node before attempting to get its Alias IP ranges This allows us to fail fast if the node doesn't exist, and to record node status changes if we fail to 'allocate' a CIDR. --- .../nodeipam/ipam/cloud_cidr_allocator.go | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go b/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go index 8d6ef878dac5e..6f4e4cfcc7ac0 100644 --- a/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go +++ b/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go @@ -191,10 +191,14 @@ func (ca *cloudCIDRAllocator) AllocateOrOccupyCIDR(node *v1.Node) error { // updateCIDRAllocation assigns CIDR to Node and sends an update to the API server. func (ca *cloudCIDRAllocator) updateCIDRAllocation(nodeName string) error { - var err error - var node *v1.Node defer ca.removeNodeFromProcessing(nodeName) + node, err := ca.nodeLister.Get(nodeName) + if err != nil { + glog.Errorf("Failed while getting node %v for updating Node.Spec.PodCIDR: %v", nodeName, err) + return err + } + cidrs, err := ca.cloud.AliasRanges(types.NodeName(nodeName)) if err != nil { nodeutil.RecordNodeStatusChange(ca.recorder, node, "CIDRNotAvailable") @@ -210,12 +214,6 @@ func (ca *cloudCIDRAllocator) updateCIDRAllocation(nodeName string) error { } podCIDR := cidr.String() - node, err = ca.nodeLister.Get(nodeName) - if err != nil { - glog.Errorf("Failed while getting node %v for updating Node.Spec.PodCIDR: %v", nodeName, err) - return err - } - if node.Spec.PodCIDR == podCIDR { glog.V(4).Infof("Node %v already has allocated CIDR %v. It matches the proposed one.", node.Name, podCIDR) // We don't return here, in order to set the NetworkUnavailable condition later below.