Найти тему

Обновление Astra Linux Special Edition 1.7 с помощью Ansible

Оглавление

Привет!
Многие, кто столкнулся с администрированием Астры, или администрированием 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 - файл с базой данных машин, который будет храниться по этому же пути

-2

remote_user = pcadmin - пользователь под которым на удаленном компьютере будет запускаться скрипт (тут пишите логин вашего админского аккаунта)

Соответственно создаем файл hosts, в котором прописываем нашу группу машин, и их адрес. В моем примере еще указано имя машины, но это поле является опциональным.

[users_update]
astrapc2084 ansible_host=192.168.50.124
-3

Подготовили наше окружение. Теперь можно переходить к задаче.

Плейбук у нас будет простейший, состоящий из двух задач:

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
...

Обращаем внимание на отступы!

-4

Итак:

Первый 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
-5

Второй задачей мы запускаем собственный apt dist-upgrade.

В итоге мы должны были создать три файла, одну папку, и еще один файл в этой папке. Архив я скину в конце статьи для удобства.

-6

Все сделали, плейбук написан. Давайте сделаем первоначальную настройку, чтобы подключаться к удаленным хостам по сертификату, минуя запросы пароля.

Первоначальная настройка:

На сервере создадим сертификат командой:

ssh-keygen -t rsa

А затем распространим его на нужную учетку нашего хоста. Делать это надо всего один раз.

ssh-copy-id pcadmin@192.168.50.124

где pcadmin - удаленная админская учетка

192.168.50.124 - удаленный хост

-7

Все, сказали доверять хосту, указали пароль, и перекинули сертификат. Все готово для запуска плейбука.

В папке с плейбуком запускаем наш скрипт:

ansible-playbook astra_update.yml

В результате у вас должен запуститься и пройти плейбук как на скриншоте ниже:

-8

Как видите - changed указывает на то что роль изменила состояние удаленного хоста. Если мы запустим скрипт снова, он конечно перепишет файл, но так как dist-upgrade не понадобится, он не изменит состояние и второй раз машина обновляться не будет.

-9

Второй вариант

У Астры существует своя 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 и изменим вторую задачу, чтоб получилось:

-10
-11

Справку по данному модулю можно получить командой:

ansible-doc astra_update

Ну вот и все. Можно запустить такую простую задачу (Задача маленькая, дольше идет сама подготовка, которая делается один раз) и продолжить изучать Ansible, ведь эта тема не одной статьи и не одной книги. Вот как пример статьи для изучения. Я как и обещал - скидываю архив со всеми файлами, которые были созданы в статье.

Если у вас есть какие примеры как вы используете Ansible, поделитесь в комментариях.