На каком языке пишутся Ansible Roles?

«На каком языке пишутся Ansible Roles?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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.