mirror of https://github.com/docker/docs.git
handle collision
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
This commit is contained in:
parent
faf26a62f4
commit
4b03d7fa0c
|
@ -388,6 +388,8 @@ func (c *Cluster) Container(IDOrName string) *cluster.Container {
|
|||
}
|
||||
}
|
||||
|
||||
candidates := []*cluster.Container{}
|
||||
|
||||
// Match name, /name or engine/name.
|
||||
for _, container := range containers {
|
||||
for _, name := range container.Names {
|
||||
|
@ -397,20 +399,30 @@ func (c *Cluster) Container(IDOrName string) *cluster.Container {
|
|||
}
|
||||
}
|
||||
|
||||
if size := len(candidates); size == 1 {
|
||||
return candidates[0]
|
||||
} else if size > 1 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Match Container ID prefix.
|
||||
for _, container := range containers {
|
||||
if strings.HasPrefix(container.Id, IDOrName) {
|
||||
return container
|
||||
candidates = append(candidates, container)
|
||||
}
|
||||
}
|
||||
|
||||
// Match Swarm ID prefix.
|
||||
for _, container := range containers {
|
||||
if strings.HasPrefix(container.Config.SwarmID(), IDOrName) {
|
||||
return container
|
||||
candidates = append(candidates, container)
|
||||
}
|
||||
}
|
||||
|
||||
if len(candidates) == 1 {
|
||||
return candidates[0]
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -27,24 +27,24 @@ func TestContainerLookup(t *testing.T) {
|
|||
}
|
||||
container1 := &cluster.Container{
|
||||
Container: dockerclient.Container{
|
||||
Id: "container-id1",
|
||||
Id: "container1-id",
|
||||
Names: []string{"/container1-name1", "/container1-name2"},
|
||||
},
|
||||
Config: cluster.BuildContainerConfig(dockerclient.ContainerConfig{
|
||||
Labels: map[string]string{
|
||||
"com.docker.swarm.id": "swarm-id1",
|
||||
"com.docker.swarm.id": "swarm1-id",
|
||||
},
|
||||
}),
|
||||
}
|
||||
|
||||
container2 := &cluster.Container{
|
||||
Container: dockerclient.Container{
|
||||
Id: "container-id2",
|
||||
Id: "container2-id",
|
||||
Names: []string{"/con"},
|
||||
},
|
||||
Config: cluster.BuildContainerConfig(dockerclient.ContainerConfig{
|
||||
Labels: map[string]string{
|
||||
"com.docker.swarm.id": "swarm-id2",
|
||||
"com.docker.swarm.id": "swarm2-id",
|
||||
},
|
||||
}),
|
||||
}
|
||||
|
@ -56,9 +56,10 @@ func TestContainerLookup(t *testing.T) {
|
|||
assert.Nil(t, c.Container("invalid-id"))
|
||||
assert.Nil(t, c.Container(""))
|
||||
// Container ID lookup.
|
||||
assert.NotNil(t, c.Container("container-id1"))
|
||||
assert.NotNil(t, c.Container("container1-id"))
|
||||
// Container ID prefix lookup.
|
||||
assert.NotNil(t, c.Container("container-"))
|
||||
assert.NotNil(t, c.Container("container1-"))
|
||||
assert.Nil(t, c.Container("container"))
|
||||
// Container name lookup.
|
||||
assert.NotNil(t, c.Container("container1-name1"))
|
||||
assert.NotNil(t, c.Container("container1-name2"))
|
||||
|
@ -66,11 +67,12 @@ func TestContainerLookup(t *testing.T) {
|
|||
assert.NotNil(t, c.Container("test-engine/container1-name1"))
|
||||
assert.NotNil(t, c.Container("test-engine/container1-name2"))
|
||||
// Swarm ID lookup.
|
||||
assert.NotNil(t, c.Container("swarm-id1"))
|
||||
assert.NotNil(t, c.Container("swarm1-id"))
|
||||
// Swarm ID prefix lookup.
|
||||
assert.NotNil(t, c.Container("swarm-"))
|
||||
assert.NotNil(t, c.Container("swarm1-"))
|
||||
assert.Nil(t, c.Container("swarm"))
|
||||
// Match name before ID prefix
|
||||
cc := c.Container("con")
|
||||
assert.NotNil(t, cc)
|
||||
assert.Equal(t, cc.Id, "container-id2")
|
||||
assert.Equal(t, cc.Id, "container2-id")
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue