在管理一批思科设备时,配置备份与恢复是常见的自动化需求。Ansible的网络模块可以直接操作ios设备,但使用前需要明确:设备是IOS还是IOS-XE,是否开启了enable特权,以及管理网络是否允许SSH访问。下面从备份、恢复、风险控制和验证几个方面说明实际操作中的取舍。
备份判断:先确认设备版本与enable状态
对于思科设备,备份的第一步是确认设备支持的网络操作系统。常见IOS和IOS-XE在大多数命令上兼容,但个别版本有差异。可在playbook中用ios_facts收集版本信息,再用when条件区分不同命令。备份本身通过ios_command模块执行show running-config,并用register保存输出,随后用copy模块或模板机制写入本地文件。关键在于判断设备是否处于enable模式,若未提前进入,show running-config会返回空或受限信息,需要先使用enable参数及密码。文件命名建议包含主机名和日期时间,方便后续对比。
这里需要结合版本确认ios_facts返回的ansible_net_version是否完整,以及设备是否允许用enable参数进入特权模式。如果依赖AAA认证,则要提前确认账号权限。命名建议用时间戳生成,避免覆盖旧文件。
恢复操作:从测试环境到设备flash的步骤
恢复配置时,通常使用ios_config模块的src参数指向备份文件。在实际推送前,应先在测试环境验证配置文件的语法和缩进,思科对空格和制表符较敏感。建议先将备份文件通过copy模块传到设备flash,再用replace命令或config merge进行恢复。对于会影响管理接口的配置,比如interface或ip address变更,应在恢复前确认当前会话是否可能中断,必要时通过console口或管理VLAN的独立IP操作。每次恢复后,务必在设备上执行write memory确认配置已写入启动配置。
判断点在于备份文件是完整运行配置还是部分配置。如果包含管理IP,恢复前要确认SSH会话是否会中断。传给flash是为了让replace稳定读取,存储不足也可直接src,但格式错误时回滚困难,稳妥为先传文件。
风险控制:避免恢复后设备不可达
配置恢复最大的风险是覆盖了当前运行配置并导致设备不可达。为降低风险,可以使用ios_config模块的defaults参数或配置替换前的热备份。Ansible本身无法感知设备是否因配置变更而失去响应,因此建议在play中设置timeout连接超时,并利用wait_for模块检测恢复后设备能否重新ping通或响应SSH。若目标设备已处于错误状态,可考虑通过console服务器或带外管理恢复。另一方面,不要同时对所有设备推送恢复,先选取一台非核心设备验证,再分批实施。
需要给wait_for配置足够的重试次数和间隔,因为设备重启SSH可能需要30秒以上。同时timeout要大于保存配置的时间,否则会误判。必须保留热备份,并注意write memory会覆盖startup-config。
验证与常见坑:分页、行尾符、配置比对
备份和恢复的最终验证不能只看命令是否执行成功。可在备份后,用show running-config | include hostname来确认设备确实返回了配置。恢复后,比较恢复文件与当前运行配置的差异,在Ansible中可以用ios_command执行show running-config与备份文件比对,或者用ansible.utils.cli_parse模块提取关键字段。检查内容至少包括hostname、enable密码、接口IP、路由和ACL。若差异超过容忍范围,应回滚至备份点。对于关键设备,可额外通过show startup-config确认持久化结果。
这里专门提两个备课时容易踩到的坑。第一,很多思科设备默认开启分页,show running-config的输出会被截断,备份文件不完整。所以在备份前要执行terminal length 0,或者通过ios_command的environment参数设置。第二,Windows环境下生成的备份文件可能带有CRLF行尾符,上传到设备后会被拒绝或者破坏配置格式,需要在保存文件时确保使用LF。另外,恢复时用src直接加载整个文件,实际上会执行合并或替换逻辑,如果备份文件里包含已经不存在的接口或VLAN,设备可能会报错。恢复前可以用show running-config | include interface判断一下,或者手动清理无关配置。
验证配置差异时,不要只看diff结果,要理解diff输出的含义。例如,接口下多了一条description,可能是正常的增量更新;如果少了ip address,那就是恢复没有生效。用cli_parse提取关键字段时,最好先确认对应平台的结构化输出格式是否支持,否则解析结果可能为空。
整体而言,Ansible做思科配置备份与恢复可行,但每个环节都要留检查手段。备份确认enable和分页,恢复先传文件再replace,最后对照备份验证。如果设备不可达,不要盲目重试,先通过console确认。分批操作、保留热备份、设置超时,比技巧更重要。