Skip to content

Commit dd460b1

Browse files
Add reservedInternalRange fields to the google_compute_subnetwork resource (#10507) (#18026)
[upstream:a7d96b04561d58b4d1d08effb6039f470bea4376] Signed-off-by: Modular Magician <[email protected]>
1 parent c627ad7 commit dd460b1

File tree

3 files changed

+137
-32
lines changed

3 files changed

+137
-32
lines changed

google/services/compute/resource_compute_subnetwork.go

+78-20
Original file line numberDiff line numberDiff line change
@@ -79,15 +79,6 @@ func ResourceComputeSubnetwork() *schema.Resource {
7979
),
8080

8181
Schema: map[string]*schema.Schema{
82-
"ip_cidr_range": {
83-
Type: schema.TypeString,
84-
Required: true,
85-
ValidateFunc: verify.ValidateIpCidrRange,
86-
Description: `The range of internal addresses that are owned by this subnetwork.
87-
Provide this property when you create the subnetwork. For example,
88-
10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and
89-
non-overlapping within a network. Only IPv4 is supported.`,
90-
},
9182
"name": {
9283
Type: schema.TypeString,
9384
Required: true,
@@ -124,6 +115,17 @@ creation time.`,
124115
ForceNew: true,
125116
Description: `The range of external IPv6 addresses that are owned by this subnetwork.`,
126117
},
118+
"ip_cidr_range": {
119+
Type: schema.TypeString,
120+
Computed: true,
121+
Optional: true,
122+
ValidateFunc: verify.ValidateIpCidrRange,
123+
Description: `The range of internal addresses that are owned by this subnetwork.
124+
Provide this property when you create the subnetwork. For example,
125+
10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and
126+
non-overlapping within a network. Only IPv4 is supported.
127+
Field is optional when 'reserved_internal_range' is defined, otherwise required.`,
128+
},
127129
"ipv6_access_type": {
128130
Type: schema.TypeString,
129131
Optional: true,
@@ -230,6 +232,14 @@ If unspecified, the purpose defaults to 'PRIVATE_RFC_1918'.`,
230232
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
231233
Description: `The GCP region for this subnetwork.`,
232234
},
235+
"reserved_internal_range": {
236+
Type: schema.TypeString,
237+
Optional: true,
238+
ForceNew: true,
239+
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
240+
Description: `The ID of the reserved internal range. Must be prefixed with 'networkconnectivity.googleapis.com'
241+
E.g. 'networkconnectivity.googleapis.com/projects/{project}/locations/global/internalRanges/{rangeId}'`,
242+
},
233243
"role": {
234244
Type: schema.TypeString,
235245
Optional: true,
@@ -257,15 +267,6 @@ of zero objects you must use the following syntax:
257267
For more details about this behavior, see [this section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value).`,
258268
Elem: &schema.Resource{
259269
Schema: map[string]*schema.Schema{
260-
"ip_cidr_range": {
261-
Type: schema.TypeString,
262-
Required: true,
263-
ValidateFunc: verify.ValidateIpCidrRange,
264-
Description: `The range of IP addresses belonging to this subnetwork secondary
265-
range. Provide this property when you create the subnetwork.
266-
Ranges must be unique and non-overlapping with all primary and
267-
secondary IP ranges within a network. Only IPv4 is supported.`,
268-
},
269270
"range_name": {
270271
Type: schema.TypeString,
271272
Required: true,
@@ -275,6 +276,24 @@ when adding an alias IP range to a VM instance. The name must
275276
be 1-63 characters long, and comply with RFC1035. The name
276277
must be unique within the subnetwork.`,
277278
},
279+
"ip_cidr_range": {
280+
Type: schema.TypeString,
281+
Computed: true,
282+
Optional: true,
283+
ValidateFunc: verify.ValidateIpCidrRange,
284+
Description: `The range of IP addresses belonging to this subnetwork secondary
285+
range. Provide this property when you create the subnetwork.
286+
Ranges must be unique and non-overlapping with all primary and
287+
secondary IP ranges within a network. Only IPv4 is supported.
288+
Field is optional when 'reserved_internal_range' is defined, otherwise required.`,
289+
},
290+
"reserved_internal_range": {
291+
Type: schema.TypeString,
292+
Optional: true,
293+
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
294+
Description: `The ID of the reserved internal range. Must be prefixed with 'networkconnectivity.googleapis.com'
295+
E.g. 'networkconnectivity.googleapis.com/projects/{project}/locations/global/internalRanges/{rangeId}'`,
296+
},
278297
},
279298
},
280299
},
@@ -390,6 +409,12 @@ func resourceComputeSubnetworkCreate(d *schema.ResourceData, meta interface{}) e
390409
} else if v, ok := d.GetOkExists("ip_cidr_range"); !tpgresource.IsEmptyValue(reflect.ValueOf(ipCidrRangeProp)) && (ok || !reflect.DeepEqual(v, ipCidrRangeProp)) {
391410
obj["ipCidrRange"] = ipCidrRangeProp
392411
}
412+
reservedInternalRangeProp, err := expandComputeSubnetworkReservedInternalRange(d.Get("reserved_internal_range"), d, config)
413+
if err != nil {
414+
return err
415+
} else if v, ok := d.GetOkExists("reserved_internal_range"); !tpgresource.IsEmptyValue(reflect.ValueOf(reservedInternalRangeProp)) && (ok || !reflect.DeepEqual(v, reservedInternalRangeProp)) {
416+
obj["reservedInternalRange"] = reservedInternalRangeProp
417+
}
393418
nameProp, err := expandComputeSubnetworkName(d.Get("name"), d, config)
394419
if err != nil {
395420
return err
@@ -573,6 +598,9 @@ func resourceComputeSubnetworkRead(d *schema.ResourceData, meta interface{}) err
573598
if err := d.Set("ip_cidr_range", flattenComputeSubnetworkIpCidrRange(res["ipCidrRange"], d, config)); err != nil {
574599
return fmt.Errorf("Error reading Subnetwork: %s", err)
575600
}
601+
if err := d.Set("reserved_internal_range", flattenComputeSubnetworkReservedInternalRange(res["reservedInternalRange"], d, config)); err != nil {
602+
return fmt.Errorf("Error reading Subnetwork: %s", err)
603+
}
576604
if err := d.Set("name", flattenComputeSubnetworkName(res["name"], d, config)); err != nil {
577605
return fmt.Errorf("Error reading Subnetwork: %s", err)
578606
}
@@ -1112,6 +1140,13 @@ func flattenComputeSubnetworkIpCidrRange(v interface{}, d *schema.ResourceData,
11121140
return v
11131141
}
11141142

1143+
func flattenComputeSubnetworkReservedInternalRange(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1144+
if v == nil {
1145+
return v
1146+
}
1147+
return tpgresource.ConvertSelfLinkToV1(v.(string))
1148+
}
1149+
11151150
func flattenComputeSubnetworkName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
11161151
return v
11171152
}
@@ -1144,8 +1179,9 @@ func flattenComputeSubnetworkSecondaryIpRange(v interface{}, d *schema.ResourceD
11441179
continue
11451180
}
11461181
transformed = append(transformed, map[string]interface{}{
1147-
"range_name": flattenComputeSubnetworkSecondaryIpRangeRangeName(original["rangeName"], d, config),
1148-
"ip_cidr_range": flattenComputeSubnetworkSecondaryIpRangeIpCidrRange(original["ipCidrRange"], d, config),
1182+
"range_name": flattenComputeSubnetworkSecondaryIpRangeRangeName(original["rangeName"], d, config),
1183+
"ip_cidr_range": flattenComputeSubnetworkSecondaryIpRangeIpCidrRange(original["ipCidrRange"], d, config),
1184+
"reserved_internal_range": flattenComputeSubnetworkSecondaryIpRangeReservedInternalRange(original["reservedInternalRange"], d, config),
11491185
})
11501186
}
11511187
return transformed
@@ -1158,6 +1194,13 @@ func flattenComputeSubnetworkSecondaryIpRangeIpCidrRange(v interface{}, d *schem
11581194
return v
11591195
}
11601196

