netascode / ansible-dc-vxlan

Ansible Collection for configuring a VXLAN Fabric using Direct to Controller (DTC) or Direct To Device (DTD) workflows.
https://galaxy.ansible.com/ui/repo/published/cisco/nac_dc_vxlan/
MIT License
6 stars 6 forks source link

Role: cisco.nac_dc_vxlan.dtc.create - Fabric #2

Closed mikewiebe closed 5 months ago

mikewiebe commented 7 months ago

Role Entry Point: https://github.com/netascode/ansible-dc-vxlan/blob/main/roles/dtc/create/tasks/ndfc/main.yml#L15

Scope of work:

Task Steps:

Tests: Assumption: No devices have been added to the fabric

API Details:

{
  "fabricName": "netascode_fabric1",
  "templateName": "Easy_Fabric",
  "nvPairs": {
    "FABRIC_NAME": "netascode_fabric1",
    "BGP_AS": "55",
    "UNDERLAY_IS_V6": "false",
    "USE_LINK_LOCAL": false,
    "V6_SUBNET_TARGET_MASK": "",
    "LINK_STATE_ROUTING": "ospf",
    "RR_COUNT": "2",
    "ANYCAST_GW_MAC": "2020.0000.00aa",
    "PM_ENABLE": "false",
    "BGP_AS_PREV": "",
    "PM_ENABLE_PREV": "false",
    "ENABLE_FABRIC_VPC_DOMAIN_ID_PREV": "",
    "FABRIC_VPC_DOMAIN_ID_PREV": "",
    "LINK_STATE_ROUTING_TAG_PREV": "",
    "OVERLAY_MODE_PREV": "",
    "ENABLE_PVLAN_PREV": "",
    "FABRIC_MTU_PREV": "9216",
    "L2_HOST_INTF_MTU_PREV": "9216",
    "DEPLOYMENT_FREEZE": "false",
    "AUTO_UNIQUE_VRF_LITE_IP_PREFIX_PREV": "false",
    "PER_VRF_LOOPBACK_AUTO_PROVISION_PREV": "false",
    "INBAND_MGMT_PREV": "false",
    "BOOTSTRAP_ENABLE_PREV": "false",
    "ENABLE_NETFLOW_PREV": "",
    "ALLOW_NXC": "true",
    "ALLOW_NXC_PREV": "",
    "OVERWRITE_GLOBAL_NXC": "false",
    "NXC_DEST_VRF": "management",
    "NXC_SRC_INTF": "",
    "NXC_PROXY_SERVER": "",
    "NXC_PROXY_PORT": "8080",
    "VPC_DELAY_RESTORE_TIME": "60",
    "FABRIC_TYPE": "Switch_Fabric",
    "EXT_FABRIC_TYPE": "",
    "ENABLE_AGENT": "false",
    "AGENT_INTF": "eth0",
    "SSPINE_ADD_DEL_DEBUG_FLAG": "Disable",
    "BRFIELD_DEBUG_FLAG": "Disable",
    "ACTIVE_MIGRATION": "false",
    "FF": "Easy_Fabric",
    "MSO_SITE_ID": "",
    "MSO_CONTROLER_ID": "",
    "MSO_SITE_GROUP_NAME": "",
    "PREMSO_PARENT_FABRIC": "",
    "MSO_CONNECTIVITY_DEPLOYED": "",
    "ANYCAST_RP_IP_RANGE_INTERNAL": "",
    "DHCP_START_INTERNAL": "",
    "DHCP_END_INTERNAL": "",
    "MGMT_GW_INTERNAL": "",
    "MGMT_PREFIX_INTERNAL": "",
    "BOOTSTRAP_MULTISUBNET_INTERNAL": "",
    "MGMT_V6PREFIX_INTERNAL": "",
    "DHCP_IPV6_ENABLE_INTERNAL": "",
    "UNNUM_DHCP_START_INTERNAL": "",
    "UNNUM_DHCP_END_INTERNAL": "",
    "ENABLE_EVPN": "true",
    "FEATURE_PTP_INTERNAL": "false",
    "SSPINE_COUNT": "0",
    "SPINE_COUNT": "0",
    "abstract_feature_leaf": "base_feature_leaf_upg",
    "abstract_feature_spine": "base_feature_spine_upg",
    "abstract_dhcp": "base_dhcp",
    "abstract_multicast": "base_multicast_11_1",
    "abstract_anycast_rp": "anycast_rp",
    "abstract_loopback_interface": "int_fabric_loopback_11_1",
    "abstract_isis": "base_isis_level2",
    "abstract_ospf": "base_ospf",
    "abstract_vpc_domain": "base_vpc_domain_11_1",
    "abstract_vlan_interface": "int_fabric_vlan_11_1",
    "abstract_isis_interface": "isis_interface",
    "abstract_ospf_interface": "ospf_interface_11_1",
    "abstract_pim_interface": "pim_interface",
    "abstract_route_map": "route_map",
    "abstract_bgp": "base_bgp",
    "abstract_bgp_rr": "evpn_bgp_rr",
    "abstract_bgp_neighbor": "evpn_bgp_rr_neighbor",
    "abstract_extra_config_leaf": "extra_config_leaf",
    "abstract_extra_config_spine": "extra_config_spine",
    "abstract_extra_config_tor": "extra_config_tor",
    "abstract_extra_config_bootstrap": "extra_config_bootstrap_11_1",
    "temp_anycast_gateway": "anycast_gateway",
    "temp_vpc_domain_mgmt": "vpc_domain_mgmt",
    "temp_vpc_peer_link": "int_vpc_peer_link_po",
    "abstract_routed_host": "int_routed_host",
    "abstract_trunk_host": "int_trunk_host",
    "UPGRADE_FROM_VERSION": "",
    "TOPDOWN_CONFIG_RM_TRACKING": "",
    "L3VNI_MCAST_GROUP": "",
    "PHANTOM_RP_LB_ID1": "",
    "PHANTOM_RP_LB_ID2": "",
    "PHANTOM_RP_LB_ID3": "",
    "PHANTOM_RP_LB_ID4": "",
    "VPC_PEER_LINK_VLAN": "3600",
    "ENABLE_VPC_PEER_LINK_NATIVE_VLAN": "false",
    "VPC_PEER_KEEP_ALIVE_OPTION": "management",
    "VPC_AUTO_RECOVERY_TIME": "360",
    "VPC_DELAY_RESTORE": "150",
    "VPC_PEER_LINK_PO": "500",
    "VPC_ENABLE_IPv6_ND_SYNC": "true",
    "ADVERTISE_PIP_BGP": "false",
    "ENABLE_FABRIC_VPC_DOMAIN_ID": "false",
    "FABRIC_VPC_DOMAIN_ID": "",
    "FABRIC_VPC_QOS_POLICY_NAME": "",
    "BGP_LB_ID": "0",
    "NVE_LB_ID": "1",
    "ANYCAST_LB_ID": "",
    "LINK_STATE_ROUTING_TAG": "UNDERLAY",
    "OSPF_AUTH_KEY_ID": "",
    "OSPF_AUTH_KEY": "",
    "ISIS_LEVEL": "",
    "ISIS_P2P_ENABLE": false,
    "ISIS_AUTH_ENABLE": false,
    "ISIS_AUTH_KEYCHAIN_NAME": "",
    "ISIS_AUTH_KEYCHAIN_KEY_ID": "",
    "ISIS_AUTH_KEY": "",
    "ISIS_OVERLOAD_ENABLE": false,
    "ISIS_OVERLOAD_ELAPSE_TIME": "",
    "BGP_AUTH_KEY_TYPE": "",
    "BGP_AUTH_KEY": "",
    "PIM_HELLO_AUTH_KEY": "",
    "BFD_IBGP_ENABLE": false,
    "BFD_OSPF_ENABLE": false,
    "BFD_ISIS_ENABLE": false,
    "BFD_PIM_ENABLE": false,
    "BFD_AUTH_ENABLE": false,
    "BFD_AUTH_KEY_ID": "",
    "BFD_AUTH_KEY": "",
    "IBGP_PEER_TEMPLATE": "",
    "IBGP_PEER_TEMPLATE_LEAF": "",
    "default_vrf": "Default_VRF_Universal",
    "default_network": "Default_Network_Universal",
    "vrf_extension_template": "Default_VRF_Extension_Universal",
    "network_extension_template": "Default_Network_Extension_Universal",
    "OVERLAY_MODE": "cli",
    "ENABLE_PVLAN": "false",
    "default_pvlan_sec_network": "",
    "SITE_ID": "",
    "FABRIC_MTU": "9216",
    "L2_HOST_INTF_MTU": "9216",
    "HOST_INTF_ADMIN_STATE": "true",
    "POWER_REDUNDANCY_MODE": "ps-redundant",
    "COPP_POLICY": "strict",
    "HD_TIME": "180",
    "BROWNFIELD_NETWORK_NAME_FORMAT": "Auto_Net_VNI$$VNI$$_VLAN$$VLAN_ID$$",
    "BROWNFIELD_SKIP_OVERLAY_NETWORK_ATTACHMENTS": "false",
    "CDP_ENABLE": "false",
    "ENABLE_NGOAM": "true",
    "ENABLE_TENANT_DHCP": "true",
    "ENABLE_NXAPI": "true",
    "ESR_OPTION": "PBR",
    "ENABLE_PBR": "false",
    "STRICT_CC_MODE": "false",
    "AAA_REMOTE_IP_ENABLED": "false",
    "SNMP_SERVER_HOST_TRAP": "true",
    "ANYCAST_BGW_ADVERTISE_PIP": "false",
    "PTP_LB_ID": "",
    "PTP_DOMAIN_ID": "",
    "MPLS_LB_ID": "",
    "TCAM_ALLOCATION": "true",
    "DEAFULT_QUEUING_POLICY_CLOUDSCALE": "",
    "DEAFULT_QUEUING_POLICY_R_SERIES": "",
    "DEAFULT_QUEUING_POLICY_OTHER": "",
    "ENABLE_MACSEC": "false",
    "MACSEC_KEY_STRING": "",
    "MACSEC_ALGORITHM": "",
    "MACSEC_FALLBACK_KEY_STRING": "",
    "MACSEC_FALLBACK_ALGORITHM": "",
    "MACSEC_CIPHER_SUITE": "",
    "MACSEC_REPORT_TIMER": "",
    "STP_ROOT_OPTION": "unmanaged",
    "STP_VLAN_RANGE": "",
    "MST_INSTANCE_RANGE": "",
    "STP_BRIDGE_PRIORITY": "",
    "EXTRA_CONF_LEAF": "",
    "EXTRA_CONF_SPINE": "",
    "EXTRA_CONF_TOR": "",
    "EXTRA_CONF_INTRA_LINKS": "",
    "STATIC_UNDERLAY_IP_ALLOC": "false",
    "MPLS_LOOPBACK_IP_RANGE": "",
    "LOOPBACK0_IPV6_RANGE": "",
    "LOOPBACK1_IPV6_RANGE": "",
    "V6_SUBNET_RANGE": "",
    "ROUTER_ID_RANGE": "",
    "L2_SEGMENT_ID_RANGE": "30000-49000",
    "L3_PARTITION_ID_RANGE": "50000-59000",
    "NETWORK_VLAN_RANGE": "2300-2999",
    "VRF_VLAN_RANGE": "2000-2299",
    "SUBINTERFACE_RANGE": "2-511",
    "VRF_LITE_AUTOCONFIG": "Manual",
    "AUTO_SYMMETRIC_VRF_LITE": false,
    "AUTO_VRFLITE_IFC_DEFAULT_VRF": false,
    "AUTO_SYMMETRIC_DEFAULT_VRF": false,
    "DEFAULT_VRF_REDIS_BGP_RMAP": "",
    "DCI_SUBNET_RANGE": "10.33.0.0/16",
    "DCI_SUBNET_TARGET_MASK": "30",
    "AUTO_UNIQUE_VRF_LITE_IP_PREFIX": "false",
    "PER_VRF_LOOPBACK_AUTO_PROVISION": "false",
    "PER_VRF_LOOPBACK_IP_RANGE": "",
    "SLA_ID_RANGE": "10000-19999",
    "OBJECT_TRACKING_NUMBER_RANGE": "100-299",
    "SERVICE_NETWORK_VLAN_RANGE": "3000-3199",
    "ROUTE_MAP_SEQUENCE_NUMBER_RANGE": "1-65534",
    "DNS_SERVER_IP_LIST": "",
    "DNS_SERVER_VRF": "",
    "NTP_SERVER_IP_LIST": "",
    "NTP_SERVER_VRF": "",
    "SYSLOG_SERVER_IP_LIST": "",
    "SYSLOG_SEV": "",
    "SYSLOG_SERVER_VRF": "",
    "AAA_SERVER_CONF": "",
    "BANNER": "",
    "BOOTSTRAP_ENABLE": "false",
    "DHCP_ENABLE": false,
    "DHCP_IPV6_ENABLE": "",
    "DHCP_START": "",
    "DHCP_END": "",
    "MGMT_GW": "",
    "MGMT_PREFIX": "",
    "MGMT_V6PREFIX": "",
    "BOOTSTRAP_MULTISUBNET": "",
    "SEED_SWITCH_CORE_INTERFACES": "",
    "SPINE_SWITCH_CORE_INTERFACES": "",
    "INBAND_DHCP_SERVERS": "",
    "UNNUM_BOOTSTRAP_LB_ID": "",
    "UNNUM_DHCP_START": "",
    "UNNUM_DHCP_END": "",
    "ENABLE_AAA": false,
    "BOOTSTRAP_CONF": "",
    "enableRealTimeBackup": "",
    "enableScheduledBackup": "",
    "scheduledTime": "",
    "NETFLOW_EXPORTER_LIST": "",
    "NETFLOW_RECORD_LIST": "",
    "NETFLOW_MONITOR_LIST": "",
    "FABRIC_INTERFACE_TYPE": "p2p",
    "SUBNET_TARGET_MASK": "30",
    "REPLICATION_MODE": "Multicast",
    "ADVERTISE_PIP_ON_BORDER": "true",
    "VPC_DOMAIN_ID_RANGE": "1-1000",
    "FABRIC_VPC_QOS": "false",
    "OSPF_AREA_ID": "0.0.0.0",
    "OSPF_AUTH_ENABLE": "false",
    "BGP_AUTH_ENABLE": "false",
    "BFD_ENABLE": "false",
    "NXAPI_HTTPS_PORT": "443",
    "ENABLE_NXAPI_HTTP": "true",
    "GRFIELD_DEBUG_FLAG": "Disable",
    "FEATURE_PTP": "false",
    "MPLS_HANDOFF": "false",
    "ENABLE_DEFAULT_QUEUING_POLICY": "false",
    "LOOPBACK0_IP_RANGE": "10.2.0.0/22",
    "LOOPBACK1_IP_RANGE": "10.3.0.0/22",
    "SUBNET_RANGE": "10.4.0.0/16",
    "INBAND_MGMT": "false",
    "ENABLE_NETFLOW": "false",
    "MULTICAST_GROUP_SUBNET": "239.1.1.0/25",
    "ENABLE_TRM": "false",
    "RP_COUNT": "2",
    "RP_MODE": "asm",
    "RP_LB_ID": "254",
    "PIM_HELLO_AUTH_ENABLE": "false",
    "NXAPI_HTTP_PORT": "80",
    "ANYCAST_RP_IP_RANGE": "10.254.254.0/24"
  }
}
mikewiebe commented 6 months ago

