From eac4981da8f082ec44fed581e98a74f6c74b73f5 Mon Sep 17 00:00:00 2001 From: Ezra Silvera Date: Wed, 11 May 2016 12:15:04 +0300 Subject: [PATCH] check unique container name Signed-off-by: Ezra Silvera --- cluster/mesos/cluster.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/cluster/mesos/cluster.go b/cluster/mesos/cluster.go index e1c5544682..59922fb5cd 100644 --- a/cluster/mesos/cluster.go +++ b/cluster/mesos/cluster.go @@ -196,6 +196,10 @@ func (c *Cluster) CreateContainer(config *cluster.ContainerConfig, name string, return nil, errResourcesNeeded } + if !c.checkNameUniqueness(name) { + return nil, fmt.Errorf("Conflict: The name %s is already assigned. You have to delete (or rename) that container to be able to assign %s to a container again.", name, name) + } + task, err := task.NewTask(config, name, c.taskCreationTimeout) if err != nil { return nil, err @@ -678,3 +682,27 @@ func (c *Cluster) BuildImage(buildContext io.Reader, buildImage *types.ImageBuil func (c *Cluster) TagImage(IDOrName string, ref string, force bool) error { return errNotSupported } + +func (c *Cluster) checkNameUniqueness(name string) bool { + // Abort immediately if the name is empty. + if len(name) == 0 { + return true + } + + c.RLock() + defer c.RUnlock() + + for _, s := range c.agents { + for _, container := range s.engine.Containers() { + for _, cname := range container.Names { + log.Debugf("*************** cont:%v name:%v", container.Info.ID, cname) + if cname == name || cname == "/"+name { + return false + } + } + } + } + + + return true +}