Skip to content

Commit b550aa1

Browse files
Cloud Router Standard BPS Terraform Beta to GA support (#12697) (#20865)
[upstream:86536e5a65595d19c295cc5a5cfc5f83effc6272] Signed-off-by: Modular Magician <magic-modules@google.com>
1 parent cc21f16 commit b550aa1

7 files changed

+411
-10
lines changed

.changelog/12697.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
```release-note:enhancement
2+
compute: promoted `bgp_best_path_selection_mode `,`bgp_bps_always_compare_med` and `bgp_bps_inter_region_cost ` fields in `google_compute_network` from Beta to Ga
3+
```
4+
```release-note:enhancement
5+
compute: promoted `next_hop_origin `,`next_hop_med ` and `next_hop_inter_region_cost ` output fields in `google_compute_route` form Beta to GA
6+
```

google/services/compute/resource_compute_network.go

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,27 @@ with varying MTUs.`,
124124
Description: `Set the order that Firewall Rules and Firewall Policies are evaluated. Default value: "AFTER_CLASSIC_FIREWALL" Possible values: ["BEFORE_CLASSIC_FIREWALL", "AFTER_CLASSIC_FIREWALL"]`,
125125
Default: "AFTER_CLASSIC_FIREWALL",
126126
},
127+
"bgp_always_compare_med": {
128+
Type: schema.TypeBool,
129+
Computed: true,
130+
Optional: true,
131+
Description: `Enables/disables the comparison of MED across routes with different Neighbor ASNs.
132+
This value can only be set if the --bgp-best-path-selection-mode is STANDARD`,
133+
},
134+
"bgp_best_path_selection_mode": {
135+
Type: schema.TypeString,
136+
Computed: true,
137+
Optional: true,
138+
ValidateFunc: verify.ValidateEnum([]string{"LEGACY", "STANDARD", ""}),
139+
Description: `The BGP best selection algorithm to be employed. MODE can be LEGACY or STANDARD. Possible values: ["LEGACY", "STANDARD"]`,
140+
},
141+
"bgp_inter_region_cost": {
142+
Type: schema.TypeString,
143+
Computed: true,
144+
Optional: true,
145+
ValidateFunc: verify.ValidateEnum([]string{"DEFAULT", "ADD_COST_TO_MED", ""}),
146+
Description: `Choice of the behavior of inter-regional cost and MED in the BPS algorithm. Possible values: ["DEFAULT", "ADD_COST_TO_MED"]`,
147+
},
127148
"routing_mode": {
128149
Type: schema.TypeString,
129150
Computed: true,
@@ -454,7 +475,7 @@ func resourceComputeNetworkUpdate(d *schema.ResourceData, meta interface{}) erro
454475

455476
d.Partial(true)
456477

457-
if d.HasChange("routing_mode") || d.HasChange("network_firewall_policy_enforcement_order") {
478+
if d.HasChange("routing_mode") || d.HasChange("bgp_best_path_selection_mode") || d.HasChange("bgp_always_compare_med") || d.HasChange("bgp_inter_region_cost") || d.HasChange("network_firewall_policy_enforcement_order") {
458479
obj := make(map[string]interface{})
459480

460481
routingConfigProp, err := expandComputeNetworkRoutingConfig(nil, d, config)
@@ -632,12 +653,30 @@ func flattenComputeNetworkRoutingConfig(v interface{}, d *schema.ResourceData, c
632653
transformed := make(map[string]interface{})
633654
transformed["routing_mode"] =
634655
flattenComputeNetworkRoutingConfigRoutingMode(original["routingMode"], d, config)
656+
transformed["bgp_best_path_selection_mode"] =
657+
flattenComputeNetworkRoutingConfigBgpBestPathSelectionMode(original["bgpBestPathSelectionMode"], d, config)
658+
transformed["bgp_always_compare_med"] =
659+
flattenComputeNetworkRoutingConfigBgpAlwaysCompareMed(original["bgpAlwaysCompareMed"], d, config)
660+
transformed["bgp_inter_region_cost"] =
661+
flattenComputeNetworkRoutingConfigBgpInterRegionCost(original["bgpInterRegionCost"], d, config)
635662
return []interface{}{transformed}
636663
}
637664
func flattenComputeNetworkRoutingConfigRoutingMode(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
638665
return v
639666
}
640667

668+
func flattenComputeNetworkRoutingConfigBgpBestPathSelectionMode(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
669+
return v
670+
}
671+
672+
func flattenComputeNetworkRoutingConfigBgpAlwaysCompareMed(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
673+
return v
674+
}
675+
676+
func flattenComputeNetworkRoutingConfigBgpInterRegionCost(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
677+
return v
678+
}
679+
641680
func flattenComputeNetworkMtu(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
642681
// Handles the string fixed64 format
643682
if strVal, ok := v.(string); ok {
@@ -688,13 +727,46 @@ func expandComputeNetworkRoutingConfig(v interface{}, d tpgresource.TerraformRes
688727
transformed["routingMode"] = transformedRoutingMode
689728
}
690729

730+
transformedBgpBestPathSelectionMode, err := expandComputeNetworkRoutingConfigBgpBestPathSelectionMode(d.Get("bgp_best_path_selection_mode"), d, config)
731+
if err != nil {
732+
return nil, err
733+
} else if val := reflect.ValueOf(transformedBgpBestPathSelectionMode); val.IsValid() && !tpgresource.IsEmptyValue(val) {
734+
transformed["bgpBestPathSelectionMode"] = transformedBgpBestPathSelectionMode
735+
}
736+
737+
transformedBgpAlwaysCompareMed, err := expandComputeNetworkRoutingConfigBgpAlwaysCompareMed(d.Get("bgp_always_compare_med"), d, config)
738+
if err != nil {
739+
return nil, err
740+
} else if val := reflect.ValueOf(transformedBgpAlwaysCompareMed); val.IsValid() && !tpgresource.IsEmptyValue(val) {
741+
transformed["bgpAlwaysCompareMed"] = transformedBgpAlwaysCompareMed
742+
}
743+
744+
transformedBgpInterRegionCost, err := expandComputeNetworkRoutingConfigBgpInterRegionCost(d.Get("bgp_inter_region_cost"), d, config)
745+
if err != nil {
746+
return nil, err
747+
} else if val := reflect.ValueOf(transformedBgpInterRegionCost); val.IsValid() && !tpgresource.IsEmptyValue(val) {
748+
transformed["bgpInterRegionCost"] = transformedBgpInterRegionCost
749+
}
750+
691751
return transformed, nil
692752
}
693753

694754
func expandComputeNetworkRoutingConfigRoutingMode(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
695755
return v, nil
696756
}
697757

758+
func expandComputeNetworkRoutingConfigBgpBestPathSelectionMode(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
759+
return v, nil
760+
}
761+
762+
func expandComputeNetworkRoutingConfigBgpAlwaysCompareMed(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
763+
return v, nil
764+
}
765+
766+
func expandComputeNetworkRoutingConfigBgpInterRegionCost(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
767+
return v, nil
768+
}
769+
698770
func expandComputeNetworkMtu(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
699771
return v, nil
700772
}

google/services/compute/resource_compute_network_generated_test.go

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,115 @@ resource "google_compute_network" "vpc_network" {
135135
`, context)
136136
}
137137