1197+
func flattenComputeSubnetworkSecondaryIpRangeReservedInternalRange(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1198+
if v == nil {
1199+
return v
1200+
}
1201+
return tpgresource.ConvertSelfLinkToV1(v.(string))
1202+
}
1203+
11611204
func flattenComputeSubnetworkPrivateIpGoogleAccess(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
11621205
return v
11631206
}
@@ -1234,6 +1277,10 @@ func expandComputeSubnetworkIpCidrRange(v interface{}, d tpgresource.TerraformRe
12341277
return v, nil
12351278
}
12361279

1280+
func expandComputeSubnetworkReservedInternalRange(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1281+
return v, nil
1282+
}
1283+
12371284
func expandComputeSubnetworkName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
12381285
return v, nil
12391286
}
@@ -1278,6 +1325,13 @@ func expandComputeSubnetworkSecondaryIpRange(v interface{}, d tpgresource.Terraf
12781325
transformed["ipCidrRange"] = transformedIpCidrRange
12791326
}
12801327

1328+
transformedReservedInternalRange, err := expandComputeSubnetworkSecondaryIpRangeReservedInternalRange(original["reserved_internal_range"], d, config)
1329+
if err != nil {
1330+
return nil, err
1331+
} else if val := reflect.ValueOf(transformedReservedInternalRange); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1332+
transformed["reservedInternalRange"] = transformedReservedInternalRange
1333+
}
1334+
12811335
req = append(req, transformed)
12821336
}
12831337
return req, nil
@@ -1291,6 +1345,10 @@ func expandComputeSubnetworkSecondaryIpRangeIpCidrRange(v interface{}, d tpgreso
12911345
return v, nil
12921346
}
12931347

