У меня есть эта задача, которая находит 2 строки в sshd_config и изменяет их. Это отлично работает при первом запуске, он заменяет строки src строками dest. Но если я запускаю его во второй раз, после того, как 2 строки в файле уже верны, он добавляет 2 новые строки в конец файла.
Я попытался добавить состояние: присутствует, но это не изменило поведение.
- name: Configuring sshd_config
lineinfile:
path: /etc/ssh/sshd_config
regexp: "{{ item.src }}"
state: present
line: "{{ item.dest }}"
with_items:
- { src: "#PrintLastLog yes", dest: "PrintLastLog no" }
- { src: "#Banner none", dest: "Banner /etc/issue.net" }
Я ожидал, что он не будет соответствовать строкам src и не будет вносить никаких изменений.
То, что вы получаете, является точным ожидаемым поведением. Цитирование документация о параметре regexp
при использовании state: present
When modifying a line the regexp should typically match both the initial state of the line as well as its state after replacement by line to ensure idempotence.
Изменение вашей задачи следующим образом должно выполнить эту работу.
- name: Configuring sshd_config
lineinfile:
path: /etc/ssh/sshd_config
regexp: "{{ item.src }}"
state: present
line: "{{ item.dest }}"
with_items:
- { src: "^(# *)?PrintLastLog", dest: "PrintLastLog no" }
- { src: "^(# *)?Banner", dest: "Banner /etc/issue.net" }
Это будет соответствовать закомментированной строке (с необязательными пробелами после хеша) или новой измененной строке.