Назад к вопросам
Junior
77
questionbank

Из чего состоит роль, какие папки и файлы её составляют?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Роль Ansible состоит из набора директорий и файлов, которые определяют задачи, переменные, шаблоны, файлы, обработчики и метаданные для выполнения определенной функции на управляемых узлах.

Основная структура директорий роли:

  • defaults/: Значения переменных по умолчанию для роли.
  • vars/: Переменные специфичные для роли. Переопределяют значения из defaults/.
  • tasks/: Основные задачи, выполняемые ролью. Файл main.yml обязателен.
  • handlers/: Обработчики, запускаемые при определенных событиях (например, перезапуск службы). Файл main.yml обязателен.
  • files/: Файлы, которые будут скопированы на управляемые узлы.
  • templates/: Файлы шаблонов Jinja2, которые будут скопированы на управляемые узлы после обработки.
  • meta/: Информация о роли: зависимости, автор, лицензия. Файл main.yml обязателен.
  • library/: Пользовательские модули.
  • module_utils/: Утилиты для пользовательских модулей.
  • lookup_plugins/: Плагины для lookup.
  • filter_plugins/: Плагины для фильтров.

Пример содержимого файла tasks/main.yml:

# tasks/main.yml
- name: Установить веб-сервер Nginx
  ansible.builtin.apt:
    name: nginx
    state: present

- name: Скопировать конфигурационный файл Nginx
  ansible.builtin.template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
  notify: Перезагрузить Nginx

Пример содержимого файла handlers/main.yml:

# handlers/main.yml
- name: Перезагрузить Nginx
  ansible.builtin.service:
    name: nginx
    state: restarted

Пример содержимого файла templates/nginx.conf.j2:

# templates/nginx.conf.j2
server {
    listen {{ http_port }};
    server_name {{ server_name }};

    location / {
        proxy_pass http://localhost:{{ app_port }};
    }
}

Пример содержимого файла defaults/main.yml:

# defaults/main.yml
http_port: 80
server_name: localhost
app_port: 8080

Файл meta/main.yml содержит метаданные о роли:

# meta/main.yml
galaxy_info:
  author: Your Name
  description: A role to install and configure Nginx.
  license: MIT

  min_ansible_version: 2.9

  platforms:
  - name: Debian
    versions:
    - all
  - name: Ubuntu
    versions:
    - bionic

  galaxy_tags: []

dependencies: []

Каждая директория, кроме library и module_utils, должна содержать файл main.yml (или main.yaml), который является точкой входа для этой части роли.