Я пытаюсь добавить запись в мой /etc/hosts
файл, используя ansibles lineinfile
. Я хочу, чтобы логика была такой, если она находит запись 127.0.0.1 mysite.local
и ничего не делает, иначе вставляет ее после строки 127.0.1.1
127.0.0.1 localhost
127.0.1.1 mypc
127.0.0.1 mysite.local
У меня вставка после обработки детали, но, похоже, что в процессе поиска регулярных выражений не удается найти существующую запись, поэтому я продолжаю получать дубликаты вставки 127.0.0.1 mysite.local
В документах сказано:
При изменении строки регулярное выражение обычно должно соответствовать как начальному состоянию строки, так и ее состоянию после замены на строку, чтобы обеспечить идемпотентность.
Но я не уверен, как это относится к моему регулярному выражению. В настоящее время моя игра является;
- name: Add the site to hosts
lineinfile:
path: /etc/hosts
# Escape special chars
regex: "^{{ domain|regex_escape() }}"
line: "127.0.0.1 {{ domain }}"
insertafter: '127\.0\.1\.1'
firstmatch: yes
become: yes
, где domain
равно mysite.local
.
Я смотрел на этот ответ, но я почти уверен, что не могу использовать backrefs
, так как состояние документа;
Этот флаг немного меняет работу модуля; insertbefore и inserttafter будут игнорироваться, и если регулярное выражение не совпадает нигде в файле, файл будет оставлен без изменений.
Я пытался;
regex: '127\.0\.0\.1\s+?{{ domain|regex_escape() }}'
Без удачи либо