Установка 1С используя Ansible
HOWTO. Как быстро обновить платформу на серверах 1С, если у Вас их парк.
- Описание
- Подробнее
Описание
Представьте, что у Вас 20 серверов 1С и пришло время обновления релиза платформы. Нужно на каждом сервере установить новую версию платформы, удалить старую, поднять службу агента сервера и т.д. Накапливается масса рутинных операций. Есть несколько вариантов решения. Пойдем от сложного к простому:
- Вручную
- Полуавтоматический — подготовить скрипт установки и выполнить его на каждой машине
- Автоматический — воспользоваться системой удаленного управления конфигурациями, т.е. с одной машины дать всем серверам команду на выполнение скрипта установки
В статье будет показано как использовать Ansible для подобного рода задач.
Ansible — система управления конфигурациями, написанная на Python, с использованием декларативного языка разметки для описания конфигураций. Используется для автоматизации настройки и развертывания программного обеспечения. Обычно используется для управления Linux-узлами, но Windows также поддерживается.
С помощью Ansible вы можете написать сценарий автоматизации любой сложности, от создания пользователя, до поднятия сложного окружения продуктивного сервера.
Пойдем по порядку:
В качестве управляющей ноды (где будет установлен Ansible) может выступать только машина с ОС Linux. Поддерживается большинство дистрибутивов. В качестве хостов (где будут выполняться сценарии) могут выступать как Linux, так и Windows машины.
В примере, на управляющей ноде установлена ОС CentOS 7
Установка Ansible:
sudo yum install ansible
Подготовка файла Inventory:
Файл Inventory содержит в себе список хостов, к которым Ansible может подключиться. По умолчанию это файл /etc/ansible/hosts.
Файл имеет гибкую настройку, мы будем использовать следующую сигнатуру указания хостов.
[group_name] server_ip
Добавим в него два сервера и объединим их в группу [appservers]
[appservers] 192.168.0.15 192.168.0.16
Подготовка Windows хоста для работы с Ansible:
Если в случае с Linux хостами доступ к ним осуществляется по SSH и все работает “из коробки”, то для того чтобы Ansible мог управлять Windows хостами, нужно на них включить службу удаленного управления (WS-Management).
В репозитории Ansible есть PowerShell скрипт который выполнит всю предварительную настройку Windows хоста:
https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1
Запускаем скрипт на Windows машине
powershell.exe -File ConfigureRemotingForAnsible.ps1
Более подробную информацию по настройке Windows хоста можно посмотреть тут:
https://docs.ansible.com/ansible/latest/user_guide/windows_setup.html
Настройка подключения Ansible к группам хостов:
После того как мы подготовили файл Inventory и настроили хост машины, нужно указать параметры подключения к этим машинам (под каким пользователем, через что подключаемся). Настройки подключения хранятся в каталоге /etc/ansible/group_vars
Для каждой группы создается одноименный файл, в котором указываются параметры подключения.
Создаем каталог:
mkdir /etc/ansible/group_vars
Создаем файл с именем нашей группы appservers:
vi /etc/ansible/group_vars/appservers
И вводим в него следующие параметры:
ansible_user: ansible ansible_port: 5985 ansible_connection: winrm ansible_winrm_transport: credssp ansible_winrm_server_cert_validation: ignore
Теперь, ко всем хостам группы appservers, Ansible будет подключаться используя вышеуказанные параметры. Пароль от пользователя ansible мы также можем указать в файле appservers добавив строку:
ansible_password: p@ssw0rd
В целях безопасности мы этого не делаем и запрашивать пароль будем в момент запуска сценария, указав ключ —ask-pass
Проверка подключения Ansible к группе хостов:
Для проверки подключения будем использовать модуль win_ping. Все модули которые могут выполнятся на Windows хостах начинаются с префикса win_. Подробное описание всех модулей можно найти в официальном сайте.
Выполняем команду
ansible appservers -m win_ping
В случае успешного подключения получим сообщение
192.168.0.15 | SUCCESS => {
"changed": false,
"ping": "pong"
}Плэйбуки (сценарии) Ansible
Playbook (файл сценариев) — это файл, в котором описываются действия, которые нужно выполнить на какой-то группе хостов. Сценарии описываются в формате YAML
Плэйбук представляет собой набор задач (tasks). Каждая задача выполняется определенным модулем.
В плэйбуке по установке сервера 1С использованы следующие модули:
- win_service — модуль для работы со службами
- set_fact — модуль для работы с переменными
- win_package — модуль установки/удаления пакетов Windows
Отдельно стоит отметить шифрование паролей в плэйбуке. Для этого используется ansible-vault (зашифрованное хранилище)
Чтобы поместить пароль в хранилище воспользуемся следующей командой:
echo -n "p@ssw0rd" | ansible-vault encrypt_string
Ansible потребует установить пароль для vault. Важно его запомнить, т.к. при утере восстановить исходный пароль будет уже невозможно.
В результате выполнения команды получим пароль в зашифрованном виде:
!vault | $ANSIBLE_VAULT;1.1;AES256 64396632346366373434356466396230364121656130363134316537306339643265656637366565 3763393238623632663732623034313738386561356232320a333766336638646137316463363031 66666435333939663832353937623638643764336662343834663338623666653965366233343536 3232633839646337300a333935333663613864306230343538653837353936373564623636366664 3537
Теперь вместо пароля мы можем указывать данную строку.
Пример плэйбука по установке платформы:
