Я написал playbook, который будет добавлять новый IP-адрес в список IP-адресов. это код
- name: adding IP to faile2ban
lineinfile:
path: /home/ec2-user/test.conf
line: "{{ new_server_ip }}"
insertafter: "^#?ip_list"
https://github.com/shettypriy/ansible/blob/master/addingIPto%20the%20end. IP-адрес добавляется в файл, но не добавляется в конец последнего добавленного IP-адреса.
У меня есть файл test.conf, в который добавлен IP-адрес. Я хочу добавить новый IP-адрес после последнего обновленного IP-адреса Пример: ниже приведен образец содержимого файла test.conf.
ip_list = xx.xx.xx.xx yy.yy.yy.zz aa.aa.aa.aa
Мой желаемый вывод должен быть «new_server_ip», добавленным после aa.aa.aa.aa

Я думаю, что следующее должно работать для вас хорошо:
- name: adding IP to faile2ban
lineinfile:
dest: /home/ec2-user/test.conf
state: present
regexp: "^(#?ip_list(.*)$)"
backrefs: yes
line: '\1 {{ new_server_ip }}'
Итак, дело в том, что вы находите строку, начинающуюся с «ip_list», выбираете всю строку с помощью регулярного выражения, а затем выполняете обратную ссылку на выбранную строку в своей строке перед new_server_ip.
@ user11549576 Рад это слышать! Тогда, пожалуйста, примите мое решение как «ответ» :)
Приведенная ниже задача выполняет эту работу и является идемпотент.
"Modules should be idempotent, that is, running a module multiple times in a sequence should have the same effect as running it just once."
- lineinfile:
dest: /home/ec2-user/test.conf
regexp: '(?!.*{{ new_server_ip }}.*)^(ip_list.*)$'
line: '\1 {{ new_server_ip }}'
backrefs: yes
регулярное выражение первый смотреть вперед и соответствовать строке, только если новый_сервер_ip отсутствует.
пожалуйста, помогите мне с приведенным выше кодом