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

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.