Dynamic Inventory
1. Neden statik yetmez?
Küçük lab’da 3‐5 makine →
hosts
dosyasına elle yaz, bitti.AWS / GCP’de onlarca VM otomatik açılıp kapanıyor → IP’ler, etiketler sürekli değişiyor.
Elle güncellemek hem zor hem hata davetiyesi.
“Ansible play çalıştı ama makineyi bulamadı” 😖
2. Dinamik envanter nasıl çalışır?
Kaynak (CMDB, bulut API, kendi servisiniz) → JSON veya YAML olarak host listesi döndürür.
Envanter eklentisi (plugin) veya envanter script’i bu listeyi üretir.
ansible-playbook -i <kaynak>
çağırınca Ansible önce bu kaynağı okur, sonra playbook’u uygular.
3. En basit demo – mini Python script
inventory.py
:
#!/usr/bin/env python3
import argparse, json, sys
inv = {
"web_servers": { "hosts": ["web1", "web2"] },
"_meta": {
"hostvars": {
"web1": { "ansible_host": "10.0.0.11" },
"web2": { "ansible_host": "10.0.0.12" }
}
}
}
parser = argparse.ArgumentParser()
parser.add_argument('--list', action='store_true')
parser.add_argument('--host')
args = parser.parse_args()
if args.list:
print(json.dumps(inv))
elif args.host:
print(json.dumps(inv['_meta']['hostvars'].get(args.host, {})))
else:
sys.exit(1)
Kullanım:
chmod +x inventory.py
./inventory.py --list # tüm envanter JSON
./inventory.py --host web1 # tek host detay
ansible-playbook site.yml -i inventory.py # play’i koş
Önemli: Script mutlaka
--list
ve--host
argümanlarını anlamalı, çıktı JSON olmalı.
4. “Ben script yazmak istemiyorum” dersen → Inventory Plugin’leri
AWS EC2
amazon.aws.aws_ec2
plugin
(eski ec2.py
script’i)
pip install amazon.aws
veya Ansible Collection
ansible-playbook site.yml -i aws_ec2.yml
GCP
google.cloud.gcp_compute
pip install google.cloud
ansible-inventory -i gcp_compute.yml --graph
VMware
community.vmware.vmware_inventory
pip install community.vmware
Kullanım benzer
5. YAML envanter dosyası (statik ama daha okunur)
all:
children:
web_servers:
hosts:
web1:
ansible_host: 10.0.0.11
web2:
ansible_host: 10.0.0.12
Bunu -i inventory.yml
ile kullanırsın; plugin otomatik yaml
’dır.
6. Envanteri test etmek: ansible-inventory
ansible-inventory -i inventory.py --list -y # İnsan okuyabilir YAML
ansible-inventory -i aws_ec2.yml --graph # Grup ağacını çiz
Debug sırasında “Bu variable nereden gelmiş?” diyorsan en hızlı yol.
AWS EC2 için Dinamik Envanter
1. Gerekli paketleri kur
pip install boto3 botocore # AWS Python SDK
ansible-galaxy collection install amazon.aws
amazon.aws
koleksiyonu içinde aws_ec2 envanter plug-in’i geliyor. docs.ansible.com
2. AWS kimlik bilgilerini ayarla
En kolay yol: çevre değişkenleri (terminalde bir kere yaz, sonra playbook öncesi aynı shell’i kullan):
export AWS_ACCESS_KEY_ID=AKIAXXXXXXXX
export AWS_SECRET_ACCESS_KEY=abcd1234xxxxxxxx
export AWS_DEFAULT_REGION=eu-central-1 # Frankfurt örneği
3. Envanter dosyasını oluştur (YAML)
aws_ec2.yml
ismi önemli — dosya adı “aws_ec2.(yml|yaml)” olunca Ansible plug-in’i otomatik seçer. stackoverflow.com
plugin: amazon.aws.aws_ec2 # plug-in’in tam adı
regions:
- eu-central-1 # istersen birden çok
filters: # sadece etiket “Role = web” olan EC2’leri çek
tag:Role: web
keyed_groups: # host'ları otomatik gruplandır
- prefix: aws_region # örnek: aws_region_eu_central_1
key: placement.region
Dosyayı proje köküne (veya inventory/
altına) koy.
4. Çıktıyı test et (debug)
ansible-inventory -i aws_ec2.yml --list -y # tüm host & değişkenler
ansible-inventory -i aws_ec2.yml --graph # grup ağacı
Bu komut, plug-in’in AWS API’ye bağlanıp canlı envanteri çektiğini gösterir. Sorun varsa burada görürsün. docs.ansible.com
5. Playbook’u çalıştır
ansible-playbook -i aws_ec2.yml site.yml
Playbook’taki
hosts:
kısmınaaws_region_eu_central_1
veyaweb
gibi dinamik grupları yazabilirsin.Ansible her çalıştırmada API’den güncel listeyi çeker; yeni VM eklendiğinde ekstra iş yok.
Sık Sorulanlar
“Plugin’i göremiyorum”
`ansible-galaxy collection list
Proxy/VPC yüzünden API’ye ulaşamıyor
AWS CLI ile aws ec2 describe-instances
komutu çalışıyorsa Ansible da çalışır; önceliği orada debug et.
Birden çok etiketle filtre?
filters: { tag:Environment: prod, tag:Role: web }
YAML sözlüğü olarak ekleyebilirsin.
Dosyayı neden INI değil?
aws_ec2 plug-in sadece YAML/içerik okur; INI yalnız statik envanter içindir.
Özet
amazon.aws koleksiyonunu kur.
AWS kimlik bilgilerini ENV’e koy.
aws_ec2.yml
içindeplugin: amazon.aws.aws_ec2
satırını yaz, gerekli filtreleri ekle.ansible-inventory -i aws_ec2.yml --list
ile test et.ansible-playbook -i aws_ec2.yml ...
→ dinamik envanter hazır.
Last updated
Was this helpful?