Skip to content

Commit f0287d4

Browse files
Native multicast support in the module (#100)
* Added multicast replication mode: NATIVE andf HEADEND * Moved replication_mode directly under multicast section * Minor changes to the multicast module * Modified CHANGELOG * Modified CHANGELOG * Minor updates to properly handle FABRIC vs EXTERNAL RP mcast configuration * fix: run pre-commit hooks (terraform-docs, fmt) * minor changes to cc_fabric.tf --------- Co-authored-by: kuba-mazurkiewicz <kmazurki@cisco.com>
1 parent 41929c7 commit f0287d4

3 files changed

Lines changed: 42 additions & 26 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
- Add AP Profile support with `catalystcenter_ap_profile` resource for managing Access Point profiles including management settings (802.1X, SSH, Telnet, CDP), AWIPS, rogue detection, mesh networking, power profiles, and client limits; NaC data model uses `power_profile` for the always-on profile and `power_profile` on each `calendar_power_profiles` row for scheduled profiles
1818
- Add Wireless Profile Site Tag support with `catalystcenter_wireless_profile_site_tag` resource for attaching AP profiles to wireless network profiles per site via site tags
1919
- Add support for updating device management IP address via `catalystcenter_update_device_management_address` resource when `device_ip` in data model differs from current Catalyst Center management IP
20+
- Add support for selecting `replication_mode` as either NATIVE_MULTICAST or HEADEND_REPLICATION
2021

2122
**Improvements:**
2223
- Add support for skipping configuration cleanup during delete to remove unreachable provisioned devices from inventory

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ module "catalystcenter" {
132132
| [catalystcenter_fabric_l3_handoff_sda_transit.sda_transit](https://registry.terraform.io/providers/CiscoDevNet/catalystcenter/latest/docs/resources/fabric_l3_handoff_sda_transit) | resource |
133133
| [catalystcenter_fabric_l3_virtual_network.global_l3_vn](https://registry.terraform.io/providers/CiscoDevNet/catalystcenter/latest/docs/resources/fabric_l3_virtual_network) | resource |
134134
| [catalystcenter_fabric_l3_virtual_network.l3_vn](https://registry.terraform.io/providers/CiscoDevNet/catalystcenter/latest/docs/resources/fabric_l3_virtual_network) | resource |
135+
| [catalystcenter_fabric_multicast_replication_mode.replication_mode](https://registry.terraform.io/providers/CiscoDevNet/catalystcenter/latest/docs/resources/fabric_multicast_replication_mode) | resource |
135136
| [catalystcenter_fabric_multicast_virtual_networks.multicast](https://registry.terraform.io/providers/CiscoDevNet/catalystcenter/latest/docs/resources/fabric_multicast_virtual_networks) | resource |
136137
| [catalystcenter_fabric_port_assignments.port_assignments](https://registry.terraform.io/providers/CiscoDevNet/catalystcenter/latest/docs/resources/fabric_port_assignments) | resource |
137138
| [catalystcenter_fabric_site.fabric_site](https://registry.terraform.io/providers/CiscoDevNet/catalystcenter/latest/docs/resources/fabric_site) | resource |

cc_fabric.tf

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -868,13 +868,34 @@ locals {
868868
virtual_networks = [
869869
for vn in try(fabric_site.multicast.virtual_networks, []) : {
870870
virtual_network_name = try(vn.name, null)
871+
fabric_id = try(local.combined_fabric_id_list[fabric_site.name], null)
871872
ip_pool_name = try(vn.ip_pool_name, null)
872-
ipv4_ssm_ranges = try(vn.ipv4_ssm_ranges, [])
873-
multicast_rps = try(vn.multicast_rps, [])
873+
ipv4_ssm_ranges = try(vn.ipv4_ssm_ranges, null)
874+
multicast_rps = [
875+
for rp in try(vn.multicast_rps, []) : {
876+
name = try(rp.name, null)
877+
ipv4_address = try(rp.rp_location, "") != "FABRIC" ? try(rp.ipv4_address, null) : null
878+
ipv6_address = try(rp.rp_location, "") != "FABRIC" ? try(rp.ipv6_address, null) : null
879+
ipv4_asm_ranges = try(rp.ipv4_asm_ranges, null)
880+
ipv6_asm_ranges = try(rp.ipv6_asm_ranges, null)
881+
is_default_v4_rp = try(rp.is_default_v4_rp, null)
882+
is_default_v6_rp = try(rp.is_default_v6_rp, null)
883+
rp_device_location = try(rp.rp_location, null)
884+
network_device_ids = try(rp.rp_location, "") == "FABRIC" ? [
885+
for device_name in try(rp.fabric_rps, []) :
886+
try(local.device_name_to_id[device_name], null)
887+
] : null
888+
}
889+
]
874890
}
875891
]
876892
} if try(fabric_site.multicast, null) != null
877893
}
894+
fabric_multicast_replication_modes = {
895+
for fabric_site in try(local.catalyst_center.fabric.fabric_sites, []) :
896+
fabric_site.name => try(fabric_site.multicast.replication_mode, null)
897+
if try(fabric_site.multicast.replication_mode, null) != null
898+
}
878899
}
879900

880901
resource "catalystcenter_fabric_multicast_virtual_networks" "multicast" {
@@ -884,37 +905,30 @@ resource "catalystcenter_fabric_multicast_virtual_networks" "multicast" {
884905
if contains(local.sites, fabric_site) && length(config.virtual_networks) > 0
885906
}
886907

887-
fabric_id = try(catalystcenter_fabric_site.fabric_site[each.key].id, null)
908+
fabric_id = try(local.combined_fabric_id_list[each.key].id, null)
888909

889-
virtual_networks = [
890-
for vn in each.value.virtual_networks : {
891-
fabric_id = try(catalystcenter_fabric_site.fabric_site[each.key].id, null)
892-
virtual_network_name = try(vn.virtual_network_name, null)
893-
ip_pool_name = try(vn.ip_pool_name, null)
894-
ipv4_ssm_ranges = try(vn.ipv4_ssm_ranges, [])
895-
multicast_rps = [
896-
for rp in try(vn.multicast_rps, []) : {
897-
ipv4_address = try(rp.rp_location, "") != "FABRIC" ? try(rp.ipv4_address, null) : null
898-
ipv6_address = try(rp.rp_location, "") != "FABRIC" ? try(rp.ipv6_address, null) : null
899-
ipv4_asm_ranges = try(rp.ipv4_asm_ranges, [])
900-
ipv6_asm_ranges = try(rp.ipv6_asm_ranges, [])
901-
is_default_v4_rp = try(rp.is_default_v4_rp, null)
902-
is_default_v6_rp = try(rp.is_default_v6_rp, null)
903-
rp_device_location = try(rp.rp_location, null)
904-
network_device_ids = try(rp.rp_location, "") == "FABRIC" ? [
905-
for device_name in try(rp.fabric_rps, []) :
906-
try(local.device_name_to_id[device_name], local.device_name_to_id[local.name_to_fqdn_mapping[device_name]], null)
907-
] : []
908-
}
909-
]
910-
}
911-
]
910+
virtual_networks = each.value.virtual_networks
912911

913912
depends_on = [
914913
catalystcenter_fabric_site.fabric_site, catalystcenter_fabric_l3_virtual_network.l3_vn, catalystcenter_virtual_network_to_fabric_site.l3_vn_to_fabric_site, catalystcenter_ip_pool_reservation.pool_reservation, catalystcenter_provision_devices.provision_devices, catalystcenter_provision_device.provision_device
915914
]
916915
}
917916

917+
resource "catalystcenter_fabric_multicast_replication_mode" "replication_mode" {
918+
for_each = {
919+
for fabric_site, replication_mode in local.fabric_multicast_replication_modes :
920+
fabric_site => replication_mode
921+
if contains(local.sites, fabric_site)
922+
}
923+
924+
fabric_id = try(catalystcenter_fabric_site.fabric_site[each.key].id, null)
925+
replication_mode = each.value
926+
927+
depends_on = [
928+
catalystcenter_fabric_site.fabric_site, catalystcenter_fabric_multicast_virtual_networks.multicast
929+
]
930+
}
931+
918932
locals {
919933
extranet_policies = flatten([
920934
for policy in try(local.catalyst_center.fabric.extranet_policies, []) : {

0 commit comments

Comments
 (0)