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

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