Ansible : Ana Bilgisayarın Ulaşılabilir Olup Olmadığını Kontrol Edin

‌Ansible ping modülü, Ansible kontrol düğümü (oynatma kitaplarının ve komutların yürütüldüğü yer) ile yönetilen düğümler (yönetmek istediğiniz uzak sistemler) arasındaki bağlantıyı test etmek için kullanılır.

Bu Ansible modülü, Ansible’ın ana bilgisayarlarınızla iletişim kurabildiğini doğrulamanıza yardımcı olur, böylece erişilebilir olmalarını ve daha fazla otomasyon görevi için hazır olmalarını sağlar.
📋
ICMP pingi gerçekleştirmez, bunun yerine Ansible Python API’si aracılığıyla bağlantıyı kontrol eder.

Bu rehberde, ping modülünün ne olduğunu ve pratik örneklerle oyun kitaplarında nasıl kullanılacağını inceleyeceksiniz.

Ön koşullar

Bu eğitime devam etmek için aşağıdakilere ihtiyacınız olacak:

  • Ansible’ın kurulu ve yapılandırılmış olduğu bir Ansible yönetim düğümü.
  • Yönetim düğümü ile hedef düğümler arasında SSH anahtar tabanlı kimlik doğrulaması.

Ansible ping komut sözdizimi

Ansible’da ping komutunun kullanımı için temel sözdizimi şöyledir:

ansible <TARGET> -m ping [OPTIONS]

İşte bileşenlerin dökümü:

  • ansible: Ansible çalıştırılabilir komutu.
  • <TARGET>: Bu, tek bir ana bilgisayar adı, envanter dosyanızda tanımlanmış bir ana bilgisayar grubu veya joker karakterler veya envanter desenleri kullanan bir kombinasyon olabilir.
  • -m ping: Bu görev için kullanılacak ping modülünü belirtir.
  • [OPTIONS]: Örneklerde inceleyeceğimiz ping davranışını özelleştirmek için isteğe bağlı argümanlar.
  • -k: Kimlik doğrulama için kullanılacak SSH özel anahtar dosyasını belirtin.
  • --become: Ping işlemi için uzak ana bilgisayarda ayrıcalıkları farklı bir kullanıcıya yükseltin.
  • -v: Daha ayrıntılı çıktılar için ayrıntı düzeyini artırın.

Örnek 1: Tek bir ana bilgisayara ping atma

İstediğiniz hostname ile Ansible komutunu ve ping modülünü belirtmek için -m seçeneğini kullanabilirsiniz.

ansible host1 -m ping

Bu komut, host1 ile bir SSH bağlantısı kurmaya çalışır ve kullanılabilir bir Python yorumlayıcısının varlığını doğrular. Başarılı olursa, şu çıktıyı verir:

Ping a single host

Örnek 2: Bir grup ana bilgisayara ping atma

Envanter dosyanızda birden fazla sunucu ana bilgisayar adı içeren webservers adlı bir grup tanımladığınızı varsayalım. Bu durumda, envanter dosyasında tanımlanan tüm ana bilgisayarlara ping atmak için aşağıdaki komutu çalıştırabilirsiniz.

ansible webservers -m ping

Bu komut, web sunucuları grubundaki her sunucuya tek tek ping atmayı deneyecektir. Çıktıda, her sunucunun erişilebilirlik durumu görüntülenecektir.

Ping a group of hosts

Yukarıdaki komutun açıklaması şöyledir:

  • ansible: Ansible’ın ana komutu.
  • webservers: Envanter dosyanızda ping atmak istediğiniz ana bilgisayarları içeren grubun adı.
  • -m ping: Ansible’a ping modülünü kullanmasını söyler.

Ping sonuçlarına dayalı koşullu oynatma

Ping modülünün sonuçlarına göre koşullu olarak bir dizi görevi yürütmek için, Ansible’ın bloğunun ve when yapılarının bir kombinasyonunu kullanabilirsiniz.

Bu örnek, belirli ana bilgisayarlara ping atmanın başarılı olup olmadığına bağlı olarak bir playbookdakii görevlerin koşullu olarak nasıl çalıştırılacağını gösterir.

---
- hosts: webservers
  tasks:
    - name: Ping web servers
      ping:
      register: ping_result

    - name: Install Nginx only on reachable servers
      apt:
        name: nginx
        state: present
      when: 
        - ping_result is not failed
        - ping_result.ping == 'pong'

Yukarıdaki oynatma kitabı, Nginx’i kurmak için uygun görevin yalnızca ping’e yanıt veren sunucularda çalışmasını sağladığında koşulunu kullanır. Bu, erişilemeyen ana bilgisayarlarda gereksiz girişimleri önler.

Execute task based on ping result

Bağlantı sorunlarını ve yeniden denemeleri işleme

Ansible’daki ping modülüyle bağlantı sorunlarını ve yeniden denemeleri ele almak için, playbookdaki yeniden deneme, gecikme ve bitene kadar parametrelerinin bir kombinasyonunu kullanabilirsiniz. Bu yaklaşım, bir ana bilgisayar yanıt verene kadar her deneme arasında bir gecikmeyle birden çok ping denemenize olanak tanır.

Bunu Ansible playbookda nasıl ayarlayacağınız aşağıda açıklanmıştır:

- hosts: database_servers
  vars:
    ping_failed: []

  tasks:
    - name: Ping database server with retries
      ping:
      register: ping_result
      until: ping_result is succeeded
      retries: 3
      delay: 5  # Wait 5 seconds between retries
      ignore_errors: yes  # Ensure the task does not fail the play on the first failure

    - name: Collect ping results
      set_fact:
        ping_failed: "{{ ping_failed + [inventory_hostname] }}"
      when: ping_result is failed

    - name: Fail the playbook if any ping fails after retries
      fail:
        msg: "Failed to reach the following database servers after retries: {{ ping_failed }}"
      when: ping_failed | length > 0

Bu örnek, database_servers grubundaki her sunucu için ping’i üç kez yeniden dener. Pinglerden hiçbiri başarılı olmazsa, playbook bilgilendirici bir mesajla başarısız olur.

Handle connection issue and retries

Ulaşılabilir sunucularda bilgi toplama

Ping modülü, ana bilgisayar bağlantısını kontrol etmek ve ulaşılabilir ana bilgisayarlardan değerleri toplamak için bilgi toplama ile birlikte kullanılabilir.:

---
- hosts: all
  gather_facts: yes  # Gather facts from all hosts

  tasks:
    - name: Collect facts from reachable hosts
      ping:
      register: ping_result  # Register the result of the ping task

    - name: Display OS information of reachable hosts
      debug:
        msg: "OS Name: {{ ansible_os_family }} {{ ansible_distribution }}"
      when: ping_result.ping == "pong"  # Only display facts for reachable hosts

Bu playbook tüm ana bilgisayarlardan değerleritoplar ve ardından işletim sistemi bilgilerini (aile ve dağıtım) yalnızca ping’e yanıt verenler için görüntüler.

Collect facts from reachable hosts

 

 

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.