TGViewer
DevOps 360° DevOps 360° @devops360 · 326 subscribers
Post #77 251
Ох - включаем наши головушки и погнали вникать !

Давайте создадим пример Ansible роли, которая будет устанавливать и настраивать веб-сервер Nginx. Мы организуем это в соответствии с перечисленными вами компонентами роли. В рамках этой роли будут использоваться следующие директории: tasks, handlers, templates, files, vars, defaults и meta.

### Структура роли

Предположим, что мы назовем нашу роль nginx_server. Структура каталога будет выглядеть следующим образом:

roles/
└── nginx_server/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
├── templates/
│ └── nginx.conf.j2
├── files/
│ └── index.html
├── vars/
│ └── main.yml
├── defaults/
│ └── main.yml
└── meta/
└── main.yml


### Содержимое файлов роли

#### 1. tasks/main.yml
---
- name: Обновить пакеты
apt:
update_cache: yes

- name: Установить Nginx
apt:
name: nginx
state: present
notify: Перезапустить Nginx

- name: Копировать файл индекса
copy:
src: index.html
dest: /var/www/html/index.html
notify: Перезапустить Nginx

- name: Настроить Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Перезапустить Nginx


#### 2. handlers/main.yml
---
- name: Перезапустить Nginx
service:
name: nginx
state: restarted


#### 3. templates/nginx.conf.j2
worker_processes auto;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

server {
listen 80;
server_name {{ ansible_hostname }};

location / {
root /var/www/html;
index index.html index.htm;
}
}
}


#### 4. files/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Привет, Nginx!</title>
</head>
<body>
<h1>Сервер Nginx работает!</h1>
</body>
</html>


#### 5. vars/main.yml
---
nginx_port: 80


#### 6. defaults/main.yml
---
nginx_listen_port: 80


#### 7. meta/main.yml
---
dependencies:
- role: some_other_role


### Плейбук для вызова роли

Теперь мы можем создать плейбук, который использует эту роль:

---
- name: Установить и настроить Nginx
hosts: webservers
become: yes
roles:
- nginx_server


### Объяснение

В этом примере:

- В tasks/main.yml мы определяем задачи, которые будут выполнены. Они обновляют систему, устанавливают Nginx, копируют файл index.html на веб-сервер и настраивают конфигурацию Nginx на основе шаблона.
- В handlers/main.yml мы определяем обработчик для перезапуска службы Nginx, который будет вызван, если произошли изменения.
- В templates/nginx.conf.j2 находится шаблон конфигурационного файла Nginx, который использует переменные.
- В files/index.html хранится HTML-файл, который будет отображаться клиентам.
- В vars/main.yml указаны переменные, специфичные для роли, например, порт, который Nginx будет слушать.
- В defaults/main.yml задаются значения по умолчанию для переменных роли.
- В meta/main.yml можно указать зависимости от других ролей.

Такой подход делает вашу роль модульной и легко управляемой, что особенно полезно в больших проектах. Вы можете переиспользовать эту роль в других плейбуках или добавлять новые функции по мере необходимости.
🔝 Наш чат для обсуждений |🚀 Буст для канала
More from @devops360
  1. Sep 28, 2026🔥 УРА, НОВОСТНЫЕ НОВОСТИ! (МНОГО БУКВ) 🔥 В современном IT процветает какой-то безумный к…
  2. Jul 20, 2026ПРИВЕТ! КРЧ если вкратце, то думаю через пару лет будем переходить с ямл инженеров и полно…
  3. May 21, 2026ХЕЛОУ! 🚀 Ingress NGINX — ВСЁ. Почему пора переезжать на Gateway API Главный сетевой контр…
  4. Jan 20, 2026ХЕЛЛОУ ГАЙЗ! смотрите какую интересную штуку мне подсказали , можно проверить свои знания…
  5. Nov 21, 2025Хелоу! Ingress NGINX уходит: что важно знать Kubernetes объявил о завершении поддержки Ing…
  6. Nov 14, 2025Всех с пятницей! Накидал доку как для себя так и для общего пользования по накатке бекапа…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →