Change Verification
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.
When to Use
- - Planned maintenance window requiring structured pre/post verification
- Configuration change (routing policy, ACLs, interface config) with rollback plan
- Software upgrade or patch requiring before/after state comparison
- Hardware replacement (linecard, SFP, PSU) with service validation
- Circuit turn-up or decommission with adjacency and traffic verification
- Emergency change requiring rapid baseline capture and rollback readiness
- Post-change soak period with periodic re-verification against baselines
Prerequisites
- - SSH or console access to all devices in the change scope (read-only for
baselines; enable/configure privilege for change execution and rollback)
- - Approved change ticket with documented scope, expected impact, and rollback
plan including timing criteria
- - Pre-identified list of devices and interfaces in the change scope
- Knowledge of expected state changes: which routes will move, which interfaces
will bounce, which adjacencies will flap
- - Access to a file store (flash, SCP server, or local disk) for baseline
archival
- - Contact information for escalation if rollback criteria are met
- See
references/checklist-templates.md for per-change-type prerequisites
Procedure
Follow 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.
Step 1: Pre-Change Baseline Capture
Capture device state snapshots before any changes. Store outputs with
timestamps for post-change comparison.
Routing state:
[Cisco]
CODEBLOCK0
[JunOS]
CODEBLOCK1
[EOS]
CODEBLOCK2
Interface and adjacency state:
All vendors — capture interface status, error counters, and neighbor tables:
[Cisco]
CODEBLOCK3
[JunOS]
CODEBLOCK4
[EOS]
CODEBLOCK5
Configuration and hardware:
[Cisco]
CODEBLOCK6
[JunOS]
CODEBLOCK7
[EOS]
CODEBLOCK8
⚠️ 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] INLINECODE4
Record baseline metrics for comparison: total route count, BGP peer count
(Established), OSPF neighbor count (Full), interface error counters, and
hardware sensor readings.
Step 2: Change Scope Documentation
Before executing any changes, document:
- 1. Change description — what configuration lines are being added, modified,
or removed
- 2. Expected impact — which peers will flap, which routes will shift, which
interfaces will bounce, expected duration of disruption
- 3. Rollback trigger criteria — specific thresholds that mandate rollback
(see Threshold Tables below)
- 4. Rollback procedure — exact commands to revert (see
references/cli-reference.md for vendor-specific rollback commands)
- 5. Success criteria — what "done" looks like: all baselines restored,
intended changes visible, no unexpected deviations
- 6. Soak period — how long to monitor after change before declaring success
Step 3: Change Execution
⚠️ 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.
CODEBLOCK9
[EOS] — Use configure session for atomic staged changes. Review before
committing.
CODEBLOCK10
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.
Step 4: Post-Change Verification
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]
CODEBLOCK11
[JunOS]
CODEBLOCK12
[EOS]
CODEBLOCK13
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).
Step 5: Impact Assessment
Classify all deviations from baseline into categories:
- 1. Expected — Intended: Changes that are the direct goal of the change
window (e.g., new BGP peer appearing, old ACL removed). No action needed.
- 2. Expected — Side Effect: Changes caused by the intended change but not
the primary goal (e.g., route count increase because a new peer is now
advertising). Verify they are benign.
- 3. Unexpected — Minor: Deviations not related to the change scope but low
severity (e.g., a single interface counter increment). Investigate but do
not necessarily roll back.
- 4. Unexpected — Critical: Deviations indicating collateral damage (e.g.,
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.
Step 6: Rollback Decision
Evaluate whether to accept the change or roll back using the criteria below.
Rollback if ANY of these conditions are true:
- - Service-affecting outage on interfaces/peers outside the change scope
- Route count deviation exceeds threshold AND routes are not accounted for in
the change plan
- - Adjacency loss persists beyond the expected convergence window
- Hardware errors (PSU, fan, temperature) emerged that were not present in
baseline
- - The change did not achieve its intended effect (success criteria from Step 2
not met)
Accept if ALL of these conditions are true:
- - All success criteria from Step 2 are met
- Config diff contains only expected change lines
- All baseline metrics are within acceptable deviation thresholds
- No unexpected critical deviations detected
- Soak period has elapsed without regression
⚠️ WRITE — If rolling back:
[Cisco] configure replace flash:pre-change-[ticket]-[date].cfg force
[JunOS] rollback 1 then commit
[EOS] INLINECODE13
After rollback, re-run Step 4 post-change verification to confirm the device
has returned to its pre-change state.
Threshold Tables
Acceptable Deviation Thresholds
| 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 |
Rollback Timing Thresholds
| 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 |
Decision Trees
Post-Change Diff Contains Unexpected Lines
CODEBLOCK14
Adjacency Loss Detected Post-Change
CODEBLOCK15
Route Count Deviation Outside Normal Threshold
CODEBLOCK16
Report Template
CODEBLOCK17
Troubleshooting
Baseline capture commands fail or return incomplete output
- - Verify SSH session stability — long command outputs may be truncated by
terminal buffer limits. Use
terminal length 0 [Cisco/EOS] or
set cli screen-length 0 [JunOS] before capture.
- - Check device CPU — high CPU may cause CLI timeouts. Run INLINECODE16
[Cisco] /
show system processes extensive [JunOS] /
show processes top [EOS] to verify.
- - If archival to remote storage fails, save to local flash as fallback and
note the location for later retrieval.
Config diff shows excessive noise
- - Filter out timestamp and comment lines that change on every config display
(e.g.,
! Last configuration change at ...).
- - On [JunOS],
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.
- - Use
references/checklist-templates.md checklists to focus verification on
change-relevant sections rather than full config comparison.
Adjacency does not recover after expected bounce
- - Check interface state:
show interfaces [intf] — look for down/down vs
up/down to distinguish physical vs protocol issues.
- - Verify the peer device accepted the change — a mismatched configuration on
both sides of a link (e.g., mismatched OSPF area, BGP ASN) will prevent
adjacency formation.
- - Check for hold-timer expiry: OSPF default dead interval is 40s; BGP default
hold time is 180s. Wait at least one full timer cycle before escalating.
Rollback command fails or produces unexpected state
- - [Cisco]
configure replace requires the IOS archive feature to be
enabled. If unavailable, manually reverse the config changes line by line.
- - [JunOS]
rollback N may fail if the commit history has been cleared or
the device has rebooted since the baseline commit. Use
show system commit to verify available rollback points.
- - [EOS]
configure replace requires the replacement file to be a complete
config, not a partial fragment. Verify the archived file is a full
show running-config capture.
- - After any rollback, re-run the full post-change verification (Step 4) to
confirm the device has returned to its pre-change state.
Change window time exceeded before verification completes
- - Prioritize critical services: check routing adjacencies and interface states
first, defer detailed config diff analysis to after the window if services
are healthy.
- - If the soak period must be shortened, document the reduced observation window
and schedule a follow-up verification at the next opportunity.
- - Escalate if service impact is detected and the change window has closed —
do not delay rollback due to window constraints if there is active service
degradation.
变更验证
针对结构化变更窗口的事件驱动型变更验证技能。指导变更前的基线捕获,提供变更执行安全模式,执行变更后的差异分析,并在检测到意外偏差时支持回滚决策。
本技能涵盖单个变更事件生命周期(变更前 → 变更中 → 变更后)。如需进行持续的配置漂移检测和合规审计,请使用config-management技能。
命令在语法差异处标注了[Cisco]、[JunOS]或[EOS]。未标注的语句适用于所有三家厂商。
安全提示 — 读写操作: 本技能包含在变更执行和回滚阶段修改设备状态的步骤。向设备写入的步骤已用⚠️ 写入标记。在执行写入操作前,务必确认授权、变更工单审批和维护窗口状态。基线捕获和变更后验证步骤为只读操作,可随时安全运行。
使用场景
- - 需要结构化变更前/变更后验证的计划维护窗口
- 需要回滚计划的配置变更(路由策略、ACL、接口配置)
- 需要变更前后状态比较的软件升级或补丁
- 需要服务验证的硬件更换(线卡、SFP、电源模块)
- 需要邻接关系和流量验证的电路开通或退网
- 需要快速基线捕获和回滚准备的紧急变更
- 需要定期对照基线重新验证的变更后观察期
前提条件
- - 通过SSH或控制台访问变更范围内的所有设备(基线操作为只读;变更执行和回滚需要启用/配置权限)
- 已批准的变更工单,包含记录的范围、预期影响和回滚计划(含时间标准)
- 预先确定的变更范围内设备和接口列表
- 了解预期的状态变化:哪些路由将移动、哪些接口将抖动、哪些邻接关系将震荡
- 能够访问用于基线归档的文件存储(闪存、SCP服务器或本地磁盘)
- 达到回滚标准时的升级联系信息
- 参见references/checklist-templates.md了解每种变更类型的特定前提条件
操作步骤
按顺序为每个变更事件执行以下步骤。步骤1-2始终为只读操作。步骤3-4包含写入操作。步骤5-6为分析步骤,驱动回滚决策。
步骤1:变更前基线捕获
在任何变更前捕获设备状态快照。存储带有时间戳的输出,用于变更后比较。
路由状态:
[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
接口和邻接状态:
所有厂商 — 捕获接口状态、错误计数器和邻居表:
[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
配置和硬件:
[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
⚠️ 写入 — 将基线配置归档到持久存储:
[Cisco] copy running-config flash:pre-change-[工单号]-[日期].cfg
[JunOS] request system configuration save /var/tmp/pre-change-[工单号].conf
[EOS] copy running-config flash:pre-change-[工单号]-[日期].cfg
记录用于比较的基线指标:总路由数、BGP对等体数(已建立)、OSPF邻居数(完全)、接口错误计数器和硬件传感器读数。
步骤2:变更范围文档化
在执行任何变更前,记录以下内容:
- 1. 变更描述 — 添加、修改或删除的配置行
- 预期影响 — 哪些对等体会震荡、哪些路由会变化、哪些接口会抖动、中断的预期持续时间
- 回滚触发标准 — 强制回滚的特定阈值(见下方阈值表)
- 回滚流程 — 用于恢复的确切命令(参见references/cli-reference.md了解各厂商特定的回滚命令)
- 成功标准 — 完成的定义:所有基线恢复、预期变更可见、无意外偏差
- 观察期 — 变更后需监控多长时间才能宣布成功
步骤3:变更执行
⚠️ 写入 — 在可用时使用提交确认模式应用变更。
[Cisco] — 无原生提交确认功能。在配置模式下应用变更并立即验证。对于批量变更,使用configure replace配合准备好的配置文件。
[JunOS] — 使用commit confirmed [分钟数]在定时窗口内未确认时自动回滚。验证后使用commit确认。
configure
... 应用变更 ...
commit confirmed 5
... 验证 ...
commit
[EOS] — 使用configure session进行原子化分阶段变更。提交前进行审查。
configure session change-[工单号]
... 应用变更 ...
show session-config
commit
多设备变更的分阶段部署: 先在一台设备上应用,验证变更后状态(步骤4),仅在第一台设备通过所有检查后才继续处理其余设备。
步骤4:变更后验证
使用相同的命令重新捕获步骤1中的所有基线指标。对变更前基线执行结构化差异分析。
关键比较:
| 指标 | 比较对象 | 预期结果 |
|---|
| 路由数 | 变更前摘要 | 在偏差阈值内 |
| BGP对等体已建立 |
变更前对等体列表 | 所有对等体恢复(或按计划变更) |
| OSPF邻居完全 | 变更前邻居列表 | 所有邻接关系恢复 |
| 接口错误 | 变更前计数器 | 无新的持续错误 |
| 配置差异 | 已归档的变更前配置 | 仅变更了预期行 |
配置差异验证:
[Cisco]
show archive config differences flash:pre-change-[工单号]-[日期].cfg system:running-config
[JunOS]
show | compare rollback 1
[EOS]
diff running-config flash:pre-change-[工单号]-[日期].cfg
审查差异输出中的每一行。将每个变更行分类为预期(直接属于变更计划的一部分)或意外(不在变更范围内)。
步骤5:影响评估
将所有偏离基线的偏差分类:
- 1. 预期 — 意图内: 直接属于变更窗口目标的变更(例如,新增BGP对等体、删除旧ACL)。无需操作。
- 预期 — 副作用: 由预期变更引起但非主要目标的变更(例如,由于新对等体开始通告导致路由数增加)。验证其无害。
- 意外 — 轻微: 与变更范围无关但严重性较低的偏差(例如,单个接口计数器增加)。进行调查但不必回滚。
- 意外 — 严重: 表明附带损害的偏差(例如,无关接口上的邻接丢失、不在变更范围内的路由撤销)。立即评估回滚。
如果任何偏差被分类为意外 — 严重,直接进入步骤6回滚评估。
步骤6:回滚决策
使用以下标准评估是接受变更还是回滚。
如果满足以下任一条件,则回滚:
- - 变更范围外的接口/对等体出现影响服务的故障
- 路由数偏差超过阈值且路由不在变更计划中
- 邻接丢失超过预期的收敛窗口
- 出现基线中不存在的硬件错误(电源、风扇、温度)
- 变更未达到预期效果(步骤2中的成功标准未满足)
如果满足以下所有条件,则接受:
- - 步骤2中的所有成功标准均已满足
- 配置差异仅包含预期变更行
- 所有基线指标均在可接受的偏差阈值内
- 未检测到意外严重偏差
- 观察期已过且无回归
⚠️ 写入 — 如果回滚:
[Cisco] configure replace flash:pre-change-[工单号]-[日期].cfg force
[JunOS] rollback 1 然后 commit
[EOS] configure replace flash:pre-change-[工单号]-[日期].cfg
回滚后,重新运行步骤4变更后验证,确认设备已恢复到变更前状态。
阈值表
可接受的偏差阈值
| 指标 | 正常偏差 | 警告 | 回滚触发 |
|---|
| IPv4路由数 | 基线的±2% | 基线的±5% | >10%或计划外丢失 |
| IPv6路由数 |
基线的±2% | 基线的±5% | >10%