/// Implementation func parseSubnetKey(s string) (ip.IP4Net, error) { if parts := subnetRegex.FindStringSubmatch(s); len(parts) == 3 { snIp := net.ParseIP(parts[1]).To4() prefixLen, err := strconv.ParseUint(parts[2], 10, 5) if snIp != nil && err == nil { return ip.IP4Net{IP: ip.FromIP(snIp), PrefixLen: uint(prefixLen)}, nil } } return ip.IP4Net{}, errors.New("Error parsing IP Subnet") }
func acquireLease(sm *subnet.SubnetManager, pubIP net.IP) (ip.IP4Net, error) { attrs := subnet.BaseAttrs{ PublicIP: ip.FromIP(pubIP), } data, err := json.Marshal(&attrs) if err != nil { return ip.IP4Net{}, err } var sn ip.IP4Net for { sn, err = sm.AcquireLease(attrs.PublicIP, string(data)) if err == nil { log.Info("Subnet lease acquired: ", sn) break } log.Error("Failed to acquire subnet: ", err) time.Sleep(time.Second) } return sn, nil }