Ответ
Ansible Roles пишутся в основном на YAML, так как это основной язык декларативного описания задач, handlers, переменных и файлов в Ansible.
Структура роли и используемые языки:
tasks/main.yml: Основные задачи роли (YAML).handlers/main.yml: Обработчики (YAML).defaults/main.yml,vars/main.yml: Переменные (YAML).- Шаблоны в
templates/: Используют синтаксис Jinja2 (встроенный в YAML) для динамической генерации конфигурационных файлов. - Файлы в
files/и скрипты вscripts/: Могут быть любыми (bash, python), но их выполнение описывается в YAML-задачах с помощью модулейscriptилиcopy.
Пример задачи в роли для установки Nginx (tasks/main.yml):
- name: Install Nginx package
apt:
name: nginx
state: present
when: ansible_os_family == "Debian"
- name: Deploy Nginx configuration template
template:
src: nginx.conf.j2 # Jinja2 шаблон
dest: /etc/nginx/nginx.conf
notify: restart nginx
- name: Ensure Nginx is running and enabled
service:
name: nginx
state: started
enabled: yes
Таким образом, YAML + Jinja2 — это основной стек для написания ролей, а для сложной логики можно вызывать отдельные скрипты на Bash или Python через соответствующие модули Ansible.