Skip to content

Commit

Permalink
provider/docker network alias (#14710)
Browse files Browse the repository at this point in the history
* Add Network Alias configuration with network options

* Handle case where there's no network option

* Handle use case where network option is not available

* Handle use case where network option is not available

* Network alias only on user defined network

* Update documentation for docker provider on network aliases

* Remove unused variable

* Update documentation

* add unit test for docker container network

* fix unit test for docker container network
  • Loading branch information
jwayong authored and grubernaut committed May 22, 2017
1 parent bd99d7c commit cf8568f
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 1 deletion.
8 changes: 8 additions & 0 deletions builtin/providers/docker/resource_docker_container.go
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,14 @@ func resourceDockerContainer() *schema.Resource {
ForceNew: true,
},

"network_alias": &schema.Schema{
Type: schema.TypeSet,
Optional: true,
ForceNew: true,
Elem: &schema.Schema{Type: schema.TypeString},
Set: schema.HashString,
},

"network_mode": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Expand Down
9 changes: 8 additions & 1 deletion builtin/providers/docker/resource_docker_container_funcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,14 @@ func resourceDockerContainerCreate(d *schema.ResourceData, meta interface{}) err
d.SetId(retContainer.ID)

if v, ok := d.GetOk("networks"); ok {
connectionOpts := dc.NetworkConnectionOptions{Container: retContainer.ID}
var connectionOpts dc.NetworkConnectionOptions
if v, ok := d.GetOk("network_alias"); ok {
endpointConfig := &dc.EndpointConfig{}
endpointConfig.Aliases = stringSetToStringSlice(v.(*schema.Set))
connectionOpts = dc.NetworkConnectionOptions{Container: retContainer.ID, EndpointConfig: endpointConfig}
} else {
connectionOpts = dc.NetworkConnectionOptions{Container: retContainer.ID}
}

for _, rawNetwork := range v.(*schema.Set).List() {
network := rawNetwork.(string)
Expand Down
11 changes: 11 additions & 0 deletions builtin/providers/docker/resource_docker_container_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,10 @@ func TestAccDockerContainer_customized(t *testing.T) {
return fmt.Errorf("Container has incorrect extra host string: %q", c.HostConfig.ExtraHosts[1])
}

if _, ok := c.NetworkSettings.Networks["test"]; !ok {
return fmt.Errorf("Container is not connected to the right user defined network: test")
}

return nil
}

Expand Down Expand Up @@ -370,6 +374,9 @@ resource "docker_container" "foo" {
}
network_mode = "bridge"
networks = ["${docker_network.test_network.name}"]
network_alias = ["tftest"]
host {
host = "testhost"
ip = "10.0.1.0"
Expand All @@ -380,6 +387,10 @@ resource "docker_container" "foo" {
ip = "10.0.2.0"
}
}
resource "docker_network" "test_network" {
name = "test"
}
`

const testAccDockerContainerUploadConfig = `
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ The following arguments are supported:
Defaults to "json-file".
* `log_opts` - (Optional, map of strings) Key/value pairs to use as options for
the logging driver.
* `network_alias` - (Optional, set of strings) Network aliases of the container for user-defined networks only.
* `network_mode` - (Optional, string) Network mode of the container.
* `networks` - (Optional, set of strings) Id of the networks in which the
container is.
Expand Down

0 comments on commit cf8568f

Please sign in to comment.