Ansible Playbook

Ansible Playbook Nedir?
Ansible çalışma kitabı, sınırlı veya hiç insan katılımı olmadan yürütülen karmaşık BT eylemleri olan otomasyon görevlerinin bir planıdır. Ansible çalışma kitapları, birlikte bir Ansible envanterini oluşturan ana bilgisayarların bir kümesinde, grubunda veya sınıflandırmasında yürütülür.
Ansible playbook'lar esasen, önceden yazılmış kod geliştiricilerin geçici veya başlangıç şablonu olarak kullanabilecekleri çerçevelerdir. Ansible playbook'lar, Bt altyapısını (işletim sistemleri ve Kubernetes platformları gibi), ağları, güvenlik sistemlerini otomatikleştirmek için düzenli olarak kullanılır.
Ansible playbook'lar, her şeyi sıfırdan oluşturmanın manuel ek yükü olmadan BT personelinin uygulamaları, hizmetleri, sunucu veya diğer cihazlarının programlanmasına yardımcı olur. Ansible playbook'ları ve bunların içindeki koşullar, değişkenler ve görevler süresiz olarak kaydedilebilir, paylaşılabilir veya yeniden kullanılabilir.
Ansible Playbook Nasıl Çalışır?
Ansible modülleri görevleri yürütür. Bir play yapmak için bir veya daha fazla Ansible görevi birleştirilebilir. Bir Ansible çalışma kitabı oluşturmak için iki veya daha fazla play birleştirilebilir. Ansible playbook'lar, ana bilgisayarlara karşı otomatik olarak yürütülen görev listeleridir. Ana bilgisayar grupları, Ansible envanterinizi oluşturur.
Ansible çalışma kitabındaki her modül belirli bir görevi yerine getirir. Her modül, bir görevin ne zaman ve nerede yürütüleceğini ve hangi kullanıcının onu yürüteceğini belirleyen meta veriler içerir. Aşağıdakiler gibi her türlü BT görevini gerçekleştiren binlerce başka Ansible modülü vardır.
Ansible Playbook Örnek Çalışma
Ansible oyun kitabının pratik bir örneği,
Ansible, bulut tabanlı Linux ve Windows sistemlerine, ağ donanımına ve çok daha fazlasına kadar birçok farklı cihaz sınıflandırmasıyla iletişim kurabilir. Bu, 2 tür sunucuyu otomatik olarak güncelleyen 2 Ansible modülünün bir örneğidir:
--- name: web sunucularını güncelle
hosts: webservers
remote_user: root
tasks:
- name: apache'nin en son sürümde olduğundan emin olun
yum:
name: httpd
state: latest
- name: write the apache config file
template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
- name: db sunucularını güncelle
hosts: databases
remote_user: root
tasks:
- name: postgresql'nin en son sürümde olduğundan emin olun
yum:
name: postgresql
state: latest
- name: postgresql'nin başlatıldığından emin olun
service:
name: postgresql
state: started
Yukarıdaki örnekte playbook 2 oyun içerir:
- Birincisi, web sunucusu yazılımının güncel olup olmadığını kontrol eder ve gerekirse güncellemeyi çalıştırır.
- İkincisi, veritabanı sunucusu yazılımının güncel olup olmadığını kontrol eder ve gerekirse güncellemeyi çalıştırır.
Bir playbook'ta hangi hostlara işlem yapılacağı ve görevleri belirtmek zorundayız. Playbookta görevler yukarıdan aşağı şeklinde çalışmaya başlar. Görevler eş zamanlı veya sırasıyla yapılabilir.
Örnek Ansible modüllerine aşağıdaki linkten ulaşabilirsiniz.
Ansible Playbook Kullanımı
Ansible, YAML söz dizimi kullanır . Kime sorduğunuza bağlı olarak, YAML başka bir biçimlendirme dili anlamına gelir veya YAML biçimlendirme dili değildir. Ayrıca 2 farklı, ancak tamamen kabul edilebilir YAML dosya uzantısı vardır, .yaml veya .yml
Yazmaya başmadan önce yaml formatında boşluklar çok önemlidir. Tab tuşuna basarak yazarsanız, hata alırsınız. Bu yüzden, Visual Studio Code veya notepad ++ gibi uygulamalar ile gerekli ayarları yaparak kullanmanız en doğrusu olacaktır. Ben notepad ++ üzerinde tab tuşuna basınca 2 boşluk bırakmasını görseldeki gibi ayarlayarak sorunu ortadan kaldırıyorum.


- Dosyalar yaml formatında olacağı için her zaman - - - 3 tane tire ile başlayacağını unutmayalım.
- yaml formatı boşluk duyarlıdır. playbook yazarken tab tuşu kullanmayın veya tab tuşunu 2 boşluk bırakacak şekilde Notepad ++ veya Notepadqq gibi araçlar ile ayarlayarak yaml dosyalarını kolaylıkla yazabilirsiniz.
Playbook Uygulama Yüklemek
Şimdi daha çok örnek yaparak, iyice anlamaya çalışalım. Bir veya birden fazla sunucumuzun paket index'ini güncelleyip bir web server kurmaya çalışalım.
İlk olarak ansible dizini içinde bir yaml dosyası oluşturuyorum.
vim nginx.yml
Dosyayı editör ile açtıktan sonra aşağıdaki yapıştıralım.
- hosts: test
become: yes
tasks:
- name: "apt-get update"
apt:
update_cache: yes
cache_valid_time: 3600
- name: "install nginx"
apt:
name: ['nginx']
state: latest
Dosyayı kayıt edip, çıkalım.
:wq!
Yukarıdaki komutları kısaca açıklayalım.
- hosts: Yükleme yapılacak sunucular. (all yazarak tüm sunucuları veya belli bir grubu seçebilirsiniz)
- become: sudo yetkisini aktif edileceğini belirtir.
- tasks: Yapılacak görevleri belirtir.
- name: Görevler için bir not yazabilirsiniz.
- apt: Yükleme için kullanılacak modül'ü belirtir. (Dağıtımınıza göre, yum vs. kullanılabilir.)
- name: Paketin adını belirtir. (apache2, nginx, htop vb.)
- state: Paket versiyonu belirtebilirsiniz. (latest = son sürüm)
Şimdi playbook çalıştıralım ve parolamızı girelim.
ansible-playbook --ask-become-pass nginx.yml

Herhangi bir web tarayıcı üzerinden kontrol ettiğimiz zaman, nginx servisinin çalıştığını görebiliriz.

Tabiki tüm modülleri ezbere bilemeyiz. Ansible sitesini ziyaret edebilirsiniz. Zaten playbook yazarken yapılan iş bunlardan oluşur :) Bu kısımda işlem yapmadan önce reqirements yani gereksinimlere bakmanız önemlidir.