Bosh sahifa Wiki Ansible

Ansible

Ansibleserver va qurilmalarni konfiguratsiya qilish, dastur joylashtirish va takroriy operatsion vazifalarni avtomatlashtirish vositasi. U odatda markaziy boshqaruv mashinasidan target hostlarga ulanib, kerakli holatni ta’minlaydi.

Ansible konfiguratsiyasi YAML formatidagi playbooklarda yoziladi. Ko‘p holatda target serverga alohida doimiy agent o‘rnatish talab qilinmaydi.

Agentless model

Ansible Linux va Unix hostlarga ko‘pincha SSH orqali ulanadi.

Windows muhitida boshqa remote management protocol ishlatilishi mumkin.

Agentless model:

  • alohida agent lifecycle’ini kamaytiradi;
  • mavjud authenticationdan foydalanadi;
  • boshlashni soddalashtiradi.

Biroq network access va remote interpreter talabi mavjud.

Control node

Playbook ishga tushiriladigan mashina control node.

U:

ni saqlaydi.

Production automation shaxsiy laptopga qattiq bog‘lanmasdan CI yoki boshqariladigan runner orqali bajarilishi mumkin.

Managed node

Ansible boshqaradigan server yoki qurilma managed node.

Target hostda:

bo‘lishi kerak.

Network appliance’lar API yoki CLI orqali boshqarilishi mumkin.

Inventory

Inventory host va guruhlar ro‘yxatini saqlaydi.

Misol:

web
db
cache

Guruhlar environment, region, role yoki boshqa belgi bo‘yicha tuziladi.

Inventory static fayl yoki cloud API’dan olinadigan dynamic inventory bo‘lishi mumkin.

Playbook

Playbook bir yoki bir nechta playdan iborat.

Har play:

ishlashini belgilaydi.

Playbook deklarativ va procedural elementlarni birlashtiradi.

Task

Task modulni ma’lum argumentlar bilan chaqiradi.

Misollar:

Task nomi bajariladigan maqsadni aniq ifodalashi kerak.

Module

Module target hostda aniq amalni bajaradigan komponent.

Shell commanddan farqli, maxsus module joriy holatni tekshirib faqat kerak bo‘lsa o‘zgarish qiladi.

Bu idempotencyni yaxshilaydi.

Masalan, package allaqachon o‘rnatilgan bo‘lsa task changed bo‘lmasligi mumkin.

Idempotency

Ansible playbook qayta ishga tushirilganda tizimni yana o‘sha kerakli holatda saqlashi kerak.

Idempotent module:

  • mavjud userni qayta yaratmaydi;
  • bir xil config’ni qayta yozmaydi;
  • service holati to‘g‘ri bo‘lsa o‘zgartirmaydi.

Oddiy shell task har safar side effect yaratishi mumkin.

Handler

Handler faqat notify bo‘lsa va odatda play oxirida bajariladi.

Masalan, config fayli o‘zgarsa service restart qilinadi.

Config o‘zgarmasa restart talab qilinmaydi.

Bir nechta task bir handlerni chaqirsa u odatda bir marta bajariladi.

Template

Template dinamik config fayl yaratadi.

Variable va conditional orqali:

joylashtiriladi.

Template output o‘zgargandagina file yangilanadi va kerak bo‘lsa handler ishga tushadi.

Variable

Variable manbalari:

Precedence murakkab bo‘lishi mumkin.

Bir qiymat qayerdan kelganini tushunish uchun variable hierarchy va debug vositalari ishlatiladi.

Fact

Ansible target host haqida ma’lumot yig‘ishi mumkin.

Factlar:

haqida bo‘ladi.

Fact yig‘ish vaqt olishi mumkin. Kerak bo‘lmasa o‘chiriladi yoki cache qilinadi.

Role

Role playbook tarkibini standart kataloglarga ajratadi.

Role ichida:

bo‘lishi mumkin.

Role qayta ishlatiladigan server vazifasini ifodalaydi.

Collection

Collection module, plugin, role va documentationni bir paketda tarqatadi.

Collection namespace va versionga ega.

Third-party collection supply-chain dependency sifatida tekshiriladi.

Privilege escalation

Oddiy user orqali ulanib, kerakli tasklar uchun yuqori huquq olinishi mumkin.

Bu:

  • sudo;
  • boshqa platforma mexanizmi

orqali bajariladi.

Barcha taskni root sifatida bajarish o‘rniga minimal privilege qo‘llanadi.

Check mode

Check mode rejalashtirilgan o‘zgarishlarni amalda bajarmasdan ko‘rsatishga urinadi.

Barcha module check mode’ni to‘liq qo‘llamasligi mumkin.

Tashqi command yoki noma’lum holatda natija taxminiy bo‘ladi.

Serial va strategy

Ko‘p serverga update birdan yoki bosqichma-bosqich berilishi mumkin.

serial orqali kichik batch tanlanadi.

Masalan, web serverlarning 20 foizi yangilanadi, health check o‘tadi, keyin davom etiladi.

Bu downtime va umumiy xato xavfini kamaytiradi.

Secret

Parol, token va private key oddiy playbookda ochiq saqlanmasligi kerak.

Encrypted variable, external secret manager yoki runtime credential ishlatiladi.

Log va verbose output maxfiy argumentlarni ko‘rsatmasligi kerak.

Tag

Task va role’lar tag bilan belgilanishi mumkin. Foydalanuvchi faqat database, security yoki deploy qismini ishga tushiradi. Tag orqali tasklarni tez-tez chetlab o‘tish playbookning to‘liq holat kafolatini zaiflashtirishi mumkin.

Delegation

Task target host o‘rniga control node yoki boshqa hostda bajarilishi mumkin. Masalan, load balancerdan node’ni chiqarish markaziy endpoint orqali amalga oshiriladi.

Register va condition

Task natijasi variable’ga yozilib, keyingi task shartiga ishlatiladi. Exit code, changed holati va output aniq tekshiriladi. Raw matnni nozik parsing qilish o‘rniga structured module natijasi afzal.

Error handling

Block, rescue va always orqali bir guruh task xatosi boshqariladi. Masalan, deploy muvaffaqiyatsiz bo‘lsa oldingi config tiklanadi va vaqtinchalik fayl har holatda tozalanadi.

Bog‘liq tushunchalar

Configuration management, Playbook, Inventory, Task, Module, Role, Handler, Template, Idempotency, Agentless automation