func delService(t *testing.T, s *server, k string) { path, _ := msg.PathWithWildcard(k) _, err := s.backend.(*backendetcd.Backend).Client().Delete(path, false) if err != nil { t.Fatal(err) } }
func addService(t *testing.T, s *server, k string, ttl uint64, m *msg.Service) { b, err := json.Marshal(m) if err != nil { t.Fatal(err) } path, _ := msg.PathWithWildcard(k) _, err = s.backend.(*backendetcd.Backend).Client().Create(path, string(b), ttl) if err != nil { // TODO(miek): allow for existing keys... t.Fatal(err) } }
func (g *Backend) Records(name string, exact bool) ([]msg.Service, error) { path, star := msg.PathWithWildcard(name) r, err := g.get(path, true) if err != nil { return nil, err } segments := strings.Split(msg.Path(name), "/") switch { case exact && r.Node.Dir: return nil, nil case r.Node.Dir: return g.loopNodes(&r.Node.Nodes, segments, star, nil) default: return g.loopNodes(&etcd.Nodes{r.Node}, segments, false, nil) } }
func (g *Backend) ReverseRecord(name string) (*msg.Service, error) { path, star := msg.PathWithWildcard(name) if star { return nil, fmt.Errorf("reverse can not contain wildcards") } r, err := g.get(path, true) if err != nil { return nil, err } if r.Node.Dir { return nil, fmt.Errorf("reverse must not be a directory") } segments := strings.Split(msg.Path(name), "/") records, err := g.loopNodes(&etcd.Nodes{r.Node}, segments, false, nil) if err != nil { return nil, err } if len(records) != 1 { return nil, fmt.Errorf("must be only one service record") } return &records[0], nil }