Для управления Firewalld в Ansible существует специальный модуль `firewalld`, который позволяет управлять правилами файервола, включая добавление/удаление портов, услуг и зон.
Допустим, вы хотите открыть определённый порт в firewalld, вы можете использовать следующую задачу в Ansible playbook:
```yaml
- name: Открыть порт в Firewalld
ansible.posix.firewalld:
port: "8080/tcp"
permanent: true
state: enabled
immediate: true
zone: public
```
Чтобы автоматически открывать порт в Firewalld на основе последнего добавленного порта в конфигурации HAProxy, вы должны выполнить несколько шагов:
1. Парсинг конфигурационного файла HAProxy, чтобы извлечь нужный порт.
2. Использование извлечённого значения порта в задаче Ansible для обновления Firewalld.
Для парсинга конфигурационного файла HAProxy вы можете использовать командную строку или написать скрипт на языке Python или другом, который сможет распарсить файл и найти последний добавленный порт.
В качестве конкретного примера в Ansible, можете использовать модуль `lineinfile` для поиска последнего добавленного порта в файле конфигурации и регистрации этого значения в переменную. Вот пример задачи, которая использует `shell` модуль для поиска и `set_fact` для назначения переменной:
```yaml
- name: Получить последний добавленный порт в HAProxy конфиг
shell: "grep 'bind \*:' /etc/haproxy/haproxy.cfg | tail -1 | awk -F':' '{print $2}'"
register: haproxy_port
- name: Установить значение извлеченного порта в переменную
set_fact:
new_haproxy_port: "{{ haproxy_port.stdout | regex_search('(\\d+)') | first }}"
- name: Открыть последний добавленный порт в HAProxy на Firewalld
ansible.posix.firewalld:
port: "{{ new_haproxy_port }}/tcp"
permanent: true
state: enabled
immediate: true
zone: public
when: new_haproxy_port is defined and new_haproxy_port | length > 0
```
Обратите внимание, что `grep`, `tail`, и `awk` используются для извлечения номера порта из последней строки в конфигурационном файле, который содержит `bind *:`. Потом устанавливается факт в Ansible, который используется в последующих задачах для управления Firewalld.
Такой подход требует, чтобы структура вашего файла конфигурации HAProxy была довольно стандартной и под каждый уникальный случай скорее всего потребуется свой парсер.
Кроме того, вы должны убедиться, что порт, который вы добавляете, является уникальным. Если же порты могут добавляться не только в конец файла, то необходим более сложный механизм для их отслеживания, возможно, с использованием системы контроля версий (например, Git hooks) и его логов для определения недавно добавленных портов.