Ansible高级特性与网络自动化实践
1. Ansible高级特性概述
Ansible具备众多高级特性,可让你在各种场景下运行剧本。无论是以可控方式升级服务器集群、在安全隔离网络中操作设备,还是通过提示和标签控制剧本流程,Ansible都能发挥作用。它拥有庞大且不断增长的用户群体,其设计和发展围绕解决现实世界的问题。以下是一些关键高级特性:
- 异步任务执行 :可在Ansible中异步运行任务。
- 集群升级特性 :如对少量库存主机批量运行任务、若一定比例的主机失败则提前终止剧本、将任务委派给特定主机,甚至无论库存(或批次)大小只运行一次任务。
- 本地运行与localhost的区别 :了解在本地运行剧本与在localhost上运行的差异。
- SSH代理 :可通过堡垒主机在隔离网络上自动化执行任务。
- 敏感数据处理 :通过运行时提示用户或使用Ansible Vault,无需以未加密形式存储敏感数据。
- 标签运行任务 :可运行剧本任务的子集。
1.1 相关问题解答
以下是一些关于Ansible高级特性的问题及答案:
| 问题 | 选项 | 答案 |
| — | — | — |
| 哪个参数允许你配置在剧本中止前一批中允许失败的最大主机数? | A. percentage
B. max_fail
C. max_fail_percentage
D. max_percentage
E. fail_percentage | C |
| 你可以使用 –ask-vault-pass 参数来使用保险库以静态方式保存敏感数据,这句话是对是错? | A. True
B. False | A |
| 要异步运行剧本,你需要使用 async 关键字,这句话是对是错? | A. True
B. False | A |
1.2 进一步阅读
如果你安装了Passlib(Python 3的密码哈希库),vars_prompt将使用任何加密方案(如descrypt、md5crypt、sha56_crypt等)进行加密。你可以在 这里 了解更多信息。
2. 企业环境中使用Ansible
在企业环境中,我们可以从以下几个方面充分利用Ansible:
- 网络设备自动化 :使用Ansible自动化配置网络设备。
- 云与容器管理 :利用Ansible管理云环境和容器。
- 测试与故障排除 :掌握更高级的测试和故障排除策略。
- Ansible自动化控制器 :使用Ansible Automation Controller/AWX产品,它在企业环境的各种执行环境中提供丰富的基于角色的访问控制(RBAC)和审计功能。
- 执行环境 :深入了解执行环境。
3. 网络自动化的必要性
3.1 数据中心设计的演变
过去30年,数据中心的设计发生了巨大变化。在90年代,典型的数据中心充满了具有特定用途的物理机器,企业根据机器用途从不同供应商购买服务器。这种方式存在明显缺点,从识别服务器需求到交付存在显著延迟,且成本高昂,许多设备未得到充分利用。
3.2 虚拟化带来的变革
随着社会和企业在技术领域的发展,企业需要提高基础设施效率,缩短部署时间和降低成本,虚拟化应运而生。通过创建虚拟化集群,无需合适大小的物理主机,可预先配置多个主机并添加到资源池,然后在虚拟化平台中创建合适大小的机器。这一转变带来了诸多优势:
- 虚拟数据中心基础设施 :企业可从按项目部署基础设施转变为大型中央基础设施,通过软件和配置定义其行为,单个网络基础设施可支持多个项目,实现大规模部署、切换和服务。
- 工作负载与物理主机解耦 :历史上,工作负载与物理主机绑定,主机故障可能导致工作负载丢失。虚拟化解决了这个问题,工作负载与一个或多个虚拟主机绑定,可由虚拟化控制器在不同物理主机间自由移动。
3.3 网络配置管理的挑战
虚拟化带来的快速服务器配置和迁移能力,给网络配置管理带来了问题。以前,人工在安装新机器时调整配置细节是可行的,但现在机器在不同主机间自动迁移,系统需要自动更新网络配置。同时,VLAN的广泛应用提高了网络设备利用率和成本效益。在当今大规模虚拟环境中,人工管理网络配置不仅不切实际,而且容易出错。因此,自动化网络配置管理至关重要。
4. Ansible管理网络设备
4.1 支持的网络设备
Ansible可管理多种不同的网络设备,包括Arista EOS、Cisco ASA、Cisco IOS等,以及所有支持NETCONF的操作系统。
4.2 连接机制
Ansible使用以下五种主要连接类型与网络设备通信:
| 连接类型 | 描述 | 特点 |
| — | — | — |
| ansible.netcommon.network_cli | 大多数模块支持,最类似于Ansible与非网络模块的工作方式,通过SSH使用CLI | 执行开始时创建持久连接,整个执行过程保持连接,无需为每个任务提供凭据 |
| ansible.netcommon.netconf | 部分模块支持,通过SSH使用XML,将基于XML的配置应用于设备 | 执行开始时创建持久连接,整个执行过程保持连接,无需为每个任务提供凭据 |
| ansible.netcommon.httpapi | 少数模块支持,使用设备发布的HTTP API | 执行开始时创建持久连接,整个执行过程保持连接,无需为每个任务提供凭据 |
| local | 大多数设备支持,但已弃用,依赖供应商,通常需要Ansible执行主机上存在特定供应商的软件包 | 不创建持久连接,每个任务都必须提供凭据,尽量避免使用 |
| ssh | 适用于在白盒交换机硬件上原生运行Linux的新型网络设备,如Cumulus Networks | 可像操作普通Linux盒子一样通过SSH执行所有配置 |
了解Ansible如何连接和与网络硬件通信至关重要,这有助于构建Ansible剧本并在出现问题时进行调试。
4.3 网络自动化启用步骤
在使用Ansible进行网络自动化之前,需要确保满足以下要求:
- Ansible版本 :Ansible 2.5+
- 网络设备连接 :与网络设备建立正确的连接
以下是具体步骤:
1. 检查Ansible版本 :
$ ansible --version
此命令将显示Ansible安装的版本。
2. 检查网络设备连接性 :
如果Ansible版本为2.5或更高,可使用以下命令(根据实际情况调整选项)检查网络设备的连接性:
$ ansible all -i n1.example.org, -c network_cli -u my_user -k -m cisco.ios.ios_facts -e ansible_network_os=cisco.ios.ios all
此命令应返回设备的事实信息,证明可以连接。使用 -k 参数提示输入SSH登录密码。获取事实信息是关键步骤,可让Ansible了解设备的当前状态并做出相应操作。
4.4 替代测试设备
如果没有特定的网络硬件进行测试,可使用免费的NVIDIA Cumulus VX。下载适用于你的虚拟机管理程序(如VirtualBox)的镜像,像运行其他Linux虚拟机一样运行它。连接到NVIDIA Cumulus VX交换机后,可使用以下命令运行临时命令以收集交换机端口接口的信息:
$ ansible -i vx01.example.org, -u cumulus -m ansible.builtin.setup -a 'filter=ansible_swp*' all --ask-pass
如果成功,将输出关于Cumulus VX虚拟交换机端口接口的详细信息。
4.5 流程图
graph LR
A[检查Ansible版本] -->|版本 >= 2.5| B[检查网络设备连接性]
B --> C{连接成功?}
C -->|是| D[可进行网络自动化操作]
C -->|否| E[排查连接问题]
以上就是关于Ansible高级特性和网络自动化的详细介绍,希望能帮助你更好地使用Ansible进行网络管理。
5. Ansible网络模块与环境变量
5.1 可用的Ansible网络模块
Ansible提供了丰富的网络模块,可用于不同类型的网络设备配置和管理。这些模块可以帮助用户完成诸如接口配置、路由设置、VLAN管理等任务。不同的网络设备可能支持不同的模块,用户需要根据实际设备类型选择合适的模块。
5.2 网络设备的环境变量
在使用Ansible管理网络设备时,环境变量可以用于简化配置和提高效率。以下是一些常见的网络设备环境变量及其作用:
| 环境变量 | 作用 |
| — | — |
| ANSIBLE_NETWORK_USERNAME | 指定连接网络设备的用户名 |
| ANSIBLE_NETWORK_PASSWORD | 指定连接网络设备的密码 |
| ANSIBLE_NETWORK_AUTH_PASS | 指定用于特权模式的密码(如果需要) |
| ANSIBLE_NETWORK_TRANSPORT | 指定连接网络设备的传输协议,如 network_cli、netconf 等 |
通过设置这些环境变量,用户可以避免在每个剧本或命令中重复输入用户名、密码等信息,提高操作的便捷性。
6. 自定义条件语句在网络设备中的应用
6.1 自定义条件语句的必要性
在网络设备管理中,有时需要根据特定的条件来执行不同的任务。例如,根据设备的状态、接口的可用性等条件来决定是否执行某个配置操作。Ansible允许用户使用自定义条件语句来实现这种逻辑判断。
6.2 示例
以下是一个简单的示例,展示了如何在Ansible剧本中使用自定义条件语句:
- name: Check interface status
hosts: network_devices
tasks:
- name: Get interface facts
cisco.ios.ios_facts:
gather_subset: interfaces
register: interface_facts
- name: Configure interface if up
cisco.ios.ios_config:
lines:
- description Configured by Ansible
parents: interface GigabitEthernet0/1
when: interface_facts.ansible_facts.ansible_net_interfaces.GigabitEthernet0/1.active == true
在这个示例中,首先使用 cisco.ios.ios_facts 模块收集接口信息,然后根据接口是否处于活动状态来决定是否执行 cisco.ios.ios_config 模块进行配置。
6.3 流程图
graph LR
A[收集接口信息] --> B{接口是否活动?}
B -->|是| C[配置接口]
B -->|否| D[不执行配置]
7. 总结
7.1 关键要点回顾
- Ansible具有丰富的高级特性,可用于各种场景下的剧本运行和管理。
- 在企业环境中,Ansible可用于网络设备自动化、云与容器管理、测试与故障排除等多个方面。
- 网络自动化是应对现代数据中心虚拟化带来的网络配置管理挑战的必要手段。
- Ansible支持多种网络设备和连接机制,用户需要根据实际情况选择合适的连接方式。
- 自定义条件语句可以帮助用户根据特定条件执行不同的任务,提高网络管理的灵活性。
7.2 实践建议
- 在开始使用Ansible进行网络自动化之前,确保正确安装和配置Ansible,并了解目标网络设备的支持情况。
- 对于敏感数据,如密码等,建议使用Ansible Vault进行加密存储,避免明文存储带来的安全风险。
- 在编写Ansible剧本时,合理使用标签和条件语句,提高剧本的可维护性和灵活性。
- 定期进行测试和验证,确保网络配置的正确性和稳定性。
通过掌握Ansible的高级特性和网络自动化技术,用户可以更高效地管理网络设备,提高网络运维的效率和质量。
超级会员免费看

被折叠的 条评论
为什么被折叠?



