Inventory Formats

Ansible’da inventory, yönetmek istediğimiz sunucuların listesini tutan bir dosyadır. Bu dosyadaki format, INI veya YAML olabilir. Ansible’ın iki ana formatı desteklemesinin nedeni, farklı ölçek ve karmaşıklıktaki projelerin ihtiyacına göre esneklik sağlamaktır.

INI Formatı

  • Küçük Bir Startup Örneği:

    • Henüz birkaç sunucu (web, database vb.) yönetiliyor.

    • INI formatı burada temel bir organizasyon şeması gibi iş görüyor.

    • [web], [db] grupları açıp altlarına sunucularını yazarsınız.

  • Basit, Hızlı ve Kolay: Birkaç satırlık tanımla hemen çalışmaya hazır.

Örnek:

[web]
web_node1 ansible_host=web01.xyz.com ansible_connection=ssh ansible_user=ubuntu

[db]
sql_db1 ansible_host=sql01.xyz.com ansible_connection=ssh ansible_user=root

Bu yapı, küçük bir organizasyonu (ör. 2-3 makineden oluşan bir startup) rahatlıkla idare eder.

YAML Formatı

  • Büyük Bir Şirket (Multinational) Örneği:

    • Yüzlerce sunucunuz olabilir: ABD, Avrupa, Asya; web, db, cache, load balancer vb.

    • YAML formatı sayesinde alt gruplar ve çok katmanlı yapılar oluşturmak kolaylaşır.

    • Okunabilirlik ve hiyerarşik yapı (indentation) açısından avantajlıdır.

  • Daha Esnek ve Yapılandırılmış:

    • Gruplar içinde alt gruplar oluşturabilir, her sunucuya alias, port, özel parametreler ekleyebilirsiniz.

Örnek (YAML biçiminde):

Bu örnekte “web_nodes” ve “db_nodes” gibi alt gruplar, en üstteki “all” grubunun çocukları (children) olarak tanımlanmıştır. Çok daha karmaşık ortamlarda bölgelere, veri merkezlerine, rollere göre ayrım yapmak kolaylaşır.


1. Sunucuları ve Grupları YAML Formatında Tanımlama

Neden Bu Şekilde Yazıyoruz?

  1. allchildren

    • En tepede all grubu, onun altında “db_nodes”, “web_nodes”, “boston_nodes” vb. gibi alt grupları (children) tanımlıyoruz.

  2. db_nodes / web_nodes

    • Bu grupların altında, her bir makine “alias” ismiyle (sql_db1, web_node1 vb.) tanımlanıyor.

    • Hedef sunucunun gerçek adresi (ansible_host), bağlantı türü (ansible_connection), kullanıcı ve parola bilgileri burada giriliyor.

  3. boston_nodes / dallas_nodes

    • Burada sadece hosts alanında hangi alias’ların bu gruba dahil olduğunu yazıyoruz.

    • Çünkü sql_db1 ve web_node1 zaten üstte ayrıntılı parametreleriyle tanımlandı. Ansible, aynı alias’ı gördüğünde parametreleri birleştirerek yönetir.

  4. us_nodes

    • us_nodes doğrudan sunucuları değil, başka grupları (boston_nodes, dallas_nodes) children olarak referans gösteriyor.

    • Böylece ansible-playbook -i inventory.yaml -l us_nodes myplaybook.yml dendiğinde, otomatik olarak hem boston_nodes hem dallas_nodes altındaki tüm sunucular hedeflenir.


2. Nasıl Kullanılır?

  • Inventory Dosyası: Yukarıdaki içeriği /home/bob/playbooks/inventory (ya da inventory.yaml) dosyasında saklayın.

  • Playbook Çalıştırma (Örnek):

    Böylece db_nodes, web_nodes, boston_nodes, dallas_nodes, us_nodes gibi tanımladığınız tüm gruplar Ansible tarafından görülebilir.

  • Belirli Bir Gruba Hedeflemek:

    Bu komut, sadece db_nodes grubundaki (sql_db1, sql_db2) makinelerde çalışır.


Özet

  1. Alias ve Parametreler: ansible_host, ansible_connection, ansible_user, ansible_password (Linux için ssh, Windows için winrm vb.).

  2. Gruplar: db_nodes, web_nodes gibi doğrudan “hosts” tanımlı gruplar.

  3. Alt Gruplar: boston_nodes, dallas_nodes sunucu alias’larını yeniden listeler (parametreler yukarıdan birleştirilir).

  4. Üst Grup: us_nodes, “boston_nodes” ve “dallas_nodes” gruplarını children olarak içerir.

Bu şekilde, tabloda belirtilen tüm sunucu bilgileri (OS, kullanıcı, parola) bir YAML envanter dosyasında net bir şekilde temsil edilmiş olur.

Last updated

Was this helpful?