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/hostsdosyası “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
hostsveyainventorydosyası oluşturabilir,Ansible komutunu çalıştırırken
-i /path/to/myinventorydiyerek farklı bir inventory dosyası belirtebilirsiniz.
Basit Bir Inventory Örneği
INI-benzeri bir biçimde yazılır:
server1.company.com
server2.company.com
[mail]
server3.company.com
server4.company.com
[db]
server5.company.com
server6.company.com
[web]
server7.company.com
server8.company.comKöş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:
# Alias vererek
web1 ansible_host=server1.company.com ansible_connection=ssh ansible_user=root
db1 ansible_host=server2.company.com ansible_connection=winrm ansible_user=administratoransible_host: Hedef sunucunun IP adresini veya FQDN’ini belirtir. (Örn:192.168.1.10veyaserver1.company.com)ansible_connection: Bağlantı türü (ssh,winrm,localhostvb.)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 sunuculardaubuntuvb.)ansible_port: SSH için varsayılan 22’dir. Eğer farklı bir port kullanıyorsanız (ansible_port=2222gibi) 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_varsvehost_varsadlı 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_passkullanabilirsiniz.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/hostsolsa 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
-iParametresi ile Belirtmek En sık kullanılan yöntem budur. Playbook’u çalıştırırken şu şekilde yazarsınız:ansible-playbook -i /path/to/my_inventory.ini my_playbook.yamlBöylece Ansible, varsayılan
/etc/ansible/hostsyerine sizin belirttiğinizmy_inventory.inidosyasını kullanır.ansible.cfgDosyasında Belirtmek Projenizin kök dizininde (veya çalıştığınız herhangi bir dizinde)ansible.cfgdosyanız varsa,[defaults]bölümüne şu satırı ekleyebilirsiniz:[defaults] inventory = /path/to/my_inventory.iniBu şekilde
ansible-playbook my_playbook.yamlkomutunu yazdığınızda, otomatik olarak bu inventory dosyası kullanılacaktır (başka bir-iparametresi verilmediği sürece).Ortam Değişkeni (Environment Variable) Kullanmak Bir diğer alternatif, geçici veya kalıcı olarak
ANSIBLE_INVENTORYdeğişkenini ayarlamaktır. Örneğin:export ANSIBLE_INVENTORY=/path/to/my_inventory.ini ansible-playbook my_playbook.yamlBu 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.cfgiçinde[defaults] inventory = <inventory_dosyası>Geçici Yol:
ANSIBLE_INVENTORYortam 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?