From 52f140da5f6c97b7543813387b0995bc7b2c2302 Mon Sep 17 00:00:00 2001 From: Asim Date: Fri, 3 Apr 2015 00:52:49 +0200 Subject: [PATCH] Add support for listing services, very rough --- registry/consul_registry.go | 26 ++++++++++++++++++++++++++ registry/kubernetes_registry.go | 32 ++++++++++++++++++++++++++++++++ registry/registry.go | 5 +++++ 3 files changed, 63 insertions(+) diff --git a/registry/consul_registry.go b/registry/consul_registry.go index b8f59a17..9d7eadce 100644 --- a/registry/consul_registry.go +++ b/registry/consul_registry.go @@ -84,6 +84,32 @@ func (c *ConsulRegistry) GetService(name string) (Service, error) { return cs, nil } +func (c *ConsulRegistry) ListServices() ([]Service, error) { + c.mtx.RLock() + serviceMap := c.services + c.mtx.RUnlock() + + var services []Service + + if len(serviceMap) > 0 { + for _, service := range services { + services = append(services, service) + } + return services, nil + } + + rsp, _, err := c.Client.Catalog().Services(&consul.QueryOptions{}) + if err != nil { + return nil, err + } + + for service, _ := range rsp { + services = append(services, &ConsulService{ServiceName: service}) + } + + return services, nil +} + func (c *ConsulRegistry) NewService(name string, nodes ...Node) Service { var snodes []*ConsulNode diff --git a/registry/kubernetes_registry.go b/registry/kubernetes_registry.go index 77fe0db4..ee12091b 100644 --- a/registry/kubernetes_registry.go +++ b/registry/kubernetes_registry.go @@ -60,6 +60,38 @@ func (c *KubernetesRegistry) GetService(name string) (Service, error) { return ks, nil } +func (c *KubernetesRegistry) ListServices() ([]Service, error) { + c.mtx.RLock() + serviceMap := c.services + c.mtx.RUnlock() + + var services []Service + + if len(serviceMap) > 0 { + for _, service := range serviceMap { + services = append(services, service) + } + return services, nil + } + + rsp, err := c.Client.Services(c.Namespace).List(labels.Everything()) + if err != nil { + return nil, err + } + + for _, service := range rsp.Items { + if len(service.ObjectMeta.Labels["name"]) == 0 { + continue + } + + services = append(services, &KubernetesService{ + ServiceName: service.ObjectMeta.Labels["name"], + }) + } + + return services, nil +} + func (c *KubernetesRegistry) NewService(name string, nodes ...Node) Service { var snodes []*KubernetesNode diff --git a/registry/registry.go b/registry/registry.go index 35235b48..846c5f5a 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -4,6 +4,7 @@ type Registry interface { Register(Service) error Deregister(Service) error GetService(string) (Service, error) + ListServices() ([]Service, error) NewService(string, ...Node) Service NewNode(string, string, int) Node } @@ -23,3 +24,7 @@ func Deregister(s Service) error { func GetService(name string) (Service, error) { return DefaultRegistry.GetService(name) } + +func ListServices() ([]Service, error) { + return DefaultRegistry.ListServices() +}