Ansible Nedir?

Ansible Nedir?

Bilişim sistemlerinin yazılımlar ile otomatize çalışmasını sağlamak her sistem yöneticisinin görevleri arasında yer alır. Burada rutin işlemlerden örnek vermek gerekirse sistem kullanım raporundan, yedeklerin çalışıp çalışmadığını kontrol etmeye kadar düzenli olarak yapılması gereken veya kitap dolusu güvenlik kontrolleri birden fazla sistemlere uygulanması gerektiği ortadadır.

İnsan, 3-4 sunucuya kadar birçok işlemi kağıda bakarak devam edebilir. Bir veri merkezi dolusu sunucuyu nasıl yöneteceğinizi hiç düşündünüz mü? Bu durumda elbette birçok yazılım yardıma koşabilir örneğin Microsoft Windows Server üzerinde kullanlan Server Manager ile ağ üzerinde bulunan Windows sunucularınıza rol ekleyebilir, Windows rolerinin durumlarını görüntüleyebilirsiniz.

Elbette bu yazılım sadece bir tane ve sadece Windows sistemlerde geçerli. Peki bu düşünce Linux, BSD veya yönlendirici dünyasın da bulunsaydı nasıl olurdu?

Sistemlerimiz içerisinde sadece yönettiğimiz e-posta sunucusu veya bir Xen sunucudan ibaret değil. Cisco yönlendiriciler, SonicWall güvenlik duvarları veya AWS üzerinde bulunan EC2 cihazlarını el ile yönetmek insan hataları sonucunda şirket toplum güvencesine veya mali zararlar verebiliyor.

Bu manuel çalışma yönetimi ortadan kaldırmak için hali hazırda piyasada Chef, Puppet veya SaltStack gibi yazılımlar var fakat hepsi birbirinin kopyası niteliğinde denebilir, belki kullandıkları programlama dilleri, sundukları yan yazılımlar veya lisans kolaylıkları ile seçim nedeni oluyorlar. Bunun dışında bu yazılımların çevresinde gelişen topluluk da bir diğer ki seçenek fakat birçok şirket bu kısmı hızlıca atlayabiliyorlar.

Birkaç sorunu ele aldıktan sonra artık Ansible bu sorunlara nasıl çözüm olabileceğini anlatabilirim. Ansible bir Infrastructure as Code (IaC) platformu. Eskiden sadece uzaktan bağlanıp kontrol etme yazılımdan ibaret olan bu açık kaynak kodlu proje artık büyük bir platform niteliğinde sunduğu kolleksiyonlar (collections) ve topluluk tarafından paylaşılan roller ile.

İhtiyacınız olan httpd paketini Red Hat deposundan yum ile alabilirsiniz ama hep istediğiniz versiyonda olacağını veya önemli yamaların o gün eklendiğinden emin olmanızı sağlayacaktır. Bir diğer başka örnek, ve bence en önemlisi, birden fazla sunucuda yapacağınız konfigrasyon değişikliği sadece birkaç satırda da yapabilirsiniz. Buna şuan birçoğunuz bu kadar yazıdan sonra birkaç satır kod görebilseydik diyebilirsiniz ve buyrun.

---
hosts: web-servers  # statik sunucu envanteri

tasks:
  - name: "httpd paketinin yük olduğundan emin ol"
    yum:
      name: httpd-2.4.6-95.el7  # istediğimiz bir httpd sürümü olsun
      state: present

  - name: "güvenlik duvarında HTTP portunu aç"
    firewalld:
      service: http  # Kalıcı olarak TCP 80 portunu "Public zone"'a açalım
      permanent: yes
      state: enabled

  - name: "httpd servisinin başlatıldığından emin ol"
    systemd:
      name: httpd.service
      state: started

Üstte gördüğünüz YAML parçası belkide birkaç satır Bash betiği ile yapılabilirdi fakat o Bash betiğini belkide envanterinizde ki 100 makinaya tek tek çalıştırmanız ve sunucuların istediğiniz duruma gelmesini sağlamanız gerekiyor.

Elbette oyun kitapları sadece basit bir httpd paketini indirip systemd üzerinden çalıştırmak olmayacaktır. Örneğin bir OpenBSD güvenlik duvarınızda pf değişikliğinde bulunacak, sunucunuzun LVM yapısını yönetecek, KVM sunucuları yapılandıracaksınız veya bütün sunucuların yedeklerini cron kullanmadan alabileceksiniz. Bunların hepsini anlamlı küçük roller haline getirip tek seferde çalıştırabileceksiniz.

Bu yazımızda sadece Ansible projesinin ne gibi sorulara yanıt verdiğini ve sonrasında Ansible’ın ne olduğu hakkında bilgi verdik. İlerleyen yazılarda Ansible nasıl kullanılır, dinamik sunucu yönetimi nasıl yapılır gibi konulara değineceğiz.