The dcnm_fabric module has now been patched into netascode_changes_vpc_fabric branch in the dcnm collection.

To pick up the changes do the following:

Here are some notes about the dcnm_fabric module.

Sample playbooks with the module:

State: Merged

---
-   hosts: ndfc
    gather_facts: false
    check_mode: false
    tasks:
        - cisco.dcnm.dcnm_fabric:
            state: merged
            config:
            -   FABRIC_NAME: IR-Fabric
                FABRIC_TYPE: VXLAN_EVPN
                DEPLOY: true
                BGP_AS: 65535.65535
                REPLICATION_MODE: Ingress
                ADVERTISE_PIP_BGP: true
                ENABLE_SGT: false
                OVERWRITE_GLOBAL_NXC: true
                ANYCAST_GW_MAC: 00:ff:ee:dd:cc:bb
            -   FABRIC_NAME: MC-Fabric
                FABRIC_TYPE: VXLAN_EVPN
                DEPLOY: true
                BGP_AS: 65535.0
                ANYCAST_GW_MAC: 00ffeeddccbb
            -   FABRIC_NAME: AS_Plain
                FABRIC_TYPE: VXLAN_EVPN
                DEPLOY: true
                BGP_AS: 4294967295
                ANYCAST_GW_MAC: 00ff.eedd.ccbb
                PM_ENABLE: true
          register: result
        -   debug:
                var: result 

