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 }