mikewiebe.ndfc.dcnm_links (2.1.3) — module

DCNM ansible module for managing Links.

| "added in version" 2.1.0 of mikewiebe.ndfc"

Authors: Mallik Mudigonda (@mmudigon)

Install collection

Install with ansible-galaxy collection install mikewiebe.ndfc:==2.1.3


Add to requirements.yml

  collections:
    - name: mikewiebe.ndfc
      version: 2.1.3

Description

DCNM ansible module for creating, modifying, deleting and querying Links

Usage examples

  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.

# States:
# This module supports the following states:
#
# Merged:
#   Links defined in the playbook will be merged into the target fabric.
#
#   The links listed in the playbook will be created if not already present on the DCNM
#   server. If the link is already present and the configuration information included
#   in the playbook is either different or not present in DCNM, then the corresponding
#   information is added to the link on DCNM. If a link mentioned in playbook
#   is already present on DCNM and there is no difference in configuration, no operation
#   will be performed for such link.
#
# Replaced:
#   Links defined in the playbook will be replaced in the target fabric.
#
#   The state of the links listed in the playbook will serve as source of truth for the
#   same links present on the DCNM under the fabric mentioned. Additions and updations
#   will be done to bring the DCNM links to the state listed in the playbook.
#   Note: Replace will only work on the links mentioned in the playbook.
#
# Deleted:
#   Links defined in the playbook will be deleted in the target fabric.
#
#   WARNING: Deleting a Link will deploy all pending configurations on the impacted switches
#
# Query:
#   Returns the current DCNM state for the links listed in the playbook. Information included
#    in the playbook will be used as filters to get the desired output.
#
# CREATE LINKS
#
# NUMBERED FABRIC
#
# INTRA-FABRIC

    - name: Create Links
      cisco.dcnm.dcnm_links:
        state: merged                                            # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_num_fabric"
        config:
          - dst_fabric: "ansible_num_fabric"                     # Destination fabric
            src_interface: "Ethernet1/1"                         # Interface on the Source fabric
            dst_interface: "Ethernet1/1"                         # Interface on the Destination fabric
            src_device: 193.168.1.1                              # Device on the Source fabric
            dst_device: 193.168.1.2                              # Device on the Destination fabric
            template: int_intra_fabric_num_link                  # template to be applied, choose from
                                                                 #   [ int_intra_fabric_ipv6_link_local, int_intra_fabric_num_link,
                                                                 #     int_intra_fabric_unnum_link, int_intra_vpc_peer_keep_alive_link,
                                                                 #     int_pre_provision_intra_fabric_link, ios_xe_int_intra_fabric_num_link ]

            profile:
              peer1_ipv4_addr: 192.168.1.1                       # IP address of the Source interface
              peer2_ipv4_addr: 192.168.1.2                       # IP address of the Destination interface
              admin_state: true                                  # choose from [true, false]
              mtu: 9216                                          #
              peer1_description: "Description of source"         # optional, default is ""
              peer2_description: "Description of dest"           # optional, default is ""
              peer1_bfd_echo_disable: false                      # optional, choose from [true, false]
              peer2_bfd_echo_disable: false                      # optional, choose from [true, false]
              enable_macsec: false                               # optional, choose from [true, false]
              peer1_cmds:                                        # Freeform config for source device
                - no shutdown                                    # optional, default is ""
              peer2_cmds:                                        # Freeform config for destination device
                - no shutdown                                    # optional, default is ""

          - dst_fabric: "ansible_num_fabric"                     # Destination fabric
            src_interface: "Ethernet1/2"                         # Interface on the Source fabric
            dst_interface: "Ethernet1/2"                         # Interface on the Destination fabric
            src_device: 193.168.1.1                              # Device on the Source fabric
            dst_device: 193.168.1.2                              # Device on the Destination fabric
            template: int_pre_provision_intra_fabric_link        # template to be applied, choose from
                                                                 #   [ int_intra_fabric_ipv6_link_local, int_intra_fabric_num_link,
                                                                 #     int_intra_fabric_unnum_link, int_intra_vpc_peer_keep_alive_link,
                                                                 #     int_pre_provision_intra_fabric_link, ios_xe_int_intra_fabric_num_link ]
          - dst_fabric: "ansible_num_fabric"                     # Destination fabric
            src_interface: "Ethernet1/3"                         # Interface on the Source fabric
            dst_interface: "Ethernet1/3"                         # Interface on the Destination fabric
            src_device: 193.168.1.1                              # Device on the Source fabric
            dst_device: 193.168.1.2                              # Device on the Destination fabric
            template: ios_xe_int_intra_fabric_num_link           # template to be applied, choose from
                                                                 #   [ int_intra_fabric_ipv6_link_local, int_intra_fabric_num_link,
                                                                 #     int_intra_fabric_unnum_link, int_intra_vpc_peer_keep_alive_link,
                                                                 #     int_pre_provision_intra_fabric_link, ios_xe_int_intra_fabric_num_link ]

            profile:
              peer1_ipv4_addr: 192.169.2.1                       # IPV4 address of the Source interface
              peer2_ipv4_addr: 192.169.2.2                       # IPV4 address of the Destination interface
              peer1_ipv6_addr: fe80:01::01                       # optional, default is ""
              peer2_ipv6_addr: fe80:01::02                       # optional, default is ""
              admin_state: true                                  # choose from [true, false]
              mtu: 1500                                          # optional, default is 1500
              peer1_description: "Description of source"         # optional, default is ""
              peer2_description: "Description of dest"           # optional, default is ""
              peer1_bfd_echo_disable: false                      # optional, choose from [true, false]
              peer2_bfd_echo_disable: false                      # optional, choose from [true, false]
              enable_macsec: false                               # optional, choose from [true, false]
              peer1_cmds:                                        # Freeform config for source device
                - no shutdown                                    # optional, default is ""
              peer2_cmds:                                        # Freeform config for destination device
                - no shutdown                                    # optional, default is ""
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
#
# INTER-FABRIC

    - name: Create Links including optional parameters
      cisco.dcnm.dcnm_links: &links_merge_with_opt
        state: merged                                            # choose from [merged, replaced, deleted, query]
        src_fabric: "{{ ansible_num_fabric }}"
        config:
          - dst_fabric: "{{ ansible_unnum_fabric }}"             # Destination fabric
            src_interface: "{{ intf_1_3 }}"                      # Interface on the Source fabric
            dst_interface: "{{ intf_1_3 }}"                      # Interface on the Destination fabric
            src_device: "{{ ansible_num_switch1 }}"              # Device on the Source fabric
            dst_device: "{{ ansible_unnum_switch1 }}"            # Device on the Destination fabric
            template: ext_fabric_setup                           # template to be applied, choose from
                                                                 #   [ ext_fabric_setup, ext_multisite_underlay_setup,
                                                                 #     ext_evpn_multisite_overlay_setup ]
            profile:
              ipv4_subnet: 193.168.1.1/24                        # IP address of interface in src fabric with mask
              neighbor_ip: 193.168.1.2                           # IP address of the interface in dst fabric
              src_asn: 1000                                      # BGP ASN in source fabric
              dst_asn: 1001                                      # BGP ASN in destination fabric
              mtu: 9216                                          #
              auto_deploy: false                                 # optional, default is false
                                                                 # Flag that controls auto generation of neighbor VRF Lite configuration
              peer1_description: "Description of source"         # optional, default is ""
              peer2_description: "Description of dest"           # optional, default is ""
              peer1_cmds:                                        # Freeform config for source interface
                - no shutdown                                    # optional, default is ""
              peer2_cmds:                                        # Freeform config for destination interface
                - no shutdown                                    # optional, default is ""

          - dst_fabric: "{{ ansible_unnum_fabric }}"             # Destination fabric
            src_interface: "{{ intf_1_4 }}"                      # Interface on the Source fabric
            dst_interface: "{{ intf_1_4 }}"                      # Interface on the Destination fabric
            src_device: "{{ ansible_num_switch1 }}"              # Device on the Source fabric
            dst_device: "{{ ansible_unnum_switch1 }}"            # Device on the Destination fabric
            template: ext_multisite_underlay_setup               # template to be applied, choose from
                                                                 #   [ ext_fabric_setup, ext_multisite_underlay_setup,
                                                                 #     ext_evpn_multisite_overlay_setup ]
            profile:
              ipv4_subnet: 193.168.2.1/24                        # IP address of interface in src fabric with mask
              neighbor_ip: 193.168.2.2                           # IP address of the interface in dst fabric
              src_asn: 1200                                      # BGP ASN in source fabric
              dst_asn: 1201                                      # BGP ASN in destination fabric
              mtu: 9216                                          #
              deploy_dci_tracking: false                         # optional, default is false
              max_paths: 1                                       # optional, default is 1
              route_tag: 12345                                   # optional, optional is ""
              ebgp_password_enable: true                         # optional, default is true
              ebgp_password: 0102030405                          # optional, required only if ebgp_password_enable flag is true, and inherit_from_msd
                                                                 # is false.
              inherit_from_msd: True                             # optional, required only if ebgp_password_enable flag is true, default is false
              ebgp_auth_key_type: 3                              # optional, required only if ebpg_password_enable is true, and inherit_from_msd
                                                                 # is false. Default is 3
                                                                 # choose from [3 - 3DES, 7 - Cisco ]
              peer1_description: "Description of source"         # optional, default is ""
              peer2_description: "Description of dest"           # optional, default is ""
              peer1_cmds:                                        # Freeform config for source interface
                - no shutdown                                    # optional, default is ""
              peer2_cmds:                                        # Freeform config for destination interface
                - no shutdown                                    # optional, default is ""

          - dst_fabric: "{{ ansible_unnum_fabric }}"             # Destination fabric
            src_interface: "{{ intf_1_5 }}"                      # Interface on the Source fabric
            dst_interface: "{{ intf_1_5 }}"                      # Interface on the Destination fabric
            src_device: "{{ ansible_num_switch1 }}"              # Device on the Source fabric
            dst_device: "{{ ansible_unnum_switch1 }}"            # Device on the Destination fabric
            template: ext_evpn_multisite_overlay_setup           # template to be applied, choose from
                                                                 #   [ ext_fabric_setup, ext_multisite_underlay_setup,
                                                                 #     ext_evpn_multisite_overlay_setup ]
            profile:
              ipv4_addr: 193.168.3.1                             # IP address of interface in src fabric
              neighbor_ip: 193.168.3.2                           # IP address of the interface in dst fabric
              src_asn: 1300                                      # BGP ASN in source fabric
              dst_asn: 1301                                      # BGP ASN in destination fabric
              trm_enabled: false                                 # optional, default is false
              bgp_multihop: 5                                    # optional, default is 5
              ebgp_password_enable: true                         # optional, default is true
              ebgp_password: 0102030405                          # optional, required only if ebgp_password_enable flag is true, and inherit_from_msd
                                                                 # is false. Default is 3
              inherit_from_msd: false                            # optional, required only if ebgp_password_enable flag is true, default is false
              ebpg_auth_key_type: 3                              # optional, required only if ebpg_password_enable is true, and inherit_from_msd
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
                                                                 # is false. Default is 3
                                                                 # choose from [3 - 3DES, 7 - Cisco ]

