Ansible — это система управления конфигурациями с сервера. Мы можем развертывать и конфигурировать приложения, управляя ими с Ansible-сервера.
Содержание статьи:
1. Установка Ansible для управления конфигурациями с сервера
3. Модули Ansible и их использование
4. Что еще почитать по Ansible
Ansible не требует установки клиентской части на целевые рабочие станции и использует протокол SSH. Отсутствие клиентской части — главное достоинство приложения. Он написан на Python, а потому его легко настроить или расширить стандартные возможности этой системы. Конфигурация пишется на языке YAML, который довольно прост и осваивается даже теми, кто далек от программирования.
Существует графическая оболочка, которая называется Ansible Tower (платная от RedHat) и Ansible AWX (бесплатная). Ansible поддерживает как Windows, так и Linux-платформы, но версия под Windows ограничена в возможностях и часто не работает как нужно.
Чтобы установить Ansible на Ubuntu, откройте терминал и для начала проверьте, установлен ли Python и Ansible:
root@serge.Virtualbox:~# python3 --version Python 3.9.5 root@serge.Virtualbox:~# ansible --version
Если ничего из перечисленного не установлено, давайте начнем с Python:
root@serge.Virtualbox:~# apt install python3-pip
А затем установим Ansible:
root@serge-VirtualBox:~# ansible --version
Если команда ansible не найдена, ее можно установить с помощью:
apt install ansible-base root@serge-VirtualBox:~# apt install ansible-base
После установки мы видим:
root@serge-VirtualBox:~# ansible --version ansible 2.10.5 config file = None configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3/dist-packages/ansible executable location = /usr/bin/ansible python version = 3.9.5 (default, May 11 2021, 08:20:37) [GCC 10.3.0] root@serge-VirtualBox:~#
Строчка config file = None
говорит о том, что наш конфигурационный файл пока отсутствует. В принципе, создавать конфигурационный файл не нужно. Но следует помнить, что при каждом запуске ansible-плейбуков настройки будут автоматически активированы и такой файл будет создан. Чтобы создать конфигурационный файл, переходим в домашнюю директорию и создаем его с помощью vi
:
root@serge-VirtualBox:~# pwd /root root@serge-VirtualBox:~# vi ansible.cfg
Далее прописываем настройки по умолчанию:
[defaults] inventory = /root/ansible/hosts/ host_key_checking = false :wq
В /root/ansible/hosts/
будет лежать файл, в котором будет записана информация о наших клиентах. Проверим ключи при подключении по SSH. Если указать в конфигурационном файле host_key_checking = false
, проверка будет отключена.
Теперь сделаем в окне терминала такой запрос:
root@serge-VirtualBox:~# ansible --version ansible 2.10.5 config file = /root/ansible.cfg
Мы указали расположение файла inventory
в папке ansible
. Создадим ее:
root@serge-VirtualBox:~# mkdir ansible root@serge-VirtualBox:~# cd ansible/ root@serge-VirtualBox:~/ansible# touch hosts root@serge-VirtualBox:~/ansible# ll итого 8 drwxr-xr-x 2 root root 4096 сен 6 10:41 ./ drwx------ 6 root root 4096 сен 6 10:40 ../ -rw-r--r-- 1 root root 0 сен 6 10:41 hosts
Предположим, мы имеем дело с сервером и тремя клиентами. IP-адреса этих клиентов:
Зайдем в этот файл:
root@serge-VirtualBox:~/ansible# vi hosts
Пишем следующее:
client01 ansible_host=192.168.172.109 client02 ansible_host=192.168.172.110 192.168.172.111
Параметр ansible_host
указывать необязательно, если у вас работают DNS. Далее необходимо указать пользователей и пароли, доступ к которым возможен по SSH. Добавим пароль:
client01 ansible_host=192.168.172.109 ansible_user=root ansible_password=ptest client02 ansible_host=192.168.172.110 ansible_user=utest ansible_password=ptest 192.168.172.111 ansible_user=root
Для третьего хоста сделаем доступ по ключу SSH:
client01 ansible_host=192.168.172.109 ansible_user=root ansible_password=ptest client02 ansible_host=192.168.172.110 ansible_user=utest ansible_password=ptest 192.168.172.111 ansible_user=root ansible_ssh_private_key_file=
Сохраним файл и перейдем в терминал, чтобы создать ключ:
root@serge-VirtualBox:~/ansible# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa Your public key has been saved in /root/.ssh/id_rsa.pub The key fingerprint is: SHA256:5p921mHEIN9xR9cnD9WN9yKy4ixzJxXmZ2/wrTjQhk0 root@serge-VirtualBox The key's randomart image is: +---[RSA 3072]----+ | +B| | . . = X| | o + B+| | + E = o| | So O o . | | o. * B o | | o.o = * o | | o =.o.+.= .| | + +oo.o.. | +----[SHA256]-----+ root@serge-VirtualBox:~/ansible#
Если мы перейдем в папку .ssh
мы увидим наши два ключа – публичный и частный:
root@serge-VirtualBox:~/ansible# cd root@serge-VirtualBox:~# cd .ssh/ root@serge-VirtualBox:~/.ssh# ll итого 16 drwx------ 2 root root 4096 сен 6 11:15 ./ drwx------ 7 root root 4096 сен 6 11:14 ../ -rw------- 1 root root 2610 сен 6 11:15 id_rsa -rw-r--r-- 1 root root 575 сен 6 11:15 id_rsa.pub root@serge-VirtualBox:~/.ssh#
Прочитаем его и скопируем, чтобы занести в файл:
root@serge-VirtualBox:~/.ssh# cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDDTwp+rR2W0ZPR+1mzXFfHbAISw0nIv+aW0Jg7R+kLM9lIVRFHcV+D58XUGl+NnJL6vvv1JsfIvyBSd2gOWT/pKlxnii/ufOU+HF8TgHbBHVOC4c97mb3qrLxqXbdSFxTGmxGYH44KSzYzrv7YSakhnttqoAM1J3XdxRRsTWS7GfUMGGGhYBjLM1/ddR4QQkJshFGKQ3WnXwMS16o+E/qwUppyov4RhxITm7YMRS3Yep56qEF/+z0zTXxJredGckK7kXOj7vXWXW5Bik+svD1Aadwoz9Fojbkz/Q7n9bF4wxDNzL0rfX9LkCnkaofoIaRuIFqkiBmPPEU/hk8Tx7zBXm5wYin1yFhTVuUUGE6R/542BAv+YcKerYXOqsa11jnKjH70bEh9CQ8Nc/MX9MR/vjIevqVPaaP/6hY6U9yoCLYb+INMHEHl+NfUFSksEGGHUQRBCUxGFvZsu6s9zpXCBdv0EMBMg6tApyNN9BnpLGGJPNpmZ/w0apjdRqHD450=
Скопируем значение ключа и вставим на третий хост, открыв файл:
root@client03:~/.ssh# vi authorized_keys
Сохраним его. Переименуем имя ключа командой mv id_rsa client03
и внесем соответствующие изменения в файл:
client01 ansible_host=192.168.172.109 ansible_user=root ansible_password=ptest client02 ansible_host=192.168.172.110 ansible_user=utest ansible_password=ptest 192.168.172.111 ansible_user=root ansible_ssh_private_key_file=/root/.shh/client03
Сохраним его (команда :wq
) и проверим, все ли работает:
root@serge-VirtualBox:~/# ansible all -m ping
Нам выдается сообщение, что третий хост прошел нормально, а для первых двух необходимо установить дополнительный пакет sshpass
. Установим его с помощью команды apt install ssh
. Снова запустим пинг:
192.168.178.111 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } client01 | SUCCESS => { "ansible facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } client02 | SUCCESS => { "ansible facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
Что ж, как видим, клиенты все работают.
Ansible позволяет использовать модули, которые расширяют стандартные функции программы. Вот основные из них:
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…