Eu tenho um manual do Ansible que uso para configurar novas VMs Linux. Recentemente, estava construindo uma nova VM com Ubuntu 22.04. O manual escreverá alguns arquivos de configuração relacionados à rede e outros enfeites, e então a etapa final do processo é usar o Ansibles ansible.builtin.package
para instalar todas as atualizações de pacotes.
- name: "Install updates"
become: true
ansible.builtin.package:
upgrade: "dist"
register: res_pkg_updates
notify: "reboot system"
tags: [ never, updates ]
Minha VM foi criada a partir de um modelo que fiz há alguns meses, então o sistema operacional Ubuntu tinha alguns pacotes desatualizados, o que não é inesperado. O problema é que um dos pacotes deve suportar ou fornecer funcionalidade de rede. Portanto, quando os package
módulos iniciam a VM no caminho de instalação das atualizações, o daemon de rede é reiniciado e a VM obtém o novo IP que foi configurado anteriormente em meu manual. Isso faz com que a tarefa do Ansible seja interrompida, aguardando uma reconexão com uma máquina que agora está em um IP diferente.
Quero saber como configurar minha ansible.builtin.package
tarefa para instalar atualizações de pacotes, mas não reiniciar nenhum serviço, especialmente rede.
Uma abordagem talvez diferente: eu usaria um IP estático para a VM, em vez de deixá-lo ser atribuído dinamicamente. Não reiniciar o daemon de rede pode causar outros problemas ao executar o manual
Ou você pode fazer isso
force: não impede que o gerenciador de pacotes force atualizações ou reinicie serviços
Separe a alteração do endereço IP da transação do pacote e do resto da peça.
Primeiro atualize os pacotes e faça outras coisas.
Por último nesta peça, atualize o endereço IP deste host, mas não ative a interface no novo IP ainda. Talvez alterando um arquivo de configuração. Agende uma reinicialização deste host um pouco no futuro, como com
ansible.posix.at
o módulo. E, por fim, atualize o DNS para que o inventário Ansible esteja ciente da alteração de IP. Fim do jogo. Posteriormente, o host se reinicializa, concluindo a atualização do software e a alteração do IP.Uma jogada futura pode começar com uma
ansible.builtin.wait_for_connection
maneira conveniente de tentar novamente, caso ainda não esteja disponível e acessível.ansible.builtin.reboot
em teoria, o módulo pode reiniciar, esperar o host voltar e continuar. Mas não há uma boa maneira de reinicializar um endereço IP e voltar como outro.