func()

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)
}