Ansible : Playbook’u Kontrol Modunda Çalıştırma 

Ansible’ın kontrol modu olarak da bilinen provası, sistemlerinizde herhangi bir gerçek değişiklik yapmadan oyun kitabı yürütmeyi simüle etmenize olanak tanıyan güçlü bir araçtır. Bu, playbook’ları üretim ortamınızda kullanıma sunmadan önce test etmek ve hata ayıklamak için inanılmaz derecede kullanışlıdır.

Birden fazla sunucudaki yapılandırmaları güncelleyen karmaşık bir Ansible playbook’unuz olduğunu hayal edin. Bu “çalıştır” düğmesine basmadan önce, ideal olarak her şeyin planlandığı gibi çalıştığından emin olmak için test etmek istersiniz.

Bir prova tam olarak bunu yapmanızı sağlar. Başucu kitabınızı gözden geçirir, hataları kontrol eder ve hedef ana bilgisayarlarda hangi değişikliklerin yapılacağını görüntüler, üstelik bunları gerçekten uygulamadan.

Süper basitten daha pratik bir senaryoya kadar değişen örneklerle 5 dakikadan kısa sürede provanın nasıl gerçekleştirileceğine bakalım.

Önkoşullar

Bu eğitime devam etmek için aşağıdakilere ihtiyacınız olacak:

  • Ansible’ın yüklü ve yapılandırılmış olduğu bir Ansible yönetim düğümü.
  • Yönetim düğümü ile hedef düğümler arasında SSH anahtar tabanlı kimlik doğrulaması.

Kuru çalıştırma nasıl yapılır

Ansible ile prova yapmanın iki ana yolu vardır:

1. Komut Satırı Parametresi

Bu en hızlı yoldur. Playbook’unuzu –check bayrağıyla şu şekilde çalıştırın:

ansible-playbook my_playbook.yml --check

2. Playbook Seçeneği

check_mode: True seçeneğini playbook’unuzun içinde de tanımlayabilirsiniz:

- hosts: all
  become: true
  tasks:
    - name: Update package lists
      apt: update_cache=yes
      check_mode: True 

Örnek 1: Süper basit prova

Diyelim ki hedef makinenizdeki /etc/hostname dosyasını güncelleyen basit bir göreviniz var. İşte plabook:

- hosts: all
  become: true
  tasks:
    - name: Update system hostname
      lineinfile:
        path: /etc/hostname
        create: yes
        line: "newlinuxhost"

Şimdi playbook’u –check parametresi ile çalıştırın:

ansible-playbook update_hostname.yml --check

Bu, playbook’un /etc/hostname dosyasına newlinuxhost satırını ekleyeceğini doğrular, ancak bu bir prova olduğu için aslında hiçbir değişiklik yapılmaz.

Update system hostname with Ansible dry run

Örnek 2: Paket kurulumu ile pratik deneme

Şimdi daha pratik bir senaryoya bakalım. Apache2 web sunucusu paketini web sunucularınıza yükleyen bir playbook olduğunu düşünün:

- hosts: webservers
  become: true
  tasks:
    - name: Install Apache web server
      apt:
        name: apache2
        state: present
      check_mode: True 

Bunu üretim sunucularınızda kullanıma sunmadan önce bir deneme yapmak akıllıca olacaktır:

ansible-playbook install_apache.yml

Çıktı, hangi paketlerin kurulacağı ve sürümleri hakkında size ayrıntıları gösterecektir. Bu, playbook’un doğru paketleri hedefleyip hedeflemediğini doğrulamanıza ve gerçek yürütme sırasında herhangi bir sürprizden kaçınmanıza olanak tanır.

Install Apache in test mode with Ansible dry run

Örnek 3: Kontrol moduyla koşullu görev yürütme

Bir sistemi belirli koşullara göre güncelleyen bir playbook hayal edin. İşte bir örnek:

- hosts: web1
  become: true
  tasks:
  - name: Check if Python 3 is installed
    command: python3 --version
    register: python3_check
  - name: Install Python 3 if not found (would only run in actual execution)
    apt:
      name: python3
      state: present
    when: python3_check.rc != 0  # Only run if Python 3 is not found
  - name: Update system message for Python 3 users (dry run will show intended message)
    lineinfile:
      path: /etc/motd
      line: "Welcome! Python 3 is now available."
    when: python3_check.rc == 0  # Only run if Python 3 is found

Şimdi bir deneme yapalım:

ansible-playbook install_python3.yml --check

Bunu –check ile çalıştırmak aslında Python 3’ü yüklemeyecektir, ancak Python 3 algılanırsa /etc/motd dosyasına eklenecek amaçlanan satırı gösterecektir. Bu, koşullu mantığın beklendiği gibi çalıştığını doğrulamaya yardımcı olur.

Install Python if not installed testing with Ansible dry run

Örnek 4: Jinja2 şablonlamayı kontrol moduyla test etme

Ansible, dinamik içerik için Jinja2 şablonunu kullanır. Deneme çalıştırmaları, değişkenlerin şablonlar içinde nasıl kullanıldığını test etmeye yardımcı olabilir. İşte bir örnek:

- hosts: webservers
  become: true
  tasks:
  - name: Configure Apache with server name
    template:
      src: apache.conf.j2
      dest: /etc/apache2/sites-available/{{ server_name }}.conf
      owner: www-data
      group: www-data
    vars:
      server_name: "mysite.com"

Şimdi, yukarıdaki oyun kitabını prova ile çalıştırmayı deneyin:

ansible-playbook configure_apache.yml --check
Configure Apache in test mode with Ansible dry run

Örnek 5: Döngüler ve koşullarla test etme

Ansible, listeler arasında geçiş yapmaya ve görevleri koşullu olarak çalıştırmaya izin verir. Deneme çalıştırmaları, gerçek yürütmeden önce bu yapıların doğrulanmasına yardımcı olabilir. İşte bir örnek:

---
- hosts: all
  become: true
  tasks:
    - name: Loop through list of packages to install
      apt:
        name: "{{ item }}"
        state: present
      loop:
        - nginx
        - php
        - php-fpm
        - mariadb-server
      when: ansible_os_family == "Debian"  # Run only on Debian-based systems

    - name: Loop through list of systemd services to enable (dry run shows intended service states)
      systemd:
        name: "{{ item }}"
        state: enabled
      loop:
        - apache2.service
        - php8.1-fpm.service
      when: ansible_os_family == "Ubuntu"  # Run only on Ubuntu systems

Şimdi, prova kullanarak yukarıdaki playbook’u çalıştırın:

ansible-playbook loop.yml --check

Bu playbook, işletim sistemine dayalı paket listeleri ve systemd hizmetleri arasında döngü yapar. Prova, döngüler arasında yinelenir ve gerçek bir yükleme veya etkinleştirme gerçekleşmese bile her öğe için amaçlanan eylemleri gösterir.

Perform task based on conditionals with Ansible dry run

Yazının orijinaini buradan okuyabilirsiniz

Hüseyin GÜÇ

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım. Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum. Son 6 yıldır  sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum. Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.