in plugins/ipam/ipstore/ipstore.go [88:110]
func (manager *IPManager) GetAvailableIP(id string) (string, error) {
var err error
nextIP := manager.lastKnownIP
for {
nextIP, err = NextIP(nextIP, manager.subnet)
if err != nil {
return "", err
}
err = manager.Assign(nextIP.String(), id)
if err != nil && err != store.ErrKeyExists {
return "", errors.Wrapf(err, "ipstore get ip: failed to assign ip in ipam")
} else if err == store.ErrKeyExists {
// ip already be used
} else {
// assing the ip succeed
manager.lastKnownIP = nextIP
return nextIP.String(), nil
}
if nextIP.Equal(manager.lastKnownIP) {
return "", errors.New("getAvailableIP ipstore: failed to find available ip addresses in the subnet")
}
}
}