Короткий ответ
Идемпотентная операция при повторном запуске с теми же параметрами приводит систему к тому же результату без ошибки и без лишних изменений; mkdir завершится ошибкой, если папка уже существует, а модуль file сначала проверяет текущее состояние и ничего не делает, если каталог уже соответствует описанному.
Как это работает подробнее
идемпотентные инструменты (Ansible-модули, Terraform resource) реализуют логику "сначала проверить текущее состояние, затем применить только недостающие изменения", в отличие от императивных команд, которые просто выполняют действие без проверки состояния.
Пример кода
playbook.yml
- name: Создать директорию приложения
ansible.builtin.file:
path: /opt/app
state: directory
mode: "0755"Что использовать на практике
- Практика. идемпотентность позволяет безопасно перезапускать playbook или
terraform applyмногократно (например, после сбоя сети в середине выполнения) и получать предсказуемый результат; это основа для автоматизации без ручного контроля "а что уже сделано".
Подводные камни
- Ошибка. использовать модуль
command/shellв Ansible для действий, у которых есть специализированный идемпотентный модуль, из-за чего playbook при повторном запуске либо падает, либо каждый раз выполняет ненужное действие и помечается как "changed".