Привет!
Многие, кто столкнулся с администрированием Астры, или администрированием Linux слышали либо знают про Ansible - одно из средств удаленного управления рабочими станциями.
В интернете много статей, и несколько книг по работе Ansible, где в основном первым делом ставят Nginx. Я же предлагаю в статье быстро глянуть как установить Ansible, как настроить, и запустить одно из самых частых действий - установить последние обновления Астры. А потом уже читать статьи и книжки, повышая уровень знаний по данной теме.
Кстати совсем только что Астра представила свой продукт Astra Automation, этакий продвинутый Ansible с GUI, и если у вас есть возможность взять ее на тест, не упускайте шанс.
Исходные данные:
Сервер с Ansible - dc01.astra.ipa (192.168.50.10)
Клиент с Astra Linux 1.7.4 (192.168.50.124), для обновления до 1.7.5
Первым делом нам необходимо установить сам Ansible.
sudo apt install ansible
После установки конфигурационные файлы сохраняются по пути - /etc/ansible/ansible.cfg
А база с хостами машин - /etc/ansible/hosts
Также Ansible смотрит конфигурационный файл в папке с исполняемым скриптом. В примере я буду как раз использовать конфиг, лежащий в одной папке со скриптом, потому что по моему мнению, это больше подходит для портативности.
Итак давайте создадим например в корневой домашней папке папку playbooks, а в ней папку update_astra.
Создадим в данной папке файл ansible.cfg, в котором пропишем:
[defaults]
inventory = hosts
remote_user = pcadmin
где, inventory = hosts - файл с базой данных машин, который будет храниться по этому же пути
remote_user = pcadmin - пользователь под которым на удаленном компьютере будет запускаться скрипт (тут пишите логин вашего админского аккаунта)
Соответственно создаем файл hosts, в котором прописываем нашу группу машин, и их адрес. В моем примере еще указано имя машины, но это поле является опциональным.
[users_update]
astrapc2084 ansible_host=192.168.50.124
Подготовили наше окружение. Теперь можно переходить к задаче.
Плейбук у нас будет простейший, состоящий из двух задач:
1. Прописываем стандартные интернет репозитории астры
2. Запускаем собственно обновление.
Если у вас с репозиториями все хорошо, задачу уже можно превращать в однозадачную. Задача пишется на языке yaml. Создаем в нашей папке файл astra_update.yml и пишем задачу, ниже я ее объясню:
---
- name: Update astra
hosts: users_update
become: True
gather_facts: false
tasks:
- name: Change sources.list to dl.astralinux.ru
template:
src: sources.list.j2
dest: /etc/apt/sources.list
- name: Upgrade
apt:
upgrade: dist
...
Обращаем внимание на отступы!
Итак:
Первый name - мы пишем название нашего плейбука
hosts - указываем к каким хостам применяется данный плейбук. Выше в файле hosts мы создали одноименную группу
become: True - данная строка показывает что для выполнения команды нужны права суперпользователя.
gather_facts: false - отключаем сбор фактов о целевых хостах (очень хорошая функция, позволяет получать много переменных удаленного хоста, но сейчас нам не нужна)
tasks - наши задания
Первой задачей мы копируем файл шаблона, в котором указаны репозитории по стандартному адресу. Шаблоны создаются в папке templates, поэтому создаем данную папку, в ней создаем файл sources.list.j2 (которая и указана в задаче). Формат шаблона Jinja, с форматом j2 может передавать в шаблоны переменные, для вставки их в шаблон в нужных местах. В примере мы их использовать не будем, но сразу сделаем хорошо. Файл sources.list будет просто содержать адреса всех интернет репозиториев Астры:
# Astra Linux repository description https://wiki.astralinux.ru/x/0oLiC
#deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main/ 1.7_x86-64 main contrib non-free
#deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update/ 1.7_x86-64 main contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base/ 1.7_x86-64 main contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 main contrib non-free
Второй задачей мы запускаем собственный apt dist-upgrade.
В итоге мы должны были создать три файла, одну папку, и еще один файл в этой папке. Архив я скину в конце статьи для удобства.
Все сделали, плейбук написан. Давайте сделаем первоначальную настройку, чтобы подключаться к удаленным хостам по сертификату, минуя запросы пароля.
Первоначальная настройка:
На сервере создадим сертификат командой:
ssh-keygen -t rsa
А затем распространим его на нужную учетку нашего хоста. Делать это надо всего один раз.
ssh-copy-id pcadmin@192.168.50.124
где pcadmin - удаленная админская учетка
192.168.50.124 - удаленный хост
Все, сказали доверять хосту, указали пароль, и перекинули сертификат. Все готово для запуска плейбука.
В папке с плейбуком запускаем наш скрипт:
ansible-playbook astra_update.yml
В результате у вас должен запуститься и пройти плейбук как на скриншоте ниже:
Как видите - changed указывает на то что роль изменила состояние удаленного хоста. Если мы запустим скрипт снова, он конечно перепишет файл, но так как dist-upgrade не понадобится, он не изменит состояние и второй раз машина обновляться не будет.
Второй вариант
У Астры существует своя Ansible роль для обновления - ansible-module-astra-update. Она устанавливается командой
sudo apt install ansible-module-astra-update
И нашу команду апгрейд можно заменить на одноименную команду astra-update:
- name: Update Astra
astra_update:
upgrade: full
use_current_sources_list: yes
check_install_disk: no
install_latest_kernel: yes
(Как видите данным модулем можно установить и последнее доступное ядро). Создадим файл astra_update2.yml и изменим вторую задачу, чтоб получилось:
Справку по данному модулю можно получить командой:
ansible-doc astra_update
Ну вот и все. Можно запустить такую простую задачу (Задача маленькая, дольше идет сама подготовка, которая делается один раз) и продолжить изучать Ansible, ведь эта тема не одной статьи и не одной книги. Вот как пример статьи для изучения. Я как и обещал - скидываю архив со всеми файлами, которые были созданы в статье.
Если у вас есть какие примеры как вы используете Ansible, поделитесь в комментариях.