substitua duas linhas por três linhas usando ansible

1

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 eu gostaria de substituí-las por 3.

Este manual demonstra o problema usando replace . Ele substituirá DNS1 e DNS2, mas não pode adicionar 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: ="{{ item.1 }}"
     regexp: (DNS{{ item.0 }}).+
    with_indexed_items:
    - "{{ nameservers }}" 
    when: ansible_distribution == "CentOS" and "nameservers" not in group_names
    tags:
    - debug
    
por 84104 04.08.2017 / 18:43

1 resposta

2

Qual é o problema com lineinfile ?
Se a linha regexp estiver lá, a linha será substituída; caso contrário, uma nova linha será adicionada.

---
- hosts: localhost
  gather_facts: no
  vars:
    srv_list: [192.168.0.1, 192.168.0.2, 192.168.0.3]
  tasks:
    - lineinfile:
        dest: /tmp/dns_test
        regexp: ^DNS{{ item.0+1 }}
        line: DNS{{ item.0+1 }}={{ item.1 }}
      with_indexed_items: "{{ srv_list }}"

Este código substituirá DNS<N> pelo valor correspondente de srv_list se estiver presente no arquivo ou adicionará nova linha se o DNS com tal índice não estiver definido no arquivo.

    
por 04.08.2017 / 18:57

Tags