138+
func TestAccComputeNetwork_networkBgpBestPathSelectionModeExample(t *testing.T) {
139+
t.Parallel()
140+
141+
context := map[string]interface{}{
142+
"project": envvar.GetTestProjectFromEnv(),
143+
"random_suffix": acctest.RandString(t, 10),
144+
}
145+
146+
acctest.VcrTest(t, resource.TestCase{
147+
PreCheck: func() { acctest.AccTestPreCheck(t) },
148+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
149+
CheckDestroy: testAccCheckComputeNetworkDestroyProducer(t),
150+
Steps: []resource.TestStep{
151+
{
152+
Config: testAccComputeNetwork_networkBgpBestPathSelectionModeExample(context),
153+
},
154+
{
155+
ResourceName: "google_compute_network.vpc_network",
156+
ImportState: true,
157+
ImportStateVerify: true,
158+
},
159+
},
160+
})
161+
}
162+
163+
func testAccComputeNetwork_networkBgpBestPathSelectionModeExample(context map[string]interface{}) string {
164+
return acctest.Nprintf(`
165+
resource "google_compute_network" "vpc_network" {
166+
project = "%{project}"
167+
name = "tf-test-vpc-network%{random_suffix}"
168+
routing_mode = "GLOBAL"
169+
}
170+
`, context)
171+
}
172+
173+
func TestAccComputeNetwork_networkBgpBestPathSelectionModeStandardExample(t *testing.T) {
174+
t.Parallel()
175+
176+
context := map[string]interface{}{
177+
"project": envvar.GetTestProjectFromEnv(),
178+
"random_suffix": acctest.RandString(t, 10),
179+
}
180+
181+
acctest.VcrTest(t, resource.TestCase{
182+
PreCheck: func() { acctest.AccTestPreCheck(t) },
183+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
184+
CheckDestroy: testAccCheckComputeNetworkDestroyProducer(t),
185+
Steps: []resource.TestStep{
186+
{
187+
Config: testAccComputeNetwork_networkBgpBestPathSelectionModeStandardExample(context),
188+
},
189+
{
190+
ResourceName: "google_compute_network.vpc_network",
191+
ImportState: true,
192+
ImportStateVerify: true,
193+
},
194+
},
195+
})
196+
}
197+
198+
func testAccComputeNetwork_networkBgpBestPathSelectionModeStandardExample(context map[string]interface{}) string {
199+
return acctest.Nprintf(`
200+
resource "google_compute_network" "vpc_network" {
201+
project = "%{project}"
202+
name = "tf-test-vpc-network%{random_suffix}"
203+
routing_mode = "GLOBAL"
204+
bgp_best_path_selection_mode = "STANDARD"
205+
}
206+
`, context)
207+
}
208+
209+
func TestAccComputeNetwork_networkBgpBestPathSelectionModeStandardCustomFieldsExample(t *testing.T) {
210+
t.Parallel()
211+
212+
context := map[string]interface{}{
213+
"project": envvar.GetTestProjectFromEnv(),
214+
"random_suffix": acctest.RandString(t, 10),
215+
}
216+
217+
acctest.VcrTest(t, resource.TestCase{
218+
PreCheck: func() { acctest.AccTestPreCheck(t) },
219+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
220+
CheckDestroy: testAccCheckComputeNetworkDestroyProducer(t),
221+
Steps: []resource.TestStep{
222+
{
223+
Config: testAccComputeNetwork_networkBgpBestPathSelectionModeStandardCustomFieldsExample(context),
224+
},
225+
{
226+
ResourceName: "google_compute_network.vpc_network",
227+
ImportState: true,
228+
ImportStateVerify: true,
229+
},
230+
},
231+
})
232+
}
233+
234+
func testAccComputeNetwork_networkBgpBestPathSelectionModeStandardCustomFieldsExample(context map[string]interface{}) string {
235+
return acctest.Nprintf(`
236+
resource "google_compute_network" "vpc_network" {
237+
project = "%{project}"
238+
name = "tf-test-vpc-network%{random_suffix}"
239+
routing_mode = "GLOBAL"
240+
bgp_best_path_selection_mode = "STANDARD"
241+
bgp_always_compare_med = true
242+
bgp_inter_region_cost = "ADD_COST_TO_MED"
243+
}
244+
`, context)
245+
}
246+
138247
func testAccCheckComputeNetworkDestroyProducer(t *testing.T) func(s *terraform.State) error {
139248
return func(s *terraform.State) error {
140249
for name, rs := range s.RootModule().Resources {

0 commit comments

Comments
 (0)