Como adicionar resolvers via ansible no Ubuntu 16.04?

2

Estou iniciando algumas atualizações do Ubuntu 14.04 e criando alguns livros didáticos Ansible ao longo do caminho para serem usados em vários outros hosts mais tarde. Primeiro, está configurando /etc/resolv.conf para apontar para os recursos DNS locais.

O método antigo de provisionamento /etc/resolv.conf era um script de shell com awk / sed / grep que era executado sobre ssh , que editava o arquivo diretamente. Este parece ser um não-não em 16.04 que adverte contra isso com:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN .

A página man de resolvconf menciona a adição de dns-nameservers em /etc/network/interfaces e também uma observação que desestimula o uso de resolvconf para adicionar as informações do servidor de nomes manualmente:

The administrator can run resolvconf from the command line...but this is not normally necessary or advisable.

Parece que a única opção que resta é editar /etc/network/interfaces , mas como especifico a interface de rede no playbook? Não é o padrão eth0..1..2 , mas uma mistura de sopa de letrinhas como enp6s0 ou ens18 , que eu não entendo muito bem. Em uma atualização diferente, fui capaz de substituir essa nomeação estranha esquematizada, adicionando biosdevname=0 ao grub, mas isso não parece ter nenhum efeito nesse novo host, mesmo depois de executar update-grub e reinicializar.

Existe alguma maneira de dizer ansible para encontrar o nic principal e adicionar uma linha de servidor de nomes em /etc/network/interfaces para esses hosts? Meu manual de jogo atual está abaixo:

(exemplo de trabalho atualizado da resposta aceita)

- 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
    
por Server Fault 11.05.2018 / 18:04

2 respostas

1

ansible_default_ipv4['interface'] contém o nome da interface. Eu acho correndo

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

útil para determinar quais variáveis ansible define.

    
por 11.05.2018 / 21:36
0

Apenas para responder à parte do manual da pergunta para qualquer outra pessoa - acabei removendo manualmente o pacote resolvconf e foi capaz de abrir mão de qualquer movimento com as regras udev . O net.ifnames=0 boot arg adicionado é confuso, mas aparentemente necessário, em alguns contextos, para a nomeação de ethX nic. Eu tenho outros 16.04 hosts que foram meses de instalação que não requerem esse argumento de boot, então alguma outra coisa está aparentemente envolvida.

    
por 11.05.2018 / 20:27