Ansible etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Ansible etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

11 Şubat 2026 Çarşamba

Otomatik Docker Container Deployment: Ansible ile DevOps Otomasyonu Kılavuzu

Otomatik Docker Container Deployment: Ansible ile DevOps Otomasyonu

Docker ve DevOps ekosisteminin merkezinde yer alan otomasyon, modern yazılım geliştirme süreçlerini hızlandırır. Ancak, manuel Docker container dağıtımına zaman kaybetmeden, Ansible gibi orkestrasyon araçlarıyla bu süreci otomatikleştirmek, hem hata payını azaltır hem de tekrar tekrar aynı görevleri yapmaya gerek kalmaz. Bu kılavuzda, Docker konteynerlerini Ansible kullanarak nasıl otomatik dağıtabileceğinizi adım adım anlatacağım.

Amaç

DevOps Otomasyonunun Neden Kritik

Docker konteynerleri dağıtım süreçlerini standartlaştırırken, manuel müdahaleler her seferinde hata riskini artırır. Ansible ile Docker deployment sürecini otomatik hale getirerek;

  • İkili dağıtım (binary deployment) süreçlerini hızlandırabilirsiniz.
  • Konteyner güncellemelerini tek bir komutla yönetebilirsiniz.
  • Çoklu sunuculara paralel otomatik dağıtım yapabilirsiniz.

Ön Koşullar

Aşağıdaki araçların veya bilgilerin hazır olduğundan emin olun:

  • Linux/Unix tabanlı sistem (örnek: Ubuntu 22.04)
  • Docker kurulmuş olmalıdır (sudo apt install docker.io)
  • Ansible kurulmuş olmalıdır (sudo apt install ansible)
  • YAML ve Dockerfile temeli bilgisi

Adım Adım Anlatım

Adım 1: Dockerfile Oluşturma

Öncelikle bir Docker image oluşturmak için Dockerfile yaratalım. Aşağıdaki örnekte, Python uygulaması içeren bir konteyner image’ı tanımladık:

FROM python:3.9-slim  
WORKDIR /app  
COPY . /app  
RUN pip install -r requirements.txt  
CMD ["python", "app.py"]  

Adım 2: Ansible Playbook Oluşturun

Ansible, playbook.yml dosyası üzerinden görevleri tanımlar. Aşağıdaki playbook, Dockerfile’ı derler, image’ı çalıştırır ve konteyneri başlatır:

- hosts: all  
  become: yes  
  tasks:  
    - name: Dockerfile'dan image derle  
      docker_image:  
        path: ./docker-repo  
        name: my-python-app  
        source: build  
    - name: Konteyner başlat  
      docker_container:  
        name: my-container  
        image: my-python-app:latest  
        state: started  
        ports:  
          - "5000:5000"  

Adım 3: Inventory Dosyası Ayarlayın

Ansible, inventory dosyası üzerinden hedef sunucuları tanımlar. Örneğin, hosts dosyanızda:

[docker_servers]  
192.168.1.10  
192.168.1.11  

Adım 4: Playbook'u Çalıştırın

Aşağıdaki komutla playbook’u çalıştırın:

ansible-playbook -i hosts playbook.yml  

Bu komut, listedeki tüm sunucularda Docker konteynerlerini otomatik olarak dağıtır.

Geliştirme Tavsiyeleri

Ekstra: CI/CD Entegrasyonu

Bu playbook’u Github Actions veya Jenkins ile entegre ederek, her kod değişikliğinde otomatik deployment sağlayabilirsiniz.

Sonuç

Bu kılavuzda, Ansible ile Docker konteyner dağıtımını nasıl otomatikleştireceğinizi öğrendik. Docker ve Ansible’nin birleşimi, DevOps süreçlerinde hem hız kazandırır hem de hata payını minimize eder. Bu yöntemi bir sonraki adım olarak, kubernetes veya OpenShift gibi container orchestrators ile genişletebilirsiniz. Unutmayın: Otomasyon, sadece kodlama değil, yazılım yaşam döngüsünün her aşamasını dönüştürür.

Referanslar

7 Şubat 2026 Cumartesi

Docker ve Proxmox ile Otomasyon: Ansible Kullanarak Etkin ve Hızlı Container Dağıtımı

Docker ve Proxmox ile Otomasyon: Ansible Kullanarak Etkin ve Hızlı Container Dağıtımı

