Herkes için Otomasyon – Ansible ve Ansible AWX
  1. Anasayfa
  2. Open Source

Herkes için Otomasyon – Ansible ve Ansible AWX

0

Zaman hepimiz için çok değerli. Bilişim sektörü çalışanları olarak zamanı en uygun şekilde yönetebilmek için otomasyon sistemlerine de muhakkak hakim olmamız gerekli. Günümüzün şartlarıda bunu gerektiriyor. Otomasyon denilince aklınıza bir çok farklı araç gelebilir fakat yazının ana konusu Ansible (AWX) üzerine olacak. Uzun zamandır yazmayı düşündüğüm fakat minik kızımın dünyaya gelmesinin yaklaştığı şu günlerde vakit bulamadığım için çok fazla üzerine düşemediğim bir konu.

Nedir bu Ansible ? diye merak ediyorsanız doğru yerdesiniz. Teknik yetkinlikleri hakkında konuşmadan önce, biraz geriye dönüp tarihine bakacak olursak Ansible asında 2012 yılında ortaya çıkan bir startup projesi. 2 – 2.5 sene sonra da Red Hat tarafından satın alınıp kendi ekosistemlerine dahil ediliyor. Ürün başlı başına güzel fakat bu noktaya gelmesinde Red Hat’in payı oldukça büyük.

En basit hali ile IT operasyonlarını otomatize etmek için yazılmış bir framework. Nasıl otomatize ettiğinde ileride değineceğiz fakat nedirin cevabı tam olarak bu.

Geçmişte “Chef,Puppet vb.” farklı otomasyon araçlarını da denemiş biri olarak olarak son 1 yıldır aktif olarak Ansible kullanıyorum ve oldukça memnunum. Ansible tarafında en çok sevdiğim şey ise oldukça yalın bir dil olan YAML ile Playbook yazarak hızlı bir şekilde yapmak istediğim işlerimi otomatize edebilmem. Yani bu aracı kullanabilmek için yazılımcı olmanıza ya da yazılımdan anlamanıza gerek yok.

Ansible Tower ; Ansible yönetimi için kullanılan kullanıcı ara yüzü fakat ben yazımın devamında anlatırken örneklerimi Ansible Tower’ın açık kaynak kodlu versiyonu olan AWX üzerinden örnekler vererek anlatacağım. Ansible Tower yada AWX kullanmak şart değil fakat bence oldukça kullanışlı dizayn edilmiş ara yüzü ve ara yüz ile beraber gelen gelişmiş API desteği için muhakkak kullanın.

Resim-1

Ansible tarafında ilk aşamada bilinmesi gereken 3 temel komponent üzerinden devam edelim ve ne işe yaradıklarından bahsedelim.

  1. Inventory
  2. Playbook
  3. Modules

Inventory: Üzerinde otomasyon yapacağız cihazlarımızı ya da sunucularımızı yani hostlarımızı tanımladığımız yer. Katalog gibi düşünebilirsiniz. Kullanım amacınıza göre farklı farklı bir çok envanter ya da tüm hostlarınız için tek bir envanter oluşturarak hostlarınızı bu envanterler içerisine ekleyebilirsiniz. Ansible sadece sunucular üzerinde değil özellikle network cihazları tarafında da olukça yetenekli bir framework . Network cihazlarınızı ve sunucularınızı ayırmak için farklı farklı inventory’ler oluşturmak yönetim açısından sizi oldukça rahatlatacaktır.

Inventory oluşturduktan sonra içerisine girip “hosts” kısmından, playbook üzerinden bu envantere bağlanırken kullanılacak değişkenleri de belirterek hızlıca host ekleyebiliriz.

Bu örnekte ben “webserver1” diye bir host tanımladım. Değişkenler sunucu tipine göre farklılıklar gösterecektir. Aşağıda görmüş olduğunuz sunucu Windows bir server olduğu için Ansbile Connection method “winrm” , Winrm transport type ise “ntlm” olarak set edilmiş durumda. Eğer bu bir Linux sunucu olsaydı farklı değerler yazacaktım. Bu tanımlamayı yaptıktan sonra hazırladığım playbok içerisinde “hosts” kısmında webserver1 yazarak çalıştırırsam ansible hangi ip adresli sunucuya hangi method ile bağlanacağını gelip bu değişken bilgisini okuduktan sonra öğrenecek ve sunucuya bağlanacak.

Resim-2

Aynı method ile aynı envater içerisine 2 nci bir web sunucusu daha ekledikten sonra. Groups altında + butonuna basarak “websunuculari” isimli bir grup oluşturup biraz önce eklediğim 2 host’u bu gruba dahil ediyorum.

Artık oluşturduğum grup ile , üyesi olan tüm sunucular üzerinde yazdığımız playbook içerisindeki taskları sırası ile çalıştırabiliriz.  Peki bu nerede işimize yarayacak ? Senaryoyu biraz genişleterek bu operasyonu 100 adet sunucu üzerinde uygulamamız gerekseydi oldukça işimize yarayacaktı. Grupların bize sağladığı en büyük avantaj aynı operasyonu birden fazla host üzerinde uygulamak istediğimiz zaman,  her bir host için ayrı ayrı Playbook hazırlamadan “hosts” kısmına sadece grup adını yazarak operasyonu daha kolay yönetebilmemizi sağlıyor olması.


Resim-3

Playbooklar: Playbook’ları Microsoft tarafındaki Runbook’lara benzetebilirsiniz. Temelde otomatize edilmek istenen işleri sırası ile Task’lar halinde alt altya yazdığımız, kullanılacak değişkenleri ve diğer bütün bilgileri girdiğimiz YAML formatındaki dosyalar.

Hemen 2 aşamalı küçük bir örnek yapalım ve basit bir servisi start edelim. Playbook yazmaya başlarken ilk önce playbook’umuza bir isim vererek otomatize etmek istediğimiz işlemleri hangi host\device (Bu bir sunucuda olabilir, network cihazıda) üzerinde uygulamak istiyorsak “hosts” kısmında belirterek ilgili sunucuya bağlanıyoruz.

---
- name: Start nginx
  hosts: host.name.ip
  become: true

Sonrasında ise uygulamak istediğimiz operasyonları “tasks” altında listeliyoruz.

tasks:
- name: Start NGiNX
  service:
    name: nginx
    state: started

En sonunda ise karşımıza aşağıdaki gibi 9 satırlık bir Playbook çıkıyor. Envanter ve değişken kullanımı burada en çok işimize yarayacak şeylerden birisi. Bakıldığında tek sunucu için anlamı olmayabilir fakat Host kısmını biraz değiştirerek neler yapabileceğimize hızlıca bir bakalım.

---
- name: Start nginx
  hosts: host.name.ip
  become: true
tasks:
- name: Start NGiNX Service
  service:
    name: nginx
    state: started

Biraz önce bahsettiğimiz grup yapısına örnek olması açısından örneği zenginleştirelim. Diyelim ki yönettiğimiz 100 adet Nginx server var ve hepsini Ansible üzerinde host olarak ekledik. Eklediğimiz 100 nginx hostu daha kolay yönetebilmek için ” all_nginxservers” diye bir grup oluşturarak 100 adet sunucuyu bu gruba üye yaptık. Artık playbook içerisinde “hosts” kısmında direk ilgili grubu çağırarak, uygulanmasını istediğiniz işin grup üyesi 100 adet server üzerinde çalışmasını sağlayabiliriz.

---
- name: Start nginx
  hosts: all_nginxservers
  become: true
tasks:
- name: Start NGiNX Service
  service:
    name: nginx
    state: started

Modüller ise playbook’lar vasıtası ile direk ilgili hostlar üzerinde çalıştırdığımız önceden hazırlanmış scriptler – komut setledir. Bir çok farklı dilde hazırlanmış olabilir hatta siz kendiniz de modül yazıp ansible içerisine ekleyerek playbook üzerinden çağırabilirsiniz. Şu anda aktif olarak kullanabileceğiniz binlerce hazır modül mevcut, modül listesine buraya tıklayarak ulaşabilirsiniz

Örnek olarak; dosya koplayama adında bir task oluşturarak “win_copy” modülünü çağırıp Source ve Destination bilgilerini girdikten sonra Playbook’umuzu çalıştıralım. Playbook çalıştığında olan şey ;

Playbook’un gidip “win_copy” modülünü çağırarak belirtilen değişkenlerdeki yerden dosyayı alıp yine belirtilen yere kopyalası. Yani Playbook içerisinde basit bir komut çağırarak arka tarafta daha kompleks operayonları tetiklememize imkan veriyor.

tasks:
- name: Dosya Kopyalaya
  Win_copy: src=/var/lib/data/test.ps1 dest=C:\test.ps1

Her bir modül ile ilgili detaylı bilgiye Ansible dökümanlarından ulaşıp hangi değişkeni hangi formatta kullanmanız gerektiğini yine ilgili doküman üzerinden kontrol edebilirsiniz. Oldukça detaylı açıklamalar ve her dökümanın en altında örnek Playbook’lar mevcut.  Mesela bu örnek için Win_copy modülü için buraya tıklayarak incelerseniz kolayca aklınıza yatacaktır.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

http://www.mshowto.org

https://www.ansible.com/

TAGs: Ansible, Ansible Tower, AWX, Playbook, Ansible Modules, Automation

Bu İçeriğe Tepkin Ne Oldu?
  • 5
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 1
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Faruk TERZIOGLU - 2003 senesinden beri aktif olarak bilgi teknolojileri sektöründe çalışıyor. Uzmanlık alanları BT altyapı çözümleri ve yazılım tanımlı veri merkezi teknolojileri, Microsoft ailesi ürünleri, Açık kaynak kodlu sanallaştırma platformları ve uygulamaları olup bulut teknolojileri öncelikli ilgilendiği alanlar arasındadır. 2018 yılında Alibaba Cloud tarafından Bulut Teknolojileri Çözümleri alanında MVP olarak ilan edilmiştir.

Yazarın Profili
İlginizi Çekebilir
yaml

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir