Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Краткое пособие по Ansible


Краткое пособие по Ansible


Ansible - система управления конфигурациями, написанная на языке Python
Позволяет настраивать удаленные машины
Применяется для автоматизации настройки и развертывания программного обеспечения
Использует декларативный язык разметки для описания конфигураций
Поддерживает работу с сетевыми устройствами с Python 2.4 и выше по SSH
В отличии от других подобных систем использует существующую инфраструктуру SSH

Понятия в Ansible:
Host machine - сервер c Ansible
Node - сервер, управляемый сервером Ansible
Inventory - файл, который содержит информацию об управляемых Node
Playbook - файл, с описанными задачами для выполнения на Node
Roles - множество плейбуков и других файлов, имеющих отношение к цели
Play - набор инструкций, может иметь несколько плейбуков и ролей, служит точкой входа
Ad-hoc - команда для быстрого выполнения

Установка на ubuntu:
# apt install ansible

Проверка версии ПО:
# ansible --version
ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  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.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0]

Попытка пинга всех 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"
}

-m - указание используемого модуля
Модуль - программа, код, то, что исполняется на удаленном хосте
Полный список модулей в Ansible:
https://docs.ansible.com/ansible/latest/collections/index_module.html

Вывести список модулей в консоль:
# 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: название_переменной

Вывод переменной:
- debug:
    var: название_переменной

shell - выполнение команды в консоли

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

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект