📑 知识精讲

本课程介绍了使用Ansible对Cisco网络设备进行自动化配置的基础内容,讲解了Ansible的架构、核心文件、Playbook编写规则、常用模块用法,还分享了实用的排错与开发技巧,帮助学习者快速掌握基于Ansible的思科网络自动化方法。

课程概述与Ansible基础介绍

  • 课程目标:讲解Ansible在思科设备自动化中的应用,涵盖架构、核心组件、文件编写和交互方法,包含两个实验练习:配置网络设备与采集网络数据,课程推荐参考Ansible官方在线文档学习。

  • Ansible核心特点:Ansible是无代理(agentless)配置管理工具,可自动化多域环境(园区网、数据中心、云、服务商、虚拟网络)的设备,支持自定义模块适配仅支持Telnet/SNMP的老旧设备。

  • 🚩重点:Ansible核心文件均使用YAML语法,必须掌握YAML格式规范。**YAML文件以三个连字符---开头表示play列表开始**。

  • 🚩重点:与传统基于代理的配置工具不同,Ansible默认工作在无代理模式,Python代码在Ansible控制节点本地运行,通过SSH/NETCONF/REST等协议与网络设备通信,不需要将代码复制到目标设备。

Ansible核心组件与文件

  • Ansible配置文件(ansible.cfg):用于声明部署细节,默认路径为/etc/ansible/ansible.cfg,Ansible按优先级顺序搜索配置文件:1. 当前目录的ansible.cfg;2. 用户home目录的ansible.cfg;3. /etc/ansible/ansible.cfg。推荐将配置文件放在项目根目录,实现每个项目独立配置。

  • Ansible Inventory文件(清单文件):定义被Ansible管理的目标设备,默认路径为/etc/ansible/hosts,如果修改路径或文件名,执行playbook时需要添加-i <文件名>参数指定。推荐也放在项目根目录。

    • 可以将主机按用途/位置分组,支持嵌套分组,所有设备默认属于隐式分组all

    • 支持INI和YAML两种格式,支持通配符、正则表达式匹配目标;

    • 支持定义主机变量组变量,更具体的变量会覆盖更通用的变量(如dc_east:vars会覆盖all:vars中同名变量)。

  • Ansible Playbook:是自动化任务的集合,一个playbook包含一个或多个play,每个play是一组任务的映射,用于定义目标设备、连接方式和执行任务。

    • 语法结构:name(play名称,执行时显示)→ hosts(指定目标设备组)→ connection(连接类型,网络设备使用network_cli提供SSH持久连接)→ gather_facts(默认开启,网络自动化可设为no提升性能)→ tasks(任务列表,顺序执行)。

    • 任务属性:通过模块执行,支持参数键值对,每个任务有可选名称便于运行时追踪。

  • 企业级Ansible:基础Ansible是命令行工具,企业级功能由AWX(开源版)和Ansible Tower(红帽商业版)提供,支持RBAC权限控制、LDAP认证、图形化界面、日志、Git集成、API访问、报表等功能,二者关系类似Fedora和RHEL。

Ansible工作流程

  • 服务器自动化工作流程:1. 运维人员在控制节点部署playbook和模块;2. Ansible默认通过SSH连接远程服务器,复制Python模块到目标主机;3. 在目标主机执行模块任务,完成后删除模块,控制节点返回执行状态;4. 循环执行后续任务。

  • 网络设备自动化工作流程:和服务器流程的最大区别是Python代码全部在Ansible控制节点本地运行,不会向网络设备复制任何代码,仅通过SSH发送配置命令或获取数据,可同时管理Inventory中定义的多台设备。

