14 Eylül 2025 Pazar

🚴 Yeni Başlayanlar İçin Elektrikli Bisiklet Yapım Kılavuzu (2025) - Beginner’s Guide to Building an Electric Bike (2025) 🚴

🚴 Yeni Başlayanlar İçin Elektrikli Bisiklet Yapım Kılavuzu (2025)

🚴 Yeni Başlayanlar İçin Elektrikli Bisiklet Yapım Kılavuzu (2025)

Yaklaşık iki yıllık elektrikli bisiklet yapım tecrübemle, yeni başlayanların en sık yaptığı hataları ve dikkat edilmesi gereken noktaları paylaşmak istiyorum. Amaç, yanlış seçimler yüzünden gereksiz masraf ve zaman kayıplarını önlemek.

1. Kadro Seçimi

  • Disk frenle uyumlu olmalı
  • Orta kısımda motor ve pil için boşluk olmalı
  • Çelik veya sağlam alaşım kadro daha dayanıklıdır

2. Motor Seçimi

Kullanım Alanı Motor Gücü Not
Şehir içi, düz yollar 250W – 500W Türkiye'de yasal sınır 250W / 25 km/s
Hafif yokuş, uzun turlar 500W – 750W Orta seviye kullanım
Dik yokuş, dağlık alanlar 750W – 1000W Örn: Bafang BBSHD 1000W

3. Pil Seçimi

Motor Gücü Minimum Pil İdeal Pil Not
250W 250W 400W Şehir içi için yeterli
500W 500W 800W Uzun menzil avantajlı
1000W 1000W 1500–1700W BBSHD kısa süreli 1764W çekebilir
Kaliteli hücreler: Samsung, LG, Panasonic
Voltaj: 48V yaygın, 52V daha verimli ama şarj cihazı uyumluluğunu kontrol edin

4. Jant ve Göbek

  • 36 delikli göbek ve sağlam telleri kullanın
  • Normal bisiklet telleri kolay kırılır
  • Arka göbek dayanıklı olmalı

5. Lastik Seçimi

Lastik Türü Hız Sınırı Uygunluk
Normal bisiklet lastiği 25 km/h ❌ Güvenli değil
E-Bike lastiği (E25) 25 km/h ✅ Şehir içi
E-Bike lastiği (E50) 50 km/h ✅ Uzun mesafe, yüksek hız

6. Güvenlik

  • Korna: Trafikte şart
  • Ayna: Motosiklet aynası uyarlanabilir
  • Aydınlatma: Ön/arka LED far
  • Frenler: 500W+ için hidrolik disk fren
  • Koruma: Kask, eldiven, dizlik

7. Yedek Parça ve Bakım

  • Zincir, dişliler, fren balataları hızlı aşınır
  • E-bike uyumlu zincir kullanın
  • Düzenli bakım yapın
Sonuç: Elektrikli bisiklet yapmak keyifli ama dikkat isteyen bir iş. Yanlış parçalar hem güvenliği hem de bütçenizi olumsuz etkiler.
👉 En önemli tavsiyem: Ucuza kaçmayın. Kaliteli parçalar daha pahalı olabilir ama uzun vadede daha güvenli ve ekonomik olacaktır.

🚴 Beginner's Guide to Building an Electric Bike (2025)

With about two years of experience in building electric bikes, I want to share the most common mistakes beginners make and the key points to consider. The goal is to avoid unnecessary costs and wasted time due to wrong choices.

1. Frame Selection

  • Must be compatible with disc brakes
  • Should have enough space for motor and battery
  • Steel or strong alloy frames are more durable

2. Motor Choice

Usage Area Motor Power Notes
City rides, flat roads 250W – 500W Legal limit in Turkey is 250W / 25 km/h
Light hills, long rides 500W – 750W Mid-level usage
Steep hills, mountains 750W – 1000W Example: Bafang BBSHD 1000W

3. Battery Selection

Motor Power Minimum Battery Ideal Battery Notes
250W 250W 400W Enough for city use
500W 500W 800W Good for longer range
1000W 1000W 1500–1700W BBSHD can pull up to 1764W
Quality cells: Samsung, LG, Panasonic
Voltage: 48V is common, 52V is more efficient but check charger compatibility

