Ansible 网络 FAQ

咱们可以怎样提高网络 playbook 的性能?

若咱们是在多个主机上运行则要考虑 strategy: free

strategy 插件告诉 Ansible,以何方式在多台主机上排序多个任务。策略 在 playbook 级别设置。

默认策略为 linear。策略被设置为 linear 下,Ansible 会等待当前任务在所有主机上运行完毕后,才在全部主机上启动下一任务。Ansible 可能有空闲的进程分叉,但在所有主机完成当前任务前不会使用他们。如果 playbook 中的每个任务都必须在所有主机上运行成功后,才能运行下一任务,那么就要使用 linear 策略。

而使用 free 的策略,Ansible 就会使用可用的进程分叉,尽可能快的在每台主机上执行任务。即使较早的任务仍在一台主机上运行,Ansible 也会在其他主机上执行稍后的任务。free 策略会更高效地使用可用进程分叉。如果咱们的 playbook 在每个任务上都停滞不前,等待着某台慢速主机,则可以考虑使用 strategy: free 来提高整体性能。

只在咱们万不得已时才执行 show running

由于网络操作系统处理查询的方式,show running 命令是在网络设备上执行的最耗费资源的命令。在咱们的 Ansible playbook 中使用该命令,将大大降低性能,尤其是在大型设备上;反复使用该命令会成倍增加性能损失。如果咱们有个先检查运行配置,然后执行更改,最后再检查一次运行配置的 playbook,那么咱们就会发现,该 playbook 的运行速度会非常慢。

只有在咱们万不得已时才使用 ProxyCommand

网络模组支持通过 ProxyCommand 参数,使用代理或跳转主机。不过,当咱们使用了跳转主机时,即使咱们使用的是某种持久连接类型(network_clinetconf),Ansible 也必须为每个任务打开一个新的 SSH 连接。为了最大限度地发挥 2.5 版本中引入的持久连接类型的性能优势,请尽可能避免使用跳转主机。

--forks 参数设置为与咱们的需求匹配

每次 Ansible 运行任务时,都会分叉自己的进程。--forks 参数定义了并发任务的数量 -- 若咱们保留默认设置 --forks=5,并在 10 台主机上运行某个 playbook,那么其中 5 台主机将不得不等待分叉进程。当然,咱们允许的分叉越多,Ansible 就将使用更多内存和计算能力。由于大多数网络任务都在控制主机上运行,这意味着咱们的笔记本电脑很快就会被 CPU/内存高负荷。

为什么有时候咱们的输出会被 ******** 代替?

Ansible 会将输出中,包括密码在内的任何标记了 no_log 的字符串,都替换为 ********。这样做的目的是保护敏感数据。大多数用户都乐意隐去他们的密码。不过,Ansible 会将与咱们密码匹配的所有字符串,都替换为 ********。若咱们在密码中使用了某个常用词,这可能会造成问题。例如,如果咱们选择 Admin 作为密码,Ansible 将以 ******** 替换咱们输出中 Admin 一词的所有实例。这可能会使咱们的输出难以阅读。为避免这个问题,就要选择一个不会在咱们 Ansible 输出任何地方中出现的安全密码。

为和 *_config 模组在使用缩写命令时,总是返回 changed=true

当咱们在网络设备上直接执行命令时,咱们可以使用缩写命令。例如,int g1/0/11interface GigabitEthernet1/0/11 的作用相同;shutshutdown 的作用相同。Ansible 网络的 *_command 模组可以使用缩写,因为他们经由网络操作系统运行命令。

不过,在提交配置时,网络操作系统会将缩写转换成长格式命令。无论咱们在 GigabitEthernet1/0/11 上使用 shut 还是 shutdown,配置中的结果都是一样的:shutdown

Ansible 网络的 *_config 模组会将咱们在 lines 中指定的命令文本,与配置中的文本进行比较。如果咱们在任务的 lines 小节中使用 shut,而配置读到的是 shutdown,那么即使配置已经正确,模组也会返回 changed=true。咱们的任务每次运行时,都会更新配置。

为避免这个问题,就要在 *_config 模组下使用长格式的命令:

---
- hosts: nxos-sw
  gather_facts: no

  tasks:
    - cisco.nxos.nxos_config:
        lines:
          - shutdown
        parents: interface Ethernet2/2
      register: res

    - debug:
        msg: "{{ res }}"

(End)

Last change: 2025-03-20, commit: 5c2c7d8

小额打赏,赞助 xfoss.com 长存......

微信 | 支付宝

若这里内容有帮助到你,请选择上述方式向 xfoss.com 捐赠。