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?

  1. Kaynak (CMDB, bulut API, kendi servisiniz) → JSON veya YAML olarak host listesi döndürür.

  2. Envanter eklentisi (plugin) veya envanter script’i bu listeyi üretir.

  3. 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:

Önemli: Script mutlaka --list ve --host argümanlarını anlamalı, çıktı JSON olmalı.

4. “Ben script yazmak istemiyorum” dersen → Inventory Plugin’leri

Platform
Plugin/Script
Nasıl kurulur?
Örnek çağrı

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)

Bunu -i inventory.yml ile kullanırsın; plugin otomatik yaml’dır.

6. Envanteri test etmek: ansible-inventory

Debug sırasında “Bu variable nereden gelmiş?” diyorsan en hızlı yol.


AWS EC2 için Dinamik Envanter


1. Gerekli paketleri kur

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):


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

Dosyayı proje köküne (veya inventory/ altına) koy.


4. Çıktıyı test et (debug)

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

  • Playbook’taki hosts: kısmına aws_region_eu_central_1 veya web 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

Soru
Cevap

“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

  1. amazon.aws koleksiyonunu kur.

  2. AWS kimlik bilgilerini ENV’e koy.

  3. aws_ec2.yml içinde plugin: amazon.aws.aws_ec2 satırını yaz, gerekli filtreleri ekle.

  4. ansible-inventory -i aws_ec2.yml --list ile test et.

  5. ansible-playbook -i aws_ec2.yml ... → dinamik envanter hazır.

Last updated

Was this helpful?