Skip to content

Commit bc3b466

Browse files
22603: add update_strategy to google_compute_network_peering (#13848) (#10275)
[upstream:e8e3af5d1e556d75eae383cc11cef19a0c618fbe] Signed-off-by: Modular Magician <[email protected]>
1 parent 4d56542 commit bc3b466

File tree

4 files changed

+108
-1
lines changed

4 files changed

+108
-1
lines changed

.changelog/13848.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: added `update_strategy` field to `google_compute_network_peering ` resource (beta)
3+
```

google-beta/services/compute/resource_compute_network_peering.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,14 @@ func ResourceComputeNetworkPeering() *schema.Resource {
125125
Description: `Which IP version(s) of traffic and routes are allowed to be imported or exported between peer networks. The default value is IPV4_ONLY. Possible values: ["IPV4_ONLY", "IPV4_IPV6"]`,
126126
Default: "IPV4_ONLY",
127127
},
128+
129+
"update_strategy": {
130+
Type: schema.TypeString,
131+
Optional: true,
132+
ValidateFunc: verify.ValidateEnum([]string{"INDEPENDENT", "CONSENSUS"}),
133+
Description: `The update strategy determines the semantics for updates and deletes to the peering connection configuration. The default value is INDEPENDENT. Possible values: ["INDEPENDENT", "CONSENSUS"]`,
134+
Default: "INDEPENDENT",
135+
},
128136
},
129137
UseJSONNumber: true,
130138
}
@@ -225,6 +233,10 @@ func resourceComputeNetworkPeeringRead(d *schema.ResourceData, meta interface{})
225233
return fmt.Errorf("Error setting stack_type: %s", err)
226234
}
227235

236+
if err := d.Set("update_strategy", flattenNetworkPeeringUpdateStrategy(peering.UpdateStrategy, d, config)); err != nil {
237+
return fmt.Errorf("Error setting update_strategy: %s", err)
238+
}
239+
228240
return nil
229241
}
230242

@@ -324,6 +336,7 @@ func findPeeringFromNetwork(network *compute.Network, peeringName string) *compu
324336
return nil
325337
}
326338
func expandNetworkPeering(d *schema.ResourceData) *compute.NetworkPeering {
339+
327340
return &compute.NetworkPeering{
328341
ExchangeSubnetRoutes: true,
329342
Name: d.Get("name").(string),
@@ -333,8 +346,10 @@ func expandNetworkPeering(d *schema.ResourceData) *compute.NetworkPeering {
333346
ExportSubnetRoutesWithPublicIp: d.Get("export_subnet_routes_with_public_ip").(bool),
334347
ImportSubnetRoutesWithPublicIp: d.Get("import_subnet_routes_with_public_ip").(bool),
335348
StackType: d.Get("stack_type").(string),
349+
UpdateStrategy: d.Get("update_strategy").(string),
336350
ForceSendFields: []string{"ExportSubnetRoutesWithPublicIp", "ImportCustomRoutes", "ExportCustomRoutes"},
337351
}
352+
338353
}
339354

340355
func flattenNetworkPeeringStackType(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
@@ -346,6 +361,15 @@ func flattenNetworkPeeringStackType(v interface{}, d *schema.ResourceData, confi
346361
return v
347362
}
348363

364+
func flattenNetworkPeeringUpdateStrategy(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
365+
// To prevent the perma-diff caused by the absence of `update_strategy` in API responses for older resource.
366+
if v == nil || tpgresource.IsEmptyValue(reflect.ValueOf(v)) {
367+
return "INDEPENDENT"
368+
}
369+
370+
return v
371+
}
372+
349373
func sortedNetworkPeeringMutexKeys(networkName, peerNetworkName *tpgresource.GlobalFieldValue) []string {
350374
// Whether you delete the peering from network A to B or the one from B to A, they
351375
// cannot happen at the same time.

google-beta/services/compute/resource_compute_network_peering_test.go

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
//
99
// This code is generated by Magic Modules using the following:
1010
//
11-
// Source file: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/third_party/terraform/services/compute/resource_compute_network_peering_test.go
11+
// Source file: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/third_party/terraform/services/compute/resource_compute_network_peering_test.go.tmpl
1212
//
1313
// DO NOT EDIT this file directly. Any changes made to this file will be
1414
// overwritten during the next generation cycle.
@@ -157,6 +157,42 @@ func TestAccComputeNetworkPeering_stackType(t *testing.T) {
157157

158158
}
159159

160+
func TestAccComputeNetworkPeering_updateStrategy(t *testing.T) {
161+
t.Parallel()
162+
163+
primaryNetworkName := fmt.Sprintf("tf-test-network-1-%d", acctest.RandInt(t))
164+
peeringNetworkName := fmt.Sprintf("tf-test-network-2-%d", acctest.RandInt(t))
165+
peeringName := fmt.Sprintf("tf-test-peering-%d", acctest.RandInt(t))
166+
importId := fmt.Sprintf("%s/%s/%s", envvar.GetTestProjectFromEnv(), primaryNetworkName, peeringName)
167+
168+
acctest.VcrTest(t, resource.TestCase{
169+
PreCheck: func() { acctest.AccTestPreCheck(t) },
170+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
171+
CheckDestroy: testAccComputeNetworkPeeringDestroyProducer(t),
172+
Steps: []resource.TestStep{
173+
{
174+
Config: testAccComputeNetworkPeering_updateStrategyDefault(primaryNetworkName, peeringNetworkName, peeringName),
175+
},
176+
{
177+
ResourceName: "google_compute_network_peering.foo",
178+
ImportState: true,
179+
ImportStateVerify: true,
180+
ImportStateId: importId,
181+
},
182+
{
183+
Config: testAccComputeNetworkPeering_updateStrategyUpdate(primaryNetworkName, peeringNetworkName, peeringName),
184+
},
185+
{
186+
ResourceName: "google_compute_network_peering.foo",
187+
ImportState: true,
188+
ImportStateVerify: true,
189+
ImportStateId: importId,
190+
},
191+
},
192+
})
193+
194+
}
195+
160196
func testAccComputeNetworkPeeringDestroyProducer(t *testing.T) func(s *terraform.State) error {
161197
return func(s *terraform.State) error {
162198
config := acctest.GoogleProviderConfig(t)
@@ -293,3 +329,44 @@ resource "google_compute_network_peering" "foo" {
293329
}
294330
`, primaryNetworkName, peeringNetworkName, peeringName)
295331
}
332+
333+
func testAccComputeNetworkPeering_updateStrategyDefault(primaryNetworkName, peeringNetworkName, peeringName string) string {
334+
return fmt.Sprintf(`
335+
resource "google_compute_network" "network1" {
336+
name = "%s"
337+
auto_create_subnetworks = false
338+
}
339+
340+
resource "google_compute_network" "network2" {
341+
name = "%s"
342+
auto_create_subnetworks = false
343+
}
344+
345+
resource "google_compute_network_peering" "foo" {
346+
name = "%s"
347+
network = google_compute_network.network1.self_link
348+
peer_network = google_compute_network.network2.self_link
349+
}
350+
`, primaryNetworkName, peeringNetworkName, peeringName)
351+
}
352+
353+
func testAccComputeNetworkPeering_updateStrategyUpdate(primaryNetworkName, peeringNetworkName, peeringName string) string {
354+
return fmt.Sprintf(`
355+
resource "google_compute_network" "network1" {
356+
name = "%s"
357+
auto_create_subnetworks = false
358+
}
359+
360+
resource "google_compute_network" "network2" {
361+
name = "%s"
362+
auto_create_subnetworks = false
363+
}
364+
365+
resource "google_compute_network_peering" "foo" {
366+
name = "%s"
367+
network = google_compute_network.network1.self_link
368+
peer_network = google_compute_network.network2.self_link
369+
update_strategy = "CONSENSUS"
370+
}
371+
`, primaryNetworkName, peeringNetworkName, peeringName)
372+
}

website/docs/r/compute_network_peering.html.markdown

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ Whether subnet routes with public IP range are imported. The default value is fa
8282
* `stack_type` - (Optional)
8383
Which IP version(s) of traffic and routes are allowed to be imported or exported between peer networks. The default value is IPV4_ONLY. Possible values: ["IPV4_ONLY", "IPV4_IPV6"].
8484

85+
* `update_strategy` - (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html))
86+
The update strategy determines the semantics for updates and deletes to the peering connection configuration. The default value is INDEPENDENT. Possible values: ["INDEPENDENT", "CONSENSUS"]
87+
8588
## Attributes Reference
8689

8790
In addition to the arguments listed above, the following computed attributes are

0 commit comments

Comments
 (0)