Skip to content

Commit 7eedc59

Browse files
Add md5authenticationkeys to google_compute_router (#13472) (#22101)
[upstream:28406153e8f813fac331bca8856601bbb3769929] Signed-off-by: Modular Magician <[email protected]>
1 parent 9551d61 commit 7eedc59

5 files changed

+144
-2
lines changed

.changelog/13472.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: Added `md5_authentication_keys` to `google_compute_router`
3+
```

google/services/compute/resource_compute_router.go

+67
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,27 @@ The default is 20.`,
196196
Description: `Indicates if a router is dedicated for use with encrypted VLAN
197197
attachments (interconnectAttachments).`,
198198
},
199+
"md5_authentication_keys": {
200+
Type: schema.TypeList,
201+
Optional: true,
202+
Description: `Keys used for MD5 authentication.`,
203+
MaxItems: 1,
204+
Elem: &schema.Resource{
205+
Schema: map[string]*schema.Schema{
206+
"key": {
207+
Type: schema.TypeString,
208+
Required: true,
209+
Description: `Value of the key used for MD5 authentication.`,
210+
},
211+
"name": {
212+
Type: schema.TypeString,
213+
Required: true,
214+
Description: `Name used to identify the key. Must be unique within a router.
215+
Must be referenced by exactly one bgpPeer. Must comply with RFC1035.`,
216+
},
217+
},
218+
},
219+
},
199220
"region": {
200221
Type: schema.TypeString,
201222
Computed: true,
@@ -262,6 +283,12 @@ func resourceComputeRouterCreate(d *schema.ResourceData, meta interface{}) error
262283
} else if v, ok := d.GetOkExists("encrypted_interconnect_router"); !tpgresource.IsEmptyValue(reflect.ValueOf(encryptedInterconnectRouterProp)) && (ok || !reflect.DeepEqual(v, encryptedInterconnectRouterProp)) {
263284
obj["encryptedInterconnectRouter"] = encryptedInterconnectRouterProp
264285
}
286+
md5AuthenticationKeysProp, err := expandComputeRouterMd5AuthenticationKeys(d.Get("md5_authentication_keys"), d, config)
287+
if err != nil {
288+
return err
289+
} else if v, ok := d.GetOkExists("md5_authentication_keys"); !tpgresource.IsEmptyValue(reflect.ValueOf(md5AuthenticationKeysProp)) && (ok || !reflect.DeepEqual(v, md5AuthenticationKeysProp)) {
290+
obj["md5AuthenticationKeys"] = md5AuthenticationKeysProp
291+
}
265292
regionProp, err := expandComputeRouterRegion(d.Get("region"), d, config)
266293
if err != nil {
267294
return err
@@ -430,6 +457,12 @@ func resourceComputeRouterUpdate(d *schema.ResourceData, meta interface{}) error
430457
} else if v, ok := d.GetOkExists("bgp"); ok || !reflect.DeepEqual(v, bgpProp) {
431458
obj["bgp"] = bgpProp
432459
}
460+
md5AuthenticationKeysProp, err := expandComputeRouterMd5AuthenticationKeys(d.Get("md5_authentication_keys"), d, config)
461+
if err != nil {
462+
return err
463+
} else if v, ok := d.GetOkExists("md5_authentication_keys"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, md5AuthenticationKeysProp)) {
464+
obj["md5AuthenticationKeys"] = md5AuthenticationKeysProp
465+
}
433466

434467
lockName, err := tpgresource.ReplaceVars(d, config, "router/{{region}}/{{name}}")
435468
if err != nil {
@@ -824,6 +857,40 @@ func expandComputeRouterEncryptedInterconnectRouter(v interface{}, d tpgresource
824857
return v, nil
825858
}
826859

860+
func expandComputeRouterMd5AuthenticationKeys(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
861+
l := v.([]interface{})
862+
if len(l) == 0 || l[0] == nil {
863+
return nil, nil
864+
}
865+
raw := l[0]
866+
original := raw.(map[string]interface{})
867+
transformed := make(map[string]interface{})
868+
869+
transformedName, err := expandComputeRouterMd5AuthenticationKeysName(original["name"], d, config)
870+
if err != nil {
871+
return nil, err
872+
} else if val := reflect.ValueOf(transformedName); val.IsValid() && !tpgresource.IsEmptyValue(val) {
873+
transformed["name"] = transformedName
874+
}
875+
876+
transformedKey, err := expandComputeRouterMd5AuthenticationKeysKey(original["key"], d, config)
877+
if err != nil {
878+
return nil, err
879+
} else if val := reflect.ValueOf(transformedKey); val.IsValid() && !tpgresource.IsEmptyValue(val) {
880+
transformed["key"] = transformedKey
881+
}
882+
883+
return transformed, nil
884+
}
885+
886+
func expandComputeRouterMd5AuthenticationKeysName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
887+
return v, nil
888+
}
889+
890+
func expandComputeRouterMd5AuthenticationKeysKey(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
891+
return v, nil
892+
}
893+
827894
func expandComputeRouterRegion(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
828895
f, err := tpgresource.ParseGlobalFieldValue("regions", v.(string), "project", d, config, true)
829896
if err != nil {

google/services/compute/resource_compute_router_generated_meta.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ fields:
1515
- field: 'creation_timestamp'
1616
- field: 'description'
1717
- field: 'encrypted_interconnect_router'
18+
- field: 'md5_authentication_keys.key'
19+
- field: 'md5_authentication_keys.name'
1820
- field: 'name'
1921
- field: 'network'
2022
- field: 'region'

google/services/compute/resource_compute_router_generated_test.go

+56-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func TestAccComputeRouter_routerBasicExample(t *testing.T) {
4949
ResourceName: "google_compute_router.foobar",
5050
ImportState: true,
5151
ImportStateVerify: true,
52-
ImportStateVerifyIgnore: []string{"advertisedIpRanges", "network", "region"},
52+
ImportStateVerifyIgnore: []string{"advertisedIpRanges", "md5_authentication_keys", "network", "region"},
5353
},
5454
},
5555
})
@@ -99,7 +99,7 @@ func TestAccComputeRouter_computeRouterEncryptedInterconnectExample(t *testing.T
9999
ResourceName: "google_compute_router.encrypted-interconnect-router",
100100
ImportState: true,
101101
ImportStateVerify: true,
102-
ImportStateVerifyIgnore: []string{"advertisedIpRanges", "network", "region"},
102+
ImportStateVerifyIgnore: []string{"advertisedIpRanges", "md5_authentication_keys", "network", "region"},
103103
},
104104
},
105105
})
@@ -123,6 +123,60 @@ resource "google_compute_network" "network" {
123123
`, context)
124124
}
125125

126+
func TestAccComputeRouter_computeRouterMd5encryptedExample(t *testing.T) {
127+
t.Parallel()
128+
129+
context := map[string]interface{}{
130+
"random_suffix": acctest.RandString(t, 10),
131+
}
132+
133+
acctest.VcrTest(t, resource.TestCase{
134+
PreCheck: func() { acctest.AccTestPreCheck(t) },
135+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
136+
CheckDestroy: testAccCheckComputeRouterDestroyProducer(t),
137+
Steps: []resource.TestStep{
138+
{
139+
Config: testAccComputeRouter_computeRouterMd5encryptedExample(context),
140+
},
141+
{
142+
ResourceName: "google_compute_router.foobar",
143+
ImportState: true,
144+
ImportStateVerify: true,
145+
ImportStateVerifyIgnore: []string{"advertisedIpRanges", "md5_authentication_keys", "network", "region"},
146+
},
147+
},
148+
})
149+
}
150+
151+
func testAccComputeRouter_computeRouterMd5encryptedExample(context map[string]interface{}) string {
152+
return acctest.Nprintf(`
153+
resource "google_compute_router" "foobar" {
154+
name = "tf-test-test-router%{random_suffix}"
155+
network = google_compute_network.foobar.name
156+
bgp {
157+
asn = 64514
158+
advertise_mode = "CUSTOM"
159+
advertised_groups = ["ALL_SUBNETS"]
160+
advertised_ip_ranges {
161+
range = "1.2.3.4"
162+
}
163+
advertised_ip_ranges {
164+
range = "6.7.0.0/16"
165+
}
166+
}
167+
md5_authentication_keys {
168+
name = "test"
169+
key = "test"
170+
}
171+
}
172+
173+
resource "google_compute_network" "foobar" {
174+
name = "tf-test-test-network%{random_suffix}"
175+
auto_create_subnetworks = false
176+
}
177+
`, context)
178+
}
179+
126180
func testAccCheckComputeRouterDestroyProducer(t *testing.T) func(s *terraform.State) error {
127181
return func(s *terraform.State) error {
128182
for name, rs := range s.RootModule().Resources {

website/docs/r/compute_router.html.markdown

+16
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@ The following arguments are supported:
120120
Indicates if a router is dedicated for use with encrypted VLAN
121121
attachments (interconnectAttachments).
122122

123+
* `md5_authentication_keys` -
124+
(Optional)
125+
Keys used for MD5 authentication.
126+
Structure is [documented below](#nested_md5_authentication_keys).
127+
123128
* `region` -
124129
(Optional)
125130
Region where the router resides.
@@ -193,6 +198,17 @@ The following arguments are supported:
193198
(Optional)
194199
User-specified description for the IP range.
195200

201+
<a name="nested_md5_authentication_keys"></a>The `md5_authentication_keys` block supports:
202+
203+
* `name` -
204+
(Required)
205+
Name used to identify the key. Must be unique within a router.
206+
Must be referenced by exactly one bgpPeer. Must comply with RFC1035.
207+
208+
* `key` -
209+
(Required)
210+
Value of the key used for MD5 authentication.
211+
196212
## Attributes Reference
197213

198214
In addition to the arguments listed above, the following computed attributes are exported:

0 commit comments

Comments
 (0)