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 46ea36ce..c127f150 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,85 +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) }} -{% if net.child_fabrics is defined and net.child_fabrics %} -{% set child_fabrics = net.child_fabrics %} +{# ------------------------------------------------------ #} +{# 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: -{% else %} -{% set child_fabrics = [] %} -{% endif %} -{% for child_fabric in child_fabrics %} - - fabric_name: {{ child_fabric['name'] | default(omit) }} -{% if (MD_Multisite.child_fabrics_data[child_fabric['name']]['attributes']['REPLICATION_MODE'] | lower) == 'multicast' %} - multicast_group_address: {{ child_fabric['multicast_group_address'] | default(omit) }} -{% endif %} - dhcp_loopback_id: {{ child_fabric['dhcp_loopback_id'] | default(omit) }} -{% if child_fabric.dhcp_servers is defined %} -{% if child_fabric.dhcp_servers | length == 1 %} - dhcp_srvr1_ip: {{ child_fabric['dhcp_servers'][0]['ip_address'] }} - dhcp_srvr1_vrf: {{ child_fabric['dhcp_servers'][0]['vrf'] }} -{% elif child_fabric.dhcp_servers | length == 2 %} - dhcp_srvr1_ip: {{ child_fabric['dhcp_servers'][0]['ip_address'] }} - dhcp_srvr1_vrf: {{ child_fabric['dhcp_servers'][0]['vrf'] }} - dhcp_srvr2_ip: {{ child_fabric['dhcp_servers'][1]['ip_address'] }} - dhcp_srvr2_vrf: {{ child_fabric['dhcp_servers'][1]['vrf'] }} -{% elif child_fabric.dhcp_servers | length == 3 %} - dhcp_srvr1_ip: {{ child_fabric['dhcp_servers'][0]['ip_address'] }} - dhcp_srvr1_vrf: {{ child_fabric['dhcp_servers'][0]['vrf'] }} - dhcp_srvr2_ip: {{ child_fabric['dhcp_servers'][1]['ip_address'] }} - dhcp_srvr2_vrf: {{ child_fabric['dhcp_servers'][1]['vrf'] }} - dhcp_srvr3_ip: {{ child_fabric['dhcp_servers'][2]['ip_address'] }} - dhcp_srvr3_vrf: {{ child_fabric['dhcp_servers'][2]['vrf'] }} -{% endif %} -{% endif %} - trm_enable: {{ child_fabric['trm_enable'] | default(omit) }} -{# trmv6_enable: {{ child_fabric['trmv6_enable'] | default(omit) }} #} - l3gw_on_border: {{ child_fabric['l3gw_on_border'] | default(omit) }} - netflow_enable: {{ child_fabric['netflow_enable'] | default(omit) }} -{% if child_fabric['netflow_enable'] is defined and child_fabric['netflow_enable'] | bool %} - vlan_nf_monitor: {{ child_fabric['vlan_netflow_monitor'] | default(omit) }} +{% 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 %} @@ -91,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 8ca05dcf..62a01a1d 100644 --- a/roles/dtc/create/tasks/msd/vrfs_networks.yml +++ b/roles/dtc/create/tasks/msd/vrfs_networks.yml @@ -183,9 +183,9 @@ 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)