WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Only last TOR switch included in NDFC network attachment API payload #585

@skaszlik

Description

@skaszlik

When deploying networks to NDFC, only the last TOR switch in the list is included in the API payload. Other TOR switches (e.g., fabric1-tor1) are missing.

Community Note

  • Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
  • Please do not leave "+1" or other comments that do not add relevant new information or questions, they generate extra noise for issue followers and do not help prioritize the request
  • If you are interested in working on this issue or have submitted a pull request, please leave a comment

Ansible Version and collection version

ansible [core 2.16.3]
  config file = None
  configured module search path = ['/Users/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/user/.pyenv/versions/3.10.14/envs/sac-ndfc/lib/python3.10/site-packages/ansible
  ansible collection location = /Users/user/.ansible/collections:/usr/share/ansible/collections
  executable location = /Users/user/.pyenv/versions/sac-ndfc/bin/ansible
  python version = 3.10.14 (main, Jun 24 2025, 13:46:31) [Clang 17.0.0 (clang-1700.0.13.5)] (/Users/user/.pyenv/versions/3.10.14/envs/sac-ndfc/bin/python)
  jinja version = 3.1.6
  libyaml = True

DCNM version

  • V x.x.x

Affected module(s)

cisco.dcnm.dcnm_network (plugins/modules/dcnm_network.py)

Ansible Playbook

- net_name: PROD_300
  is_l2only: False
  vrf_name: PROD_VRF
  net_id: 30000
  vlan_id: 300
  vlan_name: PROD_300
  gw_ip_subnet: 10.30.0.1/24
  arp_suppress: False
  dhcp_loopback_id: __omit_place_holder__29147cbe6ad130ffca0b63d554772851b6055052
  gw_ipv6_subnet: __omit_place_holder__29147cbe6ad130ffca0b63d554772851b6055052
  int_desc: PROD_300
  l3gw_on_border: False
  mtu_l3intf: 9100
  multicast_group_address: 239.1.1.1
  netflow_enable: False
  route_target_both: False
  routing_tag: 12345
  trm_enable: False
  attach:
    - ip_address: 10.122.226.101
      tor_ports:
        - ip_address: 10.122.226.105
          ports: ['Ethernet1/16']
        - ip_address: 10.122.226.106
          ports: ['Ethernet1/16']
    - ip_address: 10.122.226.102
      tor_ports:
        - ip_address: 10.122.226.105
          ports: ['Ethernet1/16']
        - ip_address: 10.122.226.106
          ports: ['Ethernet1/16']
  deploy: false

Debug Output

API Call: POST /appcenter/cisco/ndfc/api/v1/lan-fabric/rest/top-down/fabrics/nac-fabric13/networks/attachments

    {
        "networkName": "PROD_300",
        "lanAttachList": [
            {
                "fabric": "nac-fabric13",
                "networkName": "PROD_300",
                "serialNumber": "9AI0TOS9PRW",
                "switchPorts": "",
                "detachSwitchPorts": "",
                "vlan": 300,
                "dot1QVlan": 0,
                "untagged": false,
                "deployment": true,
                "extensionValues": "",
                "instanceValues": "",
                "freeformConfig": "",
                "is_deploy": false,
                "torPorts": "fabric1-tor2(Ethernet1/16)"
            },
            {
                "fabric": "nac-fabric13",
                "networkName": "PROD_300",
                "serialNumber": "9NGUL6G25MY",
                "switchPorts": "",
                "detachSwitchPorts": "",
                "vlan": 300,
                "dot1QVlan": 0,
                "untagged": false,
                "deployment": true,
                "extensionValues": "",
                "instanceValues": "",
                "freeformConfig": "",
                "is_deploy": false,
                "torPorts": "fabric1-tor2(Ethernet1/16)"
            }
        ]
    }

Expected Behavior

All TOR switches defined in the data model should be included in the torPorts field of the API payload.

Actual Behavior

The torPorts field in the API request only contains the last TOR switch, overwriting previous entries.

Steps to Reproduce

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions