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.

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.