Ansible : Hizmetlerin Yönetimi

Ansible’daki servis modülü, çeşitli platformlardaki servisleri yönetmek için kullanışlıdır.

Ansible’daki hizmet modülü, farklı ortamlardaki sistem hizmetlerini yönetmenin kolay bir yolunu sunar. Hedef sistemde bulunan hizmet yönetimi araçlarıyla etkileşime girer.

Bu araçlar genellikle farklıdır, örneğin Linux/Unix init sistemleri için systemd, BSD init, macOS’ta launchd, Solaris SMF ve upstart.

Ancak servis modülü, çeşitli servis yönetim araçları arasındaki farkları soyutlayarak, servisleri yönetmenin birleşik bir yolunu sağlar.

Servis modülü parametreleri

Servis modülünün birkaç farklı parametresi vardır, bunların en yaygın olanları şunlardır:

  • name: hizmetin adı
  • enabled: makine önyüklendiğinde hizmetin başlaması gerekiyorsa tanımlanır
  • pattern: durum komutu çalışmazsa, bu parametre bir hizmetin çalışır durumda olup olmadığını tanımlamanıza olanak tanır
  • sleep: eylem sırasında yeniden başlatıldığında durdurma ve başlatma arasındaki tempoyu tanımlar
  • state: hizmet üzerindeki eylem: başlatıldı, durduruldu, yeniden başlatıldı veya yeniden yüklendi (yapılandırma dosyasında değişiklik yapılması durumunda)

Hizmet modülü kullanım durumları

Servis modülü, gerektiğinde servisleri çalıştırmak, durdurmak, yeniden başlatmak veya yeniden yüklemek için kullanılabilir ve altyapınızın yönetimini otomatikleştirmenize ve standartlaştırmanıza yardımcı olur. Aşağıda nginx’i başlatmak için basit bir kılavuz bulunmaktadır:

---
- name: Manage Nginx service
  hosts: webservers
  tasks:
    - name: Ensure Nginx is running and enabled at boot
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: yes

Benzer şekilde, durum parametresini değiştirerek hizmetleri durdurup yeniden başlatabilirsiniz. Ancak, hizmet modülünün kullanımı hizmetleri başlatmak ve durdurmakla sınırlı değildir. Aşağıda nginx kurulumu ve yapılandırması için basitleştirilmiş bir örnek kılavuz bulunmaktadır:

---
  - name: manage services
    hosts: all
    become: true
    tasks:
      - name: Installing nginx
        package:
          - name:
            - nginx
      - name: nginx configuration
        template:
          src:nginx.conf.j2
          dest: /etc/nginx/nginx.conf
          owner:root
          group:root
          mode: 0644
      - name: Reloading the conf
        service:
          name: nginx
          state: reloaded
      - name: Verification nginx is started
        service:
          name: nginx
          state:started
          enabled: true

Bu, servis modülünü kullanmak için basit bir örnektir, ancak bazı sınırlamaları vardır. Bunlardan biri, yapılandırma değişmemiş olsa bile, oyun kitabımızın nginx servisini her zaman yeniden yüklemesidir. Bundan kaçınmanın bir yolu, işleyiciler kullanmaktır.

Hizmeti iyileştirmek için işleyicileri kullanma

İşleyiciler, bir görev sistemde bir değişiklik yaptıysa (durum değiştiyse) bir eylem başlatmanıza olanak tanır. Ansible, bir görev işleyici durumunu geçtikten sonra olayları tetiklemenize olanak tanır. Ayrıca, birden fazla görev aynı eylemi gerektirebilse de, söz konusu eylem yalnızca tüm görev blokları yürütüldükten sonra başlatılır.

Bu nedenle playbook şu şekildedir:

---
  - name: manage services
    hosts: all
    become: true
    tasks:
      - name: nginx configuration
        template:
          src:nginx.conf.j2
          dest: /etc/nginx/nginx.conf
          owner:root
          group:root
          mode: 0644
        notify:
          - reload nginx
      - name: Verification nginx is started
        service:
          name: nginx
          state:started
          enabled: true

    handlers:
      - name: reload nginx
        service:
          name: nginx
          state: reloaded

Paket modülünde olduğu gibi, her başlatma sistemi türüne özgü, daha fazla seçeneğe sahip modüller vardır: systemd ve sysvinit.

Bir hizmet hakkında bilgi edinin: service_facts

Ansible, bir servis hakkında çok sayıda bilgi edinmenizi sağlayan service_facts adlı bir modül sağlar.

Bu modül herhangi bir parametre almaz. Öte yandan, gather_facts’in devre dışı bırakılmamasını gerektirir.

Örneğin, 80 ve 443 portlarını yalnızca güvenlik duvarı hizmeti etkinken açmak istiyorum. Bizim senaryomuz şu şekilde:

---
  - name: manage services
    hosts: all
    become: true
    tasks:
      - name: nginx configuration
        template:
          src:nginx.conf.j2
          dest: /etc/nginx/nginx.conf
          owner:root
          group:root
          mode: 0644
        notify:
          - reload nginx
      - name: Gets information about a service
        service_facts:
      - name:debug
        debug:
          var: ansible_facts.services["firewalld.service"]

    handlers:
      - name: reload nginx
        service:
          name: nginx
          state: reloaded

Hizmetler, ansible_facts değişkenine eklenir ve makinede yüklü tüm hizmetlerin listesini içerir. Dolayısıyla, firewalld hizmetine erişmek istiyorsanız, ansible_facts.services[“firewalld.service”] belirtmeniz gerekir.

TASK [debug] *********************************************************************************************
 ok: [host1] => { 
 "firewalld.service": 
 { "name": "firewalld.service", 
 "source": "systemd", 
 "state": "running", 
 "status": "enabled" 
 } 
  }

Örneğin, yalnızca firewalld hizmeti etkin durumda olduğunda başlatılan bir görev ekleyebilirim:

---
  - name: manage services
    hosts: all
    become: true
    tasks:
      - name: nginx configuration
        template:
          src:nginx.conf.j2
          dest: /etc/nginx/nginx.conf
          owner:root
          group:root
          mode: 0644
        notify:
          - reload nginx
      - name: Gets information about a service
        service_facts:
      - name: authorizes the https flow
        ansible.posix.firewalld:
          service: https
          permanent: yes
          state:enabled
        when: ansible_facts.services["firewalld.service"].status == "enabled"

    handlers:
      - name: reload nginx
        service:
          name: nginx
          state: reloaded



Hüseyin GÜÇ

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım. Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum. Son 6 yıldır  sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum. Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.