Event-driven change verification skill for structured change windows. Guides
baseline capture before a change, provides change execution safety patterns,
performs post-change diff analysis, and supports rollback decision-making when
unexpected deviations are detected.
This skill covers a single change event lifecycle (before → during →
after). For ongoing configuration drift detection and compliance auditing, use
the config-management skill instead.
Commands are labeled [Cisco], [JunOS], or [EOS] where syntax
diverges. Unlabeled statements apply to all three vendors.
> Safety Note — Read-Write Operations: This skill includes procedures that
> modify device state during change execution and rollback phases. Steps that
> write to devices are marked with ⚠️ WRITE. Always confirm authorization,
> change ticket approval, and maintenance window status before executing write
> operations. Baseline capture and post-change verification steps are read-only
> and safe to run at any time.
baselines; enable/configure privilege for change execution and rollback)
plan including timing criteria
will bounce, which adjacencies will flap
archival
references/checklist-templates.md for per-change-type prerequisitesFollow these steps sequentially for each change event. Steps 1–2 are
always read-only. Steps 3–4 include write operations. Steps 5–6 are
analytical and drive the rollback decision.
Capture device state snapshots before any changes. Store outputs with
timestamps for post-change comparison.
Routing state:
[Cisco]
show ip route summary
show ip bgp summary
show ip ospf neighbor
[JunOS]
show route summary
show bgp summary
show ospf neighbor
[EOS]
show ip route summary
show ip bgp summary
show ip ospf neighbor
Interface and adjacency state:
All vendors — capture interface status, error counters, and neighbor tables:
[Cisco]
show interfaces summary
show cdp neighbors
show ip arp
[JunOS]
show interfaces terse
show lldp neighbors
show arp no-resolve
[EOS]
show interfaces status
show lldp neighbors
show ip arp
Configuration and hardware:
[Cisco]
show running-config
show environment all
show inventory
[JunOS]
show configuration
show chassis environment
show chassis hardware
[EOS]
show running-config
show environment all
show inventory
⚠️ WRITE — Archive baseline config to persistent storage:
[Cisco] copy running-config flash:pre-change-[ticket]-[date].cfg
[JunOS] request system configuration save /var/tmp/pre-change-[ticket].conf
[EOS] copy running-config flash:pre-change-[ticket]-[date].cfg
Record baseline metrics for comparison: total route count, BGP peer count
(Established), OSPF neighbor count (Full), interface error counters, and
hardware sensor readings.
Before executing any changes, document:
or removed
interfaces will bounce, expected duration of disruption
(see Threshold Tables below)
references/cli-reference.md for vendor-specific rollback commands)
intended changes visible, no unexpected deviations
⚠️ WRITE — Apply changes using commit-confirm patterns when available.
[Cisco] — No native commit-confirm. Apply changes in config mode and
immediately verify. For bulk changes, use configure replace with a prepared
config file.
[JunOS] — Use commit confirmed [minutes] to auto-rollback if not
confirmed within the timer window. Confirm with commit after verification.
configure
# ... apply changes ...
commit confirmed 5
# ... verify ...
commit
[EOS] — Use configure session for atomic staged changes. Review before
committing.
configure session change-[ticket]
# ... apply changes ...
show session-config
commit
Staged rollout for multi-device changes: Apply to one device first, verify
post-change state (Step 4), then proceed to remaining devices only after the
first device passes all checks.
Re-capture all baseline metrics from Step 1 using identical commands. Perform
a structured diff against pre-change baselines.
Key comparisons:
| Metric | Compare Against | Expected Outcome |
|---|---|---|
| -------- | ---------------- | ------------------ |
| Route count | Pre-change summary | Within deviation threshold |
| BGP peers Established | Pre-change peer list | All peers restored (or changed per plan) |
| OSPF neighbors Full | Pre-change neighbor list | All adjacencies restored |
| Interface errors | Pre-change counters | No new sustained errors |
| Config diff | Archived pre-change config | Only intended lines changed |
Config diff verification:
[Cisco]
show archive config differences flash:pre-change-[ticket]-[date].cfg system:running-config
[JunOS]
show | compare rollback 1
[EOS]
diff running-config flash:pre-change-[ticket]-[date].cfg
Review every line in the diff output. Classify each changed line as expected
(directly part of the change plan) or unexpected (not in the change scope).
Classify all deviations from baseline into categories:
window (e.g., new BGP peer appearing, old ACL removed). No action needed.
the primary goal (e.g., route count increase because a new peer is now
advertising). Verify they are benign.
severity (e.g., a single interface counter increment). Investigate but do
not necessarily roll back.
adjacency loss on an unrelated interface, route withdrawal not in change
scope). Evaluate rollback immediately.
If any deviation is classified as Unexpected — Critical, proceed directly
to Step 6 rollback evaluation.
Evaluate whether to accept the change or roll back using the criteria below.
Rollback if ANY of these conditions are true:
the change plan
baseline
not met)
Accept if ALL of these conditions are true:
⚠️ WRITE — If rolling back:
[Cisco] configure replace flash:pre-change-[ticket]-[date].cfg force
[JunOS] rollback 1 then commit
[EOS] configure replace flash:pre-change-[ticket]-[date].cfg
After rollback, re-run Step 4 post-change verification to confirm the device
has returned to its pre-change state.
| Metric | Normal Deviation | Warning | Rollback Trigger |
|---|---|---|---|
| -------- | ----------------- | --------- | ------------------ |
| IPv4 route count | ±2% of baseline | ±5% of baseline | >10% or unplanned loss |
| IPv6 route count | ±2% of baseline | ±5% of baseline | >10% or unplanned loss |
| BGP Established peers | 0 lost (unless planned) | 1 lost (if in scope) | ≥1 lost outside scope |
| OSPF Full adjacencies | 0 lost (unless planned) | Flap then recover <2 min | Lost >2 min |
| Interface errors (new) | 0 new CRC/input errors | <10 in first 5 min | Sustained >10/min |
| Interface flaps | 0 (unless planned bounce) | 1 flap on in-scope intf | Any flap outside scope |
| Phase | Maximum Duration | Action if Exceeded |
|---|---|---|
| ------- | ----------------- | ------------------- |
| Change execution | Per change ticket | Pause and escalate |
| Post-change convergence | 5 minutes | Begin rollback assessment |
| Adjacency re-establishment | 2 minutes per peer | Escalate if critical peer |
| Route table stabilization | 3 minutes | Check for route oscillation |
| Soak period (minor change) | 15 minutes | Declare success or investigate |
| Soak period (major change) | 60 minutes | Declare success or investigate |
| Rollback execution | 5 minutes | Escalate to senior engineer |
Config diff shows unexpected changes
├── Lines are in sections RELATED to change scope
│ ├── Side effect of intended change (e.g., auto-generated route-map sequence)
│ │ └── Classify as Expected — Side Effect → Document and accept
│ └── Unintended consequence (e.g., wrong interface affected)
│ └── Classify as Unexpected — Critical → Evaluate rollback
└── Lines are in sections UNRELATED to change scope
├── Timestamps, counters, or cosmetic changes (e.g., "Last configuration change")
│ └── Classify as Expected — Side Effect → Ignore
└── Substantive config changes (e.g., ACL modified, route-map added)
└── Classify as Unexpected — Critical → Immediate rollback
Neighbor/peer no longer in expected state
├── Device IS in the change scope
│ ├── Interface was intentionally bounced per change plan
│ │ ├── Adjacency recovers within timing threshold
│ │ │ └── Expected — document recovery time
│ │ └── Adjacency does NOT recover within threshold
│ │ └── Investigate → Check interface state, cable, peer config
│ └── Interface was NOT intentionally bounced
│ └── Unexpected — Critical → Check for config error → Rollback if unresolved
└── Device is NOT in the change scope
├── Peer is on a device that IS in scope (far-end impact)
│ └── Expected side effect → Verify peer recovers within threshold
└── Peer is on a device NOT in scope (unrelated)
└── Unexpected — Critical → Unrelated failure, separate investigation
Route count differs from baseline beyond ±2%
├── Change plan includes prefix addition or removal
│ ├── Deviation direction matches plan (added routes = count increase)
│ │ └── Expected — verify exact prefix matches plan
│ └── Deviation direction opposes plan (planned addition but count decreased)
│ └── Unexpected — Critical → Check BGP/OSPF process, peer state
├── Change plan does NOT include routing changes
│ ├── Deviation is <5% and routes are from in-scope device peers
│ │ └── Warning — likely convergence artifact → Monitor for 3 min
│ └── Deviation is >5% OR routes from out-of-scope sources
│ └── Unexpected — Critical → Evaluate rollback
└── Route oscillation detected (count fluctuating)
└── Unexpected — Critical → Routing loop or flapping → Immediate rollback
# Change Verification Report — [Ticket ID]
## Change Summary
- **Ticket:** [ID]
- **Date/Time:** [Start] — [End]
- **Devices:** [list]
- **Change Type:** [routing | switching | security | upgrade | other]
- **Executed By:** [name/team]
## Pre-Change Baseline
- Route count (IPv4/IPv6): [count]
- BGP peers Established: [count]
- OSPF adjacencies Full: [count]
- Interface errors (notable): [any]
- Config archived to: [location]
## Change Execution
- Method: [manual | commit-confirm | session | replace]
- Duration: [minutes]
- Issues during execution: [none | description]
## Post-Change Verification
- Route count (IPv4/IPv6): [count] (Δ [change])
- BGP peers Established: [count] (Δ [change])
- OSPF adjacencies Full: [count] (Δ [change])
- Interface errors (new): [count]
- Config diff lines: [expected: N, unexpected: N]
## Impact Assessment
- Expected — Intended: [list]
- Expected — Side Effect: [list]
- Unexpected — Minor: [list or none]
- Unexpected — Critical: [list or none]
## Decision
- **Result:** [ACCEPTED | ROLLED BACK | ESCALATED]
- **Rationale:** [reason]
- **Soak period:** [duration, outcome]
## Action Items
- [ ] [any follow-up tasks]
terminal buffer limits. Use terminal length 0 [Cisco/EOS] or
set cli screen-length 0 [JunOS] before capture.
show processes cpu [Cisco] / show system processes extensive [JunOS] /
show processes top [EOS] to verify.
note the location for later retrieval.
(e.g., ! Last configuration change at ...).
show | compare rollback 1 gives clean structured diffs. On [Cisco], show archive config differences may include line-order
differences that are not real changes — focus on substantive config lines.
references/checklist-templates.md checklists to focus verification onchange-relevant sections rather than full config comparison.
show interfaces [intf] — look for down/down vs up/down to distinguish physical vs protocol issues.
both sides of a link (e.g., mismatched OSPF area, BGP ASN) will prevent
adjacency formation.
hold time is 180s. Wait at least one full timer cycle before escalating.
configure replace requires the IOS archive feature to beenabled. If unavailable, manually reverse the config changes line by line.
rollback N may fail if the commit history has been cleared orthe device has rebooted since the baseline commit. Use
show system commit to verify available rollback points.
configure replace requires the replacement file to be a completeconfig, not a partial fragment. Verify the archived file is a full
show running-config capture.
confirm the device has returned to its pre-change state.
first, defer detailed config diff analysis to after the window if services
are healthy.
and schedule a follow-up verification at the next opportunity.
do not delay rollback due to window constraints if there is active service
degradation.
共 1 个版本