Ansible Facts

Bu bilgilerle, bir playbook çalıştırıldığında Ansible’ın hedef makineler (host’lar) hakkında nasıl sistem bilgisi topladığını ve bu bilgileri nasıl kullanabileceğinizi öğreneceksiniz.

1. Ansible Facts Nedir?

Ansible Facts, Ansible’ın her playbook çalıştığında hedef makinelerden (host’lardan) otomatik olarak topladığı sistem bilgileridir. Örneğin:

  • İşletim sistemi (distribution, versiyon, vb.)

  • Sistem mimarisi (32-bit mi, 64-bit mi?)

  • Ağ arayüzleri (ip adresleri, MAC adresleri, vb.)

  • Bellek (memory), disk, CPU gibi donanım detayları

  • Makinenin tam adı (FQDN), tarih/saat bilgisi, vs.

Bu bilgiler Ansible tarafından, setup isimli özel bir modül aracılığıyla toplanır. Her host için ayrı ayrı toplanan bu bilgiler, ansible_facts adlı değişkenin içinde saklanır.

2. Basit Bir Örnek: ansible_facts Değişkenini Yazdırmak

Aşağıdaki örnek playbook’ta sadece debug modülüyle ansible_facts adlı değişkeni ekrana bastırıyoruz:

---
- name: Print Ansible Facts
  hosts: all
  tasks:
    - debug:
        var: ansible_facts

Ne olur?

  1. Playbook başladığında, Ansible her host için otomatik olarak facts toplar (TASK [Gathering Facts]).

  2. Sonra debug modülü, ansible_facts değişkenini ekrana basar.

  3. Çıktıda “architecture”, “distribution”, “ansible_facts.interfaces” gibi pek çok bilgi göreceksiniz.

Örnek Kısa Çıktı:

"ansible_facts": {
  "distribution": "Ubuntu",
  "distribution_version": "16.04",
  "all_ipv4_addresses": [
    "192.168.56.101"
  ],
  "machine": "x86_64",
  ...
}

Bu şekilde, host’un işletim sistemi, IP adresi, donanım bilgisi vb. her şeyi görebilirsiniz.

3. Fact Toplama (Gathering Facts) Nasıl ve Neden Otomatik Olur?

Standart Ansible davranışında, playbook’ta hiçbahsetmeseniz bile, her host’a ilk bağlandığında bir “setup” görevi çalıştırır. Bu görevin çıktısı ansible_facts olarak depolanır. Örneğin:

- name: Print hello message
  hosts: all
  tasks:
    - debug:
        msg: "Hello from Ansible!"

Playbook’ta tek görev olsa bile, playbook çıktısında iki görev görürsünüz:

  1. TASK [Gathering Facts]

  2. TASK [debug]

Çünkü Ansible, setup modülünü otomatik çağırarak facts toplar.

4. Facts Kullanarak Dinamik Yapılandırma

Toplanan bu bilgiler, playbook’larınızı daha akıllı ve dinamik yapmaya yarar. Örneğin:

  • İşletim sistemine göre paket kurma (“Ubuntu ise apt, CentOS ise yum kullan” şeklinde).

  • Disklerinizin boyutuna göre bir mantık.

  • İnterface adlarına göre ağ ayarları yapma.

Hepsinde ansible_facts altındaki verilerden yararlanabilirsiniz.

5. Facts’i Kapatmak (gather_facts: no)

Eğer playbook’ta bu bilgilere hiç ihtiyacınız yoksa veya her seferinde toplanması gerekmiyorsa:

---
- name: Print hello message without gathering facts
  hosts: all
  gather_facts: no
  tasks:
    - debug:
        var: ansible_facts

Bu durumda “TASK [Gathering Facts]” aşaması oluşmaz ve ansible_facts boş ({}) döner. Böylece zaman kazandırabilir, gereksiz network trafiğinden kaçınabilirsiniz.

6. Ansible.cfg’deki Ayarlar

/etc/ansible/ansible.cfg içinde gathering parametresi vardır:

  • implicit (varsayılan): Otomatik fact toplar. İsterseniz gather_facts: no diyerek kapatabilirsiniz.

  • explicit: Otomatik toplamaz, gather_facts: yes demeniz gerekir.

  • smart: Bir kez toplar, sonra tekrar toplamaz gibi optimize davranış.

Playbook’taki ayar (gather_facts: no veya yes) her zaman konfigürasyondaki değerin üzerindedir (daha yüksek öncelik).

7. Neden Bazı Host’ların Facts Verisi Yok?

Ansible sadece playbook’un hedef aldığı host’lar için fact toplar. Örneğin envanterinizde web1, web2 var ama playbook’u sadece hosts: web1 derseniz, web2 için hiç bir facts toplanmaz. Bu nedenle web2 üzerinde ansible_facts “tanımsız” olabilir.

8. Özet

  • Facts, Ansible’ın otomatik topladığı kapsamlı sistem bilgileri (ansible_facts).

  • Varsayılan: Otomatik olarak toplanır (gather_facts: yes).

  • Kullanım: ansible_facts içindeki alanlar (ör. ansible_facts['distribution'], ansible_facts.network_interfaces vb.) ile koşullu mantıklar, dinamik konfigürasyon yapabilirsiniz.

  • Kapatmak: gather_facts: no ile kapatarak performans artırabilirsiniz (host bilgisine gerek yoksa).

Bu şekilde Ansible Facts ile sistemlerinizi daha akıllı yöneten playbook’lar hazırlayabilir, farklı OS/donanım senaryolarına dinamik şekilde uyum sağlayabilirsiniz.

Last updated

Was this helpful?