Настройка нод и первое подключение. Как всегда подробно. С нюансами и комментариями.
Что такое Ansible и для чего он нужен я кратко описал здесь:
Пожалуйста, ознакомьтесь со статьёй выше, чтобы понимать терминологию.
Настройка Control node
В качестве управляющего узла я буду использовать Linux Mint 21.2, вы можете использовать любой дистрибутив Linux или MacOS.
На момент написания статьи актуальная версия Ansible 8.4.0 (ansible-core 2.15.4), которая требует Python 3.9 - 3.11 на управляющей ноде и Python 2.7, 3.5 - 3.11 или PowerShell 3 - 5.1 на управляемой.
Список требований к конкретной версии Ansible доступен здесь:
Установка Ansible
Чтобы использовать свежую версию Ansible, необходимо подключить официальный репозиторий. Последовательность действий в зависимости от версии дистрибутива будет отличаться.
Ubuntu
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt update && sudo apt install ansible
Debian
Linux Mint
На этом настройка компьютера/сервера, с которого мы будем управлять другими устройствами завершена.
Настройка Managed node | Linux
В примере рассмотрен дистрибутив Debian, для остальных Linux-дистрибутивов настройка выполняется аналогично.
Установка Python
Для установки python3 выполните команду:
sudo apt update && sudo apt install python3
Проверьте установленную версию
python3 --version
*Версия Python должна быть не ниже 3.5 для Ansible 8
Настройка ssh
Установим openssh-server:
sudo apt install openssh-server
Для проверки подключитесь к хосту с управляющей ноды:
ssh username@<ip хоста с настроенным ssh>
Настройка Windows для управления Ansible'ом
В качестве примера рассмотрена настройка ОС Windows 10. Для более старых версий может потребоваться обновить PowerShell и .NET. Инструкция по обновлению и готовый скрипт доступны в документации к Ansible.
Проверка версии PowerShell
Для вывода информации о версии PS введите
$PSVersionTable
Внимание! Для PowerShell версии 3.0 требуется применить WinRM Memory Hotfix.
Конфигурация WinRM
Если управление Linux осуществляется через ssh, то в Windows нужен WinRM (Windows Remote Management).
Актуальная версия Ansible поддерживает соединение с Windows по протоколу ssh, но этот вариант не рекомендуется для использования, т.к. ещё слишком "сырой".
Запустите PowerShell от имени администратора и выполните команду:
winrm quickconfig
Согласитесь выполнить изменения
Настройка WinRM доступна только в доменных или частных сетях. В ином случае вы получите ошибку.
После настройки WinRM, выведем его текущие параметры:
winrm get winrm/config/Service
Для тестового подключения мы будем использовать локальную учётную запись и незашифрованное соединение, поэтому изменим выделенные на скриншоте параметры на True:
Set-Item -Path WSMan:\localhost\Service\AllowUnencrypted -Value $True
Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $True
Ping-Pong. Тест соединения
Чтобы проверить соединение, нам нужно составить список хостов.
Создание списка хостов
На ноде управления (Control node) создайте в домашней директории папку ansible:
mkdir ~/ansible
Внутри новой папки создайте файл hosts.ini:
nano ~/ansible/hosts.ini
Этот файл - подобие файла hosts в ОС. Здесь указываются имена хостов, их адреса и параметры подключения. Более подробный разбор файла hosts будет осуществлён в одной из следующих частей.
Добавьте в файл строки, указывающие имя пользователя для всех хостов:
[all:vars]
ansible_user=USERNAME
Вместо USERNAME укажите имя учётной записи, которая уже создана на управляемых нодах. Если вы используете разные имена пользователей на хостах, строки выше добавлять не нужно.
Т.к. у меня на всех хостах УЗ с одинаковым юзернеймом, мои добавленные строки выглядят так:
Теперь добавим наш хост Linux:
[deb]
deb12 ansible_host=ip.address ansible_password="P@$sW0rD"
deb12 - имя хоста, вы можете указать любое удобное для вас.
В параметре ansible_host задаётся адрес хоста.
ansible_password - пароль для подключения
В примере пароль хранится в открытом виде, что не рекомендуется в реальных условиях.
Аналогично добавьте информацию о Windows хосте. У меня это выглядит так:
Если вы не задавали имя пользователя в [all:vars], задайте его в каждом хосте отдельно в той же строке, где указан пароль для подключения.
Для Linux всё готово, но для Windows нужно указать тип соединения и порт:
[win:vars]
ansible_port=5985
ansible_connection=winrm
Порт указываем из-за того, что по умолчанию ansible коннектится по https к порту 5986.
В итоге мой hosts.ini выглядит следующим образом:
Тест соединения
В терминале пингуем хосты с помощью Ansible:
ansible deb -m ping -i ~/ansible/hosts.ini
ansible win -m win_ping -i ~/ansible/hosts.ini
Если в файле hosts.ini вместо [deb] и [win] вы задавали группам другие имена, используйте их, иначе будет ошибка.
Если всё настроено верно, каждый хост ответит на ping : pong
На этом первая часть завершена. Если у вас возникли сложности на каком-то этапе - опишите проблему и прикрепите скриншот в комментариях, я постараюсь помочь.
Спасибо, что дочитали статью до конца. Поддержите канал лайком или подпиской, чтобы чаще видеть в ленте подобный контент. Всего вам доброго!)
Поддержать материально:
- Юmoney: 4100 1179 9102 819
- Сбербанк: 2202 2013 5155 5152
- Тинькофф: 2200 7008 1567 2323