# Idempotency — Ansible: Playbooks से Servers का Automation

Source: https://www.geekswithgeeks.com/hi/ansible/pb-idempotency

> दिखाएँ कि playbook दो बार चलाने पर दूसरी बार system नहीं बदलता।

## इसे सुरक्षित रूप से फिर चलाएँ

Idempotency Ansible का सबसे मूल्यवान गुण है: modules मौजूदा स्थिति जाँचते हैं और तभी कुछ करते हैं जब वह आपके माँगे से अलग हो। इससे playbooks बार-बार चलाना सुरक्षित होता है, CI से, निर्धारित समय पर, या किसी के हाथ से server बदलने पर आए **drift** को सुधारने के लिए। `command` और `shell` modules स्वभाव से idempotent **नहीं** हैं; जहाँ बना-बनाया module हो वही उपयोग करें, या `creates:`, `removes:` या `changed_when:` जोड़ें ताकि Ansible जान सके कि सचमुच कुछ बदला या नहीं।

## दूसरा run, असली चलाकर

मैंने वही playbook फिर चलाया। हर task ok बताता है, handler नहीं चलता, और recap दोनों hosts के लिए `changed=0` दिखाता है।

```bash
ansible-playbook -i inventory.ini site.yml
```

Output:

```
PLAY RECAP *********************************************************************
web1                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web2                       : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
```

## Shell की जगह modules चुनें

`ansible.builtin.apt`, `file`, `copy`, `user`, `service` और कई अन्य स्थिति वर्णित करते हैं। `shell: apt install nginx` हर बार changed बताएगा।

**Quiz:** Idempotency मूल्यवान क्यों है?

- [x] Playbooks सुरक्षित रूप से दोबारा चल सकते हैं और drift सुधारते हैं
- [ ] यह tasks को धीमा करता है
- [ ] यह inventory की ज़रूरत हटाता है
- [ ] यह सिर्फ़ Windows पर चलता है

*Answer:* Playbooks सुरक्षित रूप से दोबारा चल सकते हैं और drift सुधारते हैं. घोषित स्थिति का मतलब है दोहराए runs उसी नतीजे पर पहुँचते हैं।