Siber güvenlik ve bulut altyapısı projelerinde hız, güvenilirlik ve tekrarlanabilirlik kritik öneme sahiptir. Docker gibi container teknolojisi ile Proxmox gibi sanallaştırma platformlarının bir araya getirilmesi, modern DevOps süreçlerinde büyük bir avantaj sağlar. Ancak bu bileşenleri manuel olarak yönetmek hem zaman alıcı hem de hata riski taşır. Bu makalede, Ansible otomasyon aracını kullanarak Docker(container) görüntülerinin Proxmox sanal makinelerine otomatik olarak nasıl dağıtılacağını adım adım anlatacağız.

Amaç: Neden Bu Konu Önemlidir?

Modern sistem yönetimi, mikroservis mimarileri ve konteyner tabanlı dağıtımların artmasıyla birlikte otomasyonun önemi artmıştır. Ansible ile Docker ve Proxmox entegrasyonu sayesinde; servis dağıtım süresi azalır, insan hataları minimize edilir ve sistemlerin yeniden yapılandırılmasına ihtiyaç kalmaz. Bu yöntem özellikle CI/CD (Sürekli Entegrasyon ve Teslim) süreçlerinde ve cloud-native projelerde büyük fark yaratabilir.

Ön Koşullar

1. Gerekli Araçlar ve Bilgiler

  • Docker (Container görüntüsü)
  • Proxmox VE 8.0+ (Sanal makineler için)
  • Python 3.8+ (Ansible için)
  • Ansible 2.15+ (Otomasyon aracı)
  • SSH erişimi (Proxmox sunucusuna)
  • Temel YAML bilgisi (Playbook yazımı)

2. Ortam Hazırlığı

Önce Proxmox sunucusunuzda bir sanal makine (VM) oluşturun ve içinde Docker kurulumunu tamamlayın. Ardından Ansible kontrol sunucusunda Docker ve Proxmox ile çalışan bir playbook oluşturmak için gerekli Python modüllerini kurun:

pip install ansible docker

Adım Adım Anlatım

Adım 1: Ansible Inventory Dosyası Oluşturma

Ansible, hedef sistemleri inventory dosyasından okur. Aşağıda örnek bir inventory dosyası verilmiştir:

[proxmox]  
192.168.1.100 ansible_user=root  

[containers]  
proxmox_container1 ansible_connection=proxmox ansible_proxmox_node=node1 ansible_proxmox_password=

Adım 2: Docker Görüntüsünü Proxmox'a Dağıtma

Aşağıdaki playbook, Docker Hub'dan bir resmi çekip Proxmox konteyneri olarak başlatır:

---  
- name: Docker Container Deployment on Proxmox  
  hosts: containers  
  tasks:  
    - name: Pull Docker image  
      docker_image:  
        name: nginx:latest  
        state: present  

    - name: Run Docker container  
      docker_container:  
        name: my_nginx  
        image: nginx:latest  
        ports:  
          - "80:80"  
        state: started

Adım 3: Playbook'u Çalıştırma

Playbook'u çalıştırırken Proxmox'un SSH erişim güvenliğini kontrol edin. Aşağıdaki komutla işlemi başlatın:

ansible-playbook deploy.yml -i inventory

Adım 4: Otomatik Test ve Raporlama

Dağıtım tamamlandıktan sonra Ansible'ın check mode (test modu) ile hata kontrolü yapın:

ansible-playbook deploy.yml --check

Sonuç

Bu makalede, Ansible aracılığıyla Docker ve Proxmox sistemlerini entegre ederek otomatik container dağıtımı gerçekleştirdik. Bu yöntem sayesinde; DevOps süreçlerinin verimliliği, sistem yönetiminin güvenilirliği ve projelerin tekrarlanabilirliği artar. Uygulama geliştiricileri ve sistem yöneticileri için bu teknik, hem zaman kazandıran hem de hata riskini azaltan bir çözüm sunar.

Dilerseniz bu süreci CI/CD pipeline entegrasyonu ile daha da geliştirerek her kod değişikliği sonrası otomatik dağıtım yapılabilir. Merakınız varsa yorumlarda sorularınızı sorabilirsiniz.

24 Eylül 2025 Çarşamba

Ansible 101 - Uygulamalı Başlangıç Rehberi

    Bir master, üç tane de worker olmak üzere 4 ubuntu'dan oluşan basit bir lab kurdum. Master ubuntu makineme ansible yükledim ve ssh public keyleri worker makinelerime kopyaladım. Böylelikle ansible workerlar ile şifresiz doğrudan iletişim kurabilecek. 


