Skip to main content

YAML Struktura, Tasks va Handlers

1. YAML Struktura

YAML nima va nega kerak?

YAML (YAML Ain't Markup Language) - bu ma'lumotlarni tashkil etish uchun ishlatiladigan format. Ansible YAML ni tanlagan sabablari:

  1. Odam o'qishi oson - XML yoki JSON dan farqli o'laroq, oddiy matn kabi ko'rinadi
  2. Oddiy sintaksis - kam belgiler, ko'proq mantiq
  3. Ierarxik struktura - murakkab ma'lumotlarni tartibli qilish mumkin
  4. Izohlar qo'yish mumkin - kodga tushuntirish yozish

YAML ning asosiy tamoyillari:

Indentation (chekinish) - eng muhim qoida:

  • Bo'shliqlar (spaces) bilan darajalar ajratiladi
  • Tab belgisi ishlatilmaydi - faqat bo'shliqlar
  • Bir xil darajadagi elementlar bir xil masofada bo'lishi kerak
  • Odatda 2 yoki 4 ta bo'shliq ishlatiladi

Ma'lumot turlari:

  1. Oddiy qiymatlar (Scalars):
server_name: web-01
port: 80
ssl_enabled: true
  1. Ro'yxatlar (Lists):
packages:
- nginx
- php
- mysql
  1. Lug'atlar (Dictionaries):
database:
host: localhost
port: 3306
user: admin

Maxsus xususiyatlar:

  • Ko'p qatorli matn - | belgisi bilan
  • Izohlar - # belgisi bilan
  • Ma'lumot qayta ishlatish - & va * belgilari bilan

YAML da tez uchraydigan xatolar:

  1. Noto'g'ri chekinish - eng keng tarqalgan xato
  2. Tab va space aralashtirib yuborish
  3. Maxsus belgilarni noto'g'ri ishlatish
  4. Qo'shtirnoq bilan muammolar

2. Tasks (Vazifalar)

Task nima?

Task - bu Ansible playbook ning asosiy qurilish bloki. Har bir task bitta aniq vazifani bajaradi:

  • Paket o'rnatish
  • Fayl nusxalash
  • Service ishga tushirish
  • Foydalanuvchi yaratish va hokazo

Task ning anatamiyasi:

Har bir task quyidagi qismlardan iborat:

  1. Name - task ning tavsifi (majburiy emas, lekin tavsiya etiladi)
  2. Module - qanday amal bajarilishi (apt, copy, service va boshqalar)
  3. Parameters - modulga beriladigan sozlamalar
  4. Qo'shimcha parametrlar - when, register, notify va boshqalar
- name: "Task ning izohli nomi"
module_name:
parameter: qiymat
when: shart
register: natija

Task larning asosiy turlari:

1. Package Management Tasks:

  • Dasturiy ta'minotni o'rnatish/o'chirish
  • apt, yum, package modullari ishlatiladi

2. File Operations Tasks:

  • Fayl va papkalar bilan ishlash
  • copy, file, template modullari

3. Service Management Tasks:

  • Serviclarni boshqarish
  • service, systemd modullari

4. User Management Tasks:

  • Foydalanuvchilar va guruhlar
  • user, group modullari

5. System Tasks:

  • Tizim sozlamalari o'zgartirish
  • command, shell, sysctl modullari

Task parametrlari:

name parametri:

  • Task ning maqsadini tushuntiradi
  • Playbook ishlaganda ko'rsatiladi
  • Debug qilishda yordam beradi

when parametri:

  • Task ning shartli bajarilishi
  • Jinja2 template sintaksisi ishlatiladi
  • Mantiqiy amallarni qo'llash mumkin

register parametri:

  • Task natijasini o'zgaruvchida saqlash
  • Keyingi task larda ishlatish uchun
  • Debug qilishda foydali

tags parametri:

  • Task larni guruhlash
  • Muayyan tag li task larni bajarish
  • Katta playbook larda foydali

Task lar ketma-ketligi:

Ansible task larni yuqoridan pastga tartibda bajaradi:

  1. Har bir task yakka-yakka bajariladi
  2. Bitta task muvaffaqiyatsiz bo'lsa, keyingilari bajarilmaydi
  3. ignore_errors: yes bilan xatolikni e'tiborsiz qoldirish mumkin

3. Handlers (Hodisa Ishlovchilar)

Handler nima?

Handler - bu maxsus task turi bo'lib, faqat boshqa task lar tomonidan chaqirilganda ishlaydi. Asosan quyidagi holatlarda ishlatiladi:

  • Configuration fayl o'zgargandan keyin service ni restart qilish
  • Ma'lumotlar bazasi backup qilish
  • Log fayllarni tozalash
  • Cache ni yangilash

Handler larning xususiyatlari:

  1. Notify orqali chaqiriladi - boshqa task lar ularni "xabardor qiladi"
  2. Playbook oxirida ishlaydi - barcha oddiy task lar tugagandan keyin
  3. Bir marta ishlaydi - bir necha marta notify qilinsa ham
  4. Tartib muhim - handlers bo'limida qanday tartibda yozilgan bo'lsa, shunday ishlaydi

Handler va Task orasidagi farq:

TaskHandler
Har doim ishlaydiFaqat notify qilinganda
Darhol bajariladiOxirda bajariladi
Bir necha marta ishlay oladiBir marta ishlaydi
Asosiy ish jarayoniQo'shimcha ish jarayoni

Handler ishlash printsipi:

tasks:
- name: Copy config file
copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
notify: restart nginx # Handler ni chaqirish

handlers:
- name: restart nginx # Handler nomi
service:
name: nginx
state: restarted

Ish jarayoni:

  1. Config fayl nusxalanadi
  2. Agar fayl o'zgargan bo'lsa, handler "notify" qilinadi
  3. Barcha task lar tugagandan keyin handler ishlaydi
  4. Nginx service restart qilinadi

Handler larning afzalliklari:

  1. Samaradorlik - faqat kerak bo'lganda ishlaydi
  2. Xavfsizlik - configuration o'zgarganda avtomatik restart
  3. Tartib - bir necha o'zgarish bo'lsa ham bir marta restart
  4. Modullik - bir handler ni turli task lar ishlatishi mumkin

Handler misollar:

Oddiy handler:

handlers:
- name: restart apache
service:
name: apache2
state: restarted
become: yes

Bir necha amal bajaruvchi handler:

handlers:
- name: reload web services
service:
name: "{{ item }}"
state: reloaded
loop:
- nginx
- php-fpm

Handler dan boshqa handler ni chaqirish:

handlers:
- name: restart nginx
service:
name: nginx
state: restarted
notify: clear cache

- name: clear cache
command: rm -rf /var/cache/nginx/*

Handler lar bilan ishlashda maslahatlar:

  1. To'g'ri nomlash - handler nomi aniq va tushunarli bo'lishi kerak
  2. Listen ishlatish - bir nechta handler bitta nom bilan chaqirish
  3. Flush handlers - handler ni darhol ishga tushirish kerak bo'lsa
  4. Meta flush_handlers - playbook o'rtasida handler larni ishga tushirish

Listen parametri:

Bir nechta handler ni bitta nom bilan chaqirish:

handlers:
- name: restart web server
service:
name: nginx
state: restarted
listen: "restart web services"

- name: clear cache
command: rm -rf /tmp/cache/*
listen: "restart web services"

tasks:
- name: Update config
copy:
src: config.txt
dest: /etc/config.txt
notify: "restart web services"

Bu holda bitta notify ikki handler ni ishga tushiradi.

Handler debugging:

Handler ishlamagan holda tekshirish usullari:

  1. Task haqiqatan ham o'zgarish kiritganmi?
  2. Handler nomi to'g'ri yozilganmi?
  3. Handler handlers bo'limida joylashganmi?
  4. Syntax xatolar yo'qmi?

Handler lar Ansible ning eng kuchli xususiyatlaridan biri bo'lib, avtomatlashtirish jarayonini yanada oqilona va samarali qiladi.