Ansible: Hedef Sunucudaki Dosyalar Hakkında Ayrıntılı Bilgi Alma

Ansible Stat modülü, hedef bilgisayarlardaki dosyalar ve dizinler hakkında ayrıntılı bilgi toplamanıza yardımcı olan yerleşik bir araçtır. Üzerinde herhangi bir işlem yapmadan önce bir dosyanın veya dizinin durumunu veya özelliklerini kontrol etmeniz gerektiğinde özellikle kullanışlıdır.

Örneğin, bir dosyayı yalnızca varsa kopyalamak veya belirli bir tarihten eskiyse dosyanın yedeğini oluşturmak isteyebilirsiniz.

Bu kılavuzda, Ansible Stat modülünü pratik örneklerle inceleyeceğiz.

Ansible Stat Modülünü Anlama

Ansible Stat modülü, dosya veya dosya sistemi durumunu görüntülemek için kullanılan Linux’taki stat komutuna benzer şekilde çalışır. Modül aşağıdaki gibi bilgileri toplar:

  • Dosya varlığı (var)
  • Dosya boyutu (boyut)
  • Dosya izinleri (mod)
  • Sahip ve grup
  • Erişim, değiştirme ve zaman damgalarını değiştirme (atime, mtime, ctime)

Yönetilen  bilgisayarlardaki dosyaların veya dizinlerin geçerli durumuna bağlı olarak playbooklarınızı daha dinamik ve duyarlı hale getirmek için bu bilgileri kullanabilirsiniz.

Ansible Stat Modülünün temel sözdizimi

Ansible Stat modülünün temel sözdizimine bakalım:

- name: Basic Syntax of Ansible Stat Module
  hosts: all
  tasks:
    - name: Get file status
      ansible.builtin.stat:
        path: /path/to/your/file
      register: file_status

Her parametreyi açıklayalım:

  • ansible.builtin.stat: Dosya veya dizin bilgilerini toplamak için kullanılan modül.
  • path: Denetlemek istediğiniz dosya veya dizinin yolunu belirtir.
  • register: Stat modülünün çıktısını, sonraki görevlerde kullanılabilecek bir file_status değişkeninde saklar.

Örnek 1: Bir dosyanın var olup olmadığını kontrol edin

Stat modülünün birincil kullanım durumlarından biri, başka eylemler gerçekleştirmeden önce bir dosyanın var olup olmadığını belirlemektir. Bu, hataları önleyebilir ve playbookları daha sağlam hale getirebilir.

İşte örnek bir playbook.

---
- name: Check File Existence Using Ansible Stat Module
  hosts: all
  tasks:
    - name: Gather file information
      ansible.builtin.stat:
        path: /tmp/sample.txt
      register: file_info

    - name: Display if the file exists
      debug:
        msg: "The file exists."
      when: file_info.stat.exists

    - name: Display if the file does not exist
      debug:
        msg: "The file does not exist."
      when: not file_info.stat.exists

Bu playbook, belirli bir dosyanın varlığını kontrol eder / tmp / örnek.stat modülünü kullanan tüm hedef  bilgisayarlarda txt. Önce dosya hakkında bilgi toplar ve file_info adlı bir değişkende saklar. Playbook daha sonra dosyanın var olup olmadığına bağlı olarak iletileri görüntülemek için koşullu ifadeler kullanır: dosya mevcutsa, dosyanın var olduğunu gösterir ve yoksa dosyanın var olmadığını gösterir.

Örnek 2: Dosya meta verilerini toplama

Stat modülü, bir dosya hakkında boyutu, izinleri, sahibi ve zaman damgaları gibi ayrıntılı meta veriler alabilir. Bu bilgiler, playbooklarınızda bilinçli kararlar vermek için kullanılabilir.

İşte örnek bir playbook:

