Давайте создадим пример 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.j2worker_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 можно указать зависимости от других ролей.Такой подход делает вашу роль модульной и легко управляемой, что особенно полезно в больших проектах. Вы можете переиспользовать эту роль в других плейбуках или добавлять новые функции по мере необходимости.
🔝 Наш чат для обсуждений |🚀 Буст для канала