# FABRIC WITH VPC PAIRED SWITCHES

    - name: Create Links
      cisco.dcnm.dcnm_links:
        state: merged                                            # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_vpc_fabric"
        config:
          - dst_fabric: "ansible_vpc_fabric"                     # Destination fabric
            src_interface: "Ethernet1/4"                         # Interface on the Source fabric
            dst_interface: "Ethernet1/4"                         # Interface on the Destination fabric
            src_device: "ansible_vpc_switch1"                    # Device on the Source fabric
            dst_device: "ansible_vpc_switch2"                    # Device on the Destination fabric
            template: int_intra_vpc_peer_keep_alive_link         # template to be applied, choose from
                                                                 #   [ int_intra_fabric_ipv6_link_local, int_intra_fabric_num_link,
                                                                 #     int_intra_fabric_unnum_link, int_intra_vpc_peer_keep_alive_link,
                                                                 #     int_pre_provision_intra_fabric_link, ios_xe_int_intra_fabric_num_link ]

            profile:
              peer1_ipv4_addr: 192.170.1.1                       # IPV4 address of the Source interface
              peer2_ipv4_addr: 192.170.1.2                       # IPV4 address of the Destination interface
              peer1_ipv6_addr: fe80:2a::01                       # optional, default is ""
              peer2_ipv6_addr: fe80:2a::02                       # optional, default is ""
              admin_state: true                                  # choose from [true, false]
              mtu: 9216                                          #
              peer1_description: "Description of source"         # optional, default is ""
              peer2_description: "Description of dest"           # optional, default is ""
              enable_macsec: false                               # optional, choose from [true, false]
              peer1_cmds:                                        # Freeform config for source device
                - no shutdown                                    # optional, default is ""
              peer2_cmds:                                        # Freeform config for destination device
                - no shutdown                                    # optional, default is ""
              intf_vrf: "test_vrf"                               # optional, default is ""
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# UNNUMBERED FABRIC

    - name: Create Links
      cisco.dcnm.dcnm_links:
        state: merged                                            # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_unnum_fabric"
        config:
          - dst_fabric: "ansible_unnum_fabric"                   # Destination fabric
            src_interface: "Ethernet1/1"                         # Interface on the Source fabric
            dst_interface: "Ethernet1/1"                         # Interface on the Destination fabric
            src_device: "ansible_unnum_switch1"                  # Device on the Source fabric
            dst_device: "ansible_unnum_switch2"                  # Device on the Destination fabric
            template: int_intra_fabric_unnum_link                # template to be applied, choose from
                                                                 #   [ int_intra_fabric_ipv6_link_local, int_intra_fabric_num_link,
                                                                 #     int_intra_fabric_unnum_link, int_intra_vpc_peer_keep_alive_link,
                                                                 #     int_pre_provision_intra_fabric_link, ios_xe_int_intra_fabric_num_link ]

            profile:
              admin_state: true                                  # choose from [true, false]
              mtu: 9216                                          #
              peer1_description: "Description of source"         # optional, default is ""
              peer2_description: "Description of dest"           # optional, default is ""
              enable_macsec: false                               # optional, choose from [true, false]
              peer1_cmds:                                        # Freeform config for source device
                - no shutdown                                    # optional, default is ""
              peer2_cmds:                                        # Freeform config for destination device
                - no shutdown                                    # optional, default is ""

          - dst_fabric: "ansible_unnum_fabric"                   # Destination fabric
            src_interface: "Ethernet1/2"                         # Interface on the Source fabric
            dst_interface: "Ethernet1/2"                         # Interface on the Destination fabric
            src_device: "ansible_unnum_switch1"                  # Device on the Source fabric
            dst_device: "ansible_unnum_switch2"                  # Device on the Destination fabric
            template: int_pre_provision_intra_fabric_link        # template to be applied, choose from
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
                                                                 #   [ int_intra_fabric_ipv6_link_local, int_intra_fabric_num_link,
                                                                 #     int_intra_fabric_unnum_link, int_intra_vpc_peer_keep_alive_link,
                                                                 #     int_pre_provision_intra_fabric_link, ios_xe_int_intra_fabric_num_link ]

