Skip to content

CML Lab Builder 3.1.0

Choose a tag to compare

@Specops13 Specops13 released this 23 Oct 13:16
· 17 commits to main since this release

Downloads

  • Already on 3.0.0: the app offers this update by itself (small patch, cml-lab-builder-patch-3.1.0.zip, sha256-checked against SHA256SUMS.txt).
  • New install: CMLLabBuilder-3.1.0-windows-x64.zip, CMLLabBuilder-3.1.0-linux-x64.tar.gz, or sudo apt install ./cml-lab-builder_3.1.0_amd64.deb.
  • ENCOR Lab Builder 1.7 - 2.1: the app shows "full download"; the ENCORLab-* / encorlab_* files are the same builds under the old names.

Fuzzy search in the library, plus the library updates below. A patch for 3.0.0 (same runtime 2): 3.0.0 offers it
by itself and installs it with Install update. ENCOR Lab Builder 1.7 - 2.1 still get the full download banner.

Added

  • Search bar in Library & courses. Filters the online library as you type and ranks the results, best first,
    with the matched letters highlighted. It searches titles, lab ids, descriptions, topics (blueprint items and
    domains), the courses a lab is in, platforms and node types (iol-xe, nxosv9000, or nexus, nx-os, ios-xe).
    The matching is fuzzy: it tolerates typos (mutlicast, redistrbution; 1 edit for 4-7 letters, 2 for longer
    words) and accepts abbreviations and partial words (vrf lit, ospf stb, mcast, evpn mpls). Each word must
    match. It works together with new filters for labs/courses, installed / not installed / update available, one
    course, and Hide RAM heavy. / or Ctrl+K jumps to the box, Esc clears it, and a message with Clear search
    and filters
    appears when nothing matches. It all runs in the page over the index that is already loaded
    (static/fuzzy.js, no dependencies): no server calls while typing, the text is normalized once per load, and only
    the word being typed is re-scored. About 1 ms per keystroke for 300 labs. The lab list's Search labs box now uses
    the same fuzzy, ranked and highlighted matching.
  • Library index search fields: lab entries in library/index.json (and labs/index.json) now carry domain,
    track, platforms and node_types, and /api/labs reports track and node_types. Older apps ignore the new
    fields, and older indexes still load; search then simply has less to match.
  • New library lab 19-evpn-mpls: Walkthrough: BGP EVPN over MPLS (IOS-XE, IOL). 8 iol-xe nodes (about 8 GB
    RAM): OSPF + LDP core, iBGP l2vpn evpn through a route reflector, VLAN-based EVIs 10/20 with bridge domains and
    service instances stretching two VLANs across three sites, route type 2/3 and MAC verification, same-VLAN pings,
    and an optional EVPN-VPWS step. Published as library/19-evpn-mpls.cmllab (and labs/19-evpn-mpls.encorlab for
    2.x). Expected outputs come from Cisco documentation and are not yet verified on CML.
  • New library lab 20-evpn-vxlan-superspine: Walkthrough: BGP EVPN VXLAN across two data centers with super spines
    (5-stage Clos).
    12 nodes (4 nxosv9000 leaves, 4 iol-xe spines/super spines, 4 IOL hosts; about 56 GB RAM, RAM
    heavy): OSPF underlay through leaf - spine - super spine - spine - leaf, iBGP l2vpn evpn with the super spines as
    route reflectors, VLANs 10/20 as L2VNIs 10010/10020 on NVE VTEPs with BGP ingress replication, same-VLAN pings from
    DC1 to DC2, and an optional L3VNI VRF with a distributed anycast gateway. Published as
    library/20-evpn-vxlan-superspine.cmllab (and labs/20-evpn-vxlan-superspine.encorlab for 2.x). Expected outputs
    come from Cisco documentation and are not yet verified on CML.

Fixed

  • Library labs 19-evpn-mpls and 20-evpn-vxlan-superspine (now version 2): the routers booted with no day-0
    config on CML
    (no hostname, unconfigured CEs/hosts, IOL setup dialog). Cisco's iol-xe node definition requires
    every Ethernet port to have some IP configuration in the day-0 config, or IOL ignores the whole config and starts the
    initial configuration dialog; the hostname-only core routers and the CEs/hosts (only their cabled ports) did not.
    Every IOL node now lists all four ports (description, no ip address, cabled links no shutdown, unused ports
    shutdown), so the hostname, no ip domain lookup and the CE/host configs apply, and the step 1 CDP check sees
    its neighbors. The Nexus leaves in lab 20 also get port descriptions and their links enabled. Update both labs in
    the library, then destroy and rebuild them in CML.
  • Library lab 08-vrf-lite (now version 2): PE booted with no day-0 config on IOL (no hostname, setup dialog):
    its two ports had descriptions but no IP configuration, the same IOL trigger as above. Every IOL node (PE, CEA, CEB)
    now lists all four ports (no ip address on the PE links, descriptions on the CE links, unused ports shut); the
    customer configs are unchanged. An audit of every library lab found no other iol-xe node without IP configuration
    on an Ethernet port (IOL L2 switches have no such requirement), and a test now checks the whole library. Update
    the lab in the library, then destroy and rebuild it in CML.
  • Library lab 19-evpn-mpls: Apply this step on the BGP EVPN step no longer sends a stray
    exit-address-family in router configuration mode (where IOS rejects it) on the RR and PE1-PE3. The line was removed
    from the step config. Installed copies show Update available in the library.
  • CI: the Debian package check (deb-test) failed on 3.0.0 although the package was fine. The workflow ended with
    test -d ~/.config/cml-lab-builder/app, but the smoke test removes its test patches (<data>/app) when it
    finishes, so that line could never pass; it failed silently because the plain test lines printed nothing. The
    job now runs packaging/deb_docker_test.sh: the same checks as the local deb_chroot_test.sh (install with
    dependencies, menu launch, single instance, smoke test with patch + auto-update as a normal user, /opt and
    dpkg --verify unchanged, upgrades over a user patch, remove + purge keep the data), in a debian:12 container
    pinned by digest. Each check prints PASS/FAIL, and a failure lists the failed checks plus the log tails. The test
    waits for the server port and for the app to stop, polls state files instead of sleeping, and retries apt.