Skip to content

Commit 9f3e6e2

Browse files
fix: compute instance internal ipv6 prefix length is not set in creation and read in syncing (#13133) (#21638)
[upstream:2fb385974963dd1455d99b5bc25400a488b25111] Signed-off-by: Modular Magician <[email protected]>
1 parent f9fb30c commit 9f3e6e2

File tree

3 files changed

+91
-22
lines changed

3 files changed

+91
-22
lines changed

.changelog/13133.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
compute: fix `compute_instance.network_interface.internal_ipv6_prefix_length` not being set or read in Terraform state
3+
```

google/services/compute/compute_instance_helpers.go

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -375,17 +375,18 @@ func flattenNetworkInterfaces(d *schema.ResourceData, config *transport_tpg.Conf
375375
region = subnet.Region
376376

377377
flattened[i] = map[string]interface{}{
378-
"network_ip": iface.NetworkIP,
379-
"network": tpgresource.ConvertSelfLinkToV1(iface.Network),
380-
"subnetwork": tpgresource.ConvertSelfLinkToV1(iface.Subnetwork),
381-
"subnetwork_project": subnet.Project,
382-
"access_config": ac,
383-
"alias_ip_range": flattenAliasIpRange(d, iface.AliasIpRanges, i),
384-
"nic_type": iface.NicType,
385-
"stack_type": iface.StackType,
386-
"ipv6_access_config": flattenIpv6AccessConfigs(iface.Ipv6AccessConfigs),
387-
"ipv6_address": iface.Ipv6Address,
388-
"queue_count": iface.QueueCount,
378+
"network_ip": iface.NetworkIP,
379+
"network": tpgresource.ConvertSelfLinkToV1(iface.Network),
380+
"subnetwork": tpgresource.ConvertSelfLinkToV1(iface.Subnetwork),
381+
"subnetwork_project": subnet.Project,
382+
"access_config": ac,
383+
"alias_ip_range": flattenAliasIpRange(d, iface.AliasIpRanges, i),
384+
"nic_type": iface.NicType,
385+
"stack_type": iface.StackType,
386+
"ipv6_access_config": flattenIpv6AccessConfigs(iface.Ipv6AccessConfigs),
387+
"ipv6_address": iface.Ipv6Address,
388+
"queue_count": iface.QueueCount,
389+
"internal_ipv6_prefix_length": iface.InternalIpv6PrefixLength,
389390
}
390391
// Instance template interfaces never have names, so they're absent
391392
// in the instance template network_interface schema. We want to use the
@@ -486,17 +487,18 @@ func expandNetworkInterfaces(d tpgresource.TerraformResourceData, config *transp
486487
}
487488

488489
ifaces[i] = &compute.NetworkInterface{
489-
NetworkIP: data["network_ip"].(string),
490-
Network: nf.RelativeLink(),
491-
NetworkAttachment: networkAttachment,
492-
Subnetwork: sf.RelativeLink(),
493-
AccessConfigs: expandAccessConfigs(data["access_config"].([]interface{})),
494-
AliasIpRanges: expandAliasIpRanges(data["alias_ip_range"].([]interface{})),
495-
NicType: data["nic_type"].(string),
496-
StackType: data["stack_type"].(string),
497-
QueueCount: int64(data["queue_count"].(int)),
498-
Ipv6AccessConfigs: expandIpv6AccessConfigs(data["ipv6_access_config"].([]interface{})),
499-
Ipv6Address: data["ipv6_address"].(string),
490+
NetworkIP: data["network_ip"].(string),
491+
Network: nf.RelativeLink(),
492+
NetworkAttachment: networkAttachment,
493+
Subnetwork: sf.RelativeLink(),
494+
AccessConfigs: expandAccessConfigs(data["access_config"].([]interface{})),
495+
AliasIpRanges: expandAliasIpRanges(data["alias_ip_range"].([]interface{})),
496+
NicType: data["nic_type"].(string),
497+
StackType: data["stack_type"].(string),
498+
QueueCount: int64(data["queue_count"].(int)),
499+
Ipv6AccessConfigs: expandIpv6AccessConfigs(data["ipv6_access_config"].([]interface{})),
500+
Ipv6Address: data["ipv6_address"].(string),
501+
InternalIpv6PrefixLength: int64(data["internal_ipv6_prefix_length"].(int)),
500502
}
501503
}
502504
return ifaces, nil

google/services/compute/resource_compute_instance_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,30 @@ func TestAccComputeInstance_internalIPv6(t *testing.T) {
579579
})
580580
}
581581

582+
func TestAccComputeInstance_internalIPv6PrefixLength(t *testing.T) {
583+
t.Parallel()
584+
585+
var instance compute.Instance
586+
var instanceName = fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10))
587+
588+
acctest.VcrTest(t, resource.TestCase{
589+
PreCheck: func() { acctest.AccTestPreCheck(t) },
590+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
591+
CheckDestroy: testAccCheckComputeInstanceDestroyProducer(t),
592+
Steps: []resource.TestStep{
593+
{
594+
Config: testAccComputeInstance_internalIpv6PrefixLength("96", instanceName),
595+
Check: resource.ComposeTestCheckFunc(
596+
testAccCheckComputeInstanceExists(
597+
t, "google_compute_instance.foobar", &instance),
598+
testAccCheckComputeInstanceIpv6AccessConfigHasInternalIPv6(&instance),
599+
),
600+
},
601+
computeInstanceImportStep("us-west2-a", instanceName, []string{"allow_stopping_for_update"}),
602+
},
603+
})
604+
}
605+
582606
func TestAccComputeInstance_PTRRecord(t *testing.T) {
583607
t.Parallel()
584608

@@ -5394,6 +5418,46 @@ func testAccComputeInstance_internalIpv6(ip, instance string) string {
53945418
`, instance, instance, ip, instance)
53955419
}
53965420

5421+
func testAccComputeInstance_internalIpv6PrefixLength(length, instance string) string {
5422+
return fmt.Sprintf(`
5423+
resource "google_compute_network" "vpc" {
5424+
name = "%s-network"
5425+
auto_create_subnetworks = "false"
5426+
enable_ula_internal_ipv6 = true
5427+
}
5428+
5429+
resource "google_compute_subnetwork" "subnetwork" {
5430+
name = "%s-subnetwork"
5431+
ip_cidr_range = "10.0.0.0/22"
5432+
region = "us-west2"
5433+
stack_type = "IPV4_IPV6"
5434+
ipv6_access_type = "INTERNAL"
5435+
network = google_compute_network.vpc.id
5436+
}
5437+
5438+
resource "google_compute_instance" "foobar" {
5439+
name = "%s"
5440+
machine_type = "e2-micro"
5441+
allow_stopping_for_update = true
5442+
zone = "us-west2-a"
5443+
boot_disk {
5444+
auto_delete = false
5445+
initialize_params {
5446+
image = "debian-cloud/debian-11"
5447+
}
5448+
}
5449+
network_interface {
5450+
network = google_compute_network.vpc.self_link
5451+
subnetwork = google_compute_subnetwork.subnetwork.self_link
5452+
stack_type = "IPV4_IPV6"
5453+
access_config {
5454+
network_tier = "STANDARD"
5455+
}
5456+
internal_ipv6_prefix_length = %s
5457+
}
5458+
}
5459+
`, instance, instance, instance, length)
5460+
}
53975461
func testAccComputeInstance_ipv6ExternalReservation(instance string) string {
53985462
return fmt.Sprintf(`
53995463
resource "google_compute_address" "ipv6-address" {

0 commit comments

Comments
 (0)