# IPV6 UNDERLAY FABRIC

    - name: Create Links
      cisco.dcnm.dcnm_links:
        state: merged                                            # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_ipv6_fabric"
        config:
          - dst_fabric: "ansible_ipv6_fabric"                    # Destination fabric
            src_interface: "Ethernet1/1"                         # Interface on the Source fabric
            dst_interface: "Ethernet1/1"                         # Interface on the Destination fabric
            src_device: "ansible_ipv6_switch1"                   # Device on the Source fabric
            dst_device: "ansible_ipv6_switch2"                   # Device on the Destination fabric
            template: int_intra_fabric_ipv6_link_local           # template to be applied, choose from
                                                                 #   [ int_intra_fabric_ipv6_link_local, int_intra_fabric_num_link,
                                                                 #     int_intra_fabric_unnum_link, int_intra_vpc_peer_keep_alive_link,
                                                                 #     int_pre_provision_intra_fabric_link, ios_xe_int_intra_fabric_num_link ]

            profile:
              peer1_ipv4_addr: 192.169.1.1                       # optional, default is ""
              peer2_ipv4_addr: 192.169.1.2                       # optional, default is ""
              peer1_ipv6_addr: fe80:0201::01                     # IP address of the Source interface
              peer2_ipv6_addr: fe80:0201::02                     # IP address of the Source interface
              admin_state: true                                  # choose from [true, false]
              mtu: 9216                                          #
              peer1_description: "Description of source"         # optional, default is ""
              peer2_description: "Description of dest"           # optional, default is ""
              peer1_bfd_echo_disable: false                      # optional, choose from [true, false]
              peer2_bfd_echo_disable: false                      # optional, choose from [true, false]
              enable_macsec: false                               # optional, choose from [true, false]
              peer1_cmds:                                        # Freeform config for source device
                - no shutdown                                    # optional, default is ""
              peer2_cmds:                                        # Freeform config for destination device
                - no shutdown                                    # optional, default is ""

          - dst_fabric: "ansible_ipv6_fabric"                    # Destination fabric
            src_interface: "Ethernet1/2"                         # Interface on the Source fabric
            dst_interface: "Ethernet1/2"                         # Interface on the Destination fabric
            src_device: "ansible_ipv6_switch1"                   # Device on the Source fabric
            dst_device: "ansible_ipv6_switch2"                   # Device on the Destination fabric
            template: int_pre_provision_intra_fabric_link        # template to be applied, choose from
                                                                 #   [ int_intra_fabric_ipv6_link_local, int_intra_fabric_num_link,
                                                                 #     int_intra_fabric_unnum_link, int_intra_vpc_peer_keep_alive_link,
                                                                 #     int_pre_provision_intra_fabric_link, ios_xe_int_intra_fabric_num_link ]
          - dst_fabric: "ansible_ipv6_fabric"                    # Destination fabric
            src_interface: "Ethernet1/3"                         # Interface on the Source fabric
            dst_interface: "Ethernet1/3"                         # Interface on the Destination fabric
            src_device: "ansible_ipv6_switch1"                   # Device on the Source fabric
            dst_device: "ansible_ipv6_switch2"                   # Device on the Destination fabric
            template: int_intra_fabric_num_link                  # template to be applied, choose from
                                                                 #   [ int_intra_fabric_ipv6_link_local, int_intra_fabric_num_link,
                                                                 #     int_intra_fabric_unnum_link, int_intra_vpc_peer_keep_alive_link,
                                                                 #     int_pre_provision_intra_fabric_link, ios_xe_int_intra_fabric_num_link ]

            profile:
              peer1_ipv4_addr: 192.169.2.1                       # IPV4 address of the Source interface
              peer2_ipv4_addr: 192.169.2.2                       # IPV4 address of the Destination interface
              peer1_ipv6_addr: fe80:0202::01                     # IP address of the Source interface
              peer2_ipv6_addr: fe80:0202::02                     # IP address of the Source interface
              admin_state: true                                  # choose from [true, false]
              mtu: 1500                                          # optional, default is 1500
              peer1_description: "Description of source"         # optional, default is ""
              peer2_description: "Description of dest"           # optional, default is ""
              peer1_bfd_echo_disable: false                      # optional, choose from [true, false]
              peer2_bfd_echo_disable: false                      # optional, choose from [true, false]
              enable_macsec: false                               # optional, choose from [true, false]
              peer1_cmds:                                        # Freeform config for source device
                - no shutdown                                    # optional, default is ""
              peer2_cmds:                                        # Freeform config for destination device
                - no shutdown                                    # optional, default is ""
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# DELETE LINKS

    - name: Delete Links
      cisco.dcnm.dcnm_links:
        state: deleted                                           # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_num_fabric"
        config:
          - dst_fabric: "ansible_num_fabric"                     # Destination fabric
            src_interface: "Ethernet1/1"                         # Interface on the Source fabric
            dst_interface: "Ethernet1/1"                         # Interface on the Destination fabric
            src_device: 193.168.1.1                              # Device on the Source fabric
            dst_device: 193.168.1.2                              # Device on the Destination fabric
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# QUERY LINKS

    - name: Query Links - with Src Fabric
      cisco.dcnm.dcnm_links:
        state: query                                             # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_num_fabric"
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
    - name: Query Links - with Src & Dst Fabric
      cisco.dcnm.dcnm_links:
        state: query                                             # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_num_fabric"
        config:
          - dst_fabric: "ansible_num_fabric"                     # optional, Destination fabric
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
    - name: Query Links - with Src & Dst Fabric, Src Intf
      cisco.dcnm.dcnm_links:
        state: query                                             # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_num_fabric"
        config:
          - dst_fabric: "ansible_num_fabric"                     # optional, Destination fabric
            src_interface: "Ethernet1/1"                         # optional, Interface on the Source fabric
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
    - name: Query Links - with Src & Dst Fabric, Src & Dst Intf
      cisco.dcnm.dcnm_links:
        state: query                                             # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_num_fabric"
        config:
          - dst_fabric: "ansible_num_fabric"                     # optional, Destination fabric
            src_interface: "Ethernet1/1"                         # optional, Interface on the Source fabric
            dst_interface: "Ethernet1/1"                         # optional, Interface on the Destination fabric
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
    - name: Query Links - with Src & Dst Fabric, Src & Dst Intf, Src Device
      cisco.dcnm.dcnm_links:
        state: query                                             # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_num_fabric"
        config:
          - dst_fabric: "ansible_num_fabric"                     # optional, Destination fabric
            src_interface: "Ethernet1/1"                         # optional, Interface on the Source fabric
            dst_interface: "Ethernet1/1"                         # optional, Interface on the Destination fabric
            src_device: 193.168.1.1                              # optional, Device on the Source fabric
      register: result
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
    - assert:
        that:
          '(result["response"] | length) >= 1'
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
    - name: Query Links - with Src & Dst Fabric, Src & Dst Intf, Src & Dst Device
      cisco.dcnm.dcnm_links:
        state: query                                             # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_num_fabric"
        config:
          - dst_fabric: "ansible_num_fabric"                     # optional, Destination fabric
            src_interface: "Ethernet1/1"                         # optional, Interface on the Source fabric
            dst_interface: "Ethernet1/1"                         # optional, Interface on the Destination fabric
            src_device: 193.168.1.1                              # optional, Device on the Source fabric
            dst_device: 193.168.1.2                              # optional, Device on the Destination fabric
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
 #
 # INTRA-FABRIC
 #
    - name: Query Links - with Src & Dst Fabric, Src & Dst Intf, Src & Dst Device, Template
      cisco.dcnm.dcnm_links:
        state: query                                             # choose from [merged, replaced, deleted, query]
        src_fabric: "ansible_num_fabric"
        config:
          - dst_fabric: "ansible_num_fabric"                     # optional, Destination fabric
            src_interface: "Ethernet1/1"                         # optional, Interface on the Source fabric
            dst_interface: "Ethernet1/1"                         # optional, Interface on the Destination fabric
            src_device: 193.168.1.1                              # optional, Device on the Source fabric
            dst_device: 193.168.1.2                              # optional, Device on the Destination fabric
            template: int_intra_fabric_num_link                  # optional, template to be applied, choose from
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
                                                                 #   [ int_intra_fabric_ipv6_link_local, int_intra_fabric_num_link,
                                                                 #     int_intra_fabric_unnum_link, int_intra_vpc_peer_keep_alive_link,
                                                                 #     int_pre_provision_intra_fabric_link, ios_xe_int_intra_fabric_num_link ]