1348+
func expandComputeSubnetworkSecondaryIpRangeReservedInternalRange(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1349+
return v, nil
1350+
}
1351+
12941352
func expandComputeSubnetworkPrivateIpGoogleAccess(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
12951353
return v, nil
12961354
}

google/services/compute/resource_compute_subnetwork_generated_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func TestAccComputeSubnetwork_subnetworkBasicExample(t *testing.T) {
4949
ResourceName: "google_compute_subnetwork.network-with-private-secondary-ip-ranges",
5050
ImportState: true,
5151
ImportStateVerify: true,
52-
ImportStateVerifyIgnore: []string{"network", "region"},
52+
ImportStateVerifyIgnore: []string{"reserved_internal_range", "network", "region"},
5353
},
5454
},
5555
})
@@ -94,7 +94,7 @@ func TestAccComputeSubnetwork_subnetworkLoggingConfigExample(t *testing.T) {
9494
ResourceName: "google_compute_subnetwork.subnet-with-logging",
9595
ImportState: true,
9696
ImportStateVerify: true,
97-
ImportStateVerifyIgnore: []string{"network", "region"},
97+
ImportStateVerifyIgnore: []string{"reserved_internal_range", "network", "region"},
9898
},
9999
},
100100
})
@@ -141,7 +141,7 @@ func TestAccComputeSubnetwork_subnetworkIpv6Example(t *testing.T) {
141141
ResourceName: "google_compute_subnetwork.subnetwork-ipv6",
142142
ImportState: true,
143143
ImportStateVerify: true,
144-
ImportStateVerifyIgnore: []string{"network", "region"},
144+
ImportStateVerifyIgnore: []string{"reserved_internal_range", "network", "region"},
145145
},
146146
},
147147
})
@@ -187,7 +187,7 @@ func TestAccComputeSubnetwork_subnetworkInternalIpv6Example(t *testing.T) {
187187
ResourceName: "google_compute_subnetwork.subnetwork-internal-ipv6",
188188
ImportState: true,
189189
ImportStateVerify: true,
190-
ImportStateVerifyIgnore: []string{"network", "region"},
190+
ImportStateVerifyIgnore: []string{"reserved_internal_range", "network", "region"},
191191
},
192192
},
193193
})

website/docs/r/compute_subnetwork.html.markdown

