package db import ( "git.giftfish.de/ston1th/haproxy-lb/pkg/cluster" ) type DB struct { kv cluster.KV } func New(kv cluster.KV) *DB { return &DB{kv} } const ( ipPrefix = "/ip/" namePrefix = "/name/" lbPrefix = "/lb/" ) func (db *DB) GetIPs() (ips []string, err error) { m, err := db.kv.GetPrefix(namePrefix) if err != nil { return } for _, v := range m { ips = append(ips, string(v)) } return } func (db *DB) GetIP(ip string) (string, error) { v, err := db.kv.Get(ipPrefix + ip) return string(v), err } func (db *DB) IPExists(ip string) bool { _, err := db.GetIP(ipPrefix + ip) return err == nil } func (db *DB) SetIP(ip, name string) error { err := db.kv.Set(ipPrefix+ip, []byte(name)) if err != nil { return err } return db.kv.Set(namePrefix+name, []byte(ip)) } func (db *DB) DeleteIP(ip, name string) error { err := db.kv.Delete(ipPrefix + ip) if err != nil { return err } return db.kv.Delete(namePrefix + name) } func (db *DB) GetName(name string) (string, error) { v, err := db.kv.Get(namePrefix + name) return string(v), err } func (db *DB) GetLBs(cl string) (lbs map[string][]byte, err error) { lbs = make(map[string][]byte) if cl != "" { cl = cl + "/" } m, err := db.kv.GetPrefix(lbPrefix + cl) if err == cluster.ErrPrefixNotFound { err = nil return } if err != nil { return } for k, v := range m { lbs[k] = v } return } func (db *DB) GetLB(name string) ([]byte, error) { return db.kv.Get(lbPrefix + name) } func (db *DB) SetLB(name string, lb []byte) error { return db.kv.Set(lbPrefix+name, lb) } func (db *DB) DeleteLB(name string) error { return db.kv.Delete(lbPrefix + name) }