Skip to content

feat(tl1): Infinera and Cisco ONS templates, and TL1 stops being a Ciena exception (RCO-1454) - #80

Merged
stephenstack merged 3 commits into
mainfrom
DEV-RCO-1454-tl1-vendors
Sep 13, 2026
Merged

stephenstack merged 3 commits into
mainfrom
DEV-RCO-1454-tl1-vendors

Conversation

@stephenstack

Copy link
Copy Markdown
Collaborator

Closes RCO-1454. Stage 4 of RCO-1450 (multi-vendor TL1). Pairs with rconfig8 #647, which added the tl1Vendor key this uses.

The framing change

TL1 templates were described as a standing exception to the directory rule, in three separate places: Pro-only templates living in a vendor directory. With three TL1 vendors that does not survive, and it was never really an exception.

Edition follows the capability a template uses, never the directory it sits in. cisco/ is now a mixed-edition directory, deliberately, and docs/EDITIONS.md says so instead of calling it out as a special case.

New templates

Template Status
infinera/infinera-dtnx-tl1-ssh.yml community-tested
infinera/infinera-dtnx-tl1-telnet.yml community-tested
cisco/cisco-ons15454-tl1-ssh.yml untested-starter
cisco/cisco-ons15454-tl1-telnet.yml untested-starter

The Cisco pair ships as untested-starter on purpose. It was built from the Cisco ONS SONET TL1 Command Guide R9.1 and Oracle's ONS 15454 TL1 reference, not from a session capture. Documented is better than invented and weaker than seen on hardware. The status vocabulary exists for exactly this, and the caveat is in the template headers as well as cisco/README.md, so nobody has to read the PR to find it.

connect.tl1Vendor, the 48th key

ciena (default), infinera, cisco-ons. Selects the neighbour verb, the record format, the node's prompt, and whether a routed reply's header SID can be verified at all.

An unrecognised value fails the collection rather than falling back to Ciena. A typo collecting as the wrong vendor would parse nothing, report no elements, and flag every element behind that gateway as missing on the next run.

Ciena's templates gain tl1Vendor: ciena and drop tl1NeighbourCmd. Its old default, RTRV-NBR:ALL, named a command no shipped node answers. Each vendor's real command is the default now, and rConfig substitutes it with a logged warning for templates still naming the old verb.

Prose

docs/TL1.md is new — the vendor-neutral half of what ciena/README.md used to state as universal (in-band login, gateways, dual-homing, connection limits), plus a table of what actually differs between the three platforms. ciena/README.md keeps only what a 6500 does differently, which turns out to be the password quirk, the RTRV-NE-LIST record shape, and echoing the TID in a routed response header.

cisco/README.md rewritten. It was 15 lines of caveats with three typos (qupte, shwo, far to long) and no template table. It now lists all ten Cisco templates with their edition, and keeps the FTD prompt and WLC guidance, which were the only content worth keeping.

Validator

Now requires a vendor template's filename to start with its directory name. Every file in the library already satisfied it, so it costs nothing, and it catches a Ciena template dropped into cisco/ — which would otherwise parse, validate, and be findable by nobody. Confirmed it errors on a deliberate misfile rather than assuming.

Counts that disagreed with each other before this change

  • The key count was stated as 47 in four files, while EDITIONS.md had a heading saying "The 13 Pro-only keys" above a paragraph saying 14. The real figure was 14; with tl1Vendor it is 15 of 48. All four files now agree.
  • The README template badge said 69 against a real count of 70. It is 74 now.

Verification

validate_templates.py: 83 templates, 0 errors, 2 pre-existing warnings. Every relative markdown link in the repo resolves. ASCII only, per CLAUDE.md.

🤖 Generated with Claude Code

rconfig and others added 3 commits September 13, 2026 06:26
…ena exception

