Skip to content

Commit cc08ed3

Browse files
rwcrowerocrowe
andauthored
feature(hsrp_ipv4_groupv2): add hsrp_ipv4_groupv2 (#168)
- refactor vrrp for consistency Co-authored-by: rocrowe <rocrowe@cisco.com>
1 parent 1d82a22 commit cc08ed3

File tree

6 files changed

+262
-145
lines changed

6 files changed

+262
-145
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,9 @@ module "iosxr" {
155155
| [iosxr_router_bgp_vrf_address_family.ipv6_unicast](https://registry.terraform.io/providers/CiscoDevNet/iosxr/0.7.0/docs/resources/router_bgp_vrf_address_family) | resource |
156156
| [iosxr_router_bgp_vrf_neighbor_address_family.router_bgp_vrf_neighbor_address_family](https://registry.terraform.io/providers/CiscoDevNet/iosxr/0.7.0/docs/resources/router_bgp_vrf_neighbor_address_family) | resource |
157157
| [iosxr_router_hsrp_interface.router_hsrp_interface](https://registry.terraform.io/providers/CiscoDevNet/iosxr/0.7.0/docs/resources/router_hsrp_interface) | resource |
158+
| [iosxr_router_hsrp_interface_ipv4_group_v1.router_hsrp_interface_ipv4_group_v1](https://registry.terraform.io/providers/CiscoDevNet/iosxr/0.7.0/docs/resources/router_hsrp_interface_ipv4_group_v1) | resource |
158159
| [iosxr_router_hsrp_interface_ipv4_group_v2.router_hsrp_interface_ipv4_group_v2](https://registry.terraform.io/providers/CiscoDevNet/iosxr/0.7.0/docs/resources/router_hsrp_interface_ipv4_group_v2) | resource |
160+
| [iosxr_router_hsrp_interface_ipv6_group_v2.router_hsrp_interface_ipv6_group_v2](https://registry.terraform.io/providers/CiscoDevNet/iosxr/0.7.0/docs/resources/router_hsrp_interface_ipv6_group_v2) | resource |
159161
| [iosxr_router_isis.router_isis](https://registry.terraform.io/providers/CiscoDevNet/iosxr/0.7.0/docs/resources/router_isis) | resource |
160162
| [iosxr_router_isis_address_family.ipv4_multicast](https://registry.terraform.io/providers/CiscoDevNet/iosxr/0.7.0/docs/resources/router_isis_address_family) | resource |
161163
| [iosxr_router_isis_address_family.ipv4_unicast](https://registry.terraform.io/providers/CiscoDevNet/iosxr/0.7.0/docs/resources/router_isis_address_family) | resource |

iosxr_router_hsrp.tf

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
##### HSRP Interface #####
2+
3+
locals {
4+
router_hsrp_interfaces = flatten([
5+
for device in local.devices : [
6+
for intf in try(local.device_config[device.name].router_hsrp.interfaces, []) : {
7+
key = format("%s/%s", device.name, intf.name)
8+
device_name = device.name
9+
interface_name = try(intf.name, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.name, null)
10+
hsrp_use_bia = try(intf.use_bia, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.use_bia, null)
11+
hsrp_redirects_disable = try(intf.redirects_disable, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.redirects_disable, null)
12+
hsrp_delay_minimum = try(intf.delay_minimum, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.delay_minimum, null)
13+
hsrp_delay_reload = try(intf.delay_reload, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.delay_reload, null)
14+
hsrp_bfd_minimum_interval = try(intf.bfd_minimum_interval, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.bfd_minimum_interval, null)
15+
hsrp_bfd_multiplier = try(intf.bfd_multiplier, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.bfd_multiplier, null)
16+
hsrp_mac_refresh = try(intf.mac_refresh, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.mac_refresh, null)
17+
}
18+
]
19+
])
20+
}
21+
22+
resource "iosxr_router_hsrp_interface" "router_hsrp_interface" {
23+
for_each = { for intf in local.router_hsrp_interfaces : intf.key => intf }
24+
device = each.value.device_name
25+
interface_name = each.value.interface_name
26+
hsrp_use_bia = each.value.hsrp_use_bia
27+
hsrp_redirects_disable = each.value.hsrp_redirects_disable
28+
hsrp_delay_minimum = each.value.hsrp_delay_minimum
29+
hsrp_delay_reload = each.value.hsrp_delay_reload
30+
hsrp_bfd_minimum_interval = each.value.hsrp_bfd_minimum_interval
31+
hsrp_bfd_multiplier = each.value.hsrp_bfd_multiplier
32+
hsrp_mac_refresh = each.value.hsrp_mac_refresh
33+
}
34+
35+
##### HSRP Interface IPv4 Group V1 / V2 #####
36+
37+
locals {
38+
router_hsrp_ipv4_groups = flatten([
39+
for device in local.devices : [
40+
for intf in try(local.device_config[device.name].router_hsrp.interfaces, []) : [
41+
for group in try(intf.ipv4, []) : {
42+
key = format("%s/%s/%s", device.name, intf.name, group.group)
43+
device_name = device.name
44+
interface_name = try(intf.name, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.name, null)
45+
version = try(group.version, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.version, 2)
46+
group_id = try(group.group, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.group, null)
47+
address = try(group.address, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.address, null)
48+
address_learn = try(group.address_learn, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.address_learn, null)
49+
priority = try(group.priority, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.priority, null)
50+
mac_address = try(
51+
provider::utils::normalize_mac(
52+
try(group.mac_address, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.mac_address),
53+
"colon"
54+
),
55+
null
56+
)
57+
name = try(group.name, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.name, null)
58+
preempt_delay = try(group.preempt_delay, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.preempt_delay, null)
59+
timers_msec = try(group.timers_msec, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.timers_msec, null)
60+
timers_msec_holdtime = try(group.timers_msec_holdtime, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.timers_msec_holdtime, null)
61+
timers_seconds = try(group.timers_seconds, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.timers_seconds, null)
62+
timers_seconds_holdtime = try(group.timers_seconds_holdtime, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.timers_seconds_holdtime, null)
63+
bfd_fast_detect_peer_ipv4 = try(group.bfd_fast_detect_peer_ipv4, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.bfd_fast_detect_peer_ipv4, null)
64+
bfd_fast_detect_peer_interface = try(group.bfd_fast_detect_peer_interface, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.bfd_fast_detect_peer_interface, null)
65+
secondary_ipv4_addresses = try(length(group.secondary_ipv4_addresses) == 0, true) ? null : [
66+
for secondary in group.secondary_ipv4_addresses : {
67+
address = try(secondary.address, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.secondary_ipv4_addresses.address, null)
68+
}
69+
]
70+
track_interfaces = try(length(group.track_interfaces) == 0, true) ? null : [
71+
for track_intf in group.track_interfaces : {
72+
track_name = try(track_intf.name, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.track_interfaces.name, null)
73+
priority_decrement = try(track_intf.priority_decrement, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.track_interfaces.priority_decrement, null)
74+
}
75+
]
76+
track_objects = try(length(group.track_objects) == 0, true) ? null : [
77+
for track_obj in group.track_objects : {
78+
object_name = try(track_obj.name, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.track_objects.name, null)
79+
priority_decrement = try(track_obj.priority_decrement, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv4.track_objects.priority_decrement, null)
80+
}
81+
]
82+
}
83+
]
84+
]
85+
])
86+
}
87+
88+
resource "iosxr_router_hsrp_interface_ipv4_group_v1" "router_hsrp_interface_ipv4_group_v1" {
89+
for_each = { for group in local.router_hsrp_ipv4_groups : group.key => group if group.version == 1 }
90+
device = each.value.device_name
91+
interface_name = each.value.interface_name
92+
group_id = each.value.group_id
93+
address = each.value.address
94+
address_learn = each.value.address_learn
95+
priority = each.value.priority
96+
mac_address = each.value.mac_address
97+
name = each.value.name
98+
preempt_delay = each.value.preempt_delay
99+
timers_msec = each.value.timers_msec
100+
timers_msec_holdtime = each.value.timers_msec_holdtime
101+
timers_seconds = each.value.timers_seconds
102+
timers_seconds_holdtime = each.value.timers_seconds_holdtime
103+
bfd_fast_detect_peer_ipv4 = each.value.bfd_fast_detect_peer_ipv4
104+
bfd_fast_detect_peer_interface = each.value.bfd_fast_detect_peer_interface
105+
secondary_ipv4_addresses = each.value.secondary_ipv4_addresses
106+
track_interfaces = each.value.track_interfaces
107+
track_objects = each.value.track_objects
108+
depends_on = [iosxr_router_hsrp_interface.router_hsrp_interface]
109+
}
110+
111+
resource "iosxr_router_hsrp_interface_ipv4_group_v2" "router_hsrp_interface_ipv4_group_v2" {
112+
for_each = { for group in local.router_hsrp_ipv4_groups : group.key => group if group.version == 2 }
113+
device = each.value.device_name
114+
interface_name = each.value.interface_name
115+
group_id = each.value.group_id
116+
address = each.value.address
117+
address_learn = each.value.address_learn
118+
priority = each.value.priority
119+
mac_address = each.value.mac_address
120+
name = each.value.name
121+
preempt_delay = each.value.preempt_delay
122+
timers_msec = each.value.timers_msec
123+
timers_msec_holdtime = each.value.timers_msec_holdtime
124+
timers_seconds = each.value.timers_seconds
125+
timers_seconds_holdtime = each.value.timers_seconds_holdtime
126+
bfd_fast_detect_peer_ipv4 = each.value.bfd_fast_detect_peer_ipv4
127+
bfd_fast_detect_peer_interface = each.value.bfd_fast_detect_peer_interface
128+
secondary_ipv4_addresses = each.value.secondary_ipv4_addresses
129+
track_interfaces = each.value.track_interfaces
130+
track_objects = each.value.track_objects
131+
depends_on = [iosxr_router_hsrp_interface.router_hsrp_interface]
132+
}
133+
134+
##### HSRP Interface IPv6 Group V2 #####
135+
136+
locals {
137+
router_hsrp_ipv6_groups = flatten([
138+
for device in local.devices : [
139+
for intf in try(local.device_config[device.name].router_hsrp.interfaces, []) : [
140+
for group in try(intf.ipv6, []) : {
141+
key = format("%s/%s/%s", device.name, intf.name, group.group)
142+
device_name = device.name
143+
interface_name = try(intf.name, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.name, null)
144+
group_id = try(group.group, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.group, null)
145+
addresses = try(length(group.addresses) == 0, true) ? null : [
146+
for addr in group.addresses : {
147+
address = try(addr.address, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.addresses.address, null)
148+
}
149+
]
150+
linklocal_address = try(group.linklocal_address, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.linklocal_address, null)
151+
linklocal_address_autoconfig = try(group.linklocal_address_autoconfig, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.linklocal_address_autoconfig, null)
152+
linklocal_address_autoconfig_legacy = try(group.linklocal_address_autoconfig_legacy, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.linklocal_address_autoconfig_legacy, null)
153+
priority = try(group.priority, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.priority, null)
154+
preempt_delay = try(group.preempt_delay, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.preempt_delay, null)
155+
timers_msec = try(group.timers_msec, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.timers_msec, null)
156+
timers_msec_holdtime = try(group.timers_msec_holdtime, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.timers_msec_holdtime, null)
157+
timers_seconds = try(group.timers_seconds, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.timers_seconds, null)
158+
timers_seconds_holdtime = try(group.timers_seconds_holdtime, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.timers_seconds_holdtime, null)
159+
mac_address = try(
160+
provider::utils::normalize_mac(
161+
try(group.mac_address, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.mac_address),
162+
"colon"
163+
),
164+
null
165+
)
166+
name = try(group.name, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.name, null)
167+
bfd_fast_detect_peer_ipv6 = try(group.bfd_fast_detect_peer_ipv6, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.bfd_fast_detect_peer_ipv6, null)
168+
bfd_fast_detect_peer_interface = try(group.bfd_fast_detect_peer_interface, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.bfd_fast_detect_peer_interface, null)
169+
track_interfaces = try(length(group.track_interfaces) == 0, true) ? null : [
170+
for track_intf in group.track_interfaces : {
171+
track_name = try(track_intf.name, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.track_interfaces.name, null)
172+
priority_decrement = try(track_intf.priority_decrement, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.track_interfaces.priority_decrement, null)
173+
}
174+
]
175+
track_objects = try(length(group.track_objects) == 0, true) ? null : [
176+
for track_obj in group.track_objects : {
177+
object_name = try(track_obj.name, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.track_objects.name, null)
178+
priority_decrement = try(track_obj.priority_decrement, local.defaults.iosxr.devices.configuration.router_hsrp.interfaces.ipv6.track_objects.priority_decrement, null)
179+
}
180+
]
181+
}
182+
]
183+
]
184+
])
185+
}
186+
187+
resource "iosxr_router_hsrp_interface_ipv6_group_v2" "router_hsrp_interface_ipv6_group_v2" {
188+
for_each = { for group in local.router_hsrp_ipv6_groups : group.key => group }
189+
device = each.value.device_name
190+
interface_name = each.value.interface_name
191+
group_id = each.value.group_id
192+
addresses = each.value.addresses
193+
address_link_local_ipv6_address = each.value.linklocal_address
194+
address_link_local_autoconfig = each.value.linklocal_address_autoconfig
195+
address_link_local_autoconfig_legacy_compatible = each.value.linklocal_address_autoconfig_legacy
196+
priority = each.value.priority
197+
preempt_delay = each.value.preempt_delay
198+
timers_msec = each.value.timers_msec
199+
timers_msec_holdtime = each.value.timers_msec_holdtime
200+
timers_seconds = each.value.timers_seconds
201+
timers_seconds_holdtime = each.value.timers_seconds_holdtime
202+
mac_address = each.value.mac_address
203+
name = each.value.name
204+
bfd_fast_detect_peer_ipv6 = each.value.bfd_fast_detect_peer_ipv6
205+
bfd_fast_detect_peer_interface = each.value.bfd_fast_detect_peer_interface
206+
track_interfaces = each.value.track_interfaces
207+
track_objects = each.value.track_objects
208+
depends_on = [iosxr_router_hsrp_interface.router_hsrp_interface]
209+
}

iosxr_router_hsrp_interface.tf

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)