Ansible UFW:并行循环使执行速度更快

Ansible UFW: parallel loop to make execution faster

我正在做一个添加 UFW 规则的 Ansible 任务。有时需要添加很多规则,并且它们是按顺序添加的(这当然是预期的行为)。

但我不关心规则的顺序,因为它们不重叠(它们更像是拒绝进入、拒绝退出、拒绝转发默认值的白名单)。


所以我考虑使用 async/poll features of Ansible to make the loop execution async, as in this stackexchange devops thread

但是使用这种异步似乎对循环不起作用,或者至少对我的循环不起作用。 如果我将轮询设置为 0,规则将像以前一样按顺序添加,但不会更快。 如果我将 poll 设置为正数,它会比以前运行得更慢。


添加规则的代码片段:

- name: configure | rules
  ufw:
    rule: "{{ item.rule }}"
    interface: "{{ item.interface | default('') }}"
    direction: "{{ item.direction | default('in') }}"
    from_ip: "{{ item.from_ip | default('any') }}"
    to_ip: "{{ item.to_ip | default('any') }}"
    from_port: "{{ item.from_port | default('') }}"
    to_port: "{{ item.to_port | default('') }}"
    protocol: "{{ item.protocol | default('any') }}"
    route: "{{ item.route | default(omit) }}"
    log: "{{ item.log | default(false) }}"
    comment: "{{ item.comment | default(omit) }}"
  with_items: "{{ ufw_rules }}"
  register: _create_instances
  async: 1000
  poll: 0
  notify: reload ufw
  tags:
    - ufw-configure-rules


- name: Wait for creation to finish
  async_status:
    jid: "{{ item.ansible_job_id }}"
  register: _jobs
  until: _jobs.finished
  delay: 5  # Check every 5 seconds. Adjust as you like.                                                                                                                                                    
  retries: 10  # Retry up to 10 times. Adjust as needed.                                                                                                                                                    
  with_items: "{{ _create_instances.results }}"

结果是我的循环逐项运行,而不是更快。

关于我的配置:

  1. Ansible 配置为流水线并通过 ssh 多路复用连接到远程主机。
  2. Ansible --version 2.5.1

我可以生成一个 ufw 规则文件或 iptables,但我一开始的目标是通过 ansible API.

与 UFW 交互

考虑将任务分成更小的组。例如:

- name: configure | rules
  ufw:
  .
  .
  .
with_items: "{{ ufw_rules_set1 }}"
.
.
.

- name: configure next | rules
  ufw:
  .
  .
  .
with_items: "{{ ufw_rules_set2 }}"
.
.
.

然后异步开始工作,你会遇到大约 2 倍的加速。当然,阶段越多加速越多,但在某些时候你会达到最大值,进一步划分会让你变得更糟。