У меня есть 3 задачи.
первая задача проверяет, содержит ли файл <ip> <hostname>
pattern
вторая задача добавляет строку, если искомая строка отсутствует.
третье задание исправляет строку, если она плохая.
3 задачи работают независимо друг от друга, но я хочу, чтобы они выполнялись вместе как-то связанными.
У меня есть следующий playbook, использующий в качестве модели / etc / hosts.
---
- name: check hosts playbook
hosts: centos
tasks:
- name: check whether a line in the form of '<ip> <hostname>' exists
lineinfile:
path: /var/tmp/hosts
regexp: '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s\w+'
state: absent
check_mode: true
register: line_exists
- name: append_host_file
lineinfile:
path: /var/tmp/hosts
insertafter: '^(127\.0\.0\.1|)(?:\d{1,3}\.){3}\d{1,3}'
line: '{{ ansible_default_ipv4.address }} {{ansible_hostname }}'
backup: yes
when: not line_exists.changed
- name: correct_hosts_file
lineinfile:
path: /var/tmp/hosts
regexp: '^(?!{{ ansible_default_ipv4.address }}\s{{ ansible_hostname }})(?:\d{1,3}\.){3}\d{1,3}\s\w+'
line: '{{ ansible_default_ipv4.address }} {{ansible_hostname }}'
when: line_exists.changed
Проблема, с которой я сталкиваюсь, заключается в том, что правильная задача выполняется при правильной строке ... поэтому мне нужно использовать какой-то другой вид критериев, чтобы предотвратить ее выполнение при правильной строке в файле.если строка в файле неправильная, она работает, потому что заменяет ее.