Ansible Roles
1. Rol fikri ne?
Nasıl gerçek hayatta biri doktor olsun diye lise → tıp fakültesi → staj → uzmanlık adımlarını tamamlarsak,
Biz de “boş” bir sunucuyu mysql‐server yapmak için bir dizi task çalıştırıyoruz (paket kur, servis başlat, config yap).
Bu task setini tek bir pakete sarıyoruz → buna role diyoruz. Sonra playbook’ta sadece:
roles:
- mysqlyazmak yetiyor; 1 sunucu da olsa 100 sunucu da olsa aynı reçete uygulanıyor.
2. Rol dizin yapısı (best practice)
roles/
└─ mysql/
├─ tasks/ # ana .yml dosyan (main.yml) burada
├─ handlers/ # notify ile tetiklenen restart vb.
├─ templates/ # Jinja2 şablonları
├─ files/ # düz kopyalanacak dosyalar
├─ vars/ # sabit değişkenler (yüksek öncelik)
├─ defaults/ # override edilebilir vars (düşük öncelik)
└─ meta/ # rol bağımlılık bilgisiİskeleti elle oluşturmakla uğraşma:
ansible-galaxy init mysql
3. Kendi rolünü yazma adımları
ansible-galaxy init myrole→ klasör iskeleti oluşur.roles/myrole/tasks/main.ymliçine task’larını koy.Gerekli template veya vars dosyalarını ilgili klasöre ekle.
Playbook dizininde roles/ klasörü varsa Ansible otomatik bulur.
Global yerse /etc/ansible/roles (cfg’de
roles_path).
Örnek hızlı task:
Playbook’ta kullanımı:
4. Hazır rol kullanmak (Ansible Galaxy)
Ara
Kur
Çağır
Ek parametre geçmek istersen:
5. Rol önceliği & değişken hiyerarşisi (özet)
extra vars (-e)
🥇
play vars
🥈
role vars (vars/)
🥉
role defaults (defaults/)
🚦
group/host vars
daha düşük
Yani role içinde defaults/main.yml’a koyduklarını kullanıcı override edebilsin. Zorunlu sabitleri vars/main.yml’a koy.
6. Rol dizini nereye bakılır?
Çıktıda DEFAULT_ROLES_PATH listesi gelir (global + user).
Proje içi roles/ klasörü her zaman ilk bakılan yerlerden biridir.
7. Mini egzersiz (deneyip pekiştir)
ansible-galaxy init nginxkomutuyla yeni rol oluştur.tasks/main.ymliçineapt install nginx && systemctl enablestep’lerini ekle (Ubuntu düşün).defaults/main.yml’anginx_listen_port: 8080koy.Template klasörüne bir
nginx.conf.j2ekle, portu değişkenden çek.Playbook yaz:
Çalıştır, web sunucularında 80 portundan nginx geldiğini test et.
Özet:
Role = belirli görevi (mysql, nginx, backup…) gerçekleştiren dosya grubu.
İskelet:
tasks,handlers,templates,vars,defaults, …Yazması:
ansible-galaxy init role_name.Kullanması: playbook’ta
roles:listesine ekle.Paylaşması/indirmesi:
ansible-galaxy install,ansible-galaxy list.
Last updated
Was this helpful?