From 410c27a84f5b72be0e39bb30231e541a6c4ea3d6 Mon Sep 17 00:00:00 2001 From: Victor Marmol Date: Fri, 13 Jun 2014 18:24:59 -0700 Subject: [PATCH] Track a container by all of its aliases --- container/docker/handler.go | 2 +- container/factory.go | 2 +- manager/container.go | 7 ++++++- manager/manager.go | 14 +++++++++++--- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/container/docker/handler.go b/container/docker/handler.go index ef477264..c5ca9d0e 100644 --- a/container/docker/handler.go +++ b/container/docker/handler.go @@ -61,7 +61,7 @@ func newDockerContainerHandler( if err != nil { return nil, fmt.Errorf("unable to inspect container %v: %v", name, err) } - handler.aliases = append(handler.aliases, ctnr.Name) + handler.aliases = append(handler.aliases, path.Join("/docker", ctnr.Name)) return handler, nil } diff --git a/container/factory.go b/container/factory.go index 97d43a45..24f82ed1 100644 --- a/container/factory.go +++ b/container/factory.go @@ -114,7 +114,7 @@ func (self *factoryManager) NewContainerHandler(path string) (ContainerHandler, err := fmt.Errorf("nil factory for container %v", path) return nil, err } - log.Printf("container handler factory for %v is %v\n", path, factory) + log.Printf("Container handler factory for %v is %v\n", path, factory) return factory.NewContainerHandler(path) } diff --git a/manager/container.go b/manager/container.go index 3b0e3422..9431483c 100644 --- a/manager/container.go +++ b/manager/container.go @@ -91,7 +91,12 @@ func NewContainerData(containerName string) (*containerData, error) { return nil, err } cont.handler = handler - cont.info.Name = containerName + ref, err := handler.ContainerReference() + if err != nil { + return nil, err + } + cont.info.Name = ref.Name + cont.info.Aliases = ref.Aliases cont.info.Stats = list.New() cont.stop = make(chan bool, 1) diff --git a/manager/manager.go b/manager/manager.go index 3df5c927..93eee260 100644 --- a/manager/manager.go +++ b/manager/manager.go @@ -112,7 +112,8 @@ func (m *manager) GetContainerInfo(containerName string) (*info.ContainerInfo, e // Make a copy of the info for the user. ret := &info.ContainerInfo{ ContainerReference: info.ContainerReference{ - Name: cinfo.Name, + Name: cinfo.Name, + Aliases: cinfo.Aliases, }, Subcontainers: cinfo.Subcontainers, Spec: cinfo.Spec, @@ -152,9 +153,13 @@ func (m *manager) createContainer(containerName string) (*containerData, error) m.containersLock.Lock() defer m.containersLock.Unlock() - log.Printf("Added container: %s", containerName) + // Add the container name and all its aliases. m.containers[containerName] = cont + for _, alias := range cont.info.Aliases { + m.containers[alias] = cont + } }() + log.Printf("Added container: %s (aliases: %s)", containerName, cont.info.Aliases) // Start the container's housekeeping. cont.Start() @@ -202,7 +207,10 @@ func (m *manager) getContainersDiff() (added []info.ContainerReference, removed // Determine which were added and which were removed. allContainersSet := make(map[string]*containerData) for name, d := range m.containers { - allContainersSet[name] = d + // Only add the canonical name. + if d.info.Name == name { + allContainersSet[name] = d + } } for _, c := range allContainers { delete(allContainersSet, c.Name)