Ansible常用思科模块详解

  • ios_config模块:Ansible 2.1版本引入,用于对Cisco IOS设备进行配置修改和配置备份,是最常用的配置模块。

    • 常用参数:commands(别名lines,要发送的配置命令列表)、src(要推送的配置文件路径),commandssrc互斥,只能使用其一;

    • 🚩重点:模块具有幂等性,同一个任务只会修改一次配置,重复执行playbook不会重复修改,如果重复执行仍然发生变更说明模块存在bug或配置逻辑错误;

    • 支持从变量文件拉取变量,用{{ 变量名 }}引用变量,实现配置的动态生成。

  • ios_facts模块:用于从思科IOS/IOS-XR/NX-OS设备收集结构化设备信息。

    • 支持参数gather_subset选择收集的事实范围:all收集全部、!hardware排除硬件信息、interfaces仅收集接口信息、min仅收集最小基础信息;

    • 默认收集所有基础信息,返回结果为JSON格式,所有网络事实键都以ansible_net_为前缀,可以用register关键字将结果保存为字典变量供后续任务使用;

    • 需要开启verbose模式或配合debug模块才能在终端查看收集到的信息。

  • ios_command模块:用于在思科IOS设备执行任意用户指定的show命令,将返回结果保存为变量。

    • 可以同时发送多个命令,返回结果保存在stdout列表中,列表从0开始索引,stdout[0]对应第一个命令的输出,stdout[1]对应第二个命令的输出;

    • 可用于备份设备配置:将获取的配置保存到按设备名+日期命名的文件中,实现自动化配置备份。

Playbook执行方法

  • 基础执行命令格式:

$ ansible-playbook -i inventory view_push_snmp.yml

参数说明:

  • ansible-playbook:执行playbook的命令行程序

  • -i inventory:指定Inventory文件路径

  • view_push_snmp.yml:要执行的playbook文件

  • 不指定-i的替代方案:1. 使用默认路径/etc/ansible/hosts;2. 配置环境变量ANSIBLE_INVENTORY;3. 在ansible.cfg中修改默认路径。

  • 🚩排错技巧:执行playbook时添加-v参数开启verbose模式,可以逐行显示执行过程,便于定位问题。

Cisco支持的Ansible模块

Ansible排错与开发技巧

  • Playbook排障技巧

    1. 注释隔离法:使用#注释掉暂时不需要测试的任务,只保留要调试的单个任务,逐步排查问题,适合定位YAML缩进错误、语法错误;

    2. 检查变量拼写:Ansible对变量拼写敏感,单复数拼写错误、关键字拼写错误都会导致找不到变量,需要严格和定义处保持一致;

    3. 解决变量优先级问题:Ansible变量可保存在多个位置,同名变量遵循优先级规则,调试时可将变量直接写在playbook中,利用playbook变量高优先级的特性排除冲突。

  • 模板开发技巧

    1. 使用TD4A工具可视化调试:该工具分三栏显示变量、模板、渲染结果,点击即可生成最终配置,在推送前验证模板语法,节省重复执行playbook的时间;

    2. 拆分大模板:将大配置拆分为多个小模板,分别调试后再组合,降低排错难度;

    3. 善用内置变量:比如inventory_hostname等内置变量可直接使用,比如用它自动生成备份文件名,减少手动定义变量的工作量。

  • YAML缩进问题避免技巧

    1. 使用专业开发编辑器:如VS Code、Sublime Text,这类工具可以可视化显示空格/制表符、缩进辅助线,自动统一缩进格式,避免制表符和空格混合使用的问题;

    2. 不要手动数空格,出错时可重置缩进,重新逐层缩进,保证缩进层级一致。

💡 核心概念
  • 无代理架构:Ansible是无代理自动化工具,Python代码在控制节点本地运行,不需要在目标网络设备安装代理。

  • 幂等性:模块执行一次就会完成变更,重复执行不会重复修改,是配置管理模块的核心特性。

  • Inventory文件:Ansible用来定义目标设备的文件,支持分组、嵌套分组、主机变量、组变量。

  • Playbook:用YAML编写的自动化任务集合,包含一个或多个play,每个play定义目标和执行任务,顺序执行。

  • 变量优先级:更具体的变量(如主机变量、play内变量)优先级高于更通用的变量(如all组变量),会覆盖同名变量。

  • 执行playbook命令

ansible-playbook -i <inventory文件> <playbook文件>
✨ 课堂金句
  • "Having this solid conceptual foundation knowledge will allow you to better understand how ansible can be used on a production environment."

  • "Learning is different from when you learn from an expert. And how do you do that? You have to ask them. Ask the experts, everybody."

🎯 课程总结

📌 Ansible基础概述
  • 定义:Ansible是一款开源自动化工具,无需在被控设备安装代理(agentless),基于Python开发,通过SSH、NETCONF等协议实现设备管理。

  • 核心优势:支持多域环境(园区LAN、数据中心、云、服务提供商、虚拟网络),可替代手动流程,支持自定义模块适配旧设备(如Telnet/SNMP)。

  • 配置管理工具类型:代理型(agent-based)需在控制器与设备间运行进程,而Ansible属于无代理型(agentless)。

🔧 Ansible核心组件
  • Ansible配置文件(ansible.cfg)

    • 功能:声明部署细节(如SSH设置、权限升级、模块路径)。

    • 默认路径:/etc/ansible/ansible.cfg,支持自定义路径(当前目录→用户主目录→默认路径),推荐存放在项目根目录。

  • Ansible清单文件(Inventory)

    • 功能:定义被管理设备列表,支持分组和变量。

    • 默认路径:/etc/ansible/hosts,执行时可通过-i参数指定自定义清单。

    • 格式示例(INI-like):

      [dc_east]
      csr1kv1
      csr1kv2
      [dc_west]
      csr1kv3
      csr1kv4
    • 变量:支持主机变量(特定设备)和组变量(如[dc_east:vars]定义组内通用变量),优先级:组变量 > 全局变量。

  • Ansible模块(Modules)

    • 功能:执行具体任务的代码单元,多数用Python编写,支持幂等性(重复执行不改变结果)。

    • 常用Cisco模块:Cisco ACI、AireOS、IOS、IOS XR、Meraki、NSO、NX-OS、UCS、ASA等。

  • Ansible剧本(Playbook)

    • 功能:用YAML编写的任务序列,定义“剧本(Play)”和“任务(Task)”。

    • 结构示例:

      ---
      - name: 部署SNMP配置
        hosts: iosxe          # 目标设备组(来自清单)
        connection: network_cli  # 网络设备连接方式
        gather_facts: no      # 关闭事实收集
        tasks:
          - name: 查看SNMP社区
            ios_command:
              commands: show snmp community
          - name: 配置SNMP社区
            ios_config:
              commands:
                - snmp-server community public RO
                - snmp-server community private RW
🚀 Ansible工作流程
  1. 准备阶段:工程师编写Playbook和模块(可通过GitHub管理),定义清单文件。

  2. 执行阶段

    • Linux服务器:Ansible通过SSH将Python模块复制到目标服务器执行,完成后删除。

    • 网络设备:模块在控制节点本地运行,通过SSH/HTTP/NETCONF发送命令,不复制代码到设备。

  3. 反馈阶段:控制节点显示任务执行状态和返回数据。

💻 企业级应用
  • Ansible AWX:开源项目,提供RBAC、API访问、凭证管理、日志、Git集成和Web界面。

  • Ansible Tower:Red Hat商业版,基于AWX,增加企业级支持(如LDAP认证)。

📝 执行命令与文件要求
  • 执行Playbookansible-playbook -i <inventory_file> <playbook_file>,例如:

    ansible-playbook -i inventory view_push_snmp.yml
  • 必需文件:清单文件(Inventory)和剧本文件(Playbook)。

🔍 关键考点
  • 执行Playbook的命令:ansible-playbook

  • 无代理工具的特点:无需在被控设备安装软件。

  • 模块幂等性:确保重复执行任务结果一致。

 📝 待办事项
  • 实验任务:1. 使用Ansible配置网络设备;2. 使用Ansible收集网络数据

  • 阅读参考:Ansible官方文档 https://docs.ansible.com,第三方模块参考 Ansible Galaxy

  • 预习复习:掌握YAML语法,练习编写简单的Ansible Playbook管理思科设备

  • 工具准备:安装VS Code/Sublime Text用于编写YAML文件,可试用TD4A模板调试工具

1. 使用Ansible配置网络设备:

Open Chrome or Firefox and go to https://docs.ansible.com/ansible/9 for the main page. Click Ansible Documentation.

2. 使用Ansible收集网络数据:

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