NETWORK SRE SERIES  ·  INTRODUCTION / 01

From Manual Operations
to Network SRE.

How I developed three Cisco networking labs around configuration control, incident evidence, and automated VXLAN EVPN validation.

Three separate lab phases: OSPF routing and configuration management, BGP monitoring and incident response, Cisco NX-OS EVPN VXLAN fabric validation.
FIGURE 01 The Network SRE series progressed through OSPF configuration management, BGP incident response, and VXLAN EVPN validation.

In a serious network incident, getting the right information is often the first challenge. I want to know when the failure began, what changed, which path was affected, and what the devices reported at the time. I built this lab series to make those questions easier to answer with repeatable collection, validation, and incident workflows.

01 / Why I started building this series

After more than two decades working across telecommunications and enterprise networks, I wanted to examine how much of the routine work around changes and incidents could be made repeatable without losing the engineering judgment behind it.

In Tier-3 escalations, I have worked through the same practical sequence countless times: establish the incident timeline, identify the source and destination, trace the actual forwarding path, inspect protocol and interface state, and compare packet captures when the evidence warrants it. The challenge is getting those facts assembled quickly and consistently, especially when the problem is intermittent or a device recovers before anyone connects to it.

Cisco Modeling Labs gave me a controlled place to test an operating approach. I could intentionally introduce faults, collect device state, compare results against a known baseline, and check whether automation surfaced a real network problem instead of merely reporting that a script completed.

I organized the work into three successive lab environments. Each had its own topology and purpose. The shared thread was a disciplined way to establish expected state, detect change, preserve evidence, and validate recovery.

02 / How the work progressed

The sequence mattered. I began with familiar routing and configuration-management problems, expanded into BGP fault detection and incident collection, and then brought automated checks into a more complex VXLAN EVPN fabric.

01 / OSPF Configuration capture, baselines, drift and routing-state checks
02 / BGP Redundancy, monitoring, alerts and incident evidence
03 / EVPN Fabric health, pyATS tests and GitLab CI/CD validation
HOW TO READ THIS SERIES

These were three separate Cisco CML projects with different topologies, built around the same operational practices and automation tools. The following sections explain the engineering problems each phase addressed and the capabilities I tested.

Phase 01 · Configuration and routing state

03 / OSPF: Build a reliable baseline first

The first topology used four Cisco routers in CML: an edge router, R1, and three internal routers, R2 through R4. I used automation-1 to run Ansible and work with GitLab and the local GitLab Runner.

I collected running configurations and routing state, saved device-specific snapshots, and compared subsequent collections against approved baselines. The work also checked OSPF adjacency health and expected default-route behavior. Those checks gave me a repeatable record of what the network looked like before and after a change.

One practical lesson came from configuration drift. A raw text comparison included changing fields that contributed little operational value. I adjusted the comparison to filter volatile content while retaining changes that could alter forwarding or routing behavior. That made the result more useful for an engineer reviewing an unexpected difference.

Management reachability also had to be correct. Ansible could not collect meaningful evidence until SSH, return routing, and NAT worked as expected. That experience reinforced the need to validate the management path before interpreting automation failures as device failures.

WHAT THIS PHASE ESTABLISHED

A controlled baseline, repeatable configuration collection, routing-state checks, and practical drift reporting. The OSPF deep dive will show how the snapshots and comparisons were built, how the tests were executed, and what changed after the first failures.

Phase 02 · Observability and incident evidence

04 / BGP: Capture evidence while the event is happening

I then built a BGP environment to test redundant forwarding paths, fault detection, and incident response. During failover exercises, routing details, including static routes that affected the expected path, had to be corrected before the test behavior matched the design.

The monitoring stack added Prometheus, Telegraf, Blackbox Exporter, Grafana, Alertmanager, and centralized syslog. I used it to observe routing and reachability conditions and to route alerts into an automated evidence-collection workflow.

When an alert fired, Alertmanager could send a webhook to a Python listener. The listener initiated collection of available Prometheus data, syslog, and router CLI output through Ansible. The lab records document incident capture during failure and recovery events, along with the evidence files produced by the collector.

Implemented BGP lab workflow from network event through Prometheus, Alertmanager webhook, listener and incident collection of monitoring, syslog and router CLI evidence.
FIGURE 02 BGP incident workflow: monitoring, Alertmanager notification, webhook processing, and diagnostic evidence collection.

