Playbook — configuration management va orchestration vositasida qaysi hostlarga, qanday tartibda va qaysi tasklar qo‘llanishini ifodalovchi versiyalanadigan hujjat. Atama ayniqsa Ansible ekotizimida YAML fayl uchun ishlatiladi. Playbook inventory guruhini, privilege, variable, role, task va handlerlarni bir bajarilish oqimiga birlashtiradi.
Play tuzilishi
Bitta play ma’lum host pattern va tasklar to‘plamini bog‘laydi. Playbook bir nechta play’dan iborat bo‘lishi mumkin: avval database serverlar, keyin application node’lar, so‘ng load balancer yangilanadi.
- hosts: web
become: true
tasks:
- name: Paketni o‘rnatish
<a href="/wiki/package" target="_blank" rel="noopener" class="wiki-auto-link">package</a>:
name: <a href="/wiki/nginx" target="_blank" rel="noopener" class="wiki-auto-link">nginx</a>
<a href="/wiki/state" target="_blank" rel="noopener" class="wiki-auto-link">state</a>: present
Task moduli desired holatni tekshiradi. Paket mavjud bo‘lsa changed bermasligi idempotency’ning amaliy ko‘rinishidir.
Task va module
Task module chaqiruvi, argument, condition, loop va tagni o‘z ichiga oladi. Shell command har doim bajarilishi mumkin, maxsus package yoki file moduli esa joriy holatni tushunadi. Maxsus modul mavjud bo‘lsa u idempotency va structured error uchun afzal.
| Element | Vazifa |
|---|---|
| hosts | Inventory’dagi targetlar |
| vars | Play darajasidagi qiymatlar |
| tasks | Bajariladigan amallar |
| handlers | Change bo‘lsa ishga tushadigan amallar |
| roles | Qayta ishlatiladigan tuzilma |
| tags | Selected tasklarni bajarish |
Tag bilan qisman run dependency’ni chetlab o‘tishi mumkin. Tagged task mustaqil va prerequisite’lari aniq bo‘lishi kerak.
Tartib va batch
Tasklar odatda play ichida yuqoridan pastga bajariladi, hostlar esa parallel strategiya bilan ishlashi mumkin. Serial rolling batch hajmini cheklaydi. Masalan, web node’larning 20 foizi yangilanib, health tekshirilgach keyingi guruhga o‘tiladi.
Maximum failure policy xato tarqalishini boshqaradi. Bitta host failure’da qolganlari davom etishi xizmat turiga bog‘liq. Quorum tizimda noto‘g‘ri parallelism cluster’ni ishdan chiqarishi mumkin.
Variable va precedence
Variable inventory, group, host, role default, play va command line qatlamlaridan kelishi mumkin. Yuqori precedence oldingi qiymatni almashtiradi. Juda ko‘p override yakuniy konfiguratsiyani noaniq qiladi; qiymat ownership va scope tor saqlanadi.
Undefined variable default bilan yashirilsa typo productionda noto‘g‘ri qiymatga aylanishi mumkin. Majburiy variable va type validation boshida bajariladi.
Handler
Config template o‘zgarsa task notification orqali restart yoki reload handlerini belgilaydi. Bir nechta task bir handlerni chaqirsa u odatda bir marta bajariladi. Play o‘rtasida service yangi config bilan kerak bo‘lsa handler explicit flush qilinadi.
Config validation handlerdan oldin bajariladi. Noto‘g‘ri fayl yozilib, service restart qilinsa availability yo‘qolishi mumkin. Atomic file replacement eski ishlaydigan faylni saqlashga yordam beradi.
Check mode va diff
Check mode imkon qadar qanday change bo‘lishini bajarishsiz taxmin qiladi. Barcha module check mode’ni to‘liq qo‘llamaydi; shell command future natijani bilmaydi. Diff template va file o‘zgarishini ko‘rsatadi, lekin secret redaction qilinadi.
Check mode test emas. Real permission, package script va external side effect apply vaqtida boshqa natija berishi mumkin. Staging va canary run uni to‘ldiradi.
Xavfsizlik
Playbook repository’da review qilinadi va collection/module versiyasi pin qilinadi. Privilege escalation faqat zarur taskda qo‘llanadi. Controller credential’i hostlarga keng root access berishi mumkin, shu sabab runner va secret store himoyalanadi.
Untrusted variable’ni shell stringga qo‘shish command injection keltiradi. Argumentli module va input validation ishlatiladi. Logda credential yoki private key chiqmasligi uchun maxfiy output tor doirada yashiriladi; bu barcha diagnostikani yo‘qotmasligi kerak.
Bog‘liq tushunchalar
Configuration management, Ansible, Inventory, Task, Handler, Role, Agentless automation