HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-19
1 <ul><li>/</li>
1 <ul><li>/</li>
2 <li>/</li>
2 <li>/</li>
3 </ul><p>Ansible<strong></strong> • 3 мая 2025 • 10 мин чтения</p>
3 </ul><p>Ansible<strong></strong> • 3 мая 2025 • 10 мин чтения</p>
4 <p><strong>Ansible</strong>- инструмент, который избавляет от рутины в работе с серверами. Вместо ручной настройки - чёткие инструкции в виде сценариев. Эти сценарии называются Ansible-playbook. Они задают последовательность шагов, которые система выполнит на удалённых машинах.</p>
4 <p><strong>Ansible</strong>- инструмент, который избавляет от рутины в работе с серверами. Вместо ручной настройки - чёткие инструкции в виде сценариев. Эти сценарии называются Ansible-playbook. Они задают последовательность шагов, которые система выполнит на удалённых машинах.</p>
5 <p><strong>Плейбук</strong>- это не магия. Это обычный YAML-файл, в котором по пунктам описано: что нужно установить, какие сервисы запустить, какие конфигурации применить. Такой подход позволяет автоматизировать всё - от простой установки nginx до настройки сложной кластерной среды.</p>
5 <p><strong>Плейбук</strong>- это не магия. Это обычный YAML-файл, в котором по пунктам описано: что нужно установить, какие сервисы запустить, какие конфигурации применить. Такой подход позволяет автоматизировать всё - от простой установки nginx до настройки сложной кластерной среды.</p>
6 <p>Пример из жизни. Сисадмин настраивает 20 серверов. Без Ansible он подключается по SSH к каждому, вводит команды, следит за логами. С Ansible - он запускает один плейбук, и всё делает автоматом. Ошибок меньше, времени уходит в разы меньше.</p>
6 <p>Пример из жизни. Сисадмин настраивает 20 серверов. Без Ansible он подключается по SSH к каждому, вводит команды, следит за логами. С Ansible - он запускает один плейбук, и всё делает автоматом. Ошибок меньше, времени уходит в разы меньше.</p>
7 <p><strong>Вот базовый пример простого плейбука:</strong></p>
7 <p><strong>Вот базовый пример простого плейбука:</strong></p>
8 <p>- name: Установка Nginx на веб-серверыhosts: webserversbecome: truetasks:- name: Установить Nginxapt:name: nginxstate: present</p>
8 <p>- name: Установка Nginx на веб-серверыhosts: webserversbecome: truetasks:- name: Установить Nginxapt:name: nginxstate: present</p>
9 <p><strong>Что здесь происходит:</strong></p>
9 <p><strong>Что здесь происходит:</strong></p>
10 <ul><li>hosts - на какие машины нацелен сценарий.</li>
10 <ul><li>hosts - на какие машины нацелен сценарий.</li>
11 <li>become: true - нужен доступ суперпользователя.</li>
11 <li>become: true - нужен доступ суперпользователя.</li>
12 <li>tasks - список задач: в этом случае - установка nginx.</li>
12 <li>tasks - список задач: в этом случае - установка nginx.</li>
13 </ul><p>Такой сценарий можно переиспользовать, изменять, хранить в Git и применять в любой момент. А главное - Ansible-playbook не делает лишнего. Он проверяет, нужно ли что-то менять. Если всё уже в нужном состоянии - просто пропускает задачу. Это называется<strong>идемпотентностью</strong>.</p>
13 </ul><p>Такой сценарий можно переиспользовать, изменять, хранить в Git и применять в любой момент. А главное - Ansible-playbook не делает лишнего. Он проверяет, нужно ли что-то менять. Если всё уже в нужном состоянии - просто пропускает задачу. Это называется<strong>идемпотентностью</strong>.</p>
14 <p><strong>В этом и сила Ansible:</strong>управляем серверами так же чётко, как пишем код. Именно это и называют подходом<strong></strong>"<strong>инфраструктура как код</strong>"‎ - понятным, версионируемым, надёжным.</p>
14 <p><strong>В этом и сила Ansible:</strong>управляем серверами так же чётко, как пишем код. Именно это и называют подходом<strong></strong>"<strong>инфраструктура как код</strong>"‎ - понятным, версионируемым, надёжным.</p>
15 <p><em>🔹 Узнайте, с чего начать работу с Ansible на курсе от Слёрм. Вы научитесь создавать, использовать плейбуки и роли, освоите деплой приложений, получите навыки автоматизации процессов управления IT-инфраструктурой. Начать обучение можно с<a>бесплатным доступом</a>.</em></p>
15 <p><em>🔹 Узнайте, с чего начать работу с Ansible на курсе от Слёрм. Вы научитесь создавать, использовать плейбуки и роли, освоите деплой приложений, получите навыки автоматизации процессов управления IT-инфраструктурой. Начать обучение можно с<a>бесплатным доступом</a>.</em></p>
16 <h2>Структура Ansible-playbook: логика и компоненты</h2>
16 <h2>Структура Ansible-playbook: логика и компоненты</h2>
17 <p>Что такое плейбук в Ansible и как им пользоваться? Плейбук - это не набор случайных команд. Это чётко структурированный документ, в котором всё построено по строгим правилам. Его читают сверху вниз, как обычный сценарий. Каждая часть плейбука отвечает за определённый этап настройки.</p>
17 <p>Что такое плейбук в Ansible и как им пользоваться? Плейбук - это не набор случайных команд. Это чётко структурированный документ, в котором всё построено по строгим правилам. Его читают сверху вниз, как обычный сценарий. Каждая часть плейбука отвечает за определённый этап настройки.</p>
18 <p><strong>Вот ключевые элементы Ansible-playbook:</strong></p>
18 <p><strong>Вот ключевые элементы Ansible-playbook:</strong></p>
19 <ul><li>name: человекочитаемое описание цели. Не обязательно, но помогает понять, что делает сценарий.</li>
19 <ul><li>name: человекочитаемое описание цели. Не обязательно, но помогает понять, что делает сценарий.</li>
20 <li>hosts: список целевых серверов или групп. Указывается имя из файла инвентаризации.</li>
20 <li>hosts: список целевых серверов или групп. Указывается имя из файла инвентаризации.</li>
21 <li>become: если нужно выполнять команды от имени root.</li>
21 <li>become: если нужно выполнять команды от имени root.</li>
22 <li>vars: переменные, используемые в задачах.</li>
22 <li>vars: переменные, используемые в задачах.</li>
23 <li>tasks: основная часть, где описываются действия.</li>
23 <li>tasks: основная часть, где описываются действия.</li>
24 <li>handlers: триггеры, которые запускаются только по уведомлению, например, для перезапуска сервисов.</li>
24 <li>handlers: триггеры, которые запускаются только по уведомлению, например, для перезапуска сервисов.</li>
25 <li>roles: подключение предварительно организованных наборов конфигураций.</li>
25 <li>roles: подключение предварительно организованных наборов конфигураций.</li>
26 </ul><p><strong>Пример шаблона плейбука:</strong>- name: Настройка веб-сервераhosts: webbecome: truevars:nginx_port: 8080tasks:- name: Установить Nginxapt:name: nginxstate: present- name: Убедиться, что Nginx запущенservice:name: nginxstate: startedhandlers:- name: Перезапустить Nginxservice:name: nginxstate: restarted</p>
26 </ul><p><strong>Пример шаблона плейбука:</strong>- name: Настройка веб-сервераhosts: webbecome: truevars:nginx_port: 8080tasks:- name: Установить Nginxapt:name: nginxstate: present- name: Убедиться, что Nginx запущенservice:name: nginxstate: startedhandlers:- name: Перезапустить Nginxservice:name: nginxstate: restarted</p>
27 <p><strong>🧩 Что важно:</strong></p>
27 <p><strong>🧩 Что важно:</strong></p>
28 <ul><li>Каждое действие - это<strong>task</strong>. Он вызывает модуль, например apt, service или copy.</li>
28 <ul><li>Каждое действие - это<strong>task</strong>. Он вызывает модуль, например apt, service или copy.</li>
29 <li>Если в задаче указано notify, и задача изменила состояние системы - сработает соответствующий<strong>handler</strong>.</li>
29 <li>Если в задаче указано notify, и задача изменила состояние системы - сработает соответствующий<strong>handler</strong>.</li>
30 <li>Использование переменных ({{ nginx_port }}) делает плейбук гибким и удобным для разных окружений.</li>
30 <li>Использование переменных ({{ nginx_port }}) делает плейбук гибким и удобным для разных окружений.</li>
31 </ul><p>Всё это превращает YAML-файл в мощный инструмент автоматизации, читаемый как текст и исполняемый как код. Такой сценарий легко адаптировать, расширять и применять на новых машинах, не меняя суть конфигурации.</p>
31 </ul><p>Всё это превращает YAML-файл в мощный инструмент автоматизации, читаемый как текст и исполняемый как код. Такой сценарий легко адаптировать, расширять и применять на новых машинах, не меняя суть конфигурации.</p>
32 <p>Приглашаем в наше телеграм-сообщество, где делимся лучшими статьями с Хабра по рекомендациям и практикам работы с Ansible.</p>
32 <p>Приглашаем в наше телеграм-сообщество, где делимся лучшими статьями с Хабра по рекомендациям и практикам работы с Ansible.</p>
33 <p><strong>Все полезные материалы по Ansible в одном месте</strong></p>
33 <p><strong>Все полезные материалы по Ansible в одном месте</strong></p>
34 <p>Дальше - разберём ключевые строительные блоки:<strong>play</strong>,<strong>task</strong>и<strong>модули</strong>, на которых держится вся магия.</p>
34 <p>Дальше - разберём ключевые строительные блоки:<strong>play</strong>,<strong>task</strong>и<strong>модули</strong>, на которых держится вся магия.</p>
35 <h2>Что такое play, task и модули в Ansible?</h2>
35 <h2>Что такое play, task и модули в Ansible?</h2>
36 <p>Ансибл плейбук состоит из одного или нескольких<strong>play</strong>- логических блоков, которые описывают, что делать с группой серверов. А каждый play включает<strong>tasks</strong>- пошаговые действия, которые выполняет Ansible.</p>
36 <p>Ансибл плейбук состоит из одного или нескольких<strong>play</strong>- логических блоков, которые описывают, что делать с группой серверов. А каждый play включает<strong>tasks</strong>- пошаговые действия, которые выполняет Ansible.</p>
37 <p>🔸<strong>Play</strong>- это как глава сценария. Она задаёт:</p>
37 <p>🔸<strong>Play</strong>- это как глава сценария. Она задаёт:</p>
38 <ul><li>на какие машины отправлять команды (hosts);</li>
38 <ul><li>на какие машины отправлять команды (hosts);</li>
39 <li>нужно ли использовать sudo (become);</li>
39 <li>нужно ли использовать sudo (become);</li>
40 <li>какие переменные применить (vars);</li>
40 <li>какие переменные применить (vars);</li>
41 <li>какие роли или задачи подключить.</li>
41 <li>какие роли или задачи подключить.</li>
42 </ul><p>🔸<strong>Task</strong>- это инструкция: "‎установить пакет"‎, "‎запустить сервис"‎, "‎скопировать файл"‎. Ansible выполняет их по порядку.</p>
42 </ul><p>🔸<strong>Task</strong>- это инструкция: "‎установить пакет"‎, "‎запустить сервис"‎, "‎скопировать файл"‎. Ansible выполняет их по порядку.</p>
43 <p>Каждый task вызывает<strong>модуль</strong>- встроенный компонент Ansible, который делает конкретную работу.</p>
43 <p>Каждый task вызывает<strong>модуль</strong>- встроенный компонент Ansible, который делает конкретную работу.</p>
44 <p><strong>Вот пример задачи с модулем</strong><strong>copy</strong><strong>:</strong></p>
44 <p><strong>Вот пример задачи с модулем</strong><strong>copy</strong><strong>:</strong></p>
45 <p>- name: Скопировать конфиг Nginxcopy:src: ./nginx.confdest: /etc/nginx/nginx.confnotify: Перезапустить Nginx</p>
45 <p>- name: Скопировать конфиг Nginxcopy:src: ./nginx.confdest: /etc/nginx/nginx.confnotify: Перезапустить Nginx</p>
46 <p>Если nginx.conf на сервере изменится, будет отправлено уведомление на handler с именем Перезапустить Nginx.</p>
46 <p>Если nginx.conf на сервере изменится, будет отправлено уведомление на handler с именем Перезапустить Nginx.</p>
47 <p><strong>📦 Часто используемые модули:</strong></p>
47 <p><strong>📦 Часто используемые модули:</strong></p>
48 <ul><li>apt, yum - установка пакетов.</li>
48 <ul><li>apt, yum - установка пакетов.</li>
49 <li>copy, template - работа с файлами.</li>
49 <li>copy, template - работа с файлами.</li>
50 <li>service - управление службами.</li>
50 <li>service - управление службами.</li>
51 <li>command, shell - запуск произвольных команд.</li>
51 <li>command, shell - запуск произвольных команд.</li>
52 <li>file - изменение прав, владельцев и атрибутов файлов.</li>
52 <li>file - изменение прав, владельцев и атрибутов файлов.</li>
53 </ul><p>🔁 Все задачи работают<strong>идемпотентно</strong>. Это значит: если сервер уже в нужном состоянии, Ansible не будет ничего менять. Это снижает риски и делает сценарии безопасными для повторного запуска.</p>
53 </ul><p>🔁 Все задачи работают<strong>идемпотентно</strong>. Это значит: если сервер уже в нужном состоянии, Ansible не будет ничего менять. Это снижает риски и делает сценарии безопасными для повторного запуска.</p>
54 <p>Плейбуки заменяют ручную настройку и shell-скрипты. Они точнее, прозрачнее и проще в сопровождении. А если playbook начинает разрастаться - его разбивают на<strong>роли</strong>.</p>
54 <p>Плейбуки заменяют ручную настройку и shell-скрипты. Они точнее, прозрачнее и проще в сопровождении. А если playbook начинает разрастаться - его разбивают на<strong>роли</strong>.</p>
55 <p>Дальше - расскажем, как устроены роли и зачем они нужны.</p>
55 <p>Дальше - расскажем, как устроены роли и зачем они нужны.</p>
56 <h2>Роли в Ansible: как структурировать плейбуки</h2>
56 <h2>Роли в Ansible: как структурировать плейбуки</h2>
57 <p>Когда сценариев становится много, обычный playbook превращается в громоздкий файл. Чтобы навести порядок и переиспользовать код, Ansible предлагает концепцию<strong>ролей</strong>(roles).</p>
57 <p>Когда сценариев становится много, обычный playbook превращается в громоздкий файл. Чтобы навести порядок и переиспользовать код, Ansible предлагает концепцию<strong>ролей</strong>(roles).</p>
58 <p><strong>Роль - это шаблон, в который можно завернуть:</strong></p>
58 <p><strong>Роль - это шаблон, в который можно завернуть:</strong></p>
59 <ul><li>задачи (tasks),</li>
59 <ul><li>задачи (tasks),</li>
60 <li>обработчики (handlers),</li>
60 <li>обработчики (handlers),</li>
61 <li>переменные (vars),</li>
61 <li>переменные (vars),</li>
62 <li>шаблоны (templates),</li>
62 <li>шаблоны (templates),</li>
63 <li>файлы (files).</li>
63 <li>файлы (files).</li>
64 </ul><p>Каждая роль живёт в отдельной папке. В итоге структура становится понятной и логичной:</p>
64 </ul><p>Каждая роль живёт в отдельной папке. В итоге структура становится понятной и логичной:</p>
65 <p>roles/└── webserver/├── tasks/│ └── main.yml├── handlers/│ └── main.yml├── templates/│ └── nginx.conf.j2├── files/│ └── index.html└── vars/└── main.yml</p>
65 <p>roles/└── webserver/├── tasks/│ └── main.yml├── handlers/│ └── main.yml├── templates/│ └── nginx.conf.j2├── files/│ └── index.html└── vars/└── main.yml</p>
66 <p>Это удобно, когда:</p>
66 <p>Это удобно, когда:</p>
67 <ul><li>проект работает с разными окружениями (dev, staging, prod);</li>
67 <ul><li>проект работает с разными окружениями (dev, staging, prod);</li>
68 <li>одни и те же настройки нужно применять на многих машинах;</li>
68 <li>одни и те же настройки нужно применять на многих машинах;</li>
69 <li>команда работает над сценарием совместно.</li>
69 <li>команда работает над сценарием совместно.</li>
70 </ul><p><strong>Пример подключения роли в плейбук:</strong></p>
70 </ul><p><strong>Пример подключения роли в плейбук:</strong></p>
71 <p>- name: Настройка веб-сервера через рольhosts: webbecome: trueroles:- webserver</p>
71 <p>- name: Настройка веб-сервера через рольhosts: webbecome: trueroles:- webserver</p>
72 <p><strong>Зачем всё это? Потому что роли:</strong></p>
72 <p><strong>Зачем всё это? Потому что роли:</strong></p>
73 <ul><li>делают код переиспользуемым;</li>
73 <ul><li>делают код переиспользуемым;</li>
74 <li>упрощают тестирование;</li>
74 <li>упрощают тестирование;</li>
75 <li>повышают читаемость;</li>
75 <li>повышают читаемость;</li>
76 <li>ускоряют работу с CI/CD.</li>
76 <li>ускоряют работу с CI/CD.</li>
77 </ul><p>Когда структура разложена по ролям - вы можете изменить одну часть, не трогая остальное. Это как модули в программировании: компактно, изолированно и понятно.</p>
77 </ul><p>Когда структура разложена по ролям - вы можете изменить одну часть, не трогая остальное. Это как модули в программировании: компактно, изолированно и понятно.</p>
78 <p>Далее - как запускать плейбуки на практике: команды, параметры, проверка.</p>
78 <p>Далее - как запускать плейбуки на практике: команды, параметры, проверка.</p>
79 <p>💡<strong><em>Начните автоматизировать управление вашей IT-инфраструктурой с курсом</em></strong>"‎<strong><em>Ansible: Infrastructure as Code</em></strong>"<strong><em>!</em></strong><em>Узнайте, как создавать и использовать плейбуки и роли в Ansible. Получите<a>бесплатный доступ</a>к учебным материалам и сделайте шаг к повышению своей квалификации.</em></p>
79 <p>💡<strong><em>Начните автоматизировать управление вашей IT-инфраструктурой с курсом</em></strong>"‎<strong><em>Ansible: Infrastructure as Code</em></strong>"<strong><em>!</em></strong><em>Узнайте, как создавать и использовать плейбуки и роли в Ansible. Получите<a>бесплатный доступ</a>к учебным материалам и сделайте шаг к повышению своей квалификации.</em></p>
80 <h2>Запуск Ansible playbook: команды и проверка</h2>
80 <h2>Запуск Ansible playbook: команды и проверка</h2>
81 <p>Когда плейбук готов, его нужно правильно запустить. Это делается с помощью команды ansible-playbook. Именно она выполняет сценарий на указанных серверах.</p>
81 <p>Когда плейбук готов, его нужно правильно запустить. Это делается с помощью команды ansible-playbook. Именно она выполняет сценарий на указанных серверах.</p>
82 <p>🔧 Базовая команда:</p>
82 <p>🔧 Базовая команда:</p>
83 <p>ansible-playbook playbook.yml</p>
83 <p>ansible-playbook playbook.yml</p>
84 <p>Если у вас есть свой inventory (список хостов), укажите его:</p>
84 <p>Если у вас есть свой inventory (список хостов), укажите его:</p>
85 <p>ansible-playbook -i inventory.ini playbook.yml</p>
85 <p>ansible-playbook -i inventory.ini playbook.yml</p>
86 <p>📌 Пояснение параметров:</p>
86 <p>📌 Пояснение параметров:</p>
87 <ul><li>-i - путь до файла с хостами.</li>
87 <ul><li>-i - путь до файла с хостами.</li>
88 <li>-u - имя пользователя, от которого выполнять задачи.</li>
88 <li>-u - имя пользователя, от которого выполнять задачи.</li>
89 <li>-k - запрос пароля SSH (если вход по ключу не настроен).</li>
89 <li>-k - запрос пароля SSH (если вход по ключу не настроен).</li>
90 <li>-b - активирует become, то есть выполнение от имени root.</li>
90 <li>-b - активирует become, то есть выполнение от имени root.</li>
91 </ul><p>Пример запуска с конкретным пользователем:</p>
91 </ul><p>Пример запуска с конкретным пользователем:</p>
92 <p>ansible-playbook -i inventory.ini -u deploy -k -b playbook.yml</p>
92 <p>ansible-playbook -i inventory.ini -u deploy -k -b playbook.yml</p>
93 <p>🎯 Чтобы ограничить выполнение только для части серверов:</p>
93 <p>🎯 Чтобы ограничить выполнение только для части серверов:</p>
94 <p>ansible-playbook -l webservers playbook.yml</p>
94 <p>ansible-playbook -l webservers playbook.yml</p>
95 <p>📍 Перед запуском полезно проверить плейбук на синтаксические ошибки:</p>
95 <p>📍 Перед запуском полезно проверить плейбук на синтаксические ошибки:</p>
96 <p>ansible-playbook --syntax-check playbook.yml</p>
96 <p>ansible-playbook --syntax-check playbook.yml</p>
97 <p>Эта команда ничего не выполняет - только проверяет структуру YAML.🔍 А чтобы безопасно протестировать плейбук - запустите его в<strong>режиме dry-run</strong>:</p>
97 <p>Эта команда ничего не выполняет - только проверяет структуру YAML.🔍 А чтобы безопасно протестировать плейбук - запустите его в<strong>режиме dry-run</strong>:</p>
98 <p>ansible-playbook playbook.yml --check</p>
98 <p>ansible-playbook playbook.yml --check</p>
99 <p>В этом случае Ansible покажет,<strong>что бы он сделал</strong>, но<strong>не будет ничего менять</strong>. Особенно полезно для продакшн-серверов.Можно добавить флаг --diff, чтобы увидеть различия между текущим и ожидаемым состоянием:</p>
99 <p>В этом случае Ansible покажет,<strong>что бы он сделал</strong>, но<strong>не будет ничего менять</strong>. Особенно полезно для продакшн-серверов.Можно добавить флаг --diff, чтобы увидеть различия между текущим и ожидаемым состоянием:</p>
100 <p>ansible-playbook playbook.yml --check --diff</p>
100 <p>ansible-playbook playbook.yml --check --diff</p>
101 <p>Такой подход позволяет заранее понять последствия изменений. Это ключевой инструмент в DevOps-практике: никакой импровизации, только предсказуемые действия.</p>
101 <p>Такой подход позволяет заранее понять последствия изменений. Это ключевой инструмент в DevOps-практике: никакой импровизации, только предсказуемые действия.</p>
102 <p>📌<strong><em>На<a>курсе от Слерм</a>вы получите ключевые знания и навыки по Ansible,</em></strong><em>научитесь создавать, использовать плейбуки и роли в Ansible, освоите деплой приложений, освоите навыки автоматизации процессов управления IT-инфраструктурой.</em></p>
102 <p>📌<strong><em>На<a>курсе от Слерм</a>вы получите ключевые знания и навыки по Ansible,</em></strong><em>научитесь создавать, использовать плейбуки и роли в Ansible, освоите деплой приложений, освоите навыки автоматизации процессов управления IT-инфраструктурой.</em></p>
103 <p><strong>Следующая тема - переменные и шаблоны</strong>: как сделать плейбук гибким и удобным для масштабирования.</p>
103 <p><strong>Следующая тема - переменные и шаблоны</strong>: как сделать плейбук гибким и удобным для масштабирования.</p>
104 <h2>Переменные и шаблоны в Ansible playbook</h2>
104 <h2>Переменные и шаблоны в Ansible playbook</h2>
105 <p>Одна из сильных сторон Ansible - гибкость. Вместо того чтобы жёстко прописывать значения в задачах, вы можете использовать<strong>переменные</strong>. Это делает плейбуки универсальными, адаптируемыми под разные окружения и задачи.</p>
105 <p>Одна из сильных сторон Ansible - гибкость. Вместо того чтобы жёстко прописывать значения в задачах, вы можете использовать<strong>переменные</strong>. Это делает плейбуки универсальными, адаптируемыми под разные окружения и задачи.</p>
106 <p><strong>🔹 Где задаются переменные?</strong></p>
106 <p><strong>🔹 Где задаются переменные?</strong></p>
107 <ol><li>Прямо в плейбуке:</li>
107 <ol><li>Прямо в плейбуке:</li>
108 <li>vars:</li>
108 <li>vars:</li>
109 <li>app_port: 3000</li>
109 <li>app_port: 3000</li>
110 <li>Через командную строку:</li>
110 <li>Через командную строку:</li>
111 <li>ansible-playbook site.yml -e "‎app_port=3000"</li>
111 <li>ansible-playbook site.yml -e "‎app_port=3000"</li>
112 <li>В inventory-файле:</li>
112 <li>В inventory-файле:</li>
113 <li>[web]</li>
113 <li>[web]</li>
114 <li>server1 ansible_host=192.168.1.10 app_port=3000</li>
114 <li>server1 ansible_host=192.168.1.10 app_port=3000</li>
115 <li>В отдельном YAML-файле и подключаются через vars_files:</li>
115 <li>В отдельном YAML-файле и подключаются через vars_files:</li>
116 <li>vars_files:</li>
116 <li>vars_files:</li>
117 <li>- vars/main.yml</li>
117 <li>- vars/main.yml</li>
118 </ol><p>📌 В Ansible есть<strong>иерархия приоритетов</strong>. Значения из -e в командной строке перекрывают всё остальное.</p>
118 </ol><p>📌 В Ansible есть<strong>иерархия приоритетов</strong>. Значения из -e в командной строке перекрывают всё остальное.</p>
119 <p><strong>🔹 Как использовать переменные в задачах?</strong></p>
119 <p><strong>🔹 Как использовать переменные в задачах?</strong></p>
120 <p>Через двойные фигурные скобки:</p>
120 <p>Через двойные фигурные скобки:</p>
121 <p>- name: Открыть портufw:rule: allowport: "{{ app_port }}"</p>
121 <p>- name: Открыть портufw:rule: allowport: "{{ app_port }}"</p>
122 <p><strong>🔹 Шаблоны Jinja2</strong>Можно создавать конфиги с переменными и использовать шаблоны. Например:</p>
122 <p><strong>🔹 Шаблоны Jinja2</strong>Можно создавать конфиги с переменными и использовать шаблоны. Например:</p>
123 <p><strong>Шаблон конфигурации (nginx.conf.j2):</strong></p>
123 <p><strong>Шаблон конфигурации (nginx.conf.j2):</strong></p>
124 <p>server { listen {{ nginx_port }}; server_name localhost;}</p>
124 <p>server { listen {{ nginx_port }}; server_name localhost;}</p>
125 <p>Подключается в задаче так:</p>
125 <p>Подключается в задаче так:</p>
126 <p>- name: Сгенерировать конфигtemplate:src: nginx.conf.j2dest: /etc/nginx/nginx.conf</p>
126 <p>- name: Сгенерировать конфигtemplate:src: nginx.conf.j2dest: /etc/nginx/nginx.conf</p>
127 <p>Ansible сам подставит значения переменных, и сгенерирует готовый файл.</p>
127 <p>Ansible сам подставит значения переменных, и сгенерирует готовый файл.</p>
128 <p><strong>Получите ключевые знания и навыки по Ansible!</strong>Дарим демодоступ к обучению на 3 дня, чтобы вы познакомились с материалами и спикерами курса.</p>
128 <p><strong>Получите ключевые знания и навыки по Ansible!</strong>Дарим демодоступ к обучению на 3 дня, чтобы вы познакомились с материалами и спикерами курса.</p>
129 <p><strong>🔹 Условия и логика</strong></p>
129 <p><strong>🔹 Условия и логика</strong></p>
130 <p>Можно добавить условия:- name: Копировать файл, если приложение активноcopy:src: conf.j2dest: /etc/app/config.yamlwhen: app_enabled</p>
130 <p>Можно добавить условия:- name: Копировать файл, если приложение активноcopy:src: conf.j2dest: /etc/app/config.yamlwhen: app_enabled</p>
131 <p>Это позволяет делать сценарий "‎умным": выполнять действия только при определённых условиях.</p>
131 <p>Это позволяет делать сценарий "‎умным": выполнять действия только при определённых условиях.</p>
132 <p>📎 Всё это превращает Ansible playbook в мощный инструмент автоматизации, который работает с десятками серверов так же легко, как с одним.</p>
132 <p>📎 Всё это превращает Ansible playbook в мощный инструмент автоматизации, который работает с десятками серверов так же легко, как с одним.</p>
133 <p>Далее - заключение: коротко о главном.</p>
133 <p>Далее - заключение: коротко о главном.</p>
134 <h2>Заключение: зачем нужен Ansible-playbook</h2>
134 <h2>Заключение: зачем нужен Ansible-playbook</h2>
135 <p>Ansible - это не просто набор команд для автоматизации. Это язык управления инфраструктурой, который легко читается, масштабируется и позволяет точно контролировать каждое изменение.</p>
135 <p>Ansible - это не просто набор команд для автоматизации. Это язык управления инфраструктурой, который легко читается, масштабируется и позволяет точно контролировать каждое изменение.</p>
136 <p><strong>Сценарии в формате Ansible-playbook:</strong></p>
136 <p><strong>Сценарии в формате Ansible-playbook:</strong></p>
137 <ul><li>сокращают время настройки;</li>
137 <ul><li>сокращают время настройки;</li>
138 <li>исключают человеческий фактор;</li>
138 <li>исключают человеческий фактор;</li>
139 <li>упрощают командную работу;</li>
139 <li>упрощают командную работу;</li>
140 <li>легко интегрируются в CI/CD;</li>
140 <li>легко интегрируются в CI/CD;</li>
141 <li>обеспечивают повторяемость действий.</li>
141 <li>обеспечивают повторяемость действий.</li>
142 </ul><p><strong>📌 Вы можете:</strong></p>
142 </ul><p><strong>📌 Вы можете:</strong></p>
143 <ul><li>автоматизировать развёртывание приложений;</li>
143 <ul><li>автоматизировать развёртывание приложений;</li>
144 <li>управлять обновлениями и сервисами;</li>
144 <li>управлять обновлениями и сервисами;</li>
145 <li>конфигурировать целые кластеры;</li>
145 <li>конфигурировать целые кластеры;</li>
146 <li>писать сценарии, которые можно использовать годами.</li>
146 <li>писать сценарии, которые можно использовать годами.</li>
147 </ul><p>Главное - всё прозрачно. YAML читается проще скриптов, а структура playbook'а напоминает хорошо написанный техдок.</p>
147 </ul><p>Главное - всё прозрачно. YAML читается проще скриптов, а структура playbook'а напоминает хорошо написанный техдок.</p>
148 <p>🧠 Если представить инфраструктуру как программный продукт, то<strong>Ansible - это его компилятор. А playbook - это исходный код, который описывает, как всё должно работать</strong>. И вы сами выбираете, где и когда его применить.</p>
148 <p>🧠 Если представить инфраструктуру как программный продукт, то<strong>Ansible - это его компилятор. А playbook - это исходный код, который описывает, как всё должно работать</strong>. И вы сами выбираете, где и когда его применить.</p>
149 <p>Ansible подойдёт как DevOps-инженерам, так и разработчикам, которые хотят ускорить развёртывание и сделать свой стек предсказуемым.</p>
149 <p>Ansible подойдёт как DevOps-инженерам, так и разработчикам, которые хотят ускорить развёртывание и сделать свой стек предсказуемым.</p>
150 <p>🎯 Освоив Ansible-playbook, вы сможете:</p>
150 <p>🎯 Освоив Ansible-playbook, вы сможете:</p>
151 <ul><li>быстро настраивать любые окружения;</li>
151 <ul><li>быстро настраивать любые окружения;</li>
152 <li>не бояться масштабирования;</li>
152 <li>не бояться масштабирования;</li>
153 <li>внедрить практики GitOps и DevOps в ежедневную работу.</li>
153 <li>внедрить практики GitOps и DevOps в ежедневную работу.</li>
154 </ul><p>Теперь, когда вы знаете, как устроен playbook и как с ним работать - вы готовы к следующему шагу: создать свой первый автоматизированный сценарий и сделать инфраструктуру подконтрольной.</p>
154 </ul><p>Теперь, когда вы знаете, как устроен playbook и как с ним работать - вы готовы к следующему шагу: создать свой первый автоматизированный сценарий и сделать инфраструктуру подконтрольной.</p>
155 <p><em>🚀</em><strong><em>Узнайте, как эффективно управлять IT-инфраструктурой с помощью Ansible!</em></strong><em>Запишитесь на курс<a>"Ansible: Infrastructure as Code"‎</a>и откройте для себя автоматизацию процессов.</em></p>
155 <p><em>🚀</em><strong><em>Узнайте, как эффективно управлять IT-инфраструктурой с помощью Ansible!</em></strong><em>Запишитесь на курс<a>"Ansible: Infrastructure as Code"‎</a>и откройте для себя автоматизацию процессов.</em></p>
156 <h3><strong>Статью подготовили</strong></h3>
156 <h3><strong>Статью подготовили</strong></h3>
157 <p>Понравилась статья? Будем рады вашему лайку и репосту - вдруг кому-то тоже пригодится:)</p>
157 <p>Понравилась статья? Будем рады вашему лайку и репосту - вдруг кому-то тоже пригодится:)</p>
158 <h3><strong>Читайте также:</strong></h3>
158 <h3><strong>Читайте также:</strong></h3>
159  
159