Merge pull request #4148 from hashicorp/b-use-container-id
provider/docker: locate container via ID not name
This commit is contained in:
commit
f7f089940b
|
@ -4,7 +4,6 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
dc "github.com/fsouza/go-dockerclient"
|
dc "github.com/fsouza/go-dockerclient"
|
||||||
|
@ -160,7 +159,7 @@ func resourceDockerContainerCreate(d *schema.ResourceData, meta interface{}) err
|
||||||
func resourceDockerContainerRead(d *schema.ResourceData, meta interface{}) error {
|
func resourceDockerContainerRead(d *schema.ResourceData, meta interface{}) error {
|
||||||
client := meta.(*dc.Client)
|
client := meta.(*dc.Client)
|
||||||
|
|
||||||
apiContainer, err := fetchDockerContainer(d.Get("name").(string), client)
|
apiContainer, err := fetchDockerContainer(d.Id(), client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -268,7 +267,7 @@ func mapTypeMapValsToString(typeMap map[string]interface{}) map[string]string {
|
||||||
return mapped
|
return mapped
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchDockerContainer(name string, client *dc.Client) (*dc.APIContainers, error) {
|
func fetchDockerContainer(ID string, client *dc.Client) (*dc.APIContainers, error) {
|
||||||
apiContainers, err := client.ListContainers(dc.ListContainersOptions{All: true})
|
apiContainers, err := client.ListContainers(dc.ListContainersOptions{All: true})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -276,20 +275,8 @@ func fetchDockerContainer(name string, client *dc.Client) (*dc.APIContainers, er
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, apiContainer := range apiContainers {
|
for _, apiContainer := range apiContainers {
|
||||||
// Sometimes the Docker API prefixes container names with /
|
if apiContainer.ID == ID {
|
||||||
// like it does in these commands. But if there's no
|
return &apiContainer, nil
|
||||||
// set name, it just uses the ID without a /...ugh.
|
|
||||||
switch len(apiContainer.Names) {
|
|
||||||
case 0:
|
|
||||||
if apiContainer.ID == name {
|
|
||||||
return &apiContainer, nil
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
for _, containerName := range apiContainer.Names {
|
|
||||||
if strings.TrimLeft(containerName, "/") == name {
|
|
||||||
return &apiContainer, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue