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:
- mysql
yazmak 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.yml
iç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:
# roles/mysql/tasks/main.yml
- name: Install MySQL packages
yum:
name: mysql-server
state: present
- name: Enable & start service
service:
name: mysqld
state: started
enabled: true
Playbook’ta kullanımı:
- hosts: db
roles:
- mysql
4. Hazır rol kullanmak (Ansible Galaxy)
Ara
ansible-galaxy search mysql
Kur
ansible-galaxy install geerlingguy.mysql # varsayılan path’e # veya proje içi: ansible-galaxy install geerlingguy.mysql -p ./roles
Çağır
roles: - geerlingguy.mysql
Ek parametre geçmek istersen:
roles:
- role: geerlingguy.mysql
become: yes
mysql_root_password: supersecret
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?
ansible-config dump | grep ROLE
Çı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 nginx
komutuyla yeni rol oluştur.tasks/main.yml
içineapt install nginx && systemctl enable
step’lerini ekle (Ubuntu düşün).defaults/main.yml
’anginx_listen_port: 8080
koy.Template klasörüne bir
nginx.conf.j2
ekle, portu değişkenden çek.Playbook yaz:
- hosts: web roles: - role: nginx nginx_listen_port: 80 # override
Ç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?