Skip to content

Commit 61737af

Browse files
Add reservedInternalRange fields to the google_compute_subnetwork resource (#10507) (#7318)
[upstream:a7d96b04561d58b4d1d08effb6039f470bea4376] Signed-off-by: Modular Magician <magic-modules@google.com>
1 parent 502eaf1 commit 61737af

File tree

3 files changed

+195
-35
lines changed

3 files changed

+195
-35
lines changed

google-beta/services/compute/resource_compute_subnetwork.go

Lines changed: 78 additions & 20 deletions
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,
@@ -133,6 +124,17 @@ creation time.`,
133124
ForceNew: true,
134125
Description: `The range of external IPv6 addresses that are owned by this subnetwork.`,
135126
},
127+
"ip_cidr_range": {
128+
Type: schema.TypeString,
129+
Computed: true,
130+
Optional: true,
131+
ValidateFunc: verify.ValidateIpCidrRange,
132+
Description: `The range of internal addresses that are owned by this subnetwork.
133+
Provide this property when you create the subnetwork. For example,
134+
10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and
135+
non-overlapping within a network. Only IPv4 is supported.
136+
Field is optional when 'reserved_internal_range' is defined, otherwise required.`,
137+
},
136138
"ipv6_access_type": {
137139
Type: schema.TypeString,
138140
Optional: true,
@@ -239,6 +241,14 @@ If unspecified, the purpose defaults to 'PRIVATE_RFC_1918'.`,
239241
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
240242
Description: `The GCP region for this subnetwork.`,
241243
},
244+
"reserved_internal_range": {
245+
Type: schema.TypeString,
246+
Optional: true,
247+
ForceNew: true,
248+
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
249+
Description: `The ID of the reserved internal range. Must be prefixed with 'networkconnectivity.googleapis.com'
250+
E.g. 'networkconnectivity.googleapis.com/projects/{project}/locations/global/internalRanges/{rangeId}'`,
251+
},
242252
"role": {
243253
Type: schema.TypeString,
244254
Optional: true,
@@ -266,15 +276,6 @@ of zero objects you must use the following syntax:
266276
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).`,
267277
Elem: &schema.Resource{
268278
Schema: map[string]*schema.Schema{
269-
"ip_cidr_range": {
270-
Type: schema.TypeString,
271-
Required: true,
272-
ValidateFunc: verify.ValidateIpCidrRange,
273-
Description: `The range of IP addresses belonging to this subnetwork secondary
274-
range. Provide this property when you create the subnetwork.
275-
Ranges must be unique and non-overlapping with all primary and
276-
secondary IP ranges within a network. Only IPv4 is supported.`,
277-
},
278279
"range_name": {
279280
Type: schema.TypeString,
280281
Required: true,
@@ -284,6 +285,24 @@ when adding an alias IP range to a VM instance. The name must
284285
be 1-63 characters long, and comply with RFC1035. The name
285286
must be unique within the subnetwork.`,
286287
},
288+
"ip_cidr_range": {
289+
Type: schema.TypeString,
290+
Computed: true,
291+
Optional: true,
292+
ValidateFunc: verify.ValidateIpCidrRange,
293+
Description: `The range of IP addresses belonging to this subnetwork secondary
294+
range. Provide this property when you create the subnetwork.
295+
Ranges must be unique and non-overlapping with all primary and
296+
secondary IP ranges within a network. Only IPv4 is supported.
297+
Field is optional when 'reserved_internal_range' is defined, otherwise required.`,
298+
},
299+
"reserved_internal_range": {
300+
Type: schema.TypeString,
301+
Optional: true,
302+
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
303+
Description: `The ID of the reserved internal range. Must be prefixed with 'networkconnectivity.googleapis.com'
304+
E.g. 'networkconnectivity.googleapis.com/projects/{project}/locations/global/internalRanges/{rangeId}'`,
305+
},
287306
},
288307
},
289308
},
@@ -399,6 +418,12 @@ func resourceComputeSubnetworkCreate(d *schema.ResourceData, meta interface{}) e
399418
} else if v, ok := d.GetOkExists("ip_cidr_range"); !tpgresource.IsEmptyValue(reflect.ValueOf(ipCidrRangeProp)) && (ok || !reflect.DeepEqual(v, ipCidrRangeProp)) {
400419
obj["ipCidrRange"] = ipCidrRangeProp
401420
}
421+
reservedInternalRangeProp, err := expandComputeSubnetworkReservedInternalRange(d.Get("reserved_internal_range"), d, config)
422+
if err != nil {
423+
return err
424+
} else if v, ok := d.GetOkExists("reserved_internal_range"); !tpgresource.IsEmptyValue(reflect.ValueOf(reservedInternalRangeProp)) && (ok || !reflect.DeepEqual(v, reservedInternalRangeProp)) {
425+
obj["reservedInternalRange"] = reservedInternalRangeProp
426+
}
402427
nameProp, err := expandComputeSubnetworkName(d.Get("name"), d, config)
403428
if err != nil {
404429
return err
@@ -588,6 +613,9 @@ func resourceComputeSubnetworkRead(d *schema.ResourceData, meta interface{}) err
588613
if err := d.Set("ip_cidr_range", flattenComputeSubnetworkIpCidrRange(res["ipCidrRange"], d, config)); err != nil {
589614
return fmt.Errorf("Error reading Subnetwork: %s", err)
590615
}
616+
if err := d.Set("reserved_internal_range", flattenComputeSubnetworkReservedInternalRange(res["reservedInternalRange"], d, config)); err != nil {
617+
return fmt.Errorf("Error reading Subnetwork: %s", err)
618+
}
591619
if err := d.Set("name", flattenComputeSubnetworkName(res["name"], d, config)); err != nil {
592620
return fmt.Errorf("Error reading Subnetwork: %s", err)
593621
}
@@ -1136,6 +1164,13 @@ func flattenComputeSubnetworkIpCidrRange(v interface{}, d *schema.ResourceData,
11361164
return v
11371165
}
11381166

1167+
func flattenComputeSubnetworkReservedInternalRange(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1168+
if v == nil {
1169+
return v
1170+
}
1171+
return tpgresource.ConvertSelfLinkToV1(v.(string))
1172+
}
1173+
11391174
func flattenComputeSubnetworkName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
11401175
return v
11411176
}
@@ -1168,8 +1203,9 @@ func flattenComputeSubnetworkSecondaryIpRange(v interface{}, d *schema.ResourceD
11681203
continue
11691204
}
11701205
transformed = append(transformed, map[string]interface{}{
1171-
"range_name": flattenComputeSubnetworkSecondaryIpRangeRangeName(original["rangeName"], d, config),
1172-
"ip_cidr_range": flattenComputeSubnetworkSecondaryIpRangeIpCidrRange(original["ipCidrRange"], d, config),
1206+
"range_name": flattenComputeSubnetworkSecondaryIpRangeRangeName(original["rangeName"], d, config),
1207+
"ip_cidr_range": flattenComputeSubnetworkSecondaryIpRangeIpCidrRange(original["ipCidrRange"], d, config),
1208+
"reserved_internal_range": flattenComputeSubnetworkSecondaryIpRangeReservedInternalRange(original["reservedInternalRange"], d, config),
11731209
})
11741210
}
11751211
return transformed
@@ -1182,6 +1218,13 @@ func flattenComputeSubnetworkSecondaryIpRangeIpCidrRange(v interface{}, d *schem
11821218
return v
11831219
}
11841220

