img

Ansible - управляй конфигурацией, попивая сок у себя в квартале

Ansible один из двух (наряду с SaltStack) наиболее популярных программных комплексов третьей волны, которые позволяют удалённо управлять конфигурациями. Тем не менее, в сегменте сетевого оборудования лидирует наш сегодняшний герой (если о ПО можно так сказать). В первую очередь это вызвано тем, что Ansible не поставит перед пользователем задачи устанавливать агент на хостинги, требующие от него управления. Тем паче ежели Ваш аппарат взаимодействует с ними через CLI, то Ansible это то, что доктор прописал.

icon strelka icons icons

узнай больше на курсе

DevOps-инженер с нуля
Стань DevOps-инженером с нуля и научись использовать инструменты и методы DevOps
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
Полный курс по сетевым технологиям
Полный курс по сетевым технологиям от Мерион Нетворкс - учим с нуля сетевых инженеров и DevOPS специалистов
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
Python программист с нуля
Стань разработчиком на одном из самых популярных языков программирования - Python
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
Всемогущий Ansible

Одним выстрелом три "электронных зайца"

Вообще, прежде чем знакомить уважаемых читателей со сценарием работы в данном программном комплексе, позвольте перечислить несколько его достоинств:

  • Ansible позволяет параллельно подключать по SSH к устройствам (пользователь может сам определить их число).
  • Ansible может передавать задачи на подключённые машины.
  • Ansible способен разбивать машины, входящих в систему, на подгруппы и передавать специальных задачи для каждой подгруппы.

Конечно, указаны не все достоинства Ansible. Просто в данных 3 пунктах, как мне кажется, отражена основная суть работы в данной среде. Выполняя эти три задачи, система автоматически освобождает Вас от головной боли по делегированию задач и функций в компании. Время деньги, как говорится.

Сценарии

Ну и переходим к основному блюду нашего материала - сценариям (playbook). Они состоят из двух частей набора команд для выполнения (play) и конкретных команд (task). Они выполняются друг за другом.

Все записи данных осуществляются с помощью YAMLа. К несомненным плюсам его использования следует отнести то, что он гораздо лучше воспринимается людьми, нежели тот же самый JSON. Ежели Вы больше привыкли Вы к Python, то тут у Вас не возникнет проблем с адаптацией, так как синтаксис у них схожий.

А вот так происходит процесс написания сценария (комментарии даны построчно к выводу):

  1. Имя сценария обязательный элемент для любого сценария;
  2. Сценарий применяется к машинам в подгруппе cisco-routers;
  3. Выключение режима сбора событий в конкретной машине (если не выключить данный режим, то система потратит много времени на решение ненужных задач);
  4. В разделе task указывается список команд для каждого конкретного случая;

После чего происходит выполнение команды:

PLAY [Run show commands on routers] ***************************************************

TASK [run sh ip int br] ***************************************************************
changed: [192.168.100.1]
changed: [192.168.100.3]
changed: [192.168.100.2]

TASK [run sh ip route] ****************************************************************
changed: [192.168.100.1]
changed: [192.168.100.3]
changed: [192.168.100.2]

PLAY [Run show commands on switches] **************************************************

TASK [run sh int status] **************************************************************
changed: [192.168.100.100]

TASK [run sh vlans] *******************************************************************
changed: [192.168.100.100]

PLAY RECAP ****************************************************************************
192.168.100.1			: ok=2	changed=2		unreachable=0	failed=0
192.168.100.100			: ok=2	changed=2		unreachable=0	failed=0
192.168.100.2			: ok=2	changed=2		unreachable=0	failed=0
192.168.100.3			: ok=2	changed=2		unreachable=0	failed=0

И запускаем проверку выполнения команд:

SSH password:

PLAY [Run show commands on routers] ***************************************************

TASK [run s hip int br] ***************************************************************
Changed: [192.168.100.1] => {“changed”: true, “rc”: 0, “stderr”: “Shared connection 
To 192.168.100.1 closed.
”, “stdout”: “
Interface  			  IP-Address
    OK? Method Status			Protocol
Ethernet0/0 			  192.
168.100.1  YES NVRAM up				up	
Ethernet0/1
 192.168.200.1  YES NVRAM up				up	
Loopback0
10.1.1.1	  YES manual up				up	
”, “stdout_lines
“: [“”, “Interface			IP-Address OK? Method Status
  Protocol”, “Ethernet0/0			192.168.100.1  YES NVRAM up
 up	  “, “Ethernet0/1				192.168.200.1  YES NVRAM up
up	“, “Loopaback0				10.1.1.1	YES manual up
up	“]}
А что внутри?

А теперь поговорим о начинке сценария. Основу составляют переменные. Это могут быть данные о машине, выводы команд, а также их можно вводить вручную.

Главное не забывать правила написания имён. Их всего два:

  1. имена всегда должны состоять из букв, цифр и нижнего подчёркивания;
  2. имена всегда должны начинаться с буквы.

Переменные могут быть определены разными способами:

Инвентарным файлом

[cisco-routers]
192.168.100.1
192.168.100.2
192.168.100.3

[cisco-switches]
192.168.100.100

[cisco-routers:vars]
ntp_server=192.168.255.100
log_server=10.255.100.1

PLAYBOOKом

-name: Run show commands on router:
 hosts: cisco-routers
 gather_facts: false

vars:
	ntp_server: 192.168.255.100
	log_server: 10.255.100.1

      tasks:
													
-name: run sh ip int br
 raw: s hip int br | ex unass

-name: run s hip route
 raw: sh ip route

Специальными файлами, созданными для групп:

[cisco-routers]
192.168.100.1
192.168.100.2
192.168.100.3