#
# INTER-FABRIC
#
    - name: Query Links - with Src & Dst Fabric, Src & Dst Intf, Src & Dst Device, Template
      cisco.dcnm.dcnm_links:
        state: query                                             # choose from [merged, replaced, deleted, query]
        src_fabric: "{{ ansible_num_fabric }}"
        config:
          - dst_fabric: "{{ ansible_ipv6_fabric }}"              # optional, Destination fabric
            src_interface: "{{ intf_1_6 }}"                      # optional, Interface on the Source fabric
            dst_interface: "{{ intf_1_6 }}"                      # optional, Interface on the Destination fabric
            src_device: "{{ ansible_num_switch1 }}"              # optional, Device on the Source fabric
            dst_device: "{{ ansible_ipv6_switch1 }}"             # optional, Device on the Destination fabric
            template: ext_fabric_setup                           # optional, template to be applied, choose from

Inputs

    
state:
    choices:
    - merged
    - replaced
    - deleted
    - query
    default: merged
    description:
    - The required state of the configuration after module completion.
    required: false
    type: str

config:
    description:
    - A list of dictionaries containing Links information.
    elements: dict
    suboptions:
      dst_device:
        description:
        - IP address or DNS name of the destination switch which is part of the link being
          configured.
        required: true
        type: str
      dst_fabric:
        description:
        - Name of the destination fabric. If this is same as 'src_fabric' then the link
          is considered intra-fabric link. If this parameter is different from 'src_fabric',
          then the link is considered inter-fabric link.
        required: true
        type: str
      dst_interface:
        description:
        - Interface on the destination device which is part of the link being configured.
        required: true
        type: str
      profile:
        description:
        - Additional link related parameters that must be included while creating links.
        suboptions:
          admin_state:
            description:
            - Admin state of the link.
            - This parameter is not required if template is 'ext_evpn_multisite_overlay_setup',
              'ext_multisite_underlay_setup', and 'ext_fabric_setup'.
            required: true
            type: bool
          auto_deploy:
            description:
            - Flag that controls auto generation of neighbor VRF Lite configuration for
              managed neighbor devices.
            - This parameter is required only if template is 'ext_fabric_setup'.
            required: true
            type: str
          bgp_multihop:
            default: 5
            description:
            - eBGP Time-To-Live Value for Remote Peer.
            - This parameter is required only if template is 'ext_evpn_multisite_overlay_setup'.
            required: false
            type: int
          deploy_dci_tracking:
            default: false
            description:
            - Flag to enable deploy DCI tracking.
            - This parameter is required only if template is 'ext_multisite_underlay_setup'.
            - This parameter MUST be included only if the fabrics are part of multisite.
            required: false
            type: bool
          dst_asn:
            description:
            - BGP ASN number on the destination fabric.
            - This parameter is required only if template is 'ext_fabric_setup' or 'ext_multisite_underlay_setup'.
              or "ext_evpn_multisite_overlay_setup"
            required: true
            type: str
          ebgp_auth_key_type:
            choices:
            - 3 (3DES)
            - 7 (Cisco)
            description:
            - BGP Key Encryption Type.
            - This parameter is required only if template is 'ext_multisite_underlay_setup'
              or 'ext_evpn_multisite_overlay_setup'.
            - This parameter is required only if inherit_from_msd is false.
            required: true
            type: int
          ebgp_password:
            description:
            - Encrypted eBGP Password Hex String.
            - This parameter is required only if template is 'ext_multisite_underlay_setup'
              or 'ext_evpn_multisite_overlay_setup'.
            - This parameter is required only if inherit_from_msd is false.
            required: true
            type: str
          ebgp_password_enable:
            default: true
            description:
            - Flag to enable eBGP password.
            - This parameter is required only if template is 'ext_multisite_underlay_setup'
              or 'ext_evpn_multisite_overlay_setup'.
            required: false
            type: bool
          enable_macsec:
            default: false
            description:
            - Enable MACsec on the link.
            - This parameter is applicable only if MACsec feature is enabled on the fabric.
            - This parameter is applicable only if template is 'int_intra_fabric_ipv6_link_local'
              or 'int_intra_fabric_num_link' or 'int_intra_fabric_unnum_link'.
            required: false
            type: bool
          inherit_from_msd:
            default: true
            description:
            - Flag indicating whether to inherit BGP password from MSD information.
            - Applicable only when source and destination fabric are in the same MSD fabric.
            - This parameter is required only if template is 'ext_multisite_underlay_setup'
              or 'ext_evpn_multisite_overlay_setup'
            required: false
            type: bool
          intf_vrf:
            default: ''
            description:
            - Name of the non-default VRF for the link.
            - Make sure to configure the VRF before using it here.
            - This parameter is applicable only if template is 'int_intra_vpc_peer_keep_alive_link'.
            required: false
            type: str
          ipv4_address:
            description:
            - IPV4 address of the source interface without mask.
            - This parameter is required only if template is 'ext_evpn_multisite_overlay_setup'.
            required: true
            type: str
          ipv4_subnet:
            description:
            - IPV4 address of the source interface with mask.
            - This parameter is required only if template is 'ext_fabric_setup' or 'ext_multisite_underlay_setup'.
            required: true
            type: str
          max_paths:
            default: 1
            description:
            - Maximum number of iBGP/eBGP paths.
            - This parameter is required only if template is 'ext_multisite_underlay_setup'.
            required: false
            type: int
          mtu:
            description:
            - MTU of the link.
            - This parameter is optional if template is 'ios_xe_int_intra_fabric_num_link'.
              The default value in this case will be 1500.
            - This parameter is not required if template is 'ext_evpn_multisite_overlay_setup'.
            required: true
            type: int
          neighbor_ip:
            description:
            - IPV4 address of the neighbor switch on the destination fabric.
            - This parameter is required only if template is 'ext_fabric_setup' or 'ext_multisite_underlay_setup'
              or "ext_evpn_multisite_overlay_setup"
            required: true
            type: str
          peer1_bfd_echo_disable:
            default: false
            description:
            - Enable BFD echo on the source interface. Only applicable if BFD is enabled
              on the fabric.
            - This parameter is applicable only if template is 'int_intra_fabric_num_link'.
            required: false
            type: bool
          peer1_cmds:
            default: []
            description:
            - Commands to be included in the configuration under the source interface.
            - This parameter is not required if template is  'ext_evpn_multisite_overlay_setup'.
            required: false
            type: list
          peer1_description:
            default: ''
            description:
            - Description of the source interface.
            - This parameter is not required if template is 'ext_evpn_multisite_overlay_setup'.
            required: false
            type: str
          peer1_ipv4_address:
            description:
            - IPV4 address of the source interface.
            - This parameter is optional if the underlying fabric is ipv6 enabled.
            - This parameter is required only if template is 'int_intra_fabric_num_link'
              or 'ios_xe_int_intra_fabric_num_link' or 'int_intra_vpc_peer_keep_alive_link'.
            required: true
            type: str
          peer1_ipv6_address:
            default: ''
            description:
            - IPV6 address of the source interface.
            - This parameter is required only if the underlying fabric is ipv6 enabled.
            - This parameter is required only if template is 'int_intra_fabric_num_link'
              or 'ios_xe_int_intra_fabric_num_link' or 'int_intra_vpc_peer_keep_alive_link'.
            required: false
            type: str
          peer2_bfd_echo_disable:
            default: false
            description:
            - Enable BFD echo on the destination interface. Only applicable if BFD is
              enabled on the fabric.
            - This parameter is applicable only if template is 'int_intra_fabric_num_link'.
            required: false
            type: bool
          peer2_cmds:
            default: []
            description:
            - Commands to be included in the configuration under the destination interface.
            - This parameter is not required if template is 'ext_evpn_multisite_overlay_setup'.
            required: false
            type: list
          peer2_description:
            default: ''
            description:
            - Description of the destination interface.
            - This parameter is not required if template is 'ext_evpn_multisite_overlay_setup'.
            required: false
            type: str
          peer2_ipv4_address:
            description:
            - IPV4 address of the destination interface.
            - This parameter is optional if the underlying fabric is ipv6 enabled.
            - This parameter is required only if template is 'int_intra_fabric_num_link'
              or 'ios_xe_int_intra_fabric_num_link' or 'int_intra_vpc_peer_keep_alive_link'.
            required: true
            type: str
          peer2_ipv6_address:
            default: ''
            description:
            - IPV6 address of the destination interface.
            - This parameter is required only if the underlying fabric is ipv6 enabled.
            - This parameter is required only if template is 'int_intra_fabric_num_link'
              or 'ios_xe_int_intra_fabric_num_link' or 'int_intra_vpc_peer_keep_alive_link'.
            required: false
            type: str
          route_tag:
            default: ''
            description:
            - Routing tag associated with interface IP.
            - This parameter is required only if template is 'ext_multisite_underlay_setup'
            type: str
          src_asn:
            description:
            - BGP ASN number on the source fabric.
            - This parameter is required only if template is 'ext_fabric_setup' or 'ext_multisite_underlay_setup'
              or "ext_evpn_multisite_overlay_setup"
            required: true
            type: str
          trm_enabled:
            default: false
            description:
            - Flag to enable Tenant Routed Multicast.
            - This parameter is required only if template is 'ext_evpn_multisite_overlay_setup'.
            required: false
            type: bool
      src_device:
        description:
        - IP address or DNS name of the source switch which is part of the link being
          configured.
        required: true
        type: list
      src_interface:
        description:
        - Interface on the source device which is part of the link being configured.
        required: true
        type: str
      template:
        choices:
        - int_intra_fabric_ipv6_link_local(intra-fabric)
        - int_intra_fabric_num_link (intra-fabric)
        - int_intra_fabric_unnum_link (intra-fabric)
        - int_intra_vpc_peer_keep_alive_link (intra-fabric)
        - int_pre_provision_intra_fabric_link (intra-fabric)
        - ios_xe_int_intra_fabric_num_link (intra-fabric)
        - ext_fabric_setup (inter-fabric)
        - ext_multisite_underlay_setup (inter-fabric)
        - ext_evpn_multisite_overlay_setup (inter-fabric)
        description:
        - Name of the template that is applied on the link being configured.
        - The last 3 template choices are applicable for inter-fabric links and the others
          are applicable for intra-fabric links.
        - This parameter is required only for 'merged' and 'replaced' states. It is
        - optional for other states.
        required: true
        type: str
    type: list

deploy:
    default: true
    description:
    - Flag to control deployment of links. If set to 'true' then the links included will
      be deployed to specified switches. If set to 'false', the links will be created
      but not deployed.
    - Setting this flag to 'true' will result in all pending configurations on the source
      and destination devices to be deployed.
    required: false
    type: bool

src_fabric:
    description:
    - Name of the source fabric for links operations.
    required: true
    type: str