Как сделать так, чтобы установка обновлений с помощью apt не приводила к перезапуску сетевых служб?

Как сделать так, чтобы установка обновлений с помощью apt не приводила к перезапуску сетевых служб?

У меня есть Ansible playbook, который я использую для настройки новых Linux VM. Недавно я создавал новую VM с Ubuntu 22.04. Playbook напишет некоторые файлы конфигурации, связанные с сетью и прочим, а затем последний шаг процесса — использовать Ansibles ansible.builtin.packageдля установки всех обновлений пакетов.

- name: "Install updates"
  become: true
  ansible.builtin.package:
    upgrade: "dist"
  register: res_pkg_updates
  notify: "reboot system"
  tags: [ never, updates ]

Моя виртуальная машина была создана из шаблона, который я сделал несколько месяцев назад, поэтому в ОС Ubuntu было несколько устаревших пакетов, что неудивительно. Проблема в том, что один из пакетов должен поддерживать или предоставлять сетевую функциональность. Поэтому, когда модули packageзапускают виртуальную машину на пути установки обновлений, сетевой демон перезапускается, и виртуальная машина получает новый IP, который был настроен ранее в моем плейбуке. Это приводит к зависанию задачи Ansible, ожидая повторного подключения к машине, которая теперь имеет другой IP.


Я хочу знать, как настроить мою ansible.builtin.packageзадачу для установки обновлений пакетов, нонетперезапустите все службы, особенно сетевые.

решение1

Отделите изменение IP-адреса от транзакции пакета и остальной части игры.

Сначала обновите пакеты и сделайте все остальное.

В качестве последнего шага в этой игре обновите IP-адрес для этого хоста, но пока не поднимайте интерфейс на новом IP. Возможно, изменив файл конфигурации. Запланируйте перезагрузку этого хоста немного в будущем, например, с помощью ansible.posix.atмодуля. И, наконец, обновите DNS, чтобы Ansible inventory знал об изменении IP. Конец игры. Позже хост перезагрузится сам, завершив обновление программного обеспечения и изменение IP.

Будущая игра может начаться с ansible.builtin.wait_for_connectionудобного способа повторить попытку, если она пока недоступна.

ansible.builtin.rebootМодуль теоретически может перезагрузиться, дождаться возвращения хоста и продолжить. Но у него нет хорошего способа перезагрузить один IP-адрес и вернуться как другой.

решение2

Возможно, другой подход: я бы использовал статический ip для VM, вместо того, чтобы динамически назначать его. Не перезапуск сетевого демона может вызвать другие проблемы при запуске плейбука

Или вы можете сделать это

- name: Update package cache and install updates
  ansible.builtin.package:
    name: "*"
    state: latest
    update_cache: yes
    force: no
  become: yes

force: no запрещает менеджеру пакетов принудительно выполнять обновления или перезапускать службы

Связанный контент