Ansible

Sistem Yönetimi Görevleri için Ansible Modülleri Nasıl Kullanılır – Bölüm 6

Ansible Serisinin 6. Bölümünde, şimdi daha derine ineceğiz ve bir dizi sistem yönetimi görevini gerçekleştirmede yardımcı olan ek modülleri keşfedeceğiz.

Her modül hakkında temel bir fikir edinecek ve belirli görevleri gerçekleştirmek için mevcut seçeneklere bakacaksınız.

1. Ansible’da Yazılım Paketlerini ve Havuzları Yönetme

Linux sistemlerde paket kurarken farklı dağıtımlar ile farklı paket yöneticileri gelmektedir. RedHat dağıtımları için yum & dnf kullanılmaktadır, Debian ve benzerleri için ise apt kullanılır.

Ansible, farklı sistemler için farklı paket yöneticileri kullanma ihtiyacını ortadan kaldıran package adı verilen bir modülle birlikte gelir. Ana sistemin ilgili paket yöneticisini otomatik olarak kullanır ve böylece işi kolaylaştırır.

Yazılım Paketlerini Kurma

Örneğin, hem Debian hem de RedHat dağıtımlarını içeren bir bilgisayar grubuna htop yüklemek için aşağıdaki install_htop.yml çalışma kitabında gösterilen paket modülünü kullanın.

---
- name: Install htop on Ubuntu and CentOS
  hosts: all
  tasks:

- package:
         name: htop
         state: installed
Install Software Using Ansible Package Module
Ansible Paket Modülünü Kullanarak Yazılımı Kurulumu

NOT: Paket adları bir işletim sisteminden diğerine farklılık gösterebilir. Örneğin, Redhat dağıtımlarında httpd ve Debian/Ubuntu sistemlerinde Apache2, Apache web sunucusunu belirtir. Bu nedenle, bu paketleri geçerken ekstra dikkatli olunmalıdır. Genellikle değişkenleri veya koşullu ifadeleri kullanmak en iyisidir.

2. Servisleri Ansible Kullanarak Yönetme

Ardından, Linux sistemlerindeki servisleri yönetmek için kullanılan bir service modülümüz var. Bir hizmeti başlatmak, durdurmak veya yeniden başlatmak için kullanılır. Bir hizmeti etkinleştirmek için de kullanabilirsiniz, böylece bir sistem önyüklendiğinde hizmeti otomatik olarak başlatır.

Bir Hizmeti Başlatma ve Etkinleştirme

Örneğin, RHEL 8’de Apache web sunucusunu başlatmak ve etkinleştirmek için, service’i gösterildiği gibi kullanın.

---
- name: Start and enable httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: started
	    enabled: yes
Manage Services with Ansible
Servisleri Ansible ile Yönetin

Bir Hizmeti Durdurma

httpd hizmetini durdurmak için, stop özelliğini iletin.

---
- name: Stop httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: stopped
Stop Service with Ansible
Ansible ile Hizmeti Durdurun

Bir Hizmeti Yeniden Başlatın

httpd hizmetini yeniden başlatmak için yeniden başlatılan özniteliği iletin.

---
- name: Restart httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: restarted
Restart Service with Ansible
Ansible ile Hizmeti Yeniden Başlatın

3. Managing Firewall with Ansible

Sistem yöneticilerinin üstlendiği bir diğer önemli görev de güvenlik duvarının yönetimidir. Ansible oyun kitaplarında, güvenlik duvarı ve ufw modülleri ile bu çok daha kolay hale getirildi. Güvenlik duvarını bir bağlantı noktasına veya hizmete ve hatta bir kaynak adresine izin verecek veya bunları engelleyecek şekilde yapılandırabilirsiniz.

Hemen konuya geçelim ve birkaç örneğe bakalım:

Güvenlik duvarında Port 80’i açma/engelleme

---
- name: Allow port 80 
  hosts: webservers
  tasks: 
   
   -firewalld:
	port: 80/tcp
     permanent: yes
     state: enabled

Yukarıdaki çalışma kitabında, güvenlik duvarında 80 numaralı bağlantı noktasına izin verilir.

Permanent: yes seçeneği, güvenlik duvarı kuralını uygular ve yeniden başlatmalarda kalıcı olmasını sağlar. Ancak bu kural hemen uygulanmaz. Yalnızca yeniden başlatmanın ardından yürürlüğe girer. Kuralı hemen uygulamak için hemen seçeneğini immediate: yes

İzin verilen adresleri belirtmek için source:0.0.0.0/0 deyimini kullanın.

- firewalld:
    source: 192.168.0.0/24
    zone: public
    state: enabled

Bağlantı noktası seçeneğinin kullanılmasına izin verilecek bağlantı noktası aralığını aşağıdaki gibi belirtmek için:

- firewalld:
    port: 213-567/udp
    permanent: yes
    state: enabled

Bağlantı noktasını engellemek için durum seçeneğini gösterildiği gibi devre dışı olarak değiştirin:

-firewalld:
	port: 80/tcp
     permanent: yes
     state: disabled

Güvenlik duvarında Hizmet Ekleme/Engelleme

Bir bağlantı noktası ekleme/engelleme dışında, aynı kuralları bir hizmete de uygulayabilirsiniz. Servis modülünü kullanın ve eklenecek servisi ekleyin ve durum seçeneğinin etkin olarak ayarlandığından emin olun.

- firewalld:
    service: https
    permanent: true
    state: enabled

Hizmeti engellemek için durum seçeneğini devre dışı olarak ayarlayın.

- firewalld:
    service: https
    permanent: true
    state: disabled

4. Dosyaları veya Klasörleri Ansible ile Arşivleme

Arşivleme, bir dosya veya klasörün kolayca taşınabilir ve boyut olarak daha küçük bir biçime sıkıştırılması anlamına gelir. Ansible, archive adı verilen bir modülle birlikte gelir. Tek gereken, dosyanın kaynak yolunu ve sıkıştırılmış dosyanın hedefini belirtmektir.

Bir Dizini Sıkıştırma

Aşağıda archive.yml isimli örneği inceleyin.

---
- hosts: webservers
  tasks:

    • name: Compress a folder
archive:
        path: /opt/data/web
        dest: /tmp/web.gz

Yukarıdaki çalışma kitabı /opt/data/web dizinini sıkıştırır ve /tmp/web.gz dosyasına kaydeder.

Create Archive with Ansible
Ansible ile Arşiv Oluşturun

Bir Dizini İstenilen Formatla Sıkıştırma

Varsayılan sıkıştırma formatı .gz’dir, ancak bu, format parametresi kullanılarak değiştirilebilir. Aşağıdaki çalışma kitabını inceleyin.

---
- hosts: webservers
  Tasks:

  - name: Create a zip archive 
    archive:
     path: /opt/data/web
     dest: /tmp/web
     format: zip

Yukarıdaki çalışma kitabı /opt/data/web dizinini /tmp/web.zip olarak sıkıştırır.

Bir Dosyayı Açma

Unarchive parametresini kullanarak sıkıştırılmış bir dosyayı da açabilirsiniz. Aşağıdaki çalışma kitabını inceleyin.

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.gz to/opt directory  on Ansible controller
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/

Yukarıdaki çalışma kitabı /opt/data/web.gz dosyasını Ansible denetleyicisinde /opt olarak açar.

Uzak Bilgisayardaki Bir Dosyayı Açma

Uzak kaynak sistemini belirtmek için remote_src=yes seçeneğini kullanın.

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.bz2 to/opt on remote host
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/
     remote_src=yes 

Yukarıdaki çalışma kitabı, uzak düğümdeki /tmp/web.bz2 dosyasını /opt/ dizinine açar.

5. Ansible ile Görevleri Planlama

Cron modülü, Ansible Playbooks’ta işlerin planlanmasına yardımcı olur.

Zamanlanmış Görev Oluşturma

Aşağıdaki çalışma kitabını inceleyin.

---
- hosts: webservers
  tasks:

 - name: Create a scheduled task
   cron:
     name: Run employee attendance
     job: sh /opt/scripts/attendace.sh
      
     month: 4
     day: 5
     hour: 17
     minute: 00

Çalışma kitabı, komut dosyasını 5 Nisan’da saat 17:00’de çalıştırır.

Belirli Bir Tarihte Komut Dosyası Planlama

Bu komut dosyasını yalnızca Nisan ayının 5. günü Pazartesi olduğunda çalışacak şekilde programlamak istiyorsanız, hafta içi gün: 1 niteliğini kullanın. 0, Pazar’ı ve 6, cron notasyonuna göre Cumartesi’yi belirtir.

month: 4
day: 5
hour: 17
minute: 00
weekday: 1

Bu alanların herhangi birindeki yıldız işareti (*), herhangi bir değeri gösterir.

Belirli Bir Tarihte Bir Görev Çalıştırma

İşi hafta içi gün ne olursa olsun 5 Nisan’da 17:00’de çalıştırmak için gösterilen zaman parametrelerini kullanın.

month: 4
day: 5
hour: 17
minute: 00
weekday: *

Her Ay Belirli Bir Günde Bir İşi Çalıştırma

Her ayın 5. günü saat 17:00’de cron işini yürütmek için aşağıdaki ayarları kullanın.

month: *
day: 5
hour: 17
minute: 00
weekday: *

Günlük Bir Görev Çalıştırma

Cron işini her gün saat 17:00’de yürütmek için saat ayarlarını gösterildiği gibi yapın:

month: *
day: *
hour: 17
minute: 00
weekday: *

Görevi Her 5 Saatte Bir Çalıştırma

Her 5 saatte bir cron işini yürütmek için, gösterildiği gibi */5 adım değerini kullanın.

month: *
day: *
hour: */5
minute: *
weekday: *

6. Ansible ile Kullanıcıları ve Grupları Yönetme

Ansible ile kullanıcıları ve grupları da oldukça zahmetsizce yönetebilirsiniz.

Yeni Kullanıcı Oluşturma

Yeni bir kullanıcı oluşturmak için user modülünü gösterildiği gibi kullanın.

---
- hosts: webservers
  tasks:

 - name: Create a new user
   user: 
     name: Jack

UID, gruplar gibi ek seçenekler de ekleyebilirsiniz.

- name: Create a new user
   user: 
      name: Jack
      comment: Jack Peters
          uid:   1002
      group: administrators
      shell:  /bin/bash

Bir Kullanıcıyı Kaldırma

Kullanıcıyı kaldırmak için remove: yes ifadesini kullanın.

- name: Remove the user 'Jack'
  user:
    name: Jack
    state: absent
    remove: yes

Yeni Grup Oluşturma

Yeni bir grup oluşturmak için group modülünü kullanın.

- name: Create a group
  group:
    name: developers

7. Ansible ile Dosyalar ve Dizinler Oluşturma

Dizin dosyaları oluşturmak için file modülünü kullanın.

Yeni Bir Dizin Oluşturma

Örneğin, yeni bir dizin oluşturmak için.

---
- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/app
     state: directory

Sahip, grup ve dosya izinleri gibi diğer öznitelikleri ekleyebilirsiniz.

- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/web
     state: directory
     owner: www-data
     group: www-data
     mode: 0644

Ek olarak, recurse: yes ifadesini kullanarak yinelemeli olarak dizinler oluşturabilirsiniz.

---
- hosts: webservers
  tasks:

  - name: Create directories recursively
    file: 
     path: /opt/web/app
     state: directory
     owner: www-data
     group: www-data
     mode: 0644
recurse: yes

Dosya Oluşturma

Bir dosya oluşturmak için state: touch seçeneğini kullanın.

---
- hosts: webservers
  tasks:

  - name: Create a new file
    file: 
     path: /opt/web/index.html
     state: touch
owner: www-data
     group: www-data
     mode: 0644

8. Ansible ile Depolamayı Yönetme

lvg modülü, LVM hacimlerini ve gruplarını yapılandırmak için kullanılır.

Bir LVM Hacim Grubu Oluşturun

Aşağıdaki çalışma kitabını inceleyin:

---
- hosts: webservers
  tasks: 
    • name: Create lVM volume group
lvg: 
 vg: vg1
 pvs: /dev/sda1
 pesize: 32

Bu, /dev/sda1 bölümünün üzerinde 32 MB fiziksel boyuta sahip bir birim grubu oluşturur.

Oluşturulduktan sonra, gösterildiği gibi mantıksal bir birim oluşturmak için lvol modülünü kullanın.

Mantıksal Birim Oluşturma

---
    - hosts: webservers
      tasks: 

       - name: Create lVM volume
    lvol: 
    vg: vg1
    lv: lvol1
    pvs: /dev/sda1

9. Ansible ile Dosya Sistemlerini Yönetme

Bir blok cihazda dosya sistemi oluşturmak için filesystem modülünü kullanın.

Bir Dosya Sistemi Oluşturma

Aşağıdaki çalışma kitabı, blok biriminde xfs dosya sistemi türünü oluşturur.

---
    - hosts: webservers
      tasks: 

       - name: Create a filesystem
         filesystem:
         
           fstype: xfs
           dev: /dev/vg1/lvol1

Bir Dosya Sistemi Bağlama

Daha sonra, aşağıdaki çalışma kitabında gösterildiği gibi, mount modülünü kullanarak blok alanı bağlamaya devam edebilirsiniz:

---
    - hosts: webservers
      tasks: 

       - name: Mount a filesystem
         mount:
         
           fstype: xfs
           src: /dev/vg1/lvol1
           path: /opt/web
           state: mounted

Yazının orijinalini buradan okuyabilirsiniz.