4. Rims & Hubs

  • Use 36-hole hubs and strong spokes
  • Regular spokes break easily
  • Rear hub must be durable

5. Tires

Tire Type Speed Rating Suitability
Regular bicycle tire 25 km/h ❌ Not safe
E-Bike tire (E25) 25 km/h ✅ City rides
E-Bike tire (E50) 50 km/h ✅ Long distance, higher speed

6. Safety

  • Horn: Essential in traffic
  • Mirrors: Motorcycle mirrors can be adapted
  • Lights: Front and rear LED lights
  • Brakes: Hydraulic disc brakes for 500W+
  • Protection: Helmet, gloves, knee pads

7. Spare Parts & Maintenance

  • Chains, cogs, brake pads wear out fast
  • Use e-bike compatible chains
  • Perform regular maintenance
Conclusion: Building an e-bike is fun but requires attention. Wrong parts can hurt both your safety and your budget.
👉 My main advice: Don't go cheap. Good components may cost more, but they are safer and more economical in the long run.

19 Ağustos 2025 Salı

Redis, Valkey vs. Dragonfly

🚀 Redis vs Valkey vs Dragonfly: 2025'te Hangi In-Memory Database Seçilmeli?

📊 Hızlı Özet

Linux tabanlı sistemlerde yüksek performans ve HA arıyorsanız:

  • Dragonfly: 25x daha hızlı, %38 daha az bellek kullanımı
  • Valkey: Tam açık kaynak, Redis'ten 3x daha hızlı
  • Redis: En geniş özellik seti, karmaşık lisanslama

1. Genel Bakış ve Temel Özellikler

Redis

  • 15+ Yıllık Olgun Teknoloji
  • Karmaşık Lisans

Valkey

  • 2024 Redis Fork'u
  • Açık Kaynak

Dragonfly

  • 2022 Modern Mimari
  • En Hızlı

🔑 Anahtar Farklılıklar:

  • Redis: Single-threaded, AGPLv3/SSPLv1/RSALv2 lisans
  • Valkey: Enhanced I/O threading, BSD 3-clause lisans, Linux Foundation desteği
  • Dragonfly: Multi-threaded shared-nothing, BSL lisans, Redis/Memcached uyumlu

2. 📈 Performans Karşılaştırması

Throughput (Saniyedeki İşlem Sayısı)

Sistem 16 vCPU 32 vCPU 48 vCPU Notlar
Redis 8.0 ~400K RPS ~500K RPS ~600K RPS Limited scaling
Valkey 8.1 1.19M RPS 1.5M RPS 1.8M RPS 3x Redis
Dragonfly 2.85M RPS 6.75M RPS 8.1M RPS Linear scaling

Latency (Gecikme Süreleri)

Sistem P50 P99 P99.9
Redis <1ms 2-3ms 5-10ms
Valkey <1ms 1-2ms 3-7ms
Dragonfly <0.5ms <1ms 2-5ms

⚡ CPU-Yoğun İşlemler (ZADD Benchmark)

48 vCPU sistemde sorted set işlemleri:

  • Redis/Valkey: ~280K ops/sec
  • Dragonfly: ~8.1M ops/sec (29x daha hızlı!)

3. 💾 Bellek Verimliliği

Sistem 100M Anahtar Anahtar Başına Tasarruf
Redis 24.5 GB 245 byte Baseline
Valkey 8.1 22 GB 220 byte %10 tasarruf
Dragonfly 17 GB 170 byte %38 tasarruf

📸 Snapshotting Karşılaştırması:

  • Redis/Valkey: Copy-on-Write kullanır, %25-50 ekstra RAM spike
  • Dragonfly: Versioning tabanlı, bellek spike'ı YOK ✅

4. 📄 JSON Desteği Detaylı Karşılaştırma

JSON Özelliği Redis 8.0 Valkey Dragonfly
Native JSON ✅ Core'da ❌ Modül gerekli ✅ Native
JSONPath Sorguları ✅ (modül ile)
JSON Indexing ✅ (modül ile)
Kurulum Kolaylığı Otomatik Manuel Otomatik

