ПРОБЛЕМА: Ansible 2.9 будет дублировать записи в поле «replace:» модуля замены.
ФАЙЛ ДЛЯ ИЗМЕНЕНИЯ (/etc/netplan/50-cloud-init.yaml):
network:
ethernets:
ens160:
addresses:
- 10.10.8.112/24
gateway4: 10.10.8.1
nameservers:
addresses:
- 10.10.8.15
version: 2
КОД:
- name: Check yaml has correct DNS values
hosts: guest
gather_facts: yes
become: yes
tasks:
- name: Adjust yaml file
replace:
path: /etc/netplan/50-cloud-init.yaml
after: ' addresses:'
before: ' version: 2'
regexp: '^(.+)$'
replace: ' - 10.10.8.110\n - 10.10.8.111\n search:\n - server.com\n optional: true'
РЕЗУЛЬТАТЫ:
- Если в исходном файле есть только одна запись, скажите «- 10.10.8.110», разделы будут заменены между «после» и «до». Однако при повторном запуске exp ansible дублирует записи.
После повторного запуска скрипта содержимое файла будет выглядеть следующим образом:
network:
ethernets:
ens160:
addresses:
- 10.10.8.112/24
gateway4: 10.10.8.1
nameservers:
addresses:
- 10.10.8.110
- 10.10.8.111
search:
- server.com
optional: true
- 10.10.8.110
- 10.10.8.111
search:
- server.com
optional: true
version: 2
Поверьте, это связано с идемпотентность и, возможно, может быть исправлена с помощью регулярного выражения. Однако я не знаю, как это сделать. Все, что я хочу сделать, это ВСЕГДА заменять все значения между «после» и «до».
Как я могу выполнить sh это?