Управление системными пакетами в Ansible
Development, VPS | Комментировать запись
Ansible – это современный инструмент управления конфигурацией. Для связи и выполнения команд на управляемых серверах (нодах) он использует только SSH и Python – то есть вам не нужно устанавливать агентское программное обеспечение на удаленные ноды. В этой серии мануалов вы познакомитесь с основными функциями Ansible, которые можно использовать для написания сценариев автоматизации серверов. В конце серии вы найдете практический пример плейбука для автоматизации настройки удаленного веб-сервера Nginx и развертывания на нем статического HTML-сайта.
Примечание: Этот мануал является частью серии по работе с Ansible. Другие мануалы из этой серии вы найдете по тегу ansible-practice. Весь код можно найти в этом репозитории.
Автоматизация установки необходимых системных пакетов – очень частая задача в плейбуках Ansible, поскольку обычно стеки приложений включают в себя программное обеспечение из разных источников.
В операционных системах на основе Debian, таких как Ubuntu (а именно этот дистрибутив мы используем на удаленных нодах в этом руководстве) системными пакетами управляет модуль apt. Сейчас мы напишем плейбук, который обновит кеш apt, а затем установить редактор Vim на удаленных нодах.
Создайте новый файл по имени playbook-09.yml в каталоге ansible-practice:
nano ~/ansible-practice/playbook-09.yml
Затем добавьте в новый файл следующие строки:
--- - hosts: all become: yes tasks: - name: Update apt cache and make sure Vim is installed apt: name: vim update_cache: yes
Сохраните и закройте плейбук.
Обратите внимание, что мы включили директиву become в начало файла. она необходима, поскольку для установки пакетов требуются права администратора.
Удаление пакета выполняется аналогичным образом, единственное отличие заключается в том, что вам нужно определить другое состояние пакета – absent. Директива state по умолчанию имеет значение present, которое подтверждает, что пакет установлен в системе (независимо от версии). Если же пакет отсутствует, плейбук установит его. Чтобы установить последнюю версию пакета, вы можете использовать значение latest. В результате apt обновит запрошенный пакет, если в данный момент установлена не последняя версия.
Не забудьте указать параметр -K при запуске этого плейбука, поскольку для этого требуются привилегии sudo:
ansible-playbook -i inventory playbook-09.yml -u 8host -K
BECOME password: PLAY [all] ********************************************************************************************** TASK [Gathering Facts] ********************************************************************************** ok: [203.0.113.10] TASK [Update apt cache and make sure Vim is installed] ************************************************** ok: [203.0.113.10] PLAY RECAP ********************************************************************************************** 203.0.113.10 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
При установке нескольких пакетов вы можете использовать цикл и задать ему массив имен тех пакетов, которые вы хотите установить.
Следующий плейбук поможет убедиться, что на удаленных нодах установлены последние версии пакетов vim, unzip и curl.
Создайте в каталоге ansible-practice на главной ноде Ansible новый файл playbook-10.yml:
nano ~/ansible-practice/playbook-10.yml
Добавьте в новый плейбук следующие строки:
--- - hosts: all become: yes tasks: - name: Update apt cache and make sure Vim, Curl and Unzip are installed apt: name: "{{ item }}" update_cache: yes loop: - vim - curl - unzip
Сохраните и закройте файл.
Затем запустите команду ansible-playbook с теми же аргументами подключения, что и в предыдущих примерах, и не забудьте включить флаг -K, поскольку для выполнения задач этого плейбука требуются права администратора:
ansible-playbook -i inventory playbook-09.yml -u 8host -K
Вы увидите следующий вывод, который сообщает, что одна и та же задача выполняется трижды с использованием разных значений, которые мы предоставили, а именно vim, curl и unzip:
BECOME password: PLAY [all] *************************************************************************************************************************************** TASK [Gathering Facts] *************************************************************************************************************************** ok: [203.0.113.10] TASK [Update apt cache and make sure Vim, Curl and Unzip are installed] ************************************************************************** ok: [203.0.113.10] => (item=vim) ok: [203.0.113.10] => (item=curl) changed: [203.0.113.10] => (item=unzip) PLAY RECAP *************************************************************************************************************************************** 203.0.113.10 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Для получения дополнительной информации о том, как управлять системными пакетами (как удалять эти пакеты и как использовать расширенные параметры apt), рекомендуем обратиться к официальной документации.
Tags: Ansible, ansible-practice