настройка firewalld с помощью ansible с системными фактами

У меня есть следующая пьеса:

- command: "hostname -I"
  register: IP_ADRESSS
  changed_when: False
- firewalld:
    interface: eth0
    state: enabled
    permanent: yes
    zone: public
    source: {{ IP_ADDRESS.stdout }}
  notify: "RESTART FIREWALL"

Результат игры таков:

fatal: [test-server]: FAILED! => {
     "changed": false,
     "invocation": {
         "module_args": {
         "immediate": false,
         "interface": "eth0",
         "masquerade": null,
         "offline": null,
         "permanent": true,
         "port": null,
         "rich_rule": null,
         "service": null,
         "source": "10.0.0.5 "
         "state": "enabled"
         "timeout": 0,
         "zone": "public"
         }
     },
  "msg": "ERROR: Exception caught: org.fedoraproject.FirewallD1.Exception: INVALID_ADDR: 10.0.0.5  Permanent operation"
}

Ошибка возникает, когда значение «источник» исходит из значения «IP_ADDRESS.stdout». Результат IP_ADDRESS.stdout имеет добавленный пробел в конце IP-адреса, что приводит к сбою. Когда я «жестко кодирую» IP-адрес, он работает.

может ли кто-нибудь помочь мне, как исправить вывод stdout?

Спасибо


person NOOBIE    schedule 18.01.2018    source источник


Ответы (2)


Вы можете применить фильтр trim:

source: "{{ IP_ADDRESS.stdout | trim }}"
person Konstantin Suvorov    schedule 18.01.2018

Использование имени хоста -I может привести к другой проблеме, поскольку оно возвращает все IP-адреса на серверах. Другой вариант — использовать факты ansible_default_ipv4.address, которые вернут только один IP-адрес.

person drhojun    schedule 19.01.2018