---
- name: Retrieve File Metadata Using Stat Module
  hosts: all
  tasks:
    - name: Gather metadata of the file
      ansible.builtin.stat:
        path: /etc/hosts
      register: file_metadata

    - name: Display file size
      debug:
        msg: "The file size is {{ file_metadata.stat.size }} bytes."

    - name: Display file permissions
      debug:
        msg: "File permissions: {{ file_metadata.stat.mode | format('%o') }}"

    - name: Display file owner
      debug:
        msg: "The file is owned by {{ file_metadata.stat.pw_name }}."

Bu playbook, Ansible’ın stat modülünü kullanarak tüm hedef  bilgisayarlardaki /etc/hosts dosyasıyla ilgili meta verileri alır ve onu file_metadata değişkeninde saklar. Daha sonra dosyanın belirli ayrıntılarını görüntülemek için hata ayıklama görevlerini kullanır: bayt cinsinden boyutu, izinleri ve sahibinin kullanıcı adı. Bu playbook, birden çok  bilgisayardan gerekli dosya bilgilerini toplamanın ve görüntülemenin hızlı bir yolunu sağlar.

Örnek 3: Doğrulayın ve bir dizin oluşturun

Bir dizini oluşturmadan önce var olup olmadığını kontrol etmek için Stat modülünü kullanabilirsiniz. Bu, playbooklarınızda idempotency sağlar.

İşte örnek bir playbook.

---
- name: Ensure a Directory Exists
  hosts: all
  tasks:
    - name: Check if the directory exists
      ansible.builtin.stat:
        path: /tmp/backup
      register: dir_info

    - name: Create directory if it does not exist
      file:
        path: /tmp/backup
        state: directory
      when: not dir_info.stat.exists

Bu Ansible playbook, stat modülünü kullanarak tüm hedef  bilgisayarlarda /tmp/backup dizininin bulunup bulunmadığını kontrol eder. Sonucu dir_info olarak kaydeder. Dizin yoksa , playbook, state: directory ile dosya modülünü kullanarak oluşturur. Bu, belirtilen dizinin tüm hedef  bilgisayarlarda bulunmasını sağlar.

Örnek 4: Dosya zaman damgalarına dayalı koşullu görevler gerçekleştirin

Harekete geçip geçmeyeceğinize karar vermek için dosyanın değişiklik zamanını kullanabilirsiniz. Örneğin, bir dosyayı yalnızca belirli bir tarihten önce değiştirilmişse kopyalamak.

İşte playbook:

---
- name: Copy File If Modified Before a Certain Date
  hosts: all
  tasks:
    - name: Get file information
      ansible.builtin.stat:
        path: /tmp/important.log
      register: file_stat

    - name: Copy the file if it is older than the specified timestamp
      copy:
        src: /tmp/newfile.log
        dest: /tmp/important.log
      when: file_stat.stat.mtime < 1699795200

Bu kılavuz, stat modülünü kullanarak tüm hedef bilgisayarlarda /tmp/important.log dosyasının değiştirilme zamanını kontrol eder ve sonucu file_stat’ta depolar. Ardından, dosyanın değiştirilme zamanını belirtilen bir zaman damgasıyla karşılaştırır. Dosya en son bu zaman damgasından önce değiştirilmişse, kılavuz, copy modülünü kullanarak newfile.log dosyasını important.log dosyasının yerine kopyalar.

Örnek 5: Dizin izinlerinin kontrol edilmesi

Bu playbook bir dizinin izinlerini kontrol eder ve beklendiği gibi değillerse değiştirir.

---
- name: Ensure Directory Has Correct Permissions
  hosts: all
  tasks:
    - name: Get directory permissions
      ansible.builtin.stat:
        path: /var/www/html
      register: dir_stat

    - name: Set correct permissions if needed
      file:
        path: /var/www/html
        mode: '0755'
      when: dir_stat.stat.mode != '0755'

Bu playbook, stat modülünü kullanarak tüm hedef bilgisayarlardaki /var/www/html dizininin izinlerini kontrol eder ve sonucu dir_stat değişkenine kaydeder. Mevcut izinler 0755 ile eşleşmiyorsa, dosya modülünü kullanarak dizinin izinlerini günceller.

Yazının orijinalini buradan okuyabilirsiniz.

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.