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


Ansible Serisinin bu Bölüm 6'sında, geçmiş konulardaki birkaç Ansible modülünü ele aldık; şimdi daha derine ineceğiz ve bir dizi sistem yönetimi görevinin yerine getirilmesinde 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.

Bu sayfada:
  1. Ansible'da Yazılım Paketlerini ve Depolarını Yönetme
  2. Ansible'ı Kullanarak Hizmetleri Yönetme
  3. Ansible ile Güvenlik Duvarını Yönetme
  4. Ansible ile Dosya veya Klasörleri Arşivleme
  5. Ansible ile Görevleri Planlama
  6. Kullanıcıları ve Grupları Ansible ile Yönetin
  7. Ansible ile Dosya ve Dizinler Oluşturun
  8. Ansible ile Depolamayı Yönetme
  9. Ansible ile Dosya Sistemlerini Yönetmek

1. Ansible'da Yazılım Paketlerini ve Depoları Yönetme

Linux sistemlere paket kurarken farklı dağıtımlar farklı paket yöneticileriyle birlikte gelir. RedHat dağıtımları için yum & dnf'ye sahibiz, Debian dağıtımları için ise uygun.

Ansible, farklı sistemler için farklı paket yöneticileri kullanma ihtiyacını ortadan kaldıran paket 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 Yükleyin

Örneğin, htop'u hem Debian hem de RedHat dağıtımlarından oluşan bir anasistem grubuna yüklemek için paket modülünü şu şekilde kullanın: aşağıdaki install_htop.yml başucu kitabında gösterilmektedir.

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

- package:
         name: htop
         state: installed

NOT: Paket adları bir işletim sisteminden diğerine farklılık gösterebilir. Örneğin, Redhat dağıtımlarında httpd var ve Debian/Ubuntu sistemleri için Apache2 var ve bunların tümü Apache'yi ifade ediyor Web sunucusu. Bu nedenle bu paketleri geçirirken ekstra dikkatli olunmalıdır. Genellikle değişkenleri veya koşullu ifadeleri kullanmak en iyisidir.

2. Ansible'ı Kullanarak Hizmetleri Yönetme

Daha sonra, Linux sistemlerindeki hizmetleri yönetmek için kullanılan bir hizmet modülümüz var. Bir hizmeti başlatmak, durdurmak veya yeniden başlatmak için kullanılır. Bunu ayrıca bir hizmeti etkinleştirmek için de kullanabilirsiniz; böylece sistem önyüklendiğinde hizmeti otomatik olarak başlatır.

Bir Hizmeti Başlatın ve Etkinleştirin

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

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

- service:
         name: httpd
         state: started
	    enabled: yes

Bir Hizmeti Durdurma

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

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

- service:
         name: httpd
         state: stopped

Bir Hizmeti Yeniden Başlatın

httpd hizmetini yeniden başlatmak için yeniden başlatıldı özelliğini iletin.

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

- service:
         name: httpd
         state: restarted

3. Güvenlik Duvarını Ansible ile Yönetmek

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

Hemen içeri girelim ve birkaç örneğe bakalım:

Firewalld'da Bağlantı Noktası 80'i açın/engelleyin

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

Yukarıdaki başucu kitabında, güvenlik duvarı üzerinden 80 numaralı bağlantı noktasına izin veriliyor.

kalıcı: evet seçeneği, güvenlik duvarı kuralını uygular ve yeniden başlatmalarda kalıcı olmasını sağlar. Ancak bu kural hemen geçerli değildir. Yalnızca yeniden başlatmanın ardından etkili olur. Kuralı hemen uygulamak için hemen: evet seçeneğini kullanın.

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

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

Bağlantı noktası seçeneğini kullanmasına izin verilecek bağlantı noktası aralığını aşağıdaki şekilde 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

Firewalld'da Hizmet Ekle/Engelle

Bağlantı noktası eklemenin/engellemenin yanı sıra aynı kuralları bir hizmete de uygulayabilirsiniz. Ve oldukça basit. Yalnızca hizmet modülünü kullanın ve eklenecek hizmeti 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. Ansible ile Dosya veya Klasörleri Arşivlemek

Arşivleme, bir dosya veya klasörün kolayca taşınabilir ve boyutu daha küçük bir formatta sıkıştırılması anlamına gelir. Ansible, arşiv adı verilen bir modülle birlikte gelir. Bir dosyayı sıkıştırmak olabildiğince kolaydır. Gereken tek şey, dosyanın kaynak yolunu ve sıkıştırılmış dosyanın hedefini belirtmektir.

Bir Dizini Sıkıştır

Aşağıdaki compress.yml başucu kitabını düşünün.

---
- hosts: webservers
  tasks:

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

Yukarıdaki başucu kitabı /opt/data/web dizinini sıkıştırır ve onu /tmp/web.gz dosyasına kaydeder.

Bir Dizini Formatla Sıkıştır

Varsayılan sıkıştırma formatı .gz'dir ancak bu, format niteliği kullanılarak belirtilebilir. Bir sonraki Başucu Kitabı'nı örnekleyin.

---
- hosts: webservers
  Tasks:

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

Yukarıdaki başucu kitabı /opt/data/web dizinini /tmp/web.zip dosyasına sıkıştırır.

Sıkıştırılmış Dosyayı Açma

Sıkıştırılmış bir dosyayı arşivden çıkar özelliğini kullanarak da açabilirsiniz. Aşağıdaki başucu kitabını düşünün.

---
- hosts: webservers
  tasks:

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

Yukarıdaki başucu kitabı, Ansible denetleyicisindeki /opt/data/web.gz dosyasını /opt olarak sıkıştırır.

Uzak Düğümde Sıkıştırılmış 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 oynatma kitabı, uzak düğümdeki /tmp/web.bz2 dosyasını /opt/ dizinine açar.

5. Ansible ile Görevleri Planlayın

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

Zamanlanmış Görev Oluşturma

Aşağıdaki başucu kitabını düşünün.

---
- 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

Başucu kitabı, katılım senaryosunu 5 Nisan'da saat 17:00'de çalıştırıyor.

Belirli Bir Tarihe Bir Komut Dosyası Planlayın

Bu komut dosyasını yalnızca Nisan ayının 5. günü Pazartesi ise çalışacak şekilde planlamak istiyorsanız hafta içi: 1 özelliğini kullanın. Cron notasyonuna göre 0 Pazar'ı, 6 ise Cumartesi'yi ifade eder.

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

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

Bir İşi Belirli Bir Tarihte Çalıştırma

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

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

Her Ayın Belirli Bir Gününde Bir İş Yürütün

Cron işini her ayın 5. günü saat 17:00'de gerçekleştirmek için aşağıdaki ayarları kullanın.

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

Bir İşi Günlük Olarak Yürütün

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

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

Her 5 Saatte Bir İş Yürüt

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

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

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

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

Yeni Kullanıcı Oluştur

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

---
- hosts: webservers
  tasks:

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

Ayrıca 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

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ştur

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

- name: Create a group
  group:
    name: developers

7. Ansible ile Dosya ve Dizinler Oluşturun

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

Yeni Dizin Oluştur

Ö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 özellikleri ekleyebilirsiniz.

- hosts: webservers
  tasks:

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

Ayrıca 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ştur

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önetmek

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

LVM Birim Grubu Oluşturma

Aşağıdaki başucu kitabını düşünün:

---
- 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 fiziksel boyut boyutu 32 MB olan bir birim grubu oluşturur.

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

Mantıksal Birim Oluşturun

---
    - hosts: webservers
      tasks: 

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

9. Dosya Sistemlerini Ansible ile Yönetmek

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

Dosya Sistemi Oluşturun

Aşağıdaki başucu 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

Dosya Sistemini Bağlayın

Daha sonra aşağıdaki başucu kitabında gösterildiği gibi bağlama modülünü kullanarak blok birimini bağlamaya devam edebilirsiniz:

---
    - hosts: webservers
      tasks: 

       - name: Mount a filesystem
         mount:
         
           fstype: xfs
           src: /dev/vg1/lvol1
           path: /opt/web
           state: mounted
Çözüm

Bu konuyu sonuçlandırıyor. Ansible Playbooks'taki belirli yerleşik modüller tarafından gerçekleştirilebilecek çeşitli sistem yönetimi görevlerini ele aldık.