Найти в Дзене
Эникей на передержке

Ansible от А до Я. Часть 1 | Ping : Pong

Настройка нод и первое подключение. Как всегда подробно. С нюансами и комментариями. Что такое 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
Оглавление

Настройка нод и первое подключение. Как всегда подробно. С нюансами и комментариями.

Что такое 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 доступен здесь:
Releases and maintenance — Ansible Documentation

Установка 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 5.1
Установлена версия PowerShell 5.1

Внимание! Для PowerShell версии 3.0 требуется применить WinRM Memory Hotfix.

Конфигурация WinRM

Если управление Linux осуществляется через ssh, то в Windows нужен WinRM (Windows Remote Management).

Актуальная версия Ansible поддерживает соединение с Windows по протоколу ssh, но этот вариант не рекомендуется для использования, т.к. ещё слишком "сырой".

Запустите PowerShell от имени администратора и выполните команду:

winrm quickconfig

Согласитесь выполнить изменения

Настройка WinRM
Настройка WinRM
Настройка WinRM доступна только в доменных или частных сетях. В ином случае вы получите ошибку.

После настройки WinRM, выведем его текущие параметры:

winrm get winrm/config/Service
Параметры WinRM по умолчанию
Параметры WinRM по умолчанию

Для тестового подключения мы будем использовать локальную учётную запись и незашифрованное соединение, поэтому изменим выделенные на скриншоте параметры на 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]
Два хоста с общим именем пользователя, заданным в [all:vars]

Если вы не задавали имя пользователя в [all:vars], задайте его в каждом хосте отдельно в той же строке, где указан пароль для подключения.

Для Linux всё готово, но для Windows нужно указать тип соединения и порт:

[win:vars]
ansible_port=5985
ansible_connection=winrm

Порт указываем из-за того, что по умолчанию ansible коннектится по https к порту 5986.

В итоге мой hosts.ini выглядит следующим образом:

Содержимое hosts.ini
Содержимое 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

Для linux и windows используются модули ping и win_ping соответственно
Для linux и windows используются модули ping и win_ping соответственно

На этом первая часть завершена. Если у вас возникли сложности на каком-то этапе - опишите проблему и прикрепите скриншот в комментариях, я постараюсь помочь.

Спасибо, что дочитали статью до конца. Поддержите канал лайком или подпиской, чтобы чаще видеть в ленте подобный контент. Всего вам доброго!)

Поддержать материально:

  • Юmoney: 4100 1179 9102 819
  • Сбербанк: 2202 2013 5155 5152
  • Тинькофф: 2200 7008 1567 2323