Я пытаюсь сообщить ansible добавить строку «ALL: ALL» в /etc/hosts.deny всякий раз, когда этой строки еще нет. Вот моя задача:
- name: Ensure hosts.deny has default ALL entry
lineinfile: dest="/etc/hosts.deny" regexp="^\s*ALL\s*:" line="{{ deny_all }}" insertbefore=EOF
Это все в роли, называемой соответствием, поэтому в соответствии/vars/main.yml у меня есть:
deny_all: 'ALL : ALL'
Это должно было обойти проблему парсера с одиноким двоеточием.
Я также пробовал эти регулярные выражения, но без радости:
- "^\s*ВСЕ"
- "ВСЕ"
- "ФОО"
Я заменил существующий /etc/host.deny совершенно пустым файлом, и все равно эта задача возвращает «ok» каждый раз, когда я ее запускаю. Что я здесь пропустил? Я уверен, что это что-то действительно до боли очевидное, но я просто не вижу этого.
Спасибо.
--- Отредактировано с новыми подробностями---
Я изменил исходную задачу, и теперь она выглядит так:
- name: Ensure hosts.deny has default ALL entry
lineinfile: dest='/etc/hosts.deny' line='ALL' insertbefore=EOF create=True state=present
Затем я удалил файл /etc/hosts.deny из удаленной системы. Запуск этой задачи (через теги) дает «ok» вместо создания файла:
# ansible-playbook compliance -i inventory.yml --tags deny -l us202
PLAY [Compliance] *******************************************
TASK: [Ensure /etc/hosts.deny has default ALL entry *********
ok: [us202]
PLAY RECAP **************************************************
us202 : ok=1 changed=0 unreachable=0 failed=0
#
Как это возможно?