Skip to content

Commit 944e32c

Browse files
ozerovandreijtopjian
authored andcommitted
Networking V2: support external network datasource (terraform-provider-openstack#358)
* Networking V2: support external network datasource Add "router:external" OpenStack Networking service attribute to the data_source_openstack_networking_network_v2 Add tests for datasource network with that attribute. * Vendor: fetch latest Gophercloud package Update Gophercloud package to apply bugfixes for extractIntoPtr. * Networking V2: fix datasource external attribute Use bool type instead of string and run test only with admin privileges.
1 parent 80af9a6 commit 944e32c

5 files changed

Lines changed: 115 additions & 10 deletions

File tree

‎openstack/data_source_openstack_networking_network_v2.go‎

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/hashicorp/terraform/helper/schema"
99

1010
"github.com/gophercloud/gophercloud"
11+
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/external"
1112
"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
1213
"github.com/gophercloud/gophercloud/openstack/networking/v2/subnets"
1314
)
@@ -52,6 +53,10 @@ func dataSourceNetworkingNetworkV2() *schema.Resource {
5253
Type: schema.TypeString,
5354
Computed: true,
5455
},
56+
"external": &schema.Schema{
57+
Type: schema.TypeBool,
58+
Optional: true,
59+
},
5560
"availability_zone_hints": &schema.Schema{
5661
Type: schema.TypeList,
5762
Computed: true,
@@ -70,22 +75,31 @@ func dataSourceNetworkingNetworkV2Read(d *schema.ResourceData, meta interface{})
7075
Name: d.Get("name").(string),
7176
TenantID: d.Get("tenant_id").(string),
7277
}
73-
7478
if v, ok := d.GetOk("status"); ok {
7579
listOpts.Status = v.(string)
7680
}
7781

78-
pages, err := networks.List(networkingClient, listOpts).AllPages()
82+
isExternal := d.Get("external").(bool)
83+
listExternalOpts := external.ListOptsExt{
84+
ListOptsBuilder: listOpts,
85+
External: &isExternal,
86+
}
87+
88+
pages, err := networks.List(networkingClient, listExternalOpts).AllPages()
7989
if err != nil {
8090
return err
8191
}
82-
83-
allNetworks, err := networks.ExtractNetworks(pages)
92+
type networkWithExternalExt struct {
93+
networks.Network
94+
external.NetworkExternalExt
95+
}
96+
var allNetworks []networkWithExternalExt
97+
err = networks.ExtractNetworksInto(pages, &allNetworks)
8498
if err != nil {
8599
return fmt.Errorf("Unable to retrieve networks: %s", err)
86100
}
87101