+55-8
Original file line numberDiff line numberDiff line change
@@ -235,19 +235,47 @@ resource "google_compute_network" "net-cidr-overlap" {
235235
auto_create_subnetworks = false
236236
}
237237
```
238+
<div class = "oics-button" style="float: right; margin: 0 0 -15px">
239+
<a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.jpy.wang%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_working_dir=subnetwork_reserved_internal_range&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&open_in_editor=main.tf&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md" target="_blank">
240+
<img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
241+
</a>
242+
</div>
243+
## Example Usage - Subnetwork Reserved Internal Range
244+
245+
246+
```hcl
247+
resource "google_compute_subnetwork" "subnetwork-reserved-internal-range" {
248+
provider = google-beta
249+
name = "subnetwork-reserved-internal-range"
250+
region = "us-central1"
251+
network = google_compute_network.default.id
252+
reserved_internal_range = "networkconnectivity.googleapis.com/${google_network_connectivity_internal_range.reserved.id}"
253+
}
254+
255+
resource "google_compute_network" "default" {
256+
provider = google-beta
257+
name = "network-reserved-internal-range"
258+
auto_create_subnetworks = false
259+
}
260+
261+
resource "google_network_connectivity_internal_range" "reserved" {
262+
provider = google-beta
263+
name = "reserved"
264+
network = google_compute_network.default.id
265+
usage = "FOR_VPC"
266+
peering = "FOR_SELF"
267+
prefix_length = 24
268+
target_cidr_range = [
269+
"10.0.0.0/8"
270+
]
271+
}
272+
```
238273

239274
## Argument Reference
240275

241276
The following arguments are supported:
242277

243278

244-
* `ip_cidr_range` -
245-
(Required)
246-
The range of internal addresses that are owned by this subnetwork.
247-
Provide this property when you create the subnetwork. For example,
248-
10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and
249-
non-overlapping within a network. Only IPv4 is supported.
250-
251279
* `name` -
252280
(Required)
253281
The name of the resource, provided by the client when initially
@@ -273,6 +301,19 @@ The following arguments are supported:
273301
you create the resource. This field can be set only at resource
274302
creation time.
275303

304+
* `ip_cidr_range` -
305+
(Optional)
306+
The range of internal addresses that are owned by this subnetwork.
307+
Provide this property when you create the subnetwork. For example,
308+
10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and
309+
non-overlapping within a network. Only IPv4 is supported.
310+
Field is optional when `reserved_internal_range` is defined, otherwise required.
311+
312+
* `reserved_internal_range` -
313+
(Optional)
314+
The ID of the reserved internal range. Must be prefixed with `networkconnectivity.googleapis.com`
315+
E.g. `networkconnectivity.googleapis.com/projects/{project}/locations/global/internalRanges/{rangeId}`
316+
276317
* `purpose` -
277318
(Optional)
278319
The purpose of the resource. This field can be either `PRIVATE_RFC_1918`, `REGIONAL_MANAGED_PROXY`, `GLOBAL_MANAGED_PROXY`, `PRIVATE_SERVICE_CONNECT` or `PRIVATE_NAT`([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)).
@@ -364,11 +405,17 @@ The following arguments are supported:
364405
must be unique within the subnetwork.
365406

366407
* `ip_cidr_range` -
367-
(Required)
408+
(Optional)
368409
The range of IP addresses belonging to this subnetwork secondary
369410
range. Provide this property when you create the subnetwork.
370411
Ranges must be unique and non-overlapping with all primary and
371412
secondary IP ranges within a network. Only IPv4 is supported.
413+
Field is optional when `reserved_internal_range` is defined, otherwise required.
414+
415+
* `reserved_internal_range` -
416+
(Optional)
417+
The ID of the reserved internal range. Must be prefixed with `networkconnectivity.googleapis.com`
418+
E.g. `networkconnectivity.googleapis.com/projects/{project}/locations/global/internalRanges/{rangeId}`
372419

373420
<a name="nested_log_config"></a>The `log_config` block supports:
374421

0 commit comments

Comments
 (0)