State Deleted:

---
-   hosts: ndfc
    gather_facts: false
    tasks:
        - cisco.dcnm.dcnm_fabric:
            state: deleted
            config:
            -   fabric_name: MC-Fabric
            -   fabric_name: IR-Fabric
            -   fabric_name: AS_Plain
          register: result
        -   debug:
                var: result 

State: Query

---
-   hosts: ndfc
    gather_facts: false
    tasks:
        - cisco.dcnm.dcnm_fabric:
            state: query
            config:
            -   fabric_name: IR-Fabric
            -   fabric_name: MC-Fabric
            -   fabric_name: AS_Plain
          register: result
        -   debug:
                var: result 
devegupt commented 6 months ago

@mikewiebe I have created a PR for this which has Query Fabric and Created Fabric both updated to support the dcnm_fabric module. Also did some update on the fabric_check.py ActionPlugin to support the query response from dcnm_fabric.

I have a query on this point in your last comment: "This does not include the dynamic template mapping get for mutually exclusive group checks but the module interface will not change so you can go ahead and start integration with it in the fabric creation section."

Query: Are we planning to handle the mutually exclusive values in the modules itself or should we write some rules OR handle those in the Jinja2 itself, please suggest?

devegupt commented 5 months ago

Closing this as PR is merged. https://github.com/netascode/ansible-dc-vxlan/pull/63