2 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы разберем то, как устроены роли внутри, что поможет эффективнее их анализировать и создавать свои в случае необходимости.</p>
1
<p>В этом уроке мы разберем то, как устроены роли внутри, что поможет эффективнее их анализировать и создавать свои в случае необходимости.</p>
2
<p>Роли можно изучать на базе существующих, открыв их, например, на Github. А можно создать новую роль с нуля, чтобы увидеть, базовую структуру, которая туда была заложена. Пойдем по второму пути и создадим новую роль с помощью команды ansible-galaxy.</p>
2
<p>Роли можно изучать на базе существующих, открыв их, например, на Github. А можно создать новую роль с нуля, чтобы увидеть, базовую структуру, которая туда была заложена. Пойдем по второму пути и создадим новую роль с помощью команды ansible-galaxy.</p>
3
<p>Выполнять саму команду генерации можно в любом месте, если планируется эту роль добавлять на Github и публиковать в Ansible Galaxy. Но можно пойти и по другому пути. Если разместить содержимое роли в директории<em>roles</em>в корне проекта где запускается Ansible, то появится возможность использовать эту роль напрямую, без необходимости публиковать ее в Galaxy.</p>
3
<p>Выполнять саму команду генерации можно в любом месте, если планируется эту роль добавлять на Github и публиковать в Ansible Galaxy. Но можно пойти и по другому пути. Если разместить содержимое роли в директории<em>roles</em>в корне проекта где запускается Ansible, то появится возможность использовать эту роль напрямую, без необходимости публиковать ее в Galaxy.</p>
4
<p>Команда выше создаст базовую структуру роли, добавив в нее файлы и директории, необходимые для работы роли. Всего 8 директорий.</p>
4
<p>Команда выше создаст базовую структуру роли, добавив в нее файлы и директории, необходимые для работы роли. Всего 8 директорий.</p>
5
<p>Из всех файлов в структуре выше, обязательными являются только<em>meta/main.yml</em>и<em>tasks/main.yml</em>. Остальные появляются в зависимости от обстоятельств. Вот их предназначение:</p>
5
<p>Из всех файлов в структуре выше, обязательными являются только<em>meta/main.yml</em>и<em>tasks/main.yml</em>. Остальные появляются в зависимости от обстоятельств. Вот их предназначение:</p>
6
<ul><li><em>defaults</em>: содержит значения переменных по умолчанию. Эти значения могут быть изменены во время использования роли в плейбуке.</li>
6
<ul><li><em>defaults</em>: содержит значения переменных по умолчанию. Эти значения могут быть изменены во время использования роли в плейбуке.</li>
7
<li><em>files</em>: сюда добавляются любые необходимые файлы, которые нужны роли.</li>
7
<li><em>files</em>: сюда добавляются любые необходимые файлы, которые нужны роли.</li>
8
<li><em>handlers</em>: обработчики, которые могут быть использованы ролью.</li>
8
<li><em>handlers</em>: обработчики, которые могут быть использованы ролью.</li>
9
<li><em>meta</em>: содержит метаданные роли. Сюда входит лицензия, информация о платформе зависимости и многое другое.</li>
9
<li><em>meta</em>: содержит метаданные роли. Сюда входит лицензия, информация о платформе зависимости и многое другое.</li>
10
<li><em>tasks</em>: задачи роли, которые выполняются во время ее запуска.</li>
10
<li><em>tasks</em>: задачи роли, которые выполняются во время ее запуска.</li>
11
<li><em>templates</em>: шаблоны роли.</li>
11
<li><em>templates</em>: шаблоны роли.</li>
12
<li><em>tests</em>: тесты роли.</li>
12
<li><em>tests</em>: тесты роли.</li>
13
<li><em>vars</em>: переменные роли.</li>
13
<li><em>vars</em>: переменные роли.</li>
14
<li><em>README.md</em>: описание, которое будет использоваться как документация.</li>
14
<li><em>README.md</em>: описание, которое будет использоваться как документация.</li>
15
-
</ul><p>Метаданные выполняют несколько задач. Во-первых, они описывают роль и помогают ее найти в Ansible Galaxy. Во-вторых, с их помощью указываются зависимости, другие роли, которые используются внутри этой.</p>
15
+
</ul><h2>Метаданные</h2>
16
+
<p>Метаданные выполняют несколько задач. Во-первых, они описывают роль и помогают ее найти в Ansible Galaxy. Во-вторых, с их помощью указываются зависимости, другие роли, которые используются внутри этой.</p>
16
<h2>Задачи и обработчики</h2>
17
<h2>Задачи и обработчики</h2>
17
<p>Файл<em>tasks/main.yml</em>, представляет собой playbook, который будет запущен на выполнение при включении роли в playbook проекта или другой роли. По умолчанию этот файл пустой. Ожидается, что мы добавим сюда необходимые задачи.</p>
18
<p>Файл<em>tasks/main.yml</em>, представляет собой playbook, который будет запущен на выполнение при включении роли в playbook проекта или другой роли. По умолчанию этот файл пустой. Ожидается, что мы добавим сюда необходимые задачи.</p>
18
<p>Если задач станет много, то их можно будет разбить на разные файлы внутри директории<em>tasks</em>.<em>main.yml</em>будет точкой входа, которая включает в себя все эти файлы. Принцип разделения по файлам может быть разным, один из классических примеров это разные файлы с задачами под разные платформы.</p>
19
<p>Если задач станет много, то их можно будет разбить на разные файлы внутри директории<em>tasks</em>.<em>main.yml</em>будет точкой входа, которая включает в себя все эти файлы. Принцип разделения по файлам может быть разным, один из классических примеров это разные файлы с задачами под разные платформы.</p>
19
<p>Если задачам роли нужны обработчики, то они добавляются в директорию<em>handlers/main.yml</em>. Ansible автоматически их найдет и подключит.</p>
20
<p>Если задачам роли нужны обработчики, то они добавляются в директорию<em>handlers/main.yml</em>. Ansible автоматически их найдет и подключит.</p>
20
<h2>Переменные роли</h2>
21
<h2>Переменные роли</h2>
21
<p>Для определения переменных, Ansible предлагает два разных варианта: директорию<em>defaults</em>и директорию<em>vars</em>. И там и там хранятся переменные, которые роль использует для своей работы. Разница между этими директориями заключается в том, что в<em>vars</em>хранятся переменные, которые нужны роли для ее работы, но пользователю про них знать не нужно, это внутренние переменные.<em>defaults</em>же содержит переменные, которые пользователь роли может или должен задать при использовании этой роли. Типичный пример параметра по умолчанию, это номер версии устанавливаемой программы. Обычно его можно поменять, без необходимости менять внутренности роли.</p>
22
<p>Для определения переменных, Ansible предлагает два разных варианта: директорию<em>defaults</em>и директорию<em>vars</em>. И там и там хранятся переменные, которые роль использует для своей работы. Разница между этими директориями заключается в том, что в<em>vars</em>хранятся переменные, которые нужны роли для ее работы, но пользователю про них знать не нужно, это внутренние переменные.<em>defaults</em>же содержит переменные, которые пользователь роли может или должен задать при использовании этой роли. Типичный пример параметра по умолчанию, это номер версии устанавливаемой программы. Обычно его можно поменять, без необходимости менять внутренности роли.</p>
22
<h2>Шаблоны и файлы</h2>
23
<h2>Шаблоны и файлы</h2>
23
<p>Остальные директории могут содержать типовые файлы, которые встречаются в playbook. Структура этих директорий никак не специфицирована. Все файлы внутри них раскладываются так как удобно создателю роли.</p>
24
<p>Остальные директории могут содержать типовые файлы, которые встречаются в playbook. Структура этих директорий никак не специфицирована. Все файлы внутри них раскладываются так как удобно создателю роли.</p>