Я делаю задачу Ansible, которая добавляет правила UFW. Иногда нужно добавить много правил, и они добавляются последовательно (что, конечно, является ожидаемым поведением).
Но меня не волнует порядок правил, поскольку они не перекрываются (они это больше похоже на внесение в белый список от значений запрета на вход, запрета, запрета форвард по умолчанию.
Поэтому я подумал об использовании функций асинхронного / опроса из Ansible, чтобы сделать l oop выполнение asyn c, как в этом stackexchange devops thread .
Но, похоже, использование asyn c не работает для циклов или, по крайней мере, для моего l oop. Если я установлю опрос на 0, правила добавляются последовательно, как и раньше, и не быстрее. Если я установлю опрос на положительное число, он будет работать даже медленнее, чем раньше.
Фрагмент кода с кодом добавления правила:
- 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 }}"
В результате получается мой l oop запускает элемент за элементом, не быстрее.
О моей конфигурации:
- Ansible настроен для конвейерной передачи и подключается к удаленным хостам через мультиплексирование s sh.
- Ansible --version
2.5.1
Я мог бы сгенерировать файлы правил ufw или iptables, но вначале моя цель - взаимодействовать с UFW через ansible API .