Задача
-
Написать Ansible role для обновления операционной системы.
-
Создать inventory файл, в котором создать группу servers и внести в неё свой localhost либо иной управляемый вами сервер
-
Сделать playbook для запуска написанной вами role
Дополнительные требования:
-
Выполнить перезагрузку сервера, если произошло обновление пакетов.
-
Выберите самостоятельно любой пакет и реализуйте исключение обновления этого пакета. Необходимо, чтобы кокнретный, указанный вами пакет не обновлялся.
-
После обновления операционной системы, оставьте только 2 последних версии ядра.
Решение
1)Инициируем роль командой ansible-galaxy init updating_ubuntu
2)В каталоге tasks
в файле main.yml
прописываем таски
В первой задаче происходит обновление пакетов системы:
upgrade: dist
- означает, что будут обновлены все пакеты в системе до последней доступной версии. Параметр dist
означает, что обновление будет выполняться до новой версии дистрибутива (если таковая доступна).
autoremove: yes
- означает, что будут удалены неиспользуемые пакеты, которые установлены как зависимости для других пакетов, которые были удалены ранее. Это может освободить дополнительное место на диске и улучшить производительность системы.
autoclean: yes
- означает, что будут удалены старые файлы пакетов, которые уже не нужны в системе. Это также может освободить место на диске и улучшить производительность системы.
register: apt_update
- означает, что результат выполнения модуля apt
будет сохранен в переменной apt_update
. Эта переменная может быть использована в дальнейшем для выполнения других задач в playbook.
Во второй таске добавили проверку when
, которая проверяет, что apt_update
определен и содержит ключ reboot_required
, который может быть приведен к True
. Мы также использовали default(false)
для того, чтобы если reboot_required
не определен, то оно будет равно false
.
В третьей задаче происходит удаление старых пакетов ядра операционной системы Ubuntu.
мы используем ansible_facts['kernel']
, чтобы получить список всех установленных ядер в системе.
Затем мы используем модуль apt с параметром state: absent
, чтобы удалить пакеты ядра из списка with_item
s.
Условие when: ansible_facts['kernel'] | length > 2
проверяет, что количество ядер в системе больше 2, прежде чем выполнять задачу удаления старых ядер. Если в системе меньше 2 ядер, то задача не будет выполнена.
3)В каталоге defaults
в файле main.yml
прописыаем пакет, исключенный для обновления. linux-image-generic
- это пакет ядра Linux для дистрибутивов Ubuntu, который обеспечивает универсальную установку ядра, позволяющую использовать большинство оборудования без необходимости установки специализированных ядер.
Если на компьютере установлен linux-image-generic
, то при обновлении операционной системы, ядро Linux автоматически обновляется до последней версии. При этом, если установлены старые версии ядра, то они остаются на компьютере, их можно удалить вручную, либо использовать инструменты для автоматического удаления старых версий ядра.
4)Далее запускаем плейбук playbook.yml командой ansible-playbook -i inventory.ini playbook.yml