Valkey JSON Modülü Kurulumu:

git clone https://github.com/valkey-io/valkey-json
cd valkey-json
./build.sh

# valkey.conf dosyasına ekle:
loadmodule /path/to/libjson.so

# Veya runtime'da yükle:
MODULE LOAD /path/to/libjson.so

5. 🛡️ High Availability Özellikleri

HA Özelliği Redis Valkey Dragonfly
Otomatik Failover ✅ Sentinel/Cluster ✅ Geliştirilmiş ✅ Operator/Sentinel
Failover Süresi 10-30 saniye 5-15 saniye 10-20 saniye
Slot Migration Manuel/Yavaş Otomatik/Hızlı Manuel/Hızlı
Dual-Channel Replication ✅ v8.0+

6. 💰 Maliyet Analizi (AWS/GCP)

Senaryo: 100M anahtar, 1M RPS workload

Sistem Gereken Instance Aylık Maliyet Tasarruf
Redis Cluster 6x r7g.2xlarge ~$1,800 Baseline
Valkey 2x r7g.4xlarge ~$1,200 %33 tasarruf
Dragonfly 1x r7g.4xlarge ~$600 %66 tasarruf

7. 🎯 Hangi Durumda Hangisini Seçmeli?

✅ Redis'i Seçin Eğer:

  • Maksimum özellik seti gerekiyorsa (Native JSON, Vector Search, Time Series)
  • Mevcut Redis module'leri kullanılıyorsa
  • Enterprise support kritikse
  • Ekip Redis konusunda çok deneyimliyse

✅ Valkey'i Seçin Eğer:

  • Açık kaynak lisans kritikse (BSD)
  • Redis uyumluluğu önemliyse (%99+)
  • Linux Foundation desteği istiyorsanız
  • Orta-yüksek performans yeterliyse
  • JSON desteği modül olarak yeterliyse

✅ Dragonfly'ı Seçin Eğer:

  • Maksimum performans gerekiyorsa (25x)
  • Minimum maliyet hedefleniyorsa
  • Native JSON desteği önemliyse
  • Modern multi-threaded mimari istiyorsanız
  • Linear CPU scaling gerekiyorsa

8. 💪 Güçlü ve Zayıf Yönler

Redis

✅ Güçlü Yönler:

  • En geniş ekosistem
  • Native JSON, Vector Search
  • Olgun kod tabanı

❌ Zayıf Yönler:

  • Single-threaded darboğaz
  • Karmaşık lisanslama
  • Yüksek bellek kullanımı

Valkey

✅ Güçlü Yönler:

  • Tam açık kaynak
  • 3x Redis performansı
  • AWS, Google desteği

❌ Zayıf Yönler:

  • JSON modül gerekli
  • Vector Search yok
  • Henüz yeni (1 yıl)

Dragonfly

✅ Güçlü Yönler:

  • 25x performans
  • %38 daha az bellek
  • Native JSON

❌ Zayıf Yönler:

  • Küçük ekosistem
  • Module desteği yok
  • BSL lisansı

9. 🐧 Linux Production Optimizasyonları

# Kernel parametreleri (tüm sistemler için)
echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
echo 'net.core.somaxconn = 65535' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_max_syn_backlog = 65535' >> /etc/sysctl.conf
sysctl -p

# Transparent Huge Pages kapatma
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# ulimits ayarları
ulimit -n 65535 # file descriptors

10. 📊 Sonuç ve Tavsiyeler

🏆 Final Öneriler:

1️⃣ Birinci Tercih: Valkey

  • ✅ Açık kaynak garantisi (BSD lisans)
  • ✅ Redis uyumluluğu %99+
  • ✅ Dengeli performans/özellik
  • ✅ Linux Foundation desteği

2️⃣ İkinci Tercih: Dragonfly

  • ✅ Maksimum performans gerekiyorsa
  • ✅ Minimum maliyet istiyorsanız
  • ✅ Native JSON desteği önemliyse

