host-local: make Store interface support to get ip list by id
Signed-off-by: Bruce Ma <brucema19901024@gmail.com>
This commit is contained in:
parent
0eddc554c0
commit
7f8ea631e5
@ -19,10 +19,10 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/containernetworking/plugins/plugins/ipam/host-local/backend"
|
"github.com/containernetworking/plugins/plugins/ipam/host-local/backend"
|
||||||
"runtime"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const lastIPFilePrefix = "last_reserved_ip."
|
const lastIPFilePrefix = "last_reserved_ip."
|
||||||
@ -172,6 +172,35 @@ func (s *Store) ReleaseByID(id string, ifname string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetByID returns the IPs which have been allocated to the specific ID
|
||||||
|
func (s *Store) GetByID(id string, ifname string) []net.IP {
|
||||||
|
var ips []net.IP
|
||||||
|
|
||||||
|
match := strings.TrimSpace(id) + LineBreak + ifname
|
||||||
|
// matchOld for backwards compatibility
|
||||||
|
matchOld := strings.TrimSpace(id)
|
||||||
|
|
||||||
|
// walk through all ips in this network to get the ones which belong to a specific ID
|
||||||
|
_ = filepath.Walk(s.dataDir, func(path string, info os.FileInfo, err error) error {
|
||||||
|
if err != nil || info.IsDir() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
data, err := ioutil.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if strings.TrimSpace(string(data)) == match || strings.TrimSpace(string(data)) == matchOld {
|
||||||
|
_, ipString := filepath.Split(path)
|
||||||
|
if ip := net.ParseIP(ipString); ip != nil {
|
||||||
|
ips = append(ips, ip)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
return ips
|
||||||
|
}
|
||||||
|
|
||||||
func GetEscapedPath(dataDir string, fname string) string {
|
func GetEscapedPath(dataDir string, fname string) string {
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
fname = strings.Replace(fname, ":", "_", -1)
|
fname = strings.Replace(fname, ":", "_", -1)
|
||||||
|
@ -24,4 +24,5 @@ type Store interface {
|
|||||||
LastReservedIP(rangeID string) (net.IP, error)
|
LastReservedIP(rangeID string) (net.IP, error)
|
||||||
Release(ip net.IP) error
|
Release(ip net.IP) error
|
||||||
ReleaseByID(id string, ifname string) error
|
ReleaseByID(id string, ifname string) error
|
||||||
|
GetByID(id string, ifname string) []net.IP
|
||||||
}
|
}
|
||||||
|
@ -81,6 +81,16 @@ func (s *FakeStore) ReleaseByID(id string, ifname string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *FakeStore) GetByID(id string, ifname string) []net.IP {
|
||||||
|
var ips []net.IP
|
||||||
|
for k, v := range s.ipMap {
|
||||||
|
if v == id {
|
||||||
|
ips = append(ips, net.ParseIP(k))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ips
|
||||||
|
}
|
||||||
|
|
||||||
func (s *FakeStore) SetIPMap(m map[string]string) {
|
func (s *FakeStore) SetIPMap(m map[string]string) {
|
||||||
s.ipMap = m
|
s.ipMap = m
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user