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.

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

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

Ö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

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

Yazının orijinaini buradan okuyabilirsiniz

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.