3️⃣ Üçüncü Tercih: Redis

  • ✅ Spesifik Redis özellikleri gerekiyorsa
  • ✅ Mevcut infrastructure varsa

📅 Rapor Tarihi: Ağustos 2025

Bu rapor, resmi benchmark sonuçları ve teknik dokümantasyonlardan derlenmiştir.

1 Ağustos 2025 Cuma

Büyük hacimli diskleri niye 512 sector ile kullanalım 4096 byte lık sector kullanabilirken !

 Günümüzde güncel linux dağıtımlarının hepsi 4096byte sector ile sorunsuz çalışmaktadır. 





Yukarıda görüldüğü gibi diskler 512/4096 byte şeklinde gelmekte, bu şekilde kullandığımızda işletim sistemleri 512 bytelık sector ler şeklinde kullanmaktadır.

Bu durumda yapacağımız işlem, üreticinin aracı veya sg_format (disk destekliyorsa) ile diske sector boyutu tamamen 4096 yaparmısın dememiz gerekiyor.

 

 

ve tüm disklerimiz artık 4096bylık sectorler halinde kullanıyoruz.

 

  4 K dan sonra disk işlem hızı, ~250MB /s çıkmış bulunuyor.

 

 

 

 

 

 

29 Temmuz 2025 Salı

podman aksaklıkları

#1

"ERRO[0000] cannot find UID/GID for user admin: cannot read subids - check rootless mode in man pages 

WARN[0000] Using rootless single mapping into the namespace. This might break some images. Check /etc/subuid and /etc/subgid for adding sub*ids if not using a network user"

yukarıdaki hatalar alındığında root ile aşağıdaki işlemleri:


# usermod --add-subuids 5000001-5100001 admin

# usermod --add-subgids 5000001-5100001 admin

# podman system migrate


yapmanız sorunu %99.999 çözer.



Podman Kullanıcısı İçin Alt UID ve GID Aralığı Tanımlama

Podman, konteynerleri çalıştırırken güvenlik amacıyla kullanıcı adlarını ve grup adlarını kök olmayan kullanıcılar için izole eder. Bu izolasyonu sağlamak için, her kullanıcıya özel alt UID (User ID) ve alt GID (Group ID) aralıkları tanımlanır. Böylece konteyner içindeki işlemler, gerçek sistemde farklı bir kimlik altında çalıştırılır.

Aşamalar:

  1. Alt UID ve GID Aralığı Tanımlama:

    usermod --add-subuids 5000001-5100001 admin
    usermod --add-subgids 5000001-5100001 admin
    • Bu komutlar, admin adlı kullanıcı için:

      • Alt kullanıcı kimlikleri (subuid): 5000001'den 5100001'e kadar

      • Her bir kullanıcı için tekil değer olmalı. Bir kullanıcı için tanımlamış alan başka kullanıcaya tanımlanmamalı.

      • Alt grup kimlikleri (subgid): 5000001'den 5100001'e kadar
        olacak şekilde bir aralık tanımlar.

      • Her bir kullanıcı için tekil değer olmalı.

    • Bu sayede admin kullanıcısı, konteyner içinde izole kimliklerle çalışabilir.

  2. Podman Yapılandırmasını Güncelleme:

    podman system migrate
    • Bu komut, Podman’ın yapılandırmalarını günceller ve kullanıcıya özel containers.conf, storage.conf ve diğer ayarları yeniden oluşturur veya mevcut ayarları yeni sistem ile uyumlu hale getirir.

    • Alt UID/GID aralıklarının geçerli olması ve konteyner izolasyonunun düzgün çalışması için bu adım gereklidir.


Bu işlemler tamamlandığında, admin kullanıcısı Podman ile kök olmayan (rootless) bir şekilde konteyner çalıştırabilir ve her konteynerin sistemden izole şekilde çalışması sağlanır.


podman notları

 # Çalışan podların listesi:

    $ podman ps

# Belli bir podun durumu

    $ podman inspect --format='{{ .State.Status }}'   pod_name

