Ansible 网络常见问题解答
如何提高网络 playbook 的性能?
如果您在多个主机上运行,请考虑使用 strategy: free
strategy
插件告诉 Ansible 如何在多个主机上排序多个任务。 策略 在 playbook 级别设置。
默认策略是 linear
。当策略设置为 linear
时,Ansible 会等到当前任务在所有主机上运行完成后,才会在任何主机上开始下一个任务。Ansible 可能有空闲的 fork,但直到所有主机完成当前任务后才会使用它们。如果 playbook 中的每个任务都必须在所有主机上成功后才能运行下一个任务,请使用 linear
策略。
使用 free
策略,Ansible 使用可用的 fork 尽可能快地在每个主机上执行任务。即使较早的任务仍在某个主机上运行,Ansible 也会在其他主机上执行后续任务。 free
策略更有效地利用了可用的 fork。如果 playbook 在每个任务上都停滞不前,等待一个缓慢的主机,请考虑使用 strategy: free
来提高整体性能。
仅在绝对必要时执行 show running
show running
命令是在网络设备上执行的最消耗资源的命令,因为网络操作系统处理查询的方式。在 Ansible playbook 中使用该命令会显著降低性能,尤其是在大型设备上;重复使用该命令会成倍地降低性能。如果您有一个 playbook 先检查运行配置,然后执行更改,然后再检查运行配置,您应该预计该 playbook 运行速度会非常慢。
仅在绝对必要时使用 ProxyCommand
网络模块支持使用 代理或跳板主机 和 ProxyCommand
参数。但是,当您使用跳板主机时,Ansible 必须为每个任务打开一个新的 SSH 连接,即使您使用的是持久连接类型(network_cli
或 netconf
)。为了最大限度地发挥 2.5 版中引入的持久连接类型的性能优势,请尽可能避免使用跳板主机。
将 --forks
设置为满足您的需求
每次 Ansible 运行任务时,它都会派生自己的进程。 --forks
参数定义了并发任务的数量 - 如果您保留默认设置,即 --forks=5
,并且您在 10 台主机上运行 playbook,则其中 5 台主机必须等待 fork 可用。当然,您允许的 fork 越多,Ansible 使用的内存和处理能力就越多。由于大多数网络任务都在控制主机上运行,这意味着您的笔记本电脑可能会很快变得 CPU 或内存受限。
为什么我的输出有时会被替换为 ********
?
Ansible 将任何标记为 no_log
的字符串(包括密码)替换为 Ansible 输出中的 ********
。这是设计使然,旨在保护您的敏感数据。大多数用户都乐于看到他们的密码被隐藏。但是,Ansible 会将与您的密码匹配的每个字符串替换为 ********
。如果您使用常用词作为密码,这可能是一个问题。例如,如果您选择 Admin
作为密码,Ansible 将在输出中将每个 Admin
实例替换为 ********
。这可能会使您的输出更难阅读。为避免此问题,请选择一个安全的密码,该密码不会出现在 Ansible 输出的其他位置。
为什么 *_config
模块在使用缩写命令时总是返回 changed=true
?
当您在网络设备上直接发出命令时,可以使用缩写命令。例如, int g1/0/11
和 interface GigabitEthernet1/0/11
做的事情相同; shut
和 shutdown
做的事情相同。Ansible 网络 *_command
模块可以使用缩写,因为它们通过网络操作系统运行命令。
但是,在提交配置时,网络操作系统会将缩写转换为长格式命令。无论您在 GigabitEthernet1/0/11
上使用 shut
还是 shutdown
,配置中的结果都是相同的: shutdown
。
Ansible 网络 *_config
模块将您在 lines
中指定的命令文本与配置中的文本进行比较。如果您在任务的 lines
部分使用 shut
,而配置读取 shutdown
,则即使配置已正确,模块也会返回 changed=true
。您的任务每次运行时都会更新配置。
为避免此问题,请在 *_config
模块中使用长格式命令
---
- hosts: all
gather_facts: no
tasks:
- cisco.ios.ios_config:
lines:
- shutdown
parents: interface GigabitEthernet1/0/11