Ansible File Separation
“Ansible File Separation” konusuna giriyoruz. Hedefimiz: envanteri, değişkenleri ve görevleri (tasks) dosyalara ayırarak daha düzenli, yeniden kullanılabilir bir yapı kurmak.
1. Sorun ne?
Inventory dosyasını şöyle tuttuğunu düşün:
[web_servers]
web1 ansible_host=172.20.1.100 dns_server=10.1.1.5
web2 ansible_host=172.20.1.101 dns_server=10.1.1.5
web3 ansible_host=172.20.1.102 dns_server=10.1.1.5Değişkenler (vars) de burada, host listesi de burada.
Sunucu sayısı artınca dosya “çorba” oluyor.
2. Çözüm 1 – host_vars (sunucuya özel değişkenler)
Klasör:
host_vars/Dosya adı: Sunucunun inventordaki ismi (web1, web2, …).
İçerik: YAML (anahtar: değer).
inventory/
├─ hosts # ana envanter dosyası
├─ host_vars/
│ ├─ web1.yml
│ ├─ web2.yml
│ └─ web3.ymlhost_vars/web1.yml:
Dosya adı web1.yml olmalı ki Ansible “bu değişkenler web1’e ait” diye otomatik eşleştirsin; ekstra ayara gerek yok.
3. Çözüm 2 – group_vars (gruba ortak değişkenler)
Aynı DNS adresi tüm web sunucularında ortaksa:
Klasör:
group_vars/Dosya adı: Grubun adı (
web_servers.yml).
group_vars/web_servers.yml:
→ Böylece ortak değerleri tek noktada tutarsın, kopyala-yapıştır biter.
4. Klasör düzeni önerisi
İstasyondaki her şey (inventory, host_vars, group_vars) inventory dizinine toplanır; playbook dizini tertemiz kalır.
5. Vars dosyası “default” konumda değilse – include_vars
include_varsMerkezi bir yol düşün: /opt/apps/common-data/email/info.yml
Playbook’ta kullanmak:
Ansible çalışma anında dosyayı okuyup email_data sözlüğü içine yükler.
6. Envanteri “son hâliyle” görmek – ansible-inventory -y
ansible-inventory -yTüm host & group değişkenlerini öncelik sırasına göre birleştirip YAML basar.
“Bu host hangi değeri nereden aldı?” sorusunu debug etmek için süper.
7. Görevleri bölmek – include_tasks
include_tasksTek playbook’ta DB + Web kuruyorsun ama bazen sadece DB lazım:
deploy.yml:
Başka bir playbook yazıp yalnız db.yml’i include edersen saf DB kurulumu elde edersin. Task’lar kopyalanmıyor, “import” ediliyor.
8. Mini rehber – Değişken önceliği (en yüksek aşağıda)
Extra vars (
-e "key=val")Playbook içi vars
Host vars (host_vars/)
Group vars (group_vars/)
Inventory satırı
→ Aynı isimli değişken çakışırsa yüksek öncelikli olan kazanır.
Özet
host_vars/<hostname>.yml → O host’a özel değerler
group_vars/<groupname>.yml → Gruba ortak değerler
include_vars → Değişken dosyası nerede olursa olsun yükle
include_tasks → Görev dosyalarını modüler kullan
ansible-inventory -y→ “Gerçek” envanteri gözden geçir
Last updated
Was this helpful?