[cisco-switches]
192.168.100.100

Или группами каталогов

|– group_vars			_
|   |– all.yml			  |
|   |–cisco-routers.yml	  |  Каталог с переменными для групп устройств
|   |–cisco-switches.yml	_|
|
|–host vars			_
|   |–192.168.100.1		  |
|   |–192.168.100.2		  |
|   |–192.168.100.3		  |  Каталог с переменными для устройств
|   |–192.168.100.100		_|
|
|–myhosts			  |  Инвертарный файл 	  

Команда register позволяет сохранять результаты выполнений модулей в переменные. После чего переменная может быть использована в шаблонах, принятиях решений о выполнении заданного сценария.

---

	- name: Run show commands on routers
	  hosts: cisco-routers
	  gather_facts: false

	  tasks:

-name: run s hip int br
 raw: s hip int br | ex unass
 register: sh_ip_int_br_result

--- 

debug отображает информацию в стандартном потоке вывода в виде произвольной строки, переменной или фактах о машине.

---
- name: Run show commands on routers
  hosts: cisco-routers
  gather_facts: false

tasks:

	-name: run s hip int br
	 raw: sh ip int br | ex unass
	 register: sh_ip_int_br_result

	-name: Debug registered var
	 debug: var=sh_ip_int_br_result.stdout_lines

После чего результатом работы станет следующее:

SSH password:

PLAY [Run show commands on routers] ***************************************************

TASK [run sh ip int br] ***************************************************************
changed: [192.168.100.1]
changed: [192.168.100.2]
changed: [192.168.100.3]

TASK [Debug registered var] ***********************************************************
ok: [192.168.100.1] => {
	“sh_ip_int_br_result.stdout_lines”: [
	“”,
	“Interface			IP-Address	 	OK? Method Status			Protocol”,
	“Ethernet0/0		192.168.100.1	YES NVRAM  up			up	  “,
	“Ethernet0/1		192.168.200.1	YES NVRAM  up			up	  “,
	“Loopback0			10.1.1.1		YES manual up			up	  “
    ]
}
ok: [192.168.100.2] => {
    “sh_ip_int_br_result.stdout_lines”: [
	  “”,
	“Interface			IP-Address	 	OK? Method Status			Protocol”,
	“Ethernet0/0		192.168.100.1	YES NVRAM  up			up	  “,
	“Ethernet0/2		192.168.200.1	YES NVRAM  administratively down down “,
	“Loopback0			10.1.1.1		YES manual up			up	  “
    ]
}
ok: [192.168.100.3] => {
    “sh_ip_int_br_result.stdout_lines”: [
	  “”,
	“Interface			IP-Address	 	OK? Method Status			Protocol”,
	“Ethernet0/0		192.168.100.3	YES NVRAM  up			up	  “,
	“Ethernet0/2		192.168.200.1	YES NVRAM  administratively down down “,
	“Loopback0			10.1.1.1		YES manual up			up	  “,
“Loopback10			10.255.3.3		YES manual up			up	  “
    ]
}

PLAY RECAP ****************************************************************************
192.168.100.1			: ok=2	changed=1		unreachable=0	failed=0
192.168.100.2			: ok=2	changed=1		unreachable=0	failed=0
192.168.100.3			: ok=2	changed=1		unreachable=0	failed=0
Вместо заключения

Можно ещё долго приводить примеры работы в системе, но ещё один факт так сказать "вишенка на торте". К плюсам Ansible следует отнести и то, что заданную команду система может выполнять практически до бесконечности. Пока не наступит требуемый результат трансформации не прекратятся. Пользователю можно не беспокоиться - программа сама всё сделает за Вас, а Вы можете заниматься другими делами.

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
icon strelka icons icons

узнай больше на курсе

DevOps-инженер с нуля
Стань DevOps-инженером с нуля и научись использовать инструменты и методы DevOps
Подробнее о курсе
Полный курс по сетевым технологиям
Полный курс по сетевым технологиям от Мерион Нетворкс - учим с нуля сетевых инженеров и DevOPS специалистов
Подробнее о курсе
Python программист с нуля
Стань разработчиком на одном из самых популярных языков программирования - Python
Подробнее о курсе
Онлайн-курс по кибербезопасности
Полный курс по кибербезопасности от Мерион Нетворкс - учим с нуля специалистов по информационной безопасности. Пора стать безопасником!
Подробнее о курсе
Java-разработчик с нуля
Освойте backend-разработку и программирование на Java, фреймворки Spring и Maven, работу с базами данных и API
Подробнее о курсе
Этичный хакинг
Научись работать с Kali Linux, изучи самые распространенные уязвимости, разверни виртуальную лабораторию для пентестинга
Подробнее о курсе
Еще по теме:
img
Git Flow - это специальная система ветвления для Git. Она помогает команде лучше контролировать и добавлять различные версии проекта. В статье рассказываем, как ее использовать.
img
Мы рассмотрим несколько простых способов, с помощью которых вы можете управлять и отслеживать логи для своих контейнеров.
img
Узнайте, как использовать Git Hooks для автоматизации задач в рабочем процессе: от проверки коммитов до автоматического тестирования, и как настроить хуки для совместной работы в команде.
img
Откройте для себя, как канареечное развертывание может минимизировать риски при обновлении ПО. Узнайте, как постепенно внедрять новые функции и обеспечивать стабильность продукта с помощью этого метода.
img
Откройте для себя GitOps — революционный подход к управлению инфраструктурой через Git. Узнайте, как этот метод упрощает развертывание приложений и повышает надежность с помощью автоматизации и масштабируемости.
Весенние скидки
30%
50%
60%
До конца акции: 30 дней 24 : 59 : 59