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=rootBu 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):
all:
children:
web_nodes:
hosts:
web_node1:
ansible_host: web01.xyz.com
ansible_user: ubuntu
web_node2:
ansible_host: web02.xyz.com
ansible_user: ubuntu
db_nodes:
hosts:
sql_db1:
ansible_host: sql01.xyz.com
ansible_user: rootBu ö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
all:
children:
db_nodes:
hosts:
sql_db1:
ansible_host: sql01.xyz.com
ansible_connection: ssh
ansible_user: root
ansible_password: Lin$Pass
sql_db2:
ansible_host: sql02.xyz.com
ansible_connection: ssh
ansible_user: root
ansible_password: Lin$Pass
web_nodes:
hosts:
web_node1:
ansible_host: web01.xyz.com
ansible_connection: winrm
ansible_user: administrator
ansible_password: Win$Pass
web_node2:
ansible_host: web02.xyz.com
ansible_connection: winrm
ansible_user: administrator
ansible_password: Win$Pass
web_node3:
ansible_host: web03.xyz.com
ansible_connection: winrm
ansible_user: administrator
ansible_password: Win$Pass
boston_nodes:
hosts:
# Bu grup, 'sql_db1' ve 'web_node1' makine alias'larını içeriyor.
sql_db1: {}
web_node1: {}
dallas_nodes:
hosts:
# Bu grup, 'sql_db2', 'web_node2' ve 'web_node3' alias'larını içeriyor.
sql_db2: {}
web_node2: {}
web_node3: {}
us_nodes:
children:
# 'us_nodes' grubu, 'boston_nodes' ve 'dallas_nodes' gruplarını alt grup (children) olarak tutar.
boston_nodes:
dallas_nodes:Neden Bu Şekilde Yazıyoruz?
all→childrenEn tepede
allgrubu, onun altında “db_nodes”, “web_nodes”, “boston_nodes” vb. gibi alt grupları (children) tanımlıyoruz.
db_nodes / web_nodes
Bu grupların altında, her bir makine “alias” ismiyle (
sql_db1,web_node1vb.) tanımlanıyor.Hedef sunucunun gerçek adresi (
ansible_host), bağlantı türü (ansible_connection), kullanıcı ve parola bilgileri burada giriliyor.
boston_nodes / dallas_nodes
Burada sadece
hostsalanında hangi alias’ların bu gruba dahil olduğunu yazıyoruz.Çünkü
sql_db1veweb_node1zaten üstte ayrıntılı parametreleriyle tanımlandı. Ansible, aynı alias’ı gördüğünde parametreleri birleştirerek yönetir.
us_nodes
us_nodesdoğ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.ymldendiğ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 dainventory.yaml) dosyasında saklayın.Playbook Çalıştırma (Örnek):
ansible-playbook -i /home/bob/playbooks/inventory my_playbook.ymlBöylece
db_nodes,web_nodes,boston_nodes,dallas_nodes,us_nodesgibi tanımladığınız tüm gruplar Ansible tarafından görülebilir.Belirli Bir Gruba Hedeflemek:
ansible-playbook -i /home/bob/playbooks/inventory my_playbook.yml -l db_nodesBu komut, sadece
db_nodesgrubundaki (sql_db1,sql_db2) makinelerde çalışır.
Özet
Alias ve Parametreler:
ansible_host,ansible_connection,ansible_user,ansible_password(Linux içinssh, Windows içinwinrmvb.).Gruplar:
db_nodes,web_nodesgibi doğrudan “hosts” tanımlı gruplar.Alt Gruplar:
boston_nodes,dallas_nodessunucu alias’larını yeniden listeler (parametreler yukarıdan birleştirilir).Ü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?