Skip to content

Commit 1404102

Browse files
fix: corrects IPAM config read on the data provider (kreuzwerker#229)
1 parent a7f6cc9 commit 1404102

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

docker/data_source_docker_network.go

+13-3
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ func dataSourceDockerNetwork() *schema.Resource {
4040

4141
"ipam_config": &schema.Schema{
4242
Type: schema.TypeSet,
43-
Optional: true,
44-
ForceNew: true,
43+
Computed: true,
4544
Elem: &schema.Resource{
4645
Schema: map[string]*schema.Schema{
4746
"subnet": &schema.Schema{
@@ -79,6 +78,8 @@ func dataSourceDockerNetwork() *schema.Resource {
7978
}
8079
}
8180

81+
type ipamMap map[string]interface{}
82+
8283
func dataSourceDockerNetworkRead(d *schema.ResourceData, meta interface{}) error {
8384

8485
name, nameOk := d.GetOk("name")
@@ -102,7 +103,16 @@ func dataSourceDockerNetworkRead(d *schema.ResourceData, meta interface{}) error
102103
d.Set("driver", network.Driver)
103104
d.Set("options", network.Options)
104105
d.Set("internal", network.Internal)
105-
d.Set("imap_config", network.IPAM)
106+
ipam := make([]ipamMap, len(network.IPAM.Config))
107+
for i, config := range network.IPAM.Config {
108+
ipam[i] = ipamMap{
109+
"subnet": config.Subnet,
110+
"gateway": config.Gateway,
111+
"aux_address": config.AuxAddress,
112+
"ip_range": config.IPRange,
113+
}
114+
}
115+
err = d.Set("ipam_config", ipam)
106116

107117
return nil
108118
}

docker/data_source_docker_network_test.go

+20
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package docker
22

33
import (
4+
"fmt"
5+
"github.com/hashicorp/terraform-plugin-sdk/terraform"
6+
"strconv"
47
"testing"
58

69
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
@@ -15,6 +18,7 @@ func TestAccDockerNetworkDataSource_basic(t *testing.T) {
1518
Config: testAccDockerNetworkDataSourceConfig,
1619
Check: resource.ComposeTestCheckFunc(
1720
resource.TestCheckResourceAttr("data.docker_network.bridge", "name", "bridge"),
21+
testAccDockerNetworkDataSourceIPAMRead,
1822
resource.TestCheckResourceAttr("data.docker_network.bridge", "driver", "bridge"),
1923
resource.TestCheckResourceAttr("data.docker_network.bridge", "internal", "false"),
2024
resource.TestCheckResourceAttr("data.docker_network.bridge", "scope", "local"),
@@ -24,6 +28,22 @@ func TestAccDockerNetworkDataSource_basic(t *testing.T) {
2428
})
2529
}
2630

31+
func testAccDockerNetworkDataSourceIPAMRead(state *terraform.State) error {
32+
bridge := state.RootModule().Resources["data.docker_network.bridge"]
33+
if bridge == nil {
34+
return fmt.Errorf("unable to find data.docker_network.bridge")
35+
}
36+
attr := bridge.Primary.Attributes["ipam_config.#"]
37+
numberOfReadConfig, err := strconv.Atoi(attr)
38+
if err != nil {
39+
return err
40+
}
41+
if numberOfReadConfig < 1 {
42+
return fmt.Errorf("unable to find any ipam_config")
43+
}
44+
return nil
45+
}
46+
2747
const testAccDockerNetworkDataSourceConfig = `
2848
data "docker_network" "bridge" {
2949
name = "bridge"

0 commit comments

Comments
 (0)