This was the most direct connection to my operations background. The alert told me where to start. The collected state helped reconstruct what happened without relying solely on what the network looked like after recovery. It also gave me a clearer record to investigate when a session was down but another path continued to forward traffic.

WHAT THIS PHASE ESTABLISHED

Monitoring, alert routing, a working Alertmanager webhook listener, and automated incident evidence capture. The incident-response article will walk through the actual listener, fault tests, saved evidence, and the decisions that still require engineering analysis.

Phase 03 · Data center fabric behavior

05 / VXLAN EVPN: Validate the complete fabric state

The final environment raised the level of complexity. I built a Cisco NX-OS spine-leaf fabric in CML with two spines, three leaves, and test endpoints. OSPF provided underlay reachability; MP-BGP EVPN carried overlay reachability; VXLAN connected the virtualized Layer 2 and Layer 3 segments.

Two-spine three-leaf Cisco CML fabric with each leaf connected to both spines and one server per leaf. OSPF underlay, MP-BGP EVPN overlay, L2 VNIs 10100 and 10200, L3 VNI 99999.
FIGURE 03 Cisco NX-OS two-spine, three-leaf fabric with OSPF underlay, MP-BGP EVPN overlay, and endpoint connectivity.

The project used Layer 2 VNIs 10100 and 10200 , Layer 3 VNI 99999 , and anycast gateway configuration. I tested underlay adjacencies, BGP EVPN state, NVE peers and VNIs, and connectivity between lab endpoints.

One troubleshooting example captures why a configured feature cannot automatically be treated as operational. The Layer 3 VNI remained down until the relevant SVI configuration included interface Vlan999 with ip forward . Early endpoint probes could also be affected while ARP and EVPN entries populated. Those observations informed the validation checks.

The fabric made a useful test case for automation because passing an OSPF check alone could not establish that overlay signaling, VNI state, and endpoint forwarding were all healthy.

WHAT THIS PHASE ESTABLISHED

A working CML VXLAN EVPN fabric and repeatable checks across underlay, overlay, and endpoint behavior. The dedicated fabric article will go into topology, VTEPs, VNIs, route types, failure scenarios, and the operational evidence behind the design.

06 / Make the checks executable with GitLab and pyATS

Across the projects, I moved collection and validation tasks into repeatable workflows. The VXLAN repository brought those ideas together with pyATS, Ansible, Bash, Python, and GitLab CI/CD. Git tracked the intended automation and configuration artifacts; the runner executed jobs against the live lab.

The pyATS validation ran checks against LEAF1, LEAF2, and LEAF3 concurrently. The implementation also needed to preserve which device failed and return a failing process status so GitLab could report an unsuccessful test correctly.

A retained execution provides concrete evidence. GitLab pipeline #124, job #190 , associated with merge-request commit 31d7f689 , invoked ./scripts/run_validation.sh on automation-1 . The job reported OSPF neighbors FULL, NVE interfaces up, and required VNIs up on all three leaves. Ansible collected running configurations and operational state from the five fabric devices. The drift test reported no differences, and the job completed successfully.

Reconstructed evidence graphic based on actual GitLab Job 190 output: all three leaves passed OSPF FULL, NVE up, VNI up; Ansible collected five device operational states and configurations; drift detector reported no drift; job succeeded.
FIGURE 04 · GITLAB VALIDATION GitLab pipeline #124, job #190: pyATS and drift-check results annotated from the retained job log. View the original console excerpt ↗
GITLAB JOB #190 pipeline #124 / merge request
=== Running pyATS VXLAN validation ===
LEAF1: OK - OSPF neighbors are FULL
LEAF1: OK - NVE interface is up
LEAF1: OK - All required VNIs are Up
LEAF2: OK - OSPF neighbors are FULL
LEAF2: OK - NVE interface is up
LEAF2: OK - All required VNIs are Up
LEAF3: OK - OSPF neighbors are FULL
LEAF3: OK - NVE interface is up
LEAF3: OK - All required VNIs are Up
LEAF1: PASS
LEAF2: PASS
LEAF3: PASS
Overall Result: PASS
=== Running drift detection ===
No drift detected.
Overall Result: PASS - No drift detected
Job succeeded

Job #190 confirms the OSPF, NVE, VNI, configuration-collection, and drift checks shown in its log. The broader EVPN and endpoint-reachability tests will be examined in the dedicated fabric article.

The reviewed GitLab workflow defined validate , deploy , baseline , and post_validate stages, with manual controls on deployment and baseline handling. Repository changes could initiate CI execution. That is a different trigger from Alertmanager sending a network incident webhook; each had its own implemented purpose.

GitLab CI/CD stages validate, manual deploy, manual baseline, post-validate. Highlighted design finding that baseline promotion preceded post validation, with recommended safer sequencing.
FIGURE 05 GitLab validation, manual deployment and baseline stages, and post-change checks. The later review identified a baseline-promotion sequencing risk.

A later source review also identified baseline-promotion ordering and file-inventory drift checks worth hardening. Those findings deserve technical treatment in the CI/CD article, alongside the successful tests, rather than a general warning that obscures the functioning workflows.

07 / What I took away from the completed labs

By the end of this sequence, I had exercised three practical capabilities: repeatable collection and comparison of network state; alert-driven preservation of incident evidence; and GitLab-executed validation of a Cisco VXLAN EVPN lab.

The projects also exposed failures that would have been easy to overlook with a green status alone. Management reachability could break the collection path. Static routing could defeat expected failover. A VNI could be configured but down. A comparison script could miss a class of file changes. Each required inspecting actual network or automation behavior and refining the check.

I used AI-assisted scripting for portions of the Python automation. I defined the engineering objectives, assembled the environments, integrated and tested the components, interpreted the output, and troubleshot the network and automation failures. That division of work is part of the technical record.

These labs established a foundation for applying reliability engineering practices to networks I already knew how to operate. They also produced the code, failure cases, logs, and diagrams that the rest of this series can examine in detail.

08 / Where the technical series goes next

This introduction establishes the scope. Each follow-up article will focus on implementation details, failure scenarios, and test evidence for its part of the lab series. The links below currently return to the relevant overview sections and will point to the full articles as they are published.

DEEP DIVE 01 · OSPF

Building a dependable network baseline

Ansible backups, OSPF state checks, normalization, drift comparisons, management-path failures, and GitLab records.

Review the OSPF overview ↑ Dedicated article: coming later in the series
DEEP DIVE 02 · BGP / INCIDENTS

An Alert Is Not a Root Cause

Prometheus, Alertmanager, the working webhook listener, saved evidence, failure and recovery events, and incident analysis.

Review the BGP overview ↑ Dedicated article: coming later in the series
DEEP DIVE 03 · VXLAN EVPN

Validating a Cisco NX-OS fabric

Underlay OSPF, MP-BGP EVPN, VTEPs, L2/L3 VNIs, endpoint reachability, fault injection, and pyATS assertions.

Review the fabric overview ↑ Dedicated article: coming later in the series
DEEP DIVE 04 · GITLAB / CI-CD

Git Is Not the Network

Pipeline stages, validation jobs, configuration drift, baseline promotion, actual job output, and distinctions between CI and incident webhooks.

Review the CI/CD overview ↑ Dedicated article: coming later in the series

09 / Lab repositories and supporting evidence

I maintained the OSPF, BGP, and VXLAN EVPN projects in separate GitLab repositories, preserving configurations, automation workflows, test results, and supporting documentation from each phase. GitLab pipeline #124, job #190, provides a concrete example of the automated VXLAN fabric checks discussed in this article. The original console excerpt is available for review. The articles that follow examine the implementations and test results in greater technical detail.

Repository Source record Last reviewed commit
OSPF SRE Architecture and Phase 1 summary bb0df1d
BGP SRE Phase 2 completion summary 558a187
VXLAN EVPN SRE Current validated state f09af71
GitLab VXLAN Job #190 Pipeline #124, 31d7f689 · console excerpt Job succeeded

Additional configuration excerpts, incident records, and validation results will accompany the individual articles in this series.

UP NEXT · INCIDENT ENGINEERING

An Alert Is Not a Root Cause

A closer look at the BGP monitoring stack, the Alertmanager webhook, and the incident evidence captured during failure and recovery.

Explore the article roadmap →