From cb65b1bd5d9730b79181ac9cda2c5fd061fbd512 Mon Sep 17 00:00:00 2001 From: neiljohn-gh Date: Tue, 28 Oct 2025 19:03:51 +0530 Subject: [PATCH] added support for msd dcnm_network via base collection --- .../msd_fabric/msd_fabric_networks.j2 | 100 +++++++++++++----- roles/dtc/create/tasks/msd/vrfs_networks.yml | 17 +-- 2 files changed, 85 insertions(+), 32 deletions(-) diff --git a/roles/dtc/common/templates/ndfc_networks/msd_fabric/msd_fabric_networks.j2 b/roles/dtc/common/templates/ndfc_networks/msd_fabric/msd_fabric_networks.j2 index 755f313e0..c127f1504 100644 --- a/roles/dtc/common/templates/ndfc_networks/msd_fabric/msd_fabric_networks.j2 +++ b/roles/dtc/common/templates/ndfc_networks/msd_fabric/msd_fabric_networks.j2 @@ -1,47 +1,99 @@ -{# Auto-generated NDFC MSD network_attach_groups_dict config data structure for fabric {{ vxlan.fabric.name }} #} -{% if MD_Extended.vxlan.multisite.overlay.networks is defined and MD_Extended.vxlan.multisite.overlay.networks %} -{% set networks = MD_Extended.vxlan.multisite.overlay.networks %} +{# Merged NDFC MSD Parent Fabric Network config with embedded child fabric configurations #} +{# Use MD_Multisite data which contains the processed overlay_attach_groups.networks with child_fabrics #} +{% if MD_Multisite.overlay_attach_groups.networks is defined and MD_Multisite.overlay_attach_groups.networks %} +{% set networks = MD_Multisite.overlay_attach_groups.networks %} {% else %} {% set networks = [] %} {% endif %} {% for net in networks %} - net_name: {{ net['name'] }} {# ------------------------------------------------------ #} -{# Properties Section #} +{# Parent Fabric Properties Section #} +{# These are only allowed on parent fabrics #} {# ------------------------------------------------------ #} - is_l2only: {{ net['is_l2_only'] | default(defaults.vxlan.overlay.networks.is_l2_only) }} vrf_name: {{ net['vrf_name'] | default(omit) }} + net_template: {{ net['net_template'] | default('Default_Network_Universal') }} + net_extension_template: {{ net['net_extension_template'] | default('Default_Network_Extension_Universal') }} net_id: {{ net['net_id'] | default(omit) }} vlan_id: {{ net['vlan_id'] | default(omit) }} vlan_name: {{ net['vlan_name'] | default(omit) }} gw_ip_subnet: {{ net['gw_ip_address'] | default(omit) }} + routing_tag: {{ net['route_tag'] | default(defaults.vxlan.overlay.networks.route_tag) }} + int_desc: {{ net['int_desc'] | default(defaults.vxlan.overlay.networks.net_description) }} + mtu_l3intf: {{ net['mtu_l3intf'] | default(defaults.vxlan.overlay.networks.mtu_l3intf) }} + is_l2only: {{ net['is_l2_only'] | default(defaults.vxlan.overlay.networks.is_l2_only) }} + arp_suppress: {{ net['arp_suppress'] | default(defaults.vxlan.overlay.networks.arp_supress) }} + gw_ipv6_subnet: {{ net['gw_ipv6_address'] | default(omit) }} + route_target_both: {{ net['route_target_both'] | default(defaults.vxlan.overlay.networks.route_target_both) }} + intfvlan_nf_monitor: {{ net['intfvlan_nf_monitor'] | default(omit) }} {% if net.secondary_ip_addresses is defined %} -{% if net.secondary_ip_addresses | length == 1 %} - secondary_ip_gw1: {{ net['secondary_ip_addresses'][0]['ip_address'] }} -{% elif net.secondary_ip_addresses | length == 2 %} - secondary_ip_gw1: {{ net['secondary_ip_addresses'][0]['ip_address'] }} - secondary_ip_gw2: {{ net['secondary_ip_addresses'][1]['ip_address'] }} -{% elif net.secondary_ip_addresses | length == 3 %} - secondary_ip_gw1: {{ net['secondary_ip_addresses'][0]['ip_address'] }} - secondary_ip_gw2: {{ net['secondary_ip_addresses'][1]['ip_address'] }} - secondary_ip_gw3: {{ net['secondary_ip_addresses'][2]['ip_address'] }} -{% elif net.secondary_ip_addresses | length == 4 %} +{% if net.secondary_ip_addresses | length >= 1 %} secondary_ip_gw1: {{ net['secondary_ip_addresses'][0]['ip_address'] }} +{% endif %} +{% if net.secondary_ip_addresses | length >= 2 %} secondary_ip_gw2: {{ net['secondary_ip_addresses'][1]['ip_address'] }} +{% endif %} +{% if net.secondary_ip_addresses | length >= 3 %} secondary_ip_gw3: {{ net['secondary_ip_addresses'][2]['ip_address'] }} +{% endif %} +{% if net.secondary_ip_addresses | length >= 4 %} secondary_ip_gw4: {{ net['secondary_ip_addresses'][3]['ip_address'] }} {% endif %} {% endif %} - arp_suppress: {{ net['arp_suppress'] | default(defaults.vxlan.overlay.networks.arp_supress) }} - gw_ipv6_subnet: {{ net['gw_ipv6_address'] | default(omit) }} - int_desc: {{ net['int_desc'] | default(defaults.vxlan.overlay.networks.net_description) }} - mtu_l3intf: {{ net['mtu_l3intf'] | default(defaults.vxlan.overlay.networks.mtu_l3intf) }} - route_target_both: {{ net['route_target_both'] | default(defaults.vxlan.overlay.networks.route_target_both) }} - routing_tag: {{ net['route_tag'] | default(defaults.vxlan.overlay.networks.route_tag) }} +{# ------------------------------------------------------ #} +{# Child Fabric Configuration Section #} +{# These parameters are NOT allowed directly on parent fabrics #} +{# but can be specified per child fabric in child_fabric_config #} +{# Pull child fabric data from MD_Multisite data structure #} +{# ------------------------------------------------------ #} +{% if net.child_fabrics is defined and net.child_fabrics | length > 0 %} + # NOTE: trm_enable, l3gw_on_border, netflow_enable are NOT allowed on parent fabrics + child_fabric_config: +{% for child_config in net.child_fabrics %} + - fabric: {{ child_config.name }} + # Child fabric allows these specific parameters +{% if child_config.netflow_enable is defined %} + netflow_enable: {{ child_config.netflow_enable }} +{% endif %} +{% if child_config.l3gw_on_border is defined %} + l3gw_on_border: {{ child_config.l3gw_on_border }} +{% endif %} +{% if child_config.trm_enable is defined %} + trm_enable: {{ child_config.trm_enable }} +{% endif %} +{# trmv6_enable: {{ child_config.trmv6_enable | default(omit) }} #} +{% if child_config.dhcp_loopback_id is defined %} + dhcp_loopback_id: {{ child_config.dhcp_loopback_id }} +{% endif %} +{% if child_config.multicast_group_address is defined %} + multicast_group_address: '{{ child_config.multicast_group_address }}' +{% endif %} +{% if child_config.vlan_nf_monitor is defined %} + vlan_nf_monitor: '{{ child_config.vlan_nf_monitor }}' +{% endif %} +{% if child_config.dhcp_srvr1_ip is defined %} + dhcp_srvr1_ip: '{{ child_config.dhcp_srvr1_ip }}' +{% endif %} +{% if child_config.dhcp_srvr1_vrf is defined %} + dhcp_srvr1_vrf: '{{ child_config.dhcp_srvr1_vrf }}' +{% endif %} +{% if child_config.dhcp_srvr2_ip is defined %} + dhcp_srvr2_ip: '{{ child_config.dhcp_srvr2_ip }}' +{% endif %} +{% if child_config.dhcp_srvr2_vrf is defined %} + dhcp_srvr2_vrf: '{{ child_config.dhcp_srvr2_vrf }}' +{% endif %} +{% if child_config.dhcp_srvr3_ip is defined %} + dhcp_srvr3_ip: '{{ child_config.dhcp_srvr3_ip }}' +{% endif %} +{% if child_config.dhcp_srvr3_vrf is defined %} + dhcp_srvr3_vrf: '{{ child_config.dhcp_srvr3_vrf }}' +{% endif %} +{% endfor %} +{% endif %} {# ------------------------------------------------------ #} {# Attach Group Section #} {# ------------------------------------------------------ #} -{# Don't need to attach vrfs if there are no msd_switches #} {% if net['network_attach_group'] is defined %} attach: {% if MD_Multisite.overlay_attach_groups.network_attach_groups_dict is defined and MD_Multisite.overlay_attach_groups.network_attach_groups_dict %} @@ -53,6 +105,6 @@ ports: {{ attach['ports'] }} {% endif %} {% endfor %} - deploy: false {% endif %} -{% endfor %} + deploy: false +{% endfor %} \ No newline at end of file diff --git a/roles/dtc/create/tasks/msd/vrfs_networks.yml b/roles/dtc/create/tasks/msd/vrfs_networks.yml index e08e018a2..7eeb58031 100644 --- a/roles/dtc/create/tasks/msd/vrfs_networks.yml +++ b/roles/dtc/create/tasks/msd/vrfs_networks.yml @@ -172,20 +172,21 @@ - MD_Extended.vxlan.multisite.overlay.networks - change_flags_multisite.changes_detected_networks -- name: Manage Child Fabric Networks in Nexus Dashboard - cisco.nac_dc_vxlan.dtc.manage_child_fabric_networks: - nd_version: "{{ nd_version }}" - msite_data: "{{ MD_Multisite }}" - register: child_fabric_network_results +# - name: Manage Child Fabric Networks in Nexus Dashboard +# cisco.nac_dc_vxlan.dtc.manage_child_fabric_networks: +# nd_version: "{{ nd_version }}" +# msite_data: "{{ MD_Multisite }}" +# register: child_fabric_network_results + - name: Update Child Fabrics VRFs and Networks Changed State ansible.builtin.set_fact: child_fabrics_vrfs_networks_changed: "{{ vrf_changed | ansible.builtin.union(network_changed) }}" vars: vrf_changed: "{{ child_fabric_vrf_results.child_fabrics_changed | default([]) }}" - network_changed: "{{ child_fabric_network_results.child_fabrics_changed | default([]) }}" + network_changed: "{{ manage_network_result.changed | default([]) }}" when: > (child_fabric_vrf_results.child_fabrics_changed is defined and child_fabric_vrf_results.child_fabrics_changed | length > 0) or - (child_fabric_network_results.child_fabrics_changed is defined and - child_fabric_network_results.child_fabrics_changed | length > 0) + (manage_network_result.changed is defined and + manage_network_result.changed | length > 0)