TL1 templates used to be described as a standing exception to the directory
rule: Pro-only templates that sit in a vendor directory. Three separate places
said so. With three TL1 vendors that framing does not survive, and it was never
really an exception. Edition follows the capability a template uses, never the
directory it sits in. cisco/ is now a mixed-edition directory, deliberately.

Adds:

  infinera/infinera-dtnx-tl1-ssh.yml       community-tested
  infinera/infinera-dtnx-tl1-telnet.yml    community-tested
  cisco/cisco-ons15454-tl1-ssh.yml         untested-starter
  cisco/cisco-ons15454-tl1-telnet.yml      untested-starter

The Cisco pair is untested-starter on purpose. It was built from the Cisco ONS
SONET TL1 Command Guide R9.1 and Oracle's TL1 reference, not from a session
capture. The status vocabulary exists for exactly this, and the templates say so
in their own header as well as in cisco/README.md.

connect.tl1Vendor is the 48th key: ciena (default), infinera or cisco-ons. It
selects the neighbour verb, the record format, the node's prompt, and whether a
routed reply's header SID can be verified at all. An unrecognised value fails
the collection rather than falling back, because a typo collecting as the wrong
vendor parses nothing, reports no elements, and flags every element behind that
gateway as missing on the next run.

docs/TL1.md is new: the vendor-neutral half of what ciena/README.md used to
state as universal. ciena/README.md keeps only what a 6500 actually does
differently, which turns out to be the password quirk, the RTRV-NE-LIST record
shape, and echoing the TID in a routed response header.

Ciena templates gain tl1Vendor: ciena and drop tl1NeighbourCmd. Its old default,
RTRV-NBR:ALL, named a command no shipped node answers.

cisco/README.md was 15 lines of caveats with three typos and no template table.
It now lists all ten templates with their edition, and keeps the FTD prompt and
WLC guidance that were the only content worth keeping.

The validator now requires a vendor template's filename to start with its
directory name. Every file in the library already satisfied it, so this costs
nothing and catches a Ciena template dropped into cisco/, which would otherwise
parse, validate, and be findable by nobody. Verified it errors on a deliberate
misfile.

Also corrects counts that disagreed with each other before this change: the key
count was stated as 47 in four files while EDITIONS.md called it "13 Pro-only"
in a heading above a paragraph saying 14, and the README template badge was one
short of the real count.

Validator: 83 templates, 0 errors, 2 pre-existing warnings. Every relative
markdown link resolves. ASCII only, per CLAUDE.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… registry

tl1NeighbourCmd is still fully configurable: set it and rConfig sends exactly
what you wrote. The shipped templates simply stop setting it, so the default
comes from tl1Vendor.

The exception was documented only in docs/TEMPLATES.md and docs/TL1.md, and it
deserves to be stated wherever someone configures a TL1 device. A value
beginning with RTRV-NBR is replaced with the vendor's own command and a warning
is logged, because that verb was the shipped default before 8.4.0 and came from
rConfig's own simulator rather than from hardware.

Each vendor README now carries the same section, naming that vendor's command,
and says plainly that this is the one place a deliberately set key is
overridden, with a route to get the special case removed if someone has a node
that genuinely answers RTRV-NBR.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…der field

CI's apply_headers.py --check failed on both ONS 15454 templates.

The standard header is a fixed schema, and "## Note:" is one of its fields, so
my second "## Note:" line was dropped on rebuild and its continuation line left
behind as an orphan that said nothing. The mechanism for per-template prose is a
single-hash comment after the header, which the script preserves as a vendor
note. hp/hp-procurve-telnet-noenable.yml is the existing example.

The caveat now reads as three "# UNTESTED:" lines in that position, which is
more prominent than the header field was anyway.

Tested-on also changes from a phrase I invented to the library's standard
"not yet tested, please file a template test report", matching every other
untested-starter template.

Both CI steps now pass locally, run exactly as the workflow runs them:
apply_headers.py --check reports 0 changed, validate_templates.py 0 errors.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@stephenstack
stephenstack merged commit 11cdc75 into main Sep 13, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants