Skip to content

get_servers_api() has the /cucm-uds/servers response shape backwards; hostName/ipv4Address/serverType are AXL names, not UDS #36

Description

@bandrel

Summary

get_servers_api() parses /cucm-uds/servers backwards relative to what Cisco documents. It looks for hostName, ipv4Address, ipv6Address and serverType child elements first, and treats plain text inside <server> as a fallback for "newer UDS (15.x+)".

Both halves of that framing are wrong:

1. The plain-text shape is the only shape Cisco documents, and it is documented from 10.0(1) onward — not a 15.x novelty. From System Resources, byte-identical in the current and the legacy CUCM 10.x reference:

<servers version="{version}" uri="https://{host}:8443/cucm-uds/servers">
   <server>{host}</server>
   <server>{host1}</server>
   <server>{host2}</server>
</servers>

2. hostName, ipv4Address, ipv6Address and serverType are not UDS element names at all. All four grep to zero matches across every UDS doc page. That vocabulary belongs to AXL (getCallManager / listProcessNode) and the Platform/Serviceability APIs. If they were copied from a capture, it was a capture of a different API.

Impact

Functionally this is benign today — the plain-text fallback catches the documented shape, so the parser works. The cost is in the wrong places: the misleading comment will send the next reader looking for a version check that should not exist, and serverType is threaded through --servers output and the uds_servers table as a column that can never be populated. Anyone reading the DB schema will reasonably assume Publisher/Subscriber roles are being captured when they are not. UDS does not expose server role; that requires AXL.

Fix

  1. Invert the parse: read <server> text content first, fall back to child-element lookup only if the text is empty. That handles the documented shape and any undocumented drift with no version branching.
  2. Correct the comment. Suggested wording: UDS documents <server> as plain-text hostname (10.0(1)+); the child-element branch is defensive only and matches no documented release.
  3. Decide what to do about serverType / ipv4Address — either drop them, or keep the columns and document that they are nullable and only ever filled by a hypothetical non-standard response.

Coverage caveat

Cisco's UDS "New and Changed Information" changelog stops at 12.5(1); there are no 14 or 15 sections anywhere in the docs. So "unchanged through 15" is unverified rather than confirmed — the changelog appears abandoned, not stable. The text-first-then-children approach above is what makes that uncertainty harmless. A live capture against a 14 or 15 cluster is the only way to settle the actual shape, and would be worth doing on the next engagement that has one in scope.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions