Skip to content

Commit ae3f0e3

Browse files
Support google_compute_network patch to enable ULA internal IPv6 (#15895) (#25468)
[upstream:e05a490a5d04106ffba3ec40faa4b16e564c3ca5] Signed-off-by: Modular Magician <[email protected]>
1 parent f9694a5 commit ae3f0e3

File tree

3 files changed

+117
-1
lines changed

3 files changed

+117
-1
lines changed

.changelog/15895.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: fixed `google_compute_network` in-place update to enable `enable_ula_internal_ipv6`.
3+
```

google/services/compute/resource_compute_network.go

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ recreated to modify this field.`,
143143
"enable_ula_internal_ipv6": {
144144
Type: schema.TypeBool,
145145
Optional: true,
146-
ForceNew: true,
147146
Description: `Enable ULA internal ipv6 on this network. Enabling this feature will assign
148147
a /48 from google defined ULA prefix fd20::/20.`,
149148
},
@@ -635,6 +634,56 @@ func resourceComputeNetworkUpdate(d *schema.ResourceData, meta interface{}) erro
635634
return err
636635
}
637636
}
637+
if d.HasChange("enable_ula_internal_ipv6") {
638+
obj := make(map[string]interface{})
639+
640+
enableUlaInternalIpv6Prop, err := expandComputeNetworkEnableUlaInternalIpv6(d.Get("enable_ula_internal_ipv6"), d, config)
641+
if err != nil {
642+
return err
643+
} else if v, ok := d.GetOkExists("enable_ula_internal_ipv6"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, enableUlaInternalIpv6Prop)) {
644+
obj["enableUlaInternalIpv6"] = enableUlaInternalIpv6Prop
645+
}
646+
647+
obj, err = resourceComputeNetworkUpdateEncoder(d, meta, obj)
648+
if err != nil {
649+
return err
650+
}
651+
652+
url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/global/networks/{{name}}")
653+
if err != nil {
654+
return err
655+
}
656+
657+
headers := make(http.Header)
658+
659+
// err == nil indicates that the billing_project value was found
660+
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
661+
billingProject = bp
662+
}
663+
664+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
665+
Config: config,
666+
Method: "PATCH",
667+
Project: billingProject,
668+
RawURL: url,
669+
UserAgent: userAgent,
670+
Body: obj,
671+
Timeout: d.Timeout(schema.TimeoutUpdate),
672+
Headers: headers,
673+
})
674+
if err != nil {
675+
return fmt.Errorf("Error updating Network %q: %s", d.Id(), err)
676+
} else {
677+
log.Printf("[DEBUG] Finished updating Network %q: %#v", d.Id(), res)
678+
}
679+
680+
err = ComputeOperationWaitTime(
681+
config, res, project, "Updating Network", userAgent,
682+
d.Timeout(schema.TimeoutUpdate))
683+
if err != nil {
684+
return err
685+
}
686+
}
638687
if d.HasChange("mtu") {
639688
obj := make(map[string]interface{})
640689

google/services/compute/resource_compute_network_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,28 @@ func testAccCheckComputeNetworkIsCustomSubnet(t *testing.T, n string, network *c
657657
}
658658
}
659659

660+
func testAccCheckComputeNetworkIsUlaInternalIpv6Enabled(t *testing.T, n string, network *compute.Network, expectEnabled bool) resource.TestCheckFunc {
661+
return func(s *terraform.State) error {
662+
config := acctest.GoogleProviderConfig(t)
663+
664+
found, err := config.NewComputeClient(config.UserAgent).Networks.Get(
665+
config.Project, network.Name).Do()
666+
if err != nil {
667+
return err
668+
}
669+
670+
if found.EnableUlaInternalIpv6 != expectEnabled {
671+
return fmt.Errorf("does not match expected EnableUlaInternalIpv6 value")
672+
}
673+
674+
if expectEnabled && found.InternalIpv6Range == "" {
675+
return fmt.Errorf("should have InternalIPv6Range")
676+
}
677+
678+
return nil
679+
}
680+
}
681+
660682
func testAccCheckComputeNetworkHasMtu(t *testing.T, n string, network *compute.Network, mtu int32) resource.TestCheckFunc {
661683
return func(s *terraform.State) error {
662684
config := acctest.GoogleProviderConfig(t)
@@ -855,6 +877,38 @@ func TestAccComputeNetwork_networkBgpStandardModeDeleteMed(t *testing.T) {
855877
})
856878
}
857879

880+
func TestAccComputeNetwork_updateEnableUlaInternalIpv6(t *testing.T) {
881+
t.Parallel()
882+
883+
var network compute.Network
884+
var updatedNetwork compute.Network
885+
suffixName := acctest.RandString(t, 10)
886+
networkName := fmt.Sprintf("tf-test-network-enable-ula-%s", suffixName)
887+
888+
acctest.VcrTest(t, resource.TestCase{
889+
PreCheck: func() { acctest.AccTestPreCheck(t) },
890+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
891+
CheckDestroy: testAccCheckComputeNetworkDestroyProducer(t),
892+
Steps: []resource.TestStep{
893+
{
894+
Config: testAccComputeNetwork_custom_subnet(networkName),
895+
Check: resource.ComposeTestCheckFunc(
896+
testAccCheckComputeNetworkExists(
897+
t, "google_compute_network.baz", &network),
898+
),
899+
},
900+
{
901+
Config: testAccComputeNetwork_ula(networkName),
902+
Check: resource.ComposeTestCheckFunc(
903+
testAccCheckComputeNetworkExists(
904+
t, "google_compute_network.baz", &updatedNetwork),
905+
testAccCheckComputeNetworkWasUpdated(&updatedNetwork, &network),
906+
),
907+
},
908+
},
909+
})
910+
}
911+
858912
func testAccComputeNetwork_basic(networkName string) string {
859913
return fmt.Sprintf(`
860914
resource "google_compute_network" "bar" {
@@ -873,6 +927,16 @@ resource "google_compute_network" "baz" {
873927
`, networkName)
874928
}
875929

930+
func testAccComputeNetwork_ula(networkName string) string {
931+
return fmt.Sprintf(`
932+
resource "google_compute_network" "baz" {
933+
name = "%s"
934+
auto_create_subnetworks = false
935+
enable_ula_internal_ipv6 = true
936+
}
937+
`, networkName)
938+
}
939+
876940
func testAccComputeNetwork_bgp(name, bgpBestPathSelectionMode, bgpAlwaysCompareMed, deleteBgpAlwaysCompareMed string) string {
877941
var medLine, deleteMedLine string
878942
if bgpAlwaysCompareMed != "" {

0 commit comments

Comments
 (0)