SSH key oluşturduğum komut:
ssh-keygen -t rsa -b 4096

Anahtarı worker'lara kopyaladım:
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Multipass tarafı için aşağıdaki adımları uygulamadım: worker'de aşağıdaki kodlar çalıştırılır ve ubuntu user ile master makinede oluşturulan key içeriği manuel eklenir:

ssh key cat

worker ssh key ekleme


Lab için Ansible dizini oluşturdum:
mkdir -p ~/ansible-lab && cd ~/ansible-lab

İlk denemeler için bir envanter dosyası oluşturdum:
vi hosts

Bu dosyanın içeriğini worker'larıma göre doldurdum:
[web]
192.168.1.110

[db]
192.168.1.111

[prod]
192.168.1.112

[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa

İlk ansible komutumu denedim:
ansible all -i hosts -m ping

Bu komut, hosts envanter dosyasında tanımlı tüm sunuculara SSH ile bağlanır ve Ansible’ın ping modülünü çalıştırarak bağlantıyı test eder. Başarılıysa her sunucudan "pong" cevabı döner.

Ansible Ping


Bu komutu bir .sh dosyasına yazıyorum ve sh dosyasını çalıştırarak daha hızlı bir şekilde yanıt almak istiyorum:
vi pingle.sh

Dosya içeriği:
#!/bin/bash
ansible all -i hosts -m ping

Dosyaya çalıştırma izni: 
chmod +x pingle.sh

Test:
./pingle.sh

Worker'larda sudo yetkisi gerektiren komutları çalıştırmak istediğimde ya şifre sormasını sağlamamız gerekiyor yada şifresiz sudo yetkisini her bir workerda tanımlamak gerekiyor. (test ortamı için çok uygun) Örnek üzerinden bakalım. Tüm worker'larıma htop paketini yüklemek istiyorum, şifre sormasını istiyorsam bu komuttan yararlanabilirim:
ansible all -i hosts -m apt -a "name=htop state=present" --become --ask-become-pass

Ancak şifre sormadan doğrudan komutu koşmak için bir kerelik sudo şifresiz yetkisini workerlara tek tek tanımlamam gerekiyor.
echo "ubuntu ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ubuntu
sudo chmod 440 /etc/sudoers.d/ubuntu

Böylece şimdi koşacağım komutu şifre yazmadan veya girmeden doğrudan worker'larıma gönderebilirim:
ansible all -i hosts -m apt -a "name=htop state=present" --become

Ve aynı anda tüm makinelerime htop kurulumunu yapabildim:

htop

Bunu paket kurulumu adı altında bir .sh dosyasına da dönüştürebiliriz:


package_install.sh dosyası oluşturdum ve içeriğini bu şekilde doldurdum:
#!/bin/bash

# Kurulacak paketin adı (örnek: htop, curl, nginx, vs)
PAKET_ADI="htop"

# Ansible komutu
ansible all -i hosts -m apt -a "name=$PAKET_ADI state=present" --become

Böylece kurmak istediğim farklı paketler olduğunda içerisine girip paket adını güncellemem yeterli olabilir.

Dosyaya çalıştırma izni vermeyi de unutmuyoruz:
chmod +x paket_kur.sh

Şimdi ise ilk Playbook'umuzu deneyelim, birden fazla paket kurulumunu bir yml dosyası ile host'larımıza gönderelim.


vi package_install.yml dosyasını oluşturdum ve aşağıdaki bilgileri ekledim:

---
- name: Paket kurulumları
  hosts: all
  become: yes

  tasks:
    - name: htop kur
      apt:
        name: htop
        state: present

    - name: curl kur
      apt:
        name: curl
        state: present

    - name: git kur
      apt:
        name: git
        state: present

Ardından playbook dosyamı koşmak için bu komutu kullanıyorum:
ansible-playbook -i hosts package_install.yml

Playbook - Package Installation

    Ve böylece tek bir yml dosyasını çalıştırarak ansible sayesinde tüm hosts makinelerime aynı anda birden fazla uygulama kurulumunu gerçekleştirmiş oldum. Makinelere tek tek bağlanmadım, paketleri tek tek kurmayı denemedim ve zaman kaybı yaşamadım.


Tüm makineleri kapatmak için bir .sh dosyası
#!/bin/bash

# Ansible inventory dosyasını belirt
INVENTORY_FILE="hosts"

# Tüm makineleri anında kapat
ansible all -i "$INVENTORY_FILE" -a "/sbin/shutdown now" --become

chmod +x shutdown-all.sh

Tüm makinelerde bir klasör oluşturmak için: create_folder.sh
#!/bin/bash

# Ansible inventory dosyası
INVENTORY_FILE="hosts"

# Uzak makinelerde klasör oluştur
ansible all -i "$INVENTORY_FILE" -m file -a "path=/tmp/yeni_klasor state=directory mode=0755"
chmod +x create_folder.sh

Bir istisna, tüm hostlara değil, özel bir gruba işlem yapmak için ek bir parametre kullanılır:
ansible-playbook -i hosts package_install.yml --limit web

Command modülü ile uptime bilgisini öğrenme:
ansible all -i hosts -m command -a "uptime"

Copy komutu ile dosyaları hostlara kopyalamak:
ansible all -i hosts -m copy -a "src=dosya.txt dest=/tmp/dosya.txt"

uptime

Şimdi ise bir playbook ile hem paket kurulumu hem de bir dosya oluşturarak içerisine veri yazmayı deneyelim:


Playbook 2

- name: Paket kur ve dosya kopyala
  hosts: all
  become: yes
  tasks:
    - name: htop paketini kur
      apt:
        name: htop
        state: present

    - name: Bilgi dosyasını kopyala
      copy:
        content: "Bu dosya Ansible tarafından oluşturulmuştur\n"
        dest: /tmp/ansible_bilgi.txt
        owner: ubuntu
        group: ubuntu
        mode: '0644'

Sırada bir servis kurmak ve o servisin çalışıp çalışmadığını check etmek var:


apache_setup.yml dosyasını oluşturuyorum ve içeriğini aşağıdaki gibi yapıyorum:

- name: Apache kurulumu ve servisi yönetimi
  hosts: all
  become: yes
  tasks:
    - name: Apache2 paketini kur
      apt:
        name: apache2
        state: present
        update_cache: yes

    - name: Apache servisini başlat
      service:
        name: apache2
        state: started
        enabled: yes

Bu servisi sadece web hostlarıma kurmak istedim, o yüzden bu şekilde bir komut koşuyorum:
ansible-playbook -i hosts apache_setup.yml --limit web

Ve servislerin durumunu check etmek istiyorum:

apache2 ansible service check


When kullanarak bir yml dosyasının içerisine koşul ekleyebiliriz. Ancak bunu zaten --limit komutu ile de yapabilyoruz:


- name: Koşullu görev örneği
  hosts: all
  become: yes
  tasks:
    - name: Sadece worker1'de bu dosyayı oluştur
      copy:
        content: "Bu dosya sadece worker1 içindir\n"
        dest: /tmp/worker1_ozel.txt
      when: inventory_hostname == "worker1"

Gruplamayı yml dosyasının içerisinde de yapabiriz, böylelikle when koşulu veya --limit kullanmadan birden fazla görevi aslında yml dosyasında tek tek host gruplarına atamak mümkün:


Yeni bir yml dosyası oluşturdum: group_specific_tasks.yml 
Bu yml dosyası sadece web ve db makinelerime işlem yapacak ve bu işlem örnekteki gibi bir file oluşturma işlemi olacağı gibi, app kurulumu, güncellemesi vs. gibi herhangi bir işlem olabilir:

- name: Web grubuna özel görev
  hosts: web
  become: yes
  tasks:
    - name: Web makinesine özel bilgi dosyası
      copy:
        content: "Bu worker bir WEB sunucusudur.\n"
        dest: /tmp/web_bilgi.txt

- name: DB grubuna özel görev
  hosts: db
  become: yes
  tasks:
    - name: DB makinesine özel bilgi dosyası
      copy:
        content: "Bu worker bir VERİTABANI sunucusudur.\n"
        dest: /tmp/db_bilgi.txt

Ansible Roles Yapısının Kullanımı

    Ansible'da roles, yapılandırmaları görev, değişken, şablon, handler gibi mantıksal klasörlere ayırır.
Gerçek projelerde playbook'lar roles kullanılarak kurulur.

Örneğin webserver için bir role oluşturmak istiyorum, bu durumda aşağıdaki komutu çalıştırıyorum:
ansible-galaxy init roles/webserver

Ansible bu role için kendi özel yapısını oluşturur:


Ansible Roles

Tasks/main.yml içerisine aşağıdaki konfiği girdim:

- name: Apache kur
  apt:
    name: apache2
    state: present
    update_cache: yes

- name: Apache2 servis başlasın ve aktif kalsın
  service:
    name: apache2
    state: started
    enabled: yes

- name: Özel hoşgeldiniz sayfası
  copy:
    content: "Merhaba Hakan! Apache başarıyla çalışıyor.\n"
    dest: /var/www/html/index.html
    owner: root
    group: root
    mode: '0644'

Projeyi çalıştırabilmek için ana dizinimde (benim için ansible lab çalışmalarını yaptığım ve diğer hosts dosyamın bulunduğu yer) site.yml isimli bir dosya oluşturuyorum ve aşağıdaki gibi konfig giriyorum:

- name: Web makinelerine apache kur, servisi başlat, aktif kalsın ve özel hoşgeldin sayfası oluştur.
  hosts: web
  become: yes
  roles:
    - webserver

 Böylelikle site.yml dosyasını playbook ile koştuğumda webserver rolünde daha önce tanımladığım tüm işlemler gerçekleştiriliyor. Daha işlevsel bir yapıya kavuşmuş oluyorum. Her şey tek bir yml dosyasında olmaktansa görev ve sorumluluklara göre yani rollere göre yml dosyalarını aslında ayırmış oluyorum.

ansible-playbook -i hosts site.yml

sudo systemctl status apache2
sudo systemctl restart apache2
ss -tuln | grep :80
sudo ufw allow 80
sudo ufw allow 443
sudo ufw reload
sudo ufw status

    Ve ardından kendi ana bilgisayarımın tarayıcısını kullanarak http://192.168.1.110:80 bağlantısına gitmeyi çalıştığımda worker1 isimli makinemde çalışan apache2 üzerindeki sayfaya ulaşabildim. Ansible ile gönderilen ve sayfa girişine eklenen yazı da karşıma çıkmış oldu. Böylece çalışmayı başarıyla tamamladım.

Apache2 Main Page

Handlers Kullanımına Örnek

    Bu deneme için init komutunu tekrar koştum ve ikinci bir dizin oluşmasını sağladım, ikinci bir role gibi. ansible-galaxy init roles/webroles2-handlers ve ilgili rolü koşmak için yeni bir yml dosyası oluşturarak ilerledim.

Ansible Handlers


    Handlers, bir görev değişiklik algılandığında tetiklenen özel görevlerdir. Genellikle servisleri yeniden başlatmak, yeniden yüklemek gibi işlemler için kullanılır. Bizde Apache web sayfamızın içeriğinde bir değişiklik algılandığında örnek olması için bir tetikleyici kurgulayacağız ve sistem bu değişikliği algılayarak otomatik olarak apache servisini restart edecek. Bu sadece basit bir örnek, ihtiyaca göre buradaki handlers yeteneklerinden farklı şekillerde yararlanılabilir.


roles/webroles2-handlers/tasks/main.yml içerisine bir ekleme yapıyorum, daha önce eklediğimiz görevlere ek olarak:

---
- name: Apache web sunucusunun kurulu olduğundan emin olun
  ansible.builtin.apt:
    name: apache2
    state: present
    update_cache: yes
  become: yes
  notify: restart_apache_service

- name: Ana sayfa içeriğini değiştirin
  ansible.builtin.copy:
    content: "<html><body><h1>Ansible Handler Pratiği Başarılı!</h1></body></html>"
    dest: /var/www/html/index.html
  become: yes
  notify: restart_apache_service

Şimdi ise Handler dosyasını oluşturarak içerisine tetikleyicimizi ekliyoruz:

vi roles/webroles2-handlers/handlers/main.yml

---
- name: restart_apache_service
  ansible.builtin.service:
    name: apache2
    state: restarted
  become: yes

Şimdi ise Playbook'u oluşturalım: vi 11-handlers-web-webroles.yml

---
- name: Web server rolünü çalıştırma
  hosts: web
  roles:
    - webroles2-handlers

Şimdi ise tetikleyiciyi test edebiliriz:
ansible-playbook -i hosts 11-handlers-web-webroles.yml

Handler Ornek


    Bu çıktı bize şunu söylüyor: Ansible, web sayfasının içeriğinin değiştiğini algıladı. Bu değişiklik nedeniyle, playbook'taki diğer görevler tamamlandıktan sonra, tanımladığınız restart_apache_service handler'ını çalıştırdı. Handler başarılı bir şekilde çalışarak Apache'yi yeniden başlattı ve playbook'unuzu hatasız bir şekilde tamamladı.

Jinja2 Şablon Kullanımına Örnek


Öncelikle yeni bir role oluşturuyorum, bu 12. yml file'ım olmuş olacak.

#ansible-galaxy init info_creator

/roles/info_creator/templates/ dizini altında bilgi.txt.j2 isimli bir dosya oluşturdum ve içeriğini aşağıdaki gibi güncelledim:

Burada toplanan verilere aynı zamanda Ansible Facts ismi verilir.

Bu sunucuya ait bilgiler: Hostname: 
{{ ansible_hostname }} 
IP Adresi: {{ ansible_host }} 
İşletim Sistemi: {{ ansible_distribution }} {{ ansible_distribution_version }} 
Tarih: {{ ansible_date_time.iso8601 }}

/tasks/main.yml içerisine de ilgili ana görevimi ekliyorum:

---
- name: Dinamik bilgi dosyasını oluşturun
  ansible.builtin.template:
    src: bilgi.txt.j2
    dest: /home/ubuntu/bilgi.txt
    owner: ubuntu
    group: ubuntu
    mode: '0644'
  become: yes

ve artık playbook'u oluşturup koşabilirim:

#vi 12-create_info_jinja2_file.yml

ve içerisine:

---
- name: Dinamik bilgi dosyasını oluşturma
  hosts: web
  roles:
    - info_creator

Artık playbook'u koştuktan sonra ilgili makinenin /home/ubuntu/ dizininde yeralan bilgi.txt dosyasını kontrol edebilir ve dinamik bir şekilde bu belgenin güncellendiğini görebilirim:

jinja2


    Jinja2 şablonları, statik dosyaları olduğu gibi kopyalamak yerine, dinamik olarak oluşturmanızı sağlar. Bu şablonlar, her sunucuya özel bilgileri (IP adresi, hostname, port gibi) kullanarak yapılandırma dosyalarını otomatik olarak doldurabilir. Örneğin, bir web sunucusu için Apache sanal host yapılandırma dosyası oluştururken ServerName ve DocumentRoot gibi değerleri sunucunun hostname'ine göre dinamik olarak ayarlayabilirsiniz. Bu sayede, farklı sunucular için ayrı ayrı dosyalar oluşturmak yerine tek bir şablonu kullanabilir ve kod tekrarını önleyebilirsiniz. Aynı zamanda veritabanı yapılandırma dosyalarında bellek ayarları gibi değerleri, sunucunun özelliklerine göre belirlemek için de Jinja2 şablonlarından yararlanabilirsiniz.

    Diyelimki zabbix server'ınız var ve zabbix agentları onlarca makineye kurdunuz ve konfigüre ettiniz. Çeşitli nedenlerle zabbix server IP'ni değişti. Gidip tek tek makinelerinizdeki zabbix conf dosyasını düzenlemenize gerek yok, bunu bir yml file ile ansible kullanarak kolaylıkla halledebilirsiniz.

    Bir başka örnek, makinelerinize cronjob ekleyebilirsiniz. Hatta düzenli cronjoblarınız varsa, envanterinize yeni eklenen bir makine olduğunda crontab'ına ilgili jobların eklenmesini de otomatikleştirebilirsiniz. Cronjob yml dosyanızı bir scriptin içerisine yazarsınız ve ilgili scripti de ansible kurulu makinenizin crontab'ine istediğiniz zaman aralığına göre eklerseniz. Bundan böylelikle sadece envanter dosyanızı yani hosts file'ı güncellemeniz yeterli olacaktır. Crontab otomatik zamanı geldiğinde eklenecek.

    Veya farklı bir örnek, NTP sunucusu kurmak istediniz. Bunu elbette Crony ile yapabilirsiniz. Hem kurulumarı hem de ilgili konfigürasyonu ansible ile koşmanız mümkün. Birkaç dakikada tüm makinelerinizin baktığı NTP sunucusunu güncellenir. Ansible bu ve benzeri birden fazla esneklik ve kolaylık sağlıyor. Zaman zaman bazı örnekler paylaşmaya devam edeceğim, şimdilik bu yazıyı burada sonlandırıyorum.