厉害!外国网络工程师用Ansible给思科IOS设备升级!

简介: 厉害!外国网络工程师用Ansible给思科IOS设备升级!


一、定义任务

以前升级路由器的方式是通过 ssh 进入每个设备,然后 tftp 或 scp 将映像文件复制到闪存并更改引导顺序。

特别是,路由器是Cisco uBR 10k 路由器系列有很多不同的路由引擎。在这种环境中,它们被称为 PRE4 和 PRE5,每种类型都有专属的镜像文件(.bin)。线路卡还需要一个每种路由引擎对应的板块也要求特定的 .pkg 文件。许多路由器具有冗余路由引擎,因此也需要将镜像从主磁盘上复制一份到备用磁盘上。

完成升级所需的步骤如下所示:

  • 确定设备是否有冗余路由引擎
  • 确定路由引擎是 PRE4 还是 PRE5
  • 将boot镜像和线路卡镜像正确地复制到设备
  • 更改系统启动顺序
  • 保存配置
  • 重启


设置Ansible任务

如果你是刚接触Ansible,还不完全了解,建议先去学一下Ansible的基础知识,不过你放心,Ansible简单易学。

想了一下,我决定用最简单的方法来检查目标设备是否有冗余路由引擎,就是通过SNMP查询,使用CISCO-RF-MIB的cRFStatusPeerUnitState (1.3.6.1.4.1.9.9.176.1.1.4) oid ,所以我使用了snmp_query模块设置了第一个任务:

- name: Collect
  snmp_query:
    host: "{{ inventory_hostname }}"
    version: 2c
    community: "{{ snmp_community }}"
    oid:
      - 1.3.6.1.4.1.9.9.176.1.1.4.0
  register: output

然后结果就看这个output变量了。如果值等于9,则表明是有冗余引擎的;如果值等于2(disabled),则表明设备为非冗余的。其他值,则说明有问题,可能会升级失败,所以不能继续。

- name: Device is redundant
  set_fact:
    redundant: True
  when: output['1.3.6.1.4.1.9.9.176.1.1.4.0'] == 9
- name: The device is not redundant
  set_fact:
    redundant: False
  when: output['1.3.6.1.4.1.9.9.176.1.1.4.0'] == 2
- name: Exit
  fail:
    msg: "Broken"
  when: output['1.3.6.1.4.1.9.9.176.1.1.4.0'] not in [2, 9]

接下来,就是确定路由引擎是 PRE4 还是 PRE5?一开始我也是打算继续使用snmp来完成,然而我发现它会对每个设备进行全部轮询,这样我会得到一堆我不感兴趣的信息。最后我想到一个简单的办法,不错的办法,从屏幕捕获,例如当我们使用“show version”的时候,就可以看到,如果是PRE4设备,有一行显示UBR10K4,如果是PRE5,是显示UBR10K5,所以我打算使用在Ansible新版本中的ios_command模块,这样就可以从捕获的信息那里获取一些数据,然后判断,把结果赋值给“pre”变量。

- name: Collect version
  ios_command:
    host: "{{ inventory_hostname }}"
    username: "{{ device_ssh_username }}"
    password: "{{ device_ssh_password }}"
    commands: "show version"
  register: version
- name: Pre5
  set_fact:
    pre: 5
  when: '"UBR10K5" in version["stdout"][0]'
- name: Pre4
  set_fact:
    pre: 4
  when: '"UBR10K4" in version["stdout"][0]'

现在,我们也已经有所有的信息了,接下来就是需要把镜像copy到设备上

所以,我使用了ntc-ansible中的ntc_file_copy模块。

- name: Copy Pre4 boot image
  ntc_file_copy:
    host: "{{ inventory_hostname }}"
    username: "{{ device_ssh_username }}"
    password: "{{ device_ssh_password }}"
    platform: cisco_ios_ssh
    local_file: "{{ cmts_boot_image_pre4 }}"
    remote_file: "{{ cmts_boot_image_pre4 }}"
    file_system: "disk0:"
  when: pre == 4
- name: Copy Pre4 boot image redundant
  ntc_file_copy:
    host: "{{ inventory_hostname }}"
    username: "{{ device_ssh_username }}"
    password: "{{ device_ssh_password }}"
    platform: cisco_ios_ssh
    local_file: "{{ cmts_boot_image_pre4 }}"
    remote_file: "{{ cmts_boot_image_pre4 }}"
    file_system: "stby-disk0:"
  when: pre == 4 and redundant

实际上Playbook还有一些任务,比如把linecard镜像和PRE5不同的系统文件,为了简单这些就省略了。(欢迎关注公众号@网络工程师阿龙)

一旦上述文件都传完后,接下来就需要更改一些boot顺序。这里我使用Ansible的ios_config 模块,这模块在Ansible2.1有提供。

如果你配置需要修改一下然后再保存,这个可以通过handler来完成。以PRE5为例(这里就省略了为PRE4设置):

- name: Configure startup
  ios_config:
    lines:
      - boot-start-marker
      - boot system disk0:{{ cmts_boot_image_pre5 }}
      - boot-end-marker
    before: ['default boot system']
    replace: block
    host: '{{ inventory_hostname }}'
    username: "{{ device_ssh_username }}"
    password: "{{ device_ssh_password }}"
  when: pre == 5
  notify: save config
handlers:
- name: save config
  ios_command:
    host: "{{ inventory_hostname }}"
    username: "{{ device_ssh_username }}"
    password: "{{ device_ssh_password }}"
    commands: "write mem"

重启

上面列举的仅是完成设备导入新版本的工作,之后它们还需要重启

可以在上述代码handler中添加“reload”命令来完成,但你应该在一个维护窗口来完成重启。另外,Playbook可以轻松地创建使用snmp_device_version 模块来获取当前版本是否是我们期望的版本,如果不是,则根据上述设置后再次重启。

总结

虽然本期的老外的这个Playbook可能不能完全帮助到你,但老外还是希望通过分享一些想法给龙哥的粉丝,让大家知道我们手中有些的工作是如何通过Ansible来实现自动化运维我们的网络。

相关文章
|
1天前
|
安全 网络协议 网络安全
|
26天前
|
安全 物联网 定位技术
2G网络和基站的撤销对物联网设备的影响
2G网络和基站的撤销对物联网设备的影响是多方面的,以下是对这一影响的详细分析:
2G网络和基站的撤销对物联网设备的影响
|
19天前
|
传感器 物联网 人机交互
物联网:物联网,作为新一代信息技术的重要组成部分,通过智能感知、识别技术与普适计算等通信感知技术,将各种信息传感设备与互联网结合起来而形成的一个巨大网络,实现了物物相连、人物相连,开启了万物互联的新时代。
在21世纪,物联网(IoT)作为新一代信息技术的核心,正以前所未有的速度重塑生活、工作和社会结构。本文首先介绍了物联网的概念及其在各领域的广泛应用,强调其技术融合性、广泛的应用范围以及数据驱动的特点。接着,详细阐述了物联网行业的现状和发展趋势,包括政策支持、关键技术突破和应用场景深化。此外,还探讨了物联网面临的挑战与机遇,并展望了其未来在技术创新和模式创新方面的潜力。物联网行业正以其独特魅力引领科技发展潮流,有望成为推动全球经济发展的新引擎。
|
2月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
112 6
|
2月前
|
传感器 SQL 运维
常见网络安全设备:IPS(入侵防御系统)零基础入门到精通,收藏这一篇就够了
常见网络安全设备:IPS(入侵防御系统)零基础入门到精通,收藏这一篇就够了
87 3
|
1月前
|
缓存 运维 监控
|
2月前
|
自然语言处理 C# 开发者
Uno Platform多语言开发秘籍大公开:轻松驾驭全球用户,一键切换语言,让你的应用成为跨文化交流的桥梁!
【8月更文挑战第31天】Uno Platform 是一个强大的开源框架,允许使用 C# 和 XAML 构建跨平台的原生移动、Web 和桌面应用程序。本文详细介绍如何通过 Uno Platform 创建多语言应用,包括准备工作、设置多语言资源、XAML 中引用资源、C# 中加载资源以及处理语言更改。通过简单的步骤和示例代码,帮助开发者轻松实现应用的国际化。
35 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
TensorFlow 中的循环神经网络超厉害!从理论到实践详解,带你领略 RNN 的强大魅力!
【8月更文挑战第31天】循环神经网络(RNN)在人工智能领域扮演着重要角色,尤其在TensorFlow框架下处理序列数据时展现出强大功能。RNN具有记忆能力,能捕捉序列中的长期依赖关系,适用于自然语言处理、机器翻译和语音识别等多个领域。尽管存在长期依赖和梯度消失等问题,但通过LSTM和GRU等改进结构可以有效解决。在TensorFlow中实现RNN十分简便,为处理复杂序列数据提供了有力支持。
27 0
|
2月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享安卓与iOS开发中的线程管理比较
【8月更文挑战第30天】本文将探讨网络安全与信息安全的重要性,并分享关于网络安全漏洞、加密技术和安全意识的知识。我们将了解常见的网络攻击类型和防御策略,以及如何通过加密技术和提高安全意识来保护个人和组织的信息安全。
|
2天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:守护数字世界的坚盾
本文旨在探讨网络安全与信息安全领域的关键要素,包括网络安全漏洞、加密技术以及安全意识的重要性。通过深入浅出的方式,帮助读者理解这些概念,并强调每个人都应具备基本的安全防范意识,共同维护数字世界的安全。

热门文章

最新文章