Ansible : Uzak Bilgisayardan Dosya Alma

Ansible Fetch Modülü, özellikle kullanıcının günlükleri, yapılandırmaları veya diğer verileri toplaması gereken durumlarda, dosyaları uzak bilgisayarlardan yerel makineye kopyalamak için kullanılır. Dosyaları yerel makineden uzak bilgisayarlara gönderen kopyalama modülünün tersidir.

Bu makalede, Ansible fetch modülünü derinlemesine inceleyecek, sözdizimini, parametrelerini ve kullanım durumlarını tartışacak ve işlevselliğini göstermek için pratik örnekler sunacağız.

Fetch Modülünü Neden Kullanmalısınız?

Fetch modülü özellikle şu ortamlarda çalışırken faydalıdır:

  • Birden fazla uzak makineden gelen günlüklerin veya yapılandırma dosyalarının yerel olarak toplanması gerekir.
  • Değişiklik yapmadan önce dosyaların yedeklenmesi gerekir.
  • Uyumluluk veya sorun giderme amaçlarıyla veri toplama.

Ansible Fetch Modülünün Temel Sözdizimi

Fetch modülünün temel sözdizimi basittir. Kaynak dosyanın uzak bilgisayarda, hedef dosyanın ise yerel bilgisayarda belirtilmesini gerektirir.

- name: Fetch a file from a remote host
  fetch:
    src: /path/to/remote/file
    dest: /path/to/local/destination
    flat: yes

İşte mevcut tüm seçenekler:

  • src: Uzak bilgisayardan alınacak dosyanın mutlak yolunu belirtir.
  • dest: Alınan dosyanın depolanacağı yerel yolu tanımlar. Hedef, yerel makinedeki bir dizin olmalıdır.
  • flat: If yes, Uzak ana bilgisayara dayalı bir dizin hiyerarşisi oluşturmak yerine dosyayı doğrudan hedef dizinde depolar.
  • fail_on_missing: If no, Uzaktaki bilgisayarda dosya eksikse Ansible başarısız olmaz. Varsayılan ayar evettir.
  • validate_checksum: If set to yes, Tekrarlanan dosya transferlerini önlemek için kaynak dosyanın kontrol toplamını doğrular.

Örnek 1: Uzak Bilgisayarlardan Sistem Günlüklerini Alma

Bu senaryoda, yerel makinemizde analiz etmek üzere birkaç uzak  bilgisayardan sistem günlüklerini (/var/log/syslog) toplamamız gerektiğini varsayalım.

---
- name: Fetch system logs from remote hosts
  hosts: all
  tasks:
    - name: Fetch syslog file from remote hosts
      fetch:
        src: /var/log/syslog
        dest: /home/ansible/logs/
        flat: yes

Bu örnek playbookta:

  • src uzak makinedeki sistem günlük dosyasıdır.
  • Hedef, günlük dosyalarının depolanacağı yerel yoldur. Düz olduğundan: evet, günlükler her uzak bilgisayar için alt dizinler oluşturmadan doğrudan /home/ansible/logs/ dizininde depolanacaktır.

Örnek 2: Birden Fazla Sunucudan Yapılandırma Dosyalarını Toplama

Bazı durumlarda, denetim amacıyla /etc/nginx/nginx.conf yapılandırma dosyasını birden fazla sunucudan toplamanız gerekebilir.

İşte bir örnek playbookı:

---
- name: Collect Nginx configuration files
  hosts: web_servers
  tasks:
    - name: Fetch Nginx configuration file from each server
      fetch:
        src: /etc/nginx/nginx.conf
        dest: /home/ansible/configs/
        flat: no

Burada:

  • src, Nginx yapılandırma dosyasının yoludur.
  • dest, dosyaların yerel bilgisayarda depolanacağı dizindir, ancak bu sefer varsayılan olarak düz (hayır) bırakıyoruz. Bu, getirilen her dosyanın uzak ana bilgisayarın adını taşıyan bir alt dizinde depolanacağı anlamına gelir.

Örneğin web01 adlı bir sunucudan alım yapılıyorsa dosya /home/ansible/configs/web01/etc/nginx/nginx.conf olarak kaydedilecektir.

Örnek 3: Eksik Dosyalarda Başarısız Olmadan Dosyaları Getirme

Bazı durumlarda, tüm uzak  bilgisayarlarda gerekli dosya olmayabilir. Bu gibi durumlarla başa çıkmak için, fail_on_missing özelliğini “hayır” olarak ayarlayabilirsiniz; böylece ana bilgisayarda bir dosya eksik olsa bile görev başarısız olmaz.

Bu örnekte, Ansible her sunucudan Apache yapılandırma dosyasını almaya çalışacaktır, ancak  bilgisayarlardan birinde bir dosya eksikse, playbook başarısız olmayacaktır.

---
- name: Fetch Apache config from remote hosts
  hosts: web_servers
  tasks:
    - name: Fetch Apache config file, ignore if missing
      fetch:
        src: /etc/httpd/conf/httpd.conf
        dest: /home/ansible/apache_configs/
        flat: yes
        fail_on_missing: no

Örnek 4: Büyük Dosyaları Getirme ve Kontrol Toplamını Doğrulama

Büyük dosyalarla çalışırken, alınan dosyanın zaten mevcut olması durumunda yeniden indirilmemesini sağlamak isteyebilirsiniz. Bunu, validate_checksum’ı etkinleştirerek yapabilirsiniz.

---
- name: Fetch large database backup from remote hosts
  hosts: db_servers
  tasks:
    - name: Fetch database backup
      fetch:
        src: /var/backups/db_backup.sql
        dest: /home/ansible/db_backups/
        flat: yes
        validate_checksum: yes

Bu örnekte:

  • src veritabanı yedekleme dosyasıdır.
  • validate_checksum: yes, dosyanın yalnızca değiştiğinde getirilmesini sağlayarak gereksiz transferleri azaltır.

Örnek 5: Değişiklik Yapmadan Önce Uzak Dosyaların Yedeklenmesi

Uzak makinelerdeki yapılandırma dosyalarında değişiklik yapmanız gerektiğini varsayalım. Herhangi bir değişiklik yapmadan önce bu dosyaları alıp yedeklemek iyi bir uygulamadır.

---
- name: Back up nginx.conf before making changes
  hosts: web_servers
  tasks:
    - name: Fetch and back up nginx.conf
      fetch:
        src: /etc/nginx/nginx.conf
        dest: /home/ansible/nginx_backup/
        flat: no
    - name: Apply new Nginx configuration
      copy:
        src: /home/ansible/new_nginx.conf
        dest: /etc/nginx/nginx.conf

Bu örnekte:

  • Fetch modülü ilk olarak uzak bilgisayarlardan mevcut nginx.conf dosyasını yedekler.
  • Daha sonra kopyalama modülü kullanılarak uzak sunuculara yeni bir yapılandırma dosyası yüklenir.
Yazının orijinalini buradan okuyabilrsiniz.

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.