Назад | Перейти на главную страницу

замените две строки на три строки, используя ansible

Я меняю наши DNS-серверы. В рамках этого необходимо обновить записи DNS для наших статически настроенных серверных интерфейсов. Однако я наткнулся на загвоздку. В настоящее время для интерфейсов определены 2 записи, и я хотел бы заменить их на 3.

Этот сценарий демонстрирует проблему с использованием replace. Он заменит DNS1 и DNS2, но не сможет добавить DNS3. lineinfile есть похожие проблемы.

---
- 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

В чем проблема lineinfile?
Если есть регулярное выражение строки, строка будет заменена; в противном случае будет добавлена ​​новая строка.

---
- 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 }}"

Этот код заменит DNS<N> с соответствующим значением от srv_list если он присутствует в файле, или добавить новую строку, если DNS с таким индексом не определен в файле.