88-
var refinedNetworks []networks.Network
102+
var refinedNetworks []networkWithExternalExt
89103
if cidr := d.Get("matching_subnet_cidr").(string); cidr != "" {
90104
for _, n := range allNetworks {
91105
for _, s := range n.Subnets {
@@ -127,6 +141,7 @@ func dataSourceNetworkingNetworkV2Read(d *schema.ResourceData, meta interface{})
127141
d.Set("name", network.Name)
128142
d.Set("admin_state_up", strconv.FormatBool(network.AdminStateUp))
129143
d.Set("shared", strconv.FormatBool(network.Shared))
144+
d.Set("external", strconv.FormatBool(network.External))
130145
d.Set("tenant_id", network.TenantID)
131146
d.Set("region", GetRegion(d, config))
132147

‎openstack/data_source_openstack_networking_network_v2_test.go‎

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,33 @@ func TestAccOpenStackNetworkingNetworkV2DataSource_networkID(t *testing.T) {
7474
})
7575
}
7676

77+
func TestAccOpenStackNetworkingNetworkV2DataSource_external(t *testing.T) {
78+
resource.Test(t, resource.TestCase{
79+
PreCheck: func() {
80+
testAccPreCheck(t)
81+
testAccPreCheckAdminOnly(t)
82+
},
83+
Providers: testAccProviders,
84+
Steps: []resource.TestStep{
85+
resource.TestStep{
86+
Config: testAccOpenStackNetworkingNetworkV2DataSource_networkExternal,
87+
},
88+
resource.TestStep{
89+
Config: testAccOpenStackNetworkingNetworkV2DataSource_external,
90+
Check: resource.ComposeTestCheckFunc(
91+
testAccCheckNetworkingNetworkV2DataSourceID("data.openstack_networking_network_v2.net"),
92+
resource.TestCheckResourceAttr(
93+
"data.openstack_networking_network_v2.net", "name", "tf_test_network"),
94+
resource.TestCheckResourceAttr(
95+
"data.openstack_networking_network_v2.net", "admin_state_up", "true"),
96+
resource.TestCheckResourceAttr(
97+
"data.openstack_networking_network_v2.net", "external", "true"),
98+
),
99+
},
100+
},
101+
})
102+
}
103+
77104
func testAccCheckNetworkingNetworkV2DataSourceID(n string) resource.TestCheckFunc {
78105
return func(s *terraform.State) error {
79106
rs, ok := s.RootModule().Resources[n]
@@ -103,6 +130,14 @@ resource "openstack_networking_subnet_v2" "subnet" {
103130
}
104131
`
105132

133+
const testAccOpenStackNetworkingNetworkV2DataSource_networkExternal = `
134+
resource "openstack_networking_network_v2" "net" {
135+
name = "tf_test_network"
136+
admin_state_up = "true"
137+
external = "true"
138+
}
139+
`
140+
106141
var testAccOpenStackNetworkingNetworkV2DataSource_basic = fmt.Sprintf(`
107142
%s
108143
@@ -126,3 +161,12 @@ data "openstack_networking_network_v2" "net" {
126161
network_id = "${openstack_networking_network_v2.net.id}"
127162
}
128163
`, testAccOpenStackNetworkingNetworkV2DataSource_network)
164+
165+
var testAccOpenStackNetworkingNetworkV2DataSource_external = fmt.Sprintf(`
166+
%s
167+
168+
data "openstack_networking_network_v2" "net" {
169+
name = "${openstack_networking_network_v2.net.name}"
170+
external = "true"
171+
}
172+
`, testAccOpenStackNetworkingNetworkV2DataSource_networkExternal)

‎vendor/github.com/gophercloud/gophercloud/results.go‎

Lines changed: 45 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎vendor/vendor.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -313,10 +313,10 @@
313313
"revisionTime": "2018-03-28T16:31:53Z"
314314
},
315315
{
316-
"checksumSHA1": "qduT9GZUhXc00XoHEwLx16Xn9gM=",
316+
"checksumSHA1": "8yXacRqh4LK7u/1r6qxrUS2oACs=",
317317
"path": "github.com/gophercloud/gophercloud",
318-
"revision": "7112fcd50da4ea27e8d4d499b30f04eea143bec2",
319-
"revisionTime": "2018-05-31T02:06:30Z"
318+
"revision": "aac68cb146cb045a2c7c76ea060c81c9318f3dcd",
319+
"revisionTime": "2018-07-06T03:57:03Z"
320320
},
321321
{
322322
"checksumSHA1": "YDNvjFNQS+UxqZMLm/shFs7aLNU=",

‎website/docs/d/networking_network_v2.html.markdown‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ data "openstack_networking_network_v2" "network" {
3030

3131
* `status` - (Optional) The status of the network.
3232

33+
* `external` - (Optional) The external routing facility of the network.
34+
3335
* `matching_subnet_cidr` - (Optional) The CIDR of a subnet within the network.
3436

3537
* `tenant_id` - (Optional) The owner of the network.
@@ -45,6 +47,7 @@ are exported:
4547
* `admin_state_up` - (Optional) The administrative state of the network.
4648
* `name` - See Argument Reference above.
4749
* `region` - See Argument Reference above.
50+
* `external` - See Argument Reference above.
4851
* `shared` - (Optional) Specifies whether the network resource can be accessed
4952
by any tenant or not.
5053
* `availability_zone_hints` - (Optional) The availability zone candidates for the network.

0 commit comments

Comments
 (0)