Что такое модуль в Ansible?

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

Ответ

Модуль Ansible — это автономный, идемпотентный исполняемый скрипт (на Python, PowerShell, Ruby и др.), который выполняет одну конкретную задачу на целевом хосте. Модули — это фундаментальные строительные блоки задач (tasks) в плейбуках. Ansible передает модулю аргументы, выполняет его на удаленном хосте и получает обратно результат в формате JSON.

Ключевые принципы:

  1. Идемпотентность: Повторный запуск модуля не должен менять систему, если желаемое состояние уже достигнуто. Модуль возвращает "changed": false в таком случае.
  2. Факты (Facts): Некоторые модули (например, setup) собирают информацию о системе, которая затем доступна как переменные.
  3. Состояние (State): Многие модули следуют паттерну декларативного описания желаемого состояния (например, state: present для пакета или файла).

Пример задачи с модулем ansible.builtin.copy:

- name: Deploy Nginx configuration template
  ansible.builtin.template:
    src: templates/nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    owner: root
    group: root
    mode: '0644'
  notify: restart nginx  # Запускает handler при изменении

- name: Ensure Nginx service is running and enabled
  ansible.builtin.service:
    name: nginx
    state: started
    enabled: yes

Типы модулей с точки зрения DevOps-практик:

  • Модули управления облачной инфраструктурой (amazon.aws.ec2_instance, google.cloud.gcp_compute_instance): Для реализации Infrastructure as Code (IaC).
  • Модули оркестрации (ansible.builtin.uri, community.grafana.grafana_dashboard): Для взаимодействия с API внешних систем (запуск пайплайна, обновление дашборда).
  • Модули для мониторинга и логирования (community.general.logentries): Для настройки агентов и отправки логов.
  • Кастомные модули: Пишутся на Python, когда нужной функциональности нет в сообществе. Например, модуль для управления внутренней системой развертывания.

Как это работает под капотом: Ansible копирует модуль на целевой хост, выполняет его с переданными аргументами, а затем удаляет. Возвращаемый JSON содержит результат выполнения, включая ключевые поля "changed", "failed", "msg" и любые пользовательские данные.