in plugins/ipam/ipstore/ipstore.go [177:201]
func (manager *IPManager) ReleaseByID(id string) (string, error) {
// TODO improve this part by implement listing all the kv pairs
// libkv library only provide list all key-value pairs with prefix of key, and
// if the result is empty it will return store.ErrKeyNotFound error
kvPairs, err := manager.client.List(IPPrefix)
if err == store.ErrKeyNotFound {
return "", errors.Errorf("release ipstore: no ip associated with the id: %s", id)
}
if err != nil {
return "", errors.Wrapf(err, "release ipstore: failed to list the key-value pairs in db")
}
var ipDeleted string
for _, kvPair := range kvPairs {
if string(kvPair.Value) == id {
err = manager.Release(kvPair.Key)
if err != nil {
return "", err
}
ipDeleted = kvPair.Key
return ipDeleted, nil
}
}
return "", errors.Errorf("release ipstore: no ip address associated with the given id: %s", id)
}