Ответ
Модуль Ansible — это автономный, идемпотентный исполняемый скрипт (на Python, PowerShell, Ruby и др.), который выполняет одну конкретную задачу на целевом хосте. Модули — это фундаментальные строительные блоки задач (tasks) в плейбуках. Ansible передает модулю аргументы, выполняет его на удаленном хосте и получает обратно результат в формате JSON.
Ключевые принципы:
- Идемпотентность: Повторный запуск модуля не должен менять систему, если желаемое состояние уже достигнуто. Модуль возвращает
"changed": falseв таком случае. - Факты (Facts): Некоторые модули (например,
setup) собирают информацию о системе, которая затем доступна как переменные. - Состояние (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" и любые пользовательские данные.