1221+
func flattenComputeSubnetworkSecondaryIpRangeReservedInternalRange(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1222+
if v == nil {
1223+
return v
1224+
}
1225+
return tpgresource.ConvertSelfLinkToV1(v.(string))
1226+
}
1227+
11851228
func flattenComputeSubnetworkPrivateIpGoogleAccess(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
11861229
return v
11871230
}
@@ -1262,6 +1305,10 @@ func expandComputeSubnetworkIpCidrRange(v interface{}, d tpgresource.TerraformRe
12621305
return v, nil
12631306
}
12641307

1308+
func expandComputeSubnetworkReservedInternalRange(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1309+
return v, nil
1310+
}
1311+
12651312
func expandComputeSubnetworkName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
12661313
return v, nil
12671314
}
@@ -1306,6 +1353,13 @@ func expandComputeSubnetworkSecondaryIpRange(v interface{}, d tpgresource.Terraf
13061353
transformed["ipCidrRange"] = transformedIpCidrRange
13071354
}
13081355

1356+
transformedReservedInternalRange, err := expandComputeSubnetworkSecondaryIpRangeReservedInternalRange(original["reserved_internal_range"], d, config)
1357+
if err != nil {
1358+
return nil, err
1359+
} else if val := reflect.ValueOf(transformedReservedInternalRange); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1360+
transformed["reservedInternalRange"] = transformedReservedInternalRange
1361+
}
1362+
13091363
req = append(req, transformed)
13101364
}
13111365
return req, nil
@@ -1319,6 +1373,10 @@ func expandComputeSubnetworkSecondaryIpRangeIpCidrRange(v interface{}, d tpgreso
13191373
return v, nil
13201374
}
13211375

1376+
func expandComputeSubnetworkSecondaryIpRangeReservedInternalRange(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1377+
return v, nil
1378+
}
1379+
13221380
func expandComputeSubnetworkPrivateIpGoogleAccess(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
13231381
return v, nil
13241382
}

google-beta/services/compute/resource_compute_subnetwork_generated_test.go

Lines changed: 62 additions & 7 deletions
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_subnetworkInternalL7lbExample(t *testing.T) {
141141
ResourceName: "google_compute_subnetwork.network-for-l7lb",
142142
ImportState: true,
143143
ImportStateVerify: true,
144-
ImportStateVerifyIgnore: []string{"network", "region"},
144+
ImportStateVerifyIgnore: []string{"reserved_internal_range", "network", "region"},
145145
},
146146
},
147147
})
@@ -188,7 +188,7 @@ func TestAccComputeSubnetwork_subnetworkIpv6Example(t *testing.T) {
188188
ResourceName: "google_compute_subnetwork.subnetwork-ipv6",
189189
ImportState: true,
190190
ImportStateVerify: true,
191-
ImportStateVerifyIgnore: []string{"network", "region"},
191+
ImportStateVerifyIgnore: []string{"reserved_internal_range", "network", "region"},
192192
},
193193
},
194194
})
@@ -234,7 +234,7 @@ func TestAccComputeSubnetwork_subnetworkInternalIpv6Example(t *testing.T) {
234234
ResourceName: "google_compute_subnetwork.subnetwork-internal-ipv6",
235235
ImportState: true,
236236
ImportStateVerify: true,
237-
ImportStateVerifyIgnore: []string{"network", "region"},
237+
ImportStateVerifyIgnore: []string{"reserved_internal_range", "network", "region"},
238238
},
239239
},
240240
})
@@ -281,7 +281,7 @@ func TestAccComputeSubnetwork_subnetworkPurposePrivateNatExample(t *testing.T) {
281281
ResourceName: "google_compute_subnetwork.subnetwork-purpose-private-nat",
282282
ImportState: true,
283283
ImportStateVerify: true,
284-
ImportStateVerifyIgnore: []string{"network", "region"},
284+
ImportStateVerifyIgnore: []string{"reserved_internal_range", "network", "region"},
285285
},
286286
},
287287
})
@@ -327,7 +327,7 @@ func TestAccComputeSubnetwork_subnetworkCidrOverlapExample(t *testing.T) {
327327
ResourceName: "google_compute_subnetwork.subnetwork-cidr-overlap",
328328
ImportState: true,
329329
ImportStateVerify: true,
330-
ImportStateVerifyIgnore: []string{"network", "region"},
330+
ImportStateVerifyIgnore: []string{"reserved_internal_range", "network", "region"},
331331
},
332332
},
333333
})
@@ -354,6 +354,61 @@ resource "google_compute_network" "net-cidr-overlap" {
354354
`, context)
355355
}
356356

357+
func TestAccComputeSubnetwork_subnetworkReservedInternalRangeExample(t *testing.T) {
358+
t.Parallel()
359+
360+
context := map[string]interface{}{
361+
"random_suffix": acctest.RandString(t, 10),
362+
}
363+
364+
acctest.VcrTest(t, resource.TestCase{
365+
PreCheck: func() { acctest.AccTestPreCheck(t) },
366+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderBetaFactories(t),
367+
CheckDestroy: testAccCheckComputeSubnetworkDestroyProducer(t),
368+
Steps: []resource.TestStep{
369+
{
370+
Config: testAccComputeSubnetwork_subnetworkReservedInternalRangeExample(context),
371+
},
372+
{
373+
ResourceName: "google_compute_subnetwork.subnetwork-reserved-internal-range",
374+
ImportState: true,
375+
ImportStateVerify: true,
376+
ImportStateVerifyIgnore: []string{"reserved_internal_range", "network", "region"},
377+
},
378+
},
379+
})
380+
}
381+
382+
func testAccComputeSubnetwork_subnetworkReservedInternalRangeExample(context map[string]interface{}) string {
383+
return acctest.Nprintf(`
384+
resource "google_compute_subnetwork" "subnetwork-reserved-internal-range" {
385+
provider = google-beta
386+
name = "tf-test-subnetwork-reserved-internal-range%{random_suffix}"
387+
region = "us-central1"
388+
network = google_compute_network.default.id
389+
reserved_internal_range = "networkconnectivity.googleapis.com/${google_network_connectivity_internal_range.reserved.id}"
390+
}
391+
392+
resource "google_compute_network" "default" {
393+
provider = google-beta
394+
name = "tf-test-network-reserved-internal-range%{random_suffix}"
395+
auto_create_subnetworks = false
396+
}
397+
398+
resource "google_network_connectivity_internal_range" "reserved" {
399+
provider = google-beta
400+
name = "reserved"
401+
network = google_compute_network.default.id
402+
usage = "FOR_VPC"
403+
peering = "FOR_SELF"
404+
prefix_length = 24
405+
target_cidr_range = [
406+
"10.0.0.0/8"
407+
]
408+
}
409+
`, context)
410+
}
411+
357412
func testAccCheckComputeSubnetworkDestroyProducer(t *testing.T) func(s *terraform.State) error {
358413
return func(s *terraform.State) error {
359414
for name, rs := range s.RootModule().Resources {

0 commit comments

Comments
 (0)