Estou mudando nossos servidores DNS. Como parte disso, as entradas de DNS para nossas interfaces de servidor configuradas estaticamente precisam ser atualizadas. No entanto, estou correndo em um obstáculo. As interfaces atualmente possuem 2 entradas definidas e gostaria de substituí-las por 3.
Este manual demonstra o problema usando o replace
. Ele substituirá o DNS1 e o DNS2, mas não poderá adicionar o DNS3. lineinfile
tem problemas semelhantes.
---
- hosts: canary
vars:
nameservers: [ '', 192.0.2.1, 192.0.2.2, 192.0.2.3 ]
tasks:
- name: nameservers
replace:
path: /etc/sysconfig/network-scripts/ifcfg-{{ansible_default_ipv4.interface}}
replace: \1="{{ item.1 }}"
regexp: (DNS{{ item.0 }}).+
with_indexed_items:
- "{{ nameservers }}"
when: ansible_distribution == "CentOS" and "nameservers" not in group_names
tags:
- debug
Qual é o problema
lineinfile
?Se a linha regexp estiver lá, a linha será substituída; caso contrário, uma nova linha será adicionada.
Este código substituirá
DNS<N>
pelo valor correspondente desrv_list
se estiver presente no arquivo, ou adicionará uma nova linha se o DNS com tal índice não estiver definido no arquivo.