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