# Belli bir podun çalıştığından emin olmak

    $ podman inspect --format '{{ .State.Running }}'   pod_name


# Podu başlatmak

    $ podman run  --name pod_verilecek_isim -d -p dış_port:iç_pod pod_image_linki

# podu durdurmak

    $ podman stop pod_name

# podu yeniden başlatmak

    $ podman restart pod_name

# podun silinmesi

    $ podman rm  pod_name

Podu

# podlar için varsayılan ağ dışında yeni bir ağ oluşturulması

    $ podman network create yeni_ag_ismi

  Oluşturulan ağ hakkında detaylı bilgi almak için;

 $ podman  network inspect yeni_ağ_ismi



# Belli bir pod hakkında tüm bilgileri öğrenmek

    $ podman inspect pod_ismi

    $ podman  inspect basit-web-server

# Çalışmakta olan bir pod içerisine dosya kopyalamak

    $ podman cp kaynak.dosya pod_ismi:/hedef_dizin/

    $ podman cp index.html basit-web-server:/var/www/html/







9 Temmuz 2025 Çarşamba

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-lar/blob/213656d15342871e99802c287ffedbb428d227ac/openssl-san-ca.sh

2. db sunucusu kesinlike ayrı tutulmalı.

3. Her bir nokta için farklı bir execution node oluşturulmalı

4. işletim sistemi ve datalar farklı disk/lun ortamlarında tutulmalı

5. sistemlere en az 16GB ram verilmeli.


ansible automation hub dosya yükleme boyutunu artırmak

 

ansible automation hub 2.2 serilerinde en fazla 1mb dosya yüklenebiliyor. Nedeni nginx de aşağıdaki tanım:

client_max_body_size 1m;

sorun çözümü için 1m istediğimiz değerle değiştirip, nginx servisini tekrar başlatmalıyız.

ansible automation controller ve hub ssl sertifika güncelleme

Aşağıdaki script ile sertifika üretip, inventory den kullanmak en sağlıklı yöntem oluyor.


########################### openssl-san-ca.sh ############################



#!/bin/bash

set -e


# Kullanıcıdan FQDN, KISA AD ve IP al

FQDN="${1:-hub22.local.lab}"

SHORTNAME="${2:-hub22}"

IP1="${3:-10.253.10.72}"


# Subject değerleri

CA_SUBJECT="/C=TR/ST=Istanbul/L=Istanbul/O=local.lab/CN=local.lab Root CA"

SERVER_SUBJECT="/C=TR/ST=Istanbul/L=Istanbul/O=local.lab/CN=${FQDN}"


# Dosya isimleri

ROOT_CA_KEY="my-root-ca.key"

ROOT_CA_CRT="my-root-ca.crt"

SERVER_KEY="${FQDN}.key"

SERVER_CSR="${FQDN}.csr"

SERVER_CRT="${FQDN}.crt"

OPENSSL_CNF="openssl-san.cnf"


# 1. Root CA varsa atla, yoksa oluştur

if [[ ! -f $ROOT_CA_KEY || ! -f $ROOT_CA_CRT ]]; then

  echo "Root CA anahtarı ve sertifikası oluşturuluyor..."

  openssl genrsa -out $ROOT_CA_KEY 4096

  openssl req -x509 -new -nodes -key $ROOT_CA_KEY -sha256 -days 3650 -out $ROOT_CA_CRT -subj "$CA_SUBJECT"

else

  echo "Root CA dosyaları mevcut, yeniden üretmiyorum."

fi


# 2. SAN destekli openssl config dosyası oluştur

cat > $OPENSSL_CNF <<EOF

[req]

default_bits = 2048

prompt = no

default_md = sha256

distinguished_name = dn

req_extensions = req_ext


[dn]

C = TR

ST = Istanbul

L = Istanbul

O = local.lab

CN = $FQDN

OU = ta3rda


[req_ext]

subjectAltName = @alt_names


[alt_names]

DNS.1 = $FQDN

DNS.2 = $SHORTNAME

IP.1 = $IP1

EOF


# 3. Server için key ve CSR oluştur

echo "Server key ve CSR oluşturuluyor..."

openssl genrsa -out $SERVER_KEY 2048

openssl req -new -key $SERVER_KEY -out $SERVER_CSR -config $OPENSSL_CNF


# 4. Server sertifikasını Root CA ile imzala (SAN uzantısı ile)

echo "Server sertifikası imzalanıyor..."

openssl x509 -req -in $SERVER_CSR -CA $ROOT_CA_CRT -CAkey $ROOT_CA_KEY -CAcreateserial \

  -out $SERVER_CRT -days 825 -sha256 -extfile $OPENSSL_CNF -extensions req_ext


# 5. Root CA'yı sistem CA store'a ekle

cp $ROOT_CA_CRT /etc/pki/ca-trust/source/anchors/

update-ca-trust extract


echo

echo "==== Özet ===="

echo "Root CA sertifikası:        $ROOT_CA_CRT"

echo "Server key dosyası:         $SERVER_KEY"

echo "Server imzalı sertifika:    $SERVER_CRT"

echo "Server CSR dosyası:         $SERVER_CSR"

echo

echo "Root CA sisteme yüklendi! Server cert'inizi servis(ler)inizde kullanabilirsiniz."

echo

echo "Örnek sunucuya yükleme:"

echo "  Sertifika: $SERVER_CRT"

echo "  Anahtar:   $SERVER_KEY"

echo "SAN detayları ile üretilmiştir (FQDN, kısa ad, IP)."

########################### openssl-san-ca.sh ############################



Kullanımı:
# OpenSSL SAN & CA Script Kullanım Dökümanı

Bu doküman, kendi Root CA'nızı ve Subject Alternative Name (SAN) destekli server sertifikalarınızı kolayca üretip, güvenli şekilde Linux sistemlerde kullanmanız için hazırlanmıştır.

---

## 1. Amaç ve Kullanım Alanı

- Tek komutla Root CA oluşturmak
- İstediğiniz kadar sunucu için SAN destekli, CA ile imzalanmış SSL sertifikası üretmek
- CA sertifikasını sisteme ekleyip, `curl`, `podman`, `docker` ve diğer uygulamalarda "trusted" hale getirmek

---

## 2. Önkoşullar

- Root ya da sudo yetkisi (CA sistem dizinine kopyalanacak)
- Bash kabuğu
- openssl

---

## 3. Scriptin Kullanımı

### Script dosyanızı (ör: openssl-san-ca.sh) aşağıdaki gibi çalıştırın:

```bash
chmod +x openssl-san-ca.sh




8 Temmuz 2025 Salı

Lab çalışmasına tekrar başla

Lab çalışmaları için hazırladığım vmleri tekrar başa döndürmek için kullandığım script:



#!/bin/bash


# Geri döndürülecek VM isimleri

VMS=(servera.local.lab serverb.local.lab serverc.local.lab serverd.local.lab servere.local.lab)


SNAPSHOT_NAME="lab"


for VM in "${VMS[@]}"; do

    echo "[$VM] Snapshot'a geri döndürülüyor: $SNAPSHOT_NAME"

    virsh snapshot-revert "$VM" "$SNAPSHOT_NAME" --running --force

    if [ $? -eq 0 ]; then

        echo "[$VM] Başarıyla snapshot'a geri döndürüldü."

    else

        echo "[$VM] Snapshot'a geri döndürmede hata oluştu!"

        continue

    fi

    echo "[$VM] Başlatılıyor..."

    virsh start "$VM"

    if [ $? -eq 0 ]; then

        echo "[$VM] Başarıyla başlatıldı."

    else

        echo "[$VM] Başlatılamadı veya zaten çalışıyor."

    fi

    echo "---------------------------"

done


echo "Tüm işlemler tamamlandı."


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

🚴 Yeni Başlayanlar İçin Elektrikli Bisiklet Yapım Kılavuzu (2025) - Beginner’s Guide to Building an Electric Bike (2025) 🚴

🚴 Yeni Başlayanlar İçin Elektrikli Bisiklet Yapım Kılavuzu (2025) 🚴 Yeni Başlayanlar İçin Elektrikl...