Ansible - система управления конфигурациями, написанная на языке Python
Позволяет настраивать удаленные машины
Применяется для автоматизации настройки и развертывания программного обеспечения
Использует декларативный язык разметки для описания конфигураций
Поддерживает работу с сетевыми устройствами с Python 2.4 и выше по SSH
В отличии от других подобных систем использует существующую инфраструктуру SSH
Понятия в Ansible:
Host machine - сервер c Ansible
Node - сервер, управляемый сервером Ansible
Inventory - файл, который содержит информацию об управляемых Node
Playbook - файл, с описанными задачами для выполнения на Node
Roles - множество плейбуков и других файлов, имеющих отношение к цели
Play - набор инструкций, может иметь несколько плейбуков и ролей, служит точкой входа
Ad-hoc - команда для быстрого выполнения
Попытка пинга всех Node из плейбука и localhost:
# ansible all -m ping && ansible localhost -m ping [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' localhost | SUCCESS => { "changed": false, "ping": "pong" }
Вывести список модулей в консоль:
# ansible-doc -l
Вывести документацию по указанному модулю:
# ansible-doc ping
Доступ для ansible к Node по ssh
Генерируем ssh ключи на сервере с ansible:
# ssh-keygen
Скопируйте открытый ключ сервера с ansible на все Node:
# cat ~/.ssh/id_rsa.pub
По путям на Node в файл:
~/.ssh/authorized_keys
Можно с сервера дать такую команду:
# scp /root/.ssh/id_rsa.pub Node_Ip:/root/.ssh/authorized_keys
На ноде разрешите доступ для root:
# vi /etc/ssh/sshd_config
PermitRootLogin yes
Права на ключ:
# chmod 600 /root/.ssh/id_rsa.pub
Рестарт ssh:
# systemctl restart ssh
Инвентарь
Пишется в .ini или .yml формате
Файл инвентаря по умолчанию находится в /etc/ansible/hosts
Пользовательские файлы инвентаря указываются с помощью параметра -i во время выполнения плейбука и команд
# mkdir /tmp/p1 && cd /tmp/p1
Пример в ini формате:
# cat test.ini
В нем мы описали группу, ip хоста и его порт для доступа
Разберем пример на модуле user
# ansible-doc user
Берем опции:
- name
- state
Примеры получившихся Ad-hoc команд:
# ansible -h
Создать пользователя root1 во всей группе local:
# ansible -i test.ini -m user -a "name=root1 state=present" local Где:
hosts - файл инвентаря
-m - модуль
-a "" - аргументы
local - группа из инвентаря
Удалить пользователя root1 на хосте server:
# ansible -i test.ini -m user -a "name=root1 state=absent remove=True" server Где:
remove - true на удаление директории учетки
Плейбук
В плейбуках возможно задавать переменные
Назначение переменной:
vars:
название_переменной: значение_переменной
Использование переменной:
"{{название_переменной}}"
Так-же есть возможность вывести вывод задачи
Конструкция указания переменной для вывода:
register: название_переменной
ignore_errors: True - продолжить несмотря на ошибки
У переменных из register есть свойства, которые видно в выводе
Этими свойствами можно оперировать, воспользуймся свойством rc
when: "myresult.rc != 0" - выполнить при сбое
when: "myresult.rc == 0" - выполнить при отсутствии сбоя
block - некий набор задач
rescue - секция блока, исполнится если внутри block будет сбой
Простой скрипт с логикой
Пытается выполнить шаг Show_user - whoami из под учетки root1
Если учетки нет, то завершится с ошибкой, выполнив шаг Create_User
Если учетка есть, то завершится успешно, выполнив шаг Delete_User
В обоих шагах есть по два шага:
1. Создание или удаления учетки
1. Создание или удаления файла с датой в домашней директории учетки
Во время скрипта произойдет сбой на этапе создания файла тк путь неверный
Отработает блок rescue и выведет msg: "Err on step Create_User"
При повторном вызове скрипта отработает ignore_errors в шаге Del_File
Тк файл не создался, это бы вызвало остановку шага Del_File, игнорируем
# cat accounts.yml
Исполним плейбук к инвентарю:
# ansible-playbook -i test.ini accounts.yml
Комментарии пользователей
Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!