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.5
Değ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.yml
host_vars/web1.yml
:
ansible_host: 172.20.1.100
size: big
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
).
inventory/
└─ group_vars/
└─ web_servers.yml
group_vars/web_servers.yml
:
dns_server: 10.1.1.5
→ Böylece ortak değerleri tek noktada tutarsın, kopyala-yapıştır biter.
4. Klasör düzeni önerisi
project/
├─ inventory/
│ ├─ hosts
│ ├─ host_vars/
│ └─ group_vars/
├─ playbooks/
└─ roles/ ...
İ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_vars
Merkezi bir yol düşün: /opt/apps/common-data/email/info.yml
# info.yml
admin_email: [email protected]
Playbook’ta kullanmak:
- hosts: webservers
tasks:
- include_vars:
file: /opt/apps/common-data/email/info.yml
name: email_data # değişken namespace'i
- mail:
to: "{{ email_data.admin_email }}"
subject: "Deploy bitti"
body: "Web sunucusu hazır"
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 -y
ansible-inventory -i inventory/ -y
Tü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_tasks
Tek playbook’ta DB + Web kuruyorsun ama bazen sadece DB lazım:
tasks/
├─ db.yml
└─ web.yml
deploy.yml
:
- hosts: webservers
tasks:
- include_tasks: tasks/db.yml # sadece DB kur
- include_tasks: tasks/web.yml # web de kurulsun
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?