Ansible Inventory
Inventory, Ansible’ın hangi sunucularla/cihazlarla çalışacağını tanımladığımız listedir. Bu listede genellikle:
Sunucu (veya cihaz) isimleri,
IP adresleri veya tam alan adı (FQDN) bilgileri,
Hangi port üzerinden bağlanılacağı (SSH için 22, WinRM için farklı port vb.),
Bağlanılırken kullanılacak kullanıcı adı (user) ve bazen parola (ssh_pass) gibi bilgiler yer alır.
Ansible, bu bilgiler sayesinde her bir hedef sunucuya “agent” yüklemeye gerek kalmadan (yani “agentless”) uzaktan bağlanır ve gereken işlemleri yapar.
Varsayılan Inventory Dosyası
Ansible kurulduğunda, varsayılan olarak
/etc/ansible/hosts
dosyası “default inventory” kabul edilir.Eğer özel bir inventory oluşturmazsanız, Ansible komutları bu dosyadaki bilgileri okur.
Ancak ihtiyaca göre:
Proje klasörünüzde farklı bir
hosts
veyainventory
dosyası oluşturabilir,Ansible komutunu çalıştırırken
-i /path/to/myinventory
diyerek farklı bir inventory dosyası belirtebilirsiniz.
Basit Bir Inventory Örneği
INI-benzeri bir biçimde yazılır:
Köşeli parantez
[mail]
,[db]
,[web]
gibi “grup adları”dır.Gruplar, benzer roller üstlenen sunucuları bir arada toplar (ör. web sunucuları, veritabanı sunucuları).
Bir sunucu tek bir grupta olabileceği gibi birden çok grupta da bulunabilir.
Ansible Inventory Parametreleri
INI formatında, her satıra ek parametre ekleyerek sunucuya özel ayarları yapabilirsiniz. Örneğin:
ansible_host
: Hedef sunucunun IP adresini veya FQDN’ini belirtir. (Örn:192.168.1.10
veyaserver1.company.com
)ansible_connection
: Bağlantı türü (ssh
,winrm
,localhost
vb.)ssh
→ Linux sunucularwinrm
→ Windows sunucularlocalhost
→ Yerel makine (Ansible’ın çalıştığı makine)
ansible_user
: Bağlanırken kullanılacak kullanıcı adı (Linux için genelderoot
, ya da Ubuntu sunuculardaubuntu
vb.)ansible_port
: SSH için varsayılan 22’dir. Eğer farklı bir port kullanıyorsanız (ansible_port=2222
gibi) değiştirebilirsiniz.ansible_ssh_pass
: Parola yazabileceğiniz parametre. Tavsiye edilmez, çünkü metin olarak saklamak güvenlik zafiyeti yaratır. Daha iyisi SSH anahtarı (key-based authentication) kullanmak veya Ansible Vault ile parolayı şifrelemektir.
Bunlara “inventory parametreleri” diyoruz; her makineye özel ayarları ya satır sonuna ekleriz ya da group_vars/host_vars yapılarını kullanarak daha düzenli saklayabiliriz (ileri konular).
Neden Inventory Kullanıyoruz?
Kolay Yönetim Yüzlerce sunucunuz varsa, hepsini tek tek IP yazmak yerine gruplara ayırır ve playbook’larda sadece
[web]
,[db]
gibi grup adları kullanarak işlemleri hedeflersiniz.Agentless Olma Ansible, hedef sunucularda ayrı bir program (agent) kurmaya ihtiyaç duymaz. Sadece SSH (Linux) veya WinRM (Windows) bağlantısı yeterlidir.
Esneklik
Aynı inventory içindeki bazı makineler Linux, bazıları Windows olabilir.
İster IP ister domain name kullanabilirsiniz.
Parametrik Tanımlama
Her sunucuya özel kullanıcı, port, parola gibi ayarları tek satırda belirtebilirsiniz.
Daha da ileride,
group_vars
vehost_vars
adlı dizin yapılarıyla daha düzenli bir biçimde değişken tanımlayabilirsiniz.
Parola Konusu (ansible_ssh_pass)
Demo veya test amaçlı hızlı denemeler için
ansible_ssh_pass
kullanabilirsiniz.Güvenliğe önem verilen ortamlarda, genellikle:
SSH key-based authentication tercih edilir (Linux tarafında).
Windows tarafında ise, Kerberos veya güvenli yöntemlerle etkileşim yapılır.
Ya da Ansible Vault gibi bir mekanizma kullanarak parolaları şifreli bir dosyada saklayabilir, playbook çalışırken açabilirsiniz.
Kısa Özet
Inventory, Ansible’ın hangi sunucularla çalışacağını tanımlar.
Varsayılan dosya
/etc/ansible/hosts
olsa da, kendi özel inventory dosyanızı oluşturabilirsiniz.INI Formatı: Grup adlarını
[groupname]
şeklinde tanımlar, altına sunucu adreslerini yazarsınız.Alias ve Parametreler (örn.
ansible_host
,ansible_connection
,ansible_user
, vb.) sayesinde her sunucuya özel ayar girebilirsiniz.Basit şifre yerine anahtarsız (passwordless) SSH kullanmak veya Ansible Vault ile şifre saklamak güvenlik açısından önerilir.
Farklı Bir Inventory Dosyası Kullanmanın Yolları
Komut Satırında
-i
Parametresi ile Belirtmek En sık kullanılan yöntem budur. Playbook’u çalıştırırken şu şekilde yazarsınız:Böylece Ansible, varsayılan
/etc/ansible/hosts
yerine sizin belirttiğinizmy_inventory.ini
dosyasını kullanır.ansible.cfg
Dosyasında Belirtmek Projenizin kök dizininde (veya çalıştığınız herhangi bir dizinde)ansible.cfg
dosyanız varsa,[defaults]
bölümüne şu satırı ekleyebilirsiniz:Bu şekilde
ansible-playbook my_playbook.yaml
komutunu yazdığınızda, otomatik olarak bu inventory dosyası kullanılacaktır (başka bir-i
parametresi verilmediği sürece).Ortam Değişkeni (Environment Variable) Kullanmak Bir diğer alternatif, geçici veya kalıcı olarak
ANSIBLE_INVENTORY
değişkenini ayarlamaktır. Örneğin:Bu yöntemle de varsayılan envanter dosyası yerine sizin dosyanız kullanılır.
Kısa Özet
En Kolay Yol:
ansible-playbook -i <inventory_dosyası> <playbook.yml>
Kalıcı Yol:
ansible.cfg
içinde[defaults] inventory = <inventory_dosyası>
Geçici Yol:
ANSIBLE_INVENTORY
ortam değişkeni ayarlamak
Bu üç yöntemden hangisini seçtiğiniz, projeyi nasıl organize ettiğinize ve hangi ortamda çalıştığınıza göre değişir. Tek komutla sınamak isterseniz, en pratik olan -i
parametresidir.
Last updated
Was this helpful?