8 Temmuz 2025 Salı

Ansible ile kullanabileceğimiz temel eklentiler, özellikler


Lookup Plug-in Nedir?

Lookup plug-in (eklenti), Ansible içinde Jinja2 şablonlama dili ile çalışan bir uzantıdır. Bu eklentiler sayesinde:

  • Dosyalardan,

  • Komut çıktılarından,

  • URL’lerden,

  • Ortam değişkenlerinden,

  • Kubernetes API gibi harici sistemlerden veri çekebiliriz.


🔧 Lookup ve Query Fonksiyonları

Ansible’da lookup plug-in’leri iki şekilde çağırabiliriz:

1. lookup() Fonksiyonu

Bu fonksiyon dış kaynaktan veri çeker ve sonucu virgülle ayırarak düz bir string (metin) olarak verir.

yaml
vars: hosts: "{{ lookup('ansible.builtin.file', '/etc/hosts', '/etc/resolv.conf') }}"

📌 Bu ifade, her iki dosyanın içeriğini tek bir metin olarak virgülle ayırarak hosts değişkenine atar.


2. query() Fonksiyonu

lookup() ile benzer çalışır ama liste (list) olarak sonuç döndürür. Yani işlemek daha kolay olur.

yaml
vars: hosts: "{{ query('ansible.builtin.file', '/etc/hosts', '/etc/resolv.conf') }}"

Bu ifade şu sonucu döndürür:

yaml
hosts: - "…/etc/hosts içeriği…" - "…/etc/resolv.conf içeriği…"

📂 Dosya İçeriği Okuma (file Plug-in’i)

Dosya içeriğini okumak için ansible.builtin.file plug-in’i kullanılır:

yaml
my_yaml: "{{ lookup('ansible.builtin.file', '/path/to/my.yaml') | from_yaml }}"

Bu şekilde YAML dosyası otomatik olarak sözlük (dict) haline getirilir.

📌 Dikkat: Dosya, playbook çalıştığı ortamda olmalı (execution environment). Eğer ansible-navigator ile --ee false kullanılırsa, kontrol nodu olur.


🔑 Örnek: Public Key Eklemek

yaml
- name: Add authorized keys hosts: all vars: users: - remzi - admin tasks: - name: Add authorized keys ansible.posix.authorized_key: user: "{{ item }}" key: "{{ lookup('ansible.builtin.file', item + '.key.pub') }}" loop: "{{ users }}"

Bu örnekte remzi.key.pub ve admin.key.pub dosyaları okunur ve ilgili kullanıcıya atanır.


🧠 Lookup Yerine slurp Kullanımı (Uzak Dosyalar)

Eğer dosya hedef (managed) host üzerindeyse slurp modülü kullanılır:

yaml
- name: Collect file content ansible.builtin.slurp: src: /home/user/.ssh/id_rsa.pub register: slurped_file - name: Decode and use vars: pub_key: "{{ slurped_file.content | b64decode }}" ansible.builtin.debug: var: pub_key

📝 Template Dosyası Okuma

Eğer dosya bir Jinja2 şablonu ise template plug-in’i ile işlenir:

yaml
msg: "{{ lookup('ansible.builtin.template', 'my.template.j2') }}"

Şablon içeriği örneğin şöyle olabilir:

nginx
Hello {{ name }}.

name: class olduğunda çıktı: Hello class. olur.

🔸 template plug-in’i ile template modülü farklı şeylerdir.


🖥 Komut Çıktısı Okuma (pipe ve lines)

Ansible içinden komut çalıştırıp çıktı almak için:

pipe: Çıktıyı tek string olarak döner

yaml
{{ query('ansible.builtin.pipe', 'ls files') }}

lines: Çıktıyı satır satır liste döner

yaml
{{ query('ansible.builtin.lines', 'ls files') }}

🌐 URL'den Veri Çekme

Bir URL içeriğini almak için:

yaml
{{ lookup('ansible.builtin.url', 'https://my.site.com/my.file') }}

Bu veri JSON/YAML filtreleriyle işlenebilir.


☸️ Kubernetes Verisi Alma

Kubernetes’ten veri almak için:

yaml
{{ lookup('kubernetes.core.k8s', kind='Deployment', namespace='ns', resource_name='my_res') }}

Bu plug-in okuma içindir. Güncelleme işlemleri için k8s modülü kullanılır.


🧩 Özel Lookup Plug-in Yazmak

Kendi lookup plug-in’lerinizi Python ile yazıp aşağıdaki dizinlerden birine koyarak kullanabilirsiniz:

  • lookup_plugins/

  • filter_plugins/

  • Collection kullanıyorsanız plugins/lookup/


⚠️ Hatalarla Baş Etme

Varsayılan olarak bir dosya bulunamazsa lookup hata verir. Ama bu davranışı değiştirebilirsiniz:

yaml
{{ lookup('ansible.builtin.file', 'my.file', errors='warn') }}
  • strict: Hata varsa durur (varsayılan)

  • warn: Uyarı verir, boş değer döner

  • ignore: Sessizce devam eder


📚 Referanslar

Hiç yorum yok:

Yorum Gönder

Ansible automation platform kurarken dikkat edilmesi gereken noktalar

 1. iç ortamamınızda kullanılacak aap için yerel sertifikalar üretilmeli. Aşağıdaki script kullanılabilir. https://github.com/linuxliste/ara...