From 2af68d25b86360f09336cfd5f53af1f18ba066b8 Mon Sep 17 00:00:00 2001 From: Weixu Zhuang Date: Tue, 12 Jan 2016 17:29:18 -0800 Subject: [PATCH] resolve the bug when cluster CIDR is not /8 We will have the rigth formula to generate correct maxCIDRs now. Previous code assume cluster CIDR is /8 which may not be true. Now it generates maxCIDR based on the info of cluster IP. --- pkg/controller/node/nodecontroller.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/controller/node/nodecontroller.go b/pkg/controller/node/nodecontroller.go index 6e97c6c563a..8d0e72ec526 100644 --- a/pkg/controller/node/nodecontroller.go +++ b/pkg/controller/node/nodecontroller.go @@ -19,6 +19,7 @@ package node import ( "errors" "fmt" + "math" "net" "strconv" "strings" @@ -211,8 +212,9 @@ func (nc *NodeController) generateAvailableCIDRs() { nc.generatedCIDR = true // Generate all available CIDRs here, since there will not be manay // available CIDRs. Set will be small, it will use less than 1MB memory - cidrIP := nc.clusterCIDR.IP.To4() - nc.maxCIDRs = (256-int(cidrIP[1]))*256 - int(cidrIP[2]) + + cidrSize, _ := nc.clusterCIDR.Mask.Size() + nc.maxCIDRs = int(math.Pow(2, (float64)(24-cidrSize))) for i := 0; i <= nc.maxCIDRs; i++ { nc.availableCIDRs.Insert(i)