Как добавить резолверы через ansible в Ubuntu 16.04?

Я начинаю некоторые обновления Ubuntu 14.04 и попутно создаю несколько сценариев Ansible для использования на нескольких других хостах позже. Прежде всего, необходимо настроить /etc/resolv.conf для указания на локальные ресурсы DNS.

Старый метод подготовки /etc/resolv.conf представлял собой сценарий оболочки с awk / sed / grep, который запускал ssh , который редактировал файл напрямую. Кажется, это запрет 16.04, который предупреждает об этом с помощью:

# Dynamic resolv. # НЕ РЕДАКТИРУЙТЕ ЭТОТ ФАЙЛ вручную - ВАШИ ИЗМЕНЕНИЯ БУДУТ ПЕРЕЗАПИСАННЫ .

На странице руководства для resolvconf упоминается добавление DNS-серверов в / etc / network / interfaces , а также примечание, не рекомендующее использовать resolvconf для добавления информации о сервере имен вручную:

Администратор может запустить resolvconf из командной строки ... но обычно в этом нет необходимости или желательно.

Кажется, единственный вариант - отредактировать / etc / network / interfaces , но как мне указать сетевой интерфейс в playbook? Это не стандартный eth0..1..2 , а какая-то смесь алфавита вроде enp6s0 или ens18 , которую я не совсем понимаю. При другом обновлении Мне удалось переопределить эту схему странного именования, добавив biosdevname = 0 в grub, но, похоже, это не повлияло на этот новый хост даже после запуска update-grub и перезагрузки .

Есть ли способ указать ansible найти основной ник и добавить строку сервера имен в / etc / network / interfaces для этих хостов? Моя текущая нерабочая инструкция приведена ниже:

(обновленный рабочий пример из принятого ответа)

- hosts: all
  tasks:
    - name: setup resolv.conf in DMZ9 for Ubuntu 16.04 hosts
      when: ansible_default_ipv4.address is match("192.1.9")
      when: ansible_distribution_release is match ("xenial")
      interfaces_file:
        iface: "{{ ansible_default_ipv4['interface'] }}" 
        option: dns-nameservers
        value: 192.1.9.4 192.1.9.10
2
задан 12 May 2018 в 14:27
2 ответа

ansible_default_ipv4 ['interface'] содержит имя интерфейса. Я считаю, что запуск

ansible all -i localhost, -m setup -c local

помогает определить, какие переменные определяет ansible.

1
ответ дан 3 December 2019 в 12:32

Просто чтобы ответить на часть вопроса для всех, кто наткнулся на это, я закончил тем, что удалил пакет resolvconf вручную и смог отказаться от любого тидлинга с udev правила. Добавленный аргумент загрузки net.ifnames = 0 вызывает недоумение, но, по-видимому, в некоторых случаях необходим для именования ethX nic. У меня есть другие хосты 16.04, которые были настроены несколько месяцев назад и не нуждаются в этом загрузочном аргументе, так что, очевидно, задействовано что-то еще.

0
ответ дан 3 December 2019 в 12:32

Теги

Похожие вопросы