Ansible Temelleri

Ansible kurulumu, inventory, playbook ve modül kullanımı

Kubedo Academy’e hoş geldiniz! Bu laboratuvarda Ansible kurulumu, inventory yönetimi ve ilk playbook’unuzu yazmayı öğreneceksiniz.


Zorluk seviyesi: Başlangıç
Süre: Yaklaşık 45 dakika


1. Ansible Nedir?

Ansible, IT otomasyonu için kullanılan açık kaynaklı bir araçtır. Red Hat tarafından geliştirilen Ansible şu özelliklere sahiptir:

ÖzellikAçıklama
AgentlessHedef sistemlerde agent kurulumu gerektirmez
SSH tabanlıLinux/Unix sistemlere SSH ile bağlanır
IdempotentAynı görevi tekrar çalıştırmak aynı sonucu verir
YAMLOkunabilir YAML formatında playbook’lar
Push-basedKontrol makinesinden hedeflere push yapılır

Ansible vs Diğer Araçlar

AraçMimariDilÖğrenme Eğrisi
AnsibleAgentlessYAMLDüşük
PuppetAgent-basedRuby DSLYüksek
ChefAgent-basedRubyYüksek
SaltAgent/AgentlessYAML/PythonOrta

2. Ansible Kurulumu

Ubuntu/Debian

Terminal
$ apt update && apt install ansible -y

RHEL/CentOS

yum install epel-release -y
yum install ansible -y

Python pip ile

pip install ansible

Kurulum Doğrulama

Terminal
$ ansible --version

[!TIP] Ansible 2.9+ sürümü kullanmanızı öneririz. Ansible 2.10 ile birlikte koleksiyonlar (collections) eklendi.


3. Ansible Yapısı

Temel Bileşenler

ansible-project/
├── ansible.cfg          # Ansible yapılandırması
├── inventory/           # Host tanımları
│   ├── hosts            # Statik inventory
│   └── group_vars/      # Grup değişkenleri
├── playbooks/           # Playbook'lar
│   └── site.yml
├── roles/               # Roller
│   └── webserver/
└── files/               # Statik dosyalar

ansible.cfg

[defaults]
inventory = ./inventory/hosts
remote_user = root
host_key_checking = False
retry_files_enabled = False

[privilege_escalation]
become = True
become_method = sudo
become_user = root

4. Inventory (Envanter)

Inventory, Ansible’ın yöneteceği sunucuları tanımlar.

Statik Inventory Örneği

# inventory/hosts

[webservers]
web1.example.com
web2.example.com ansible_host=192.168.1.10

[dbservers]
db1.example.com ansible_port=2222

[production:children]
webservers
dbservers

[all:vars]
ansible_user=admin

Inventory Değişkenleri

DeğişkenAçıklama
ansible_hostHedef IP adresi
ansible_portSSH portu (varsayılan: 22)
ansible_userSSH kullanıcısı
ansible_ssh_private_key_fileSSH private key yolu
ansible_becomePrivilege escalation

Inventory Kontrolü

Terminal
$ ansible-inventory --list -y

5. Ad-hoc Komutlar

Playbook yazmadan hızlı görevler için ad-hoc komutlar kullanılır.

Temel Sözdizimi

ansible <host-pattern> -m <module> -a "<arguments>"

Örnekler

Ping testi:

Terminal
$ ansible all -m ping

Komut çalıştırma:

ansible webservers -m shell -a "uptime"

Paket kurma:

ansible webservers -m apt -a "name=nginx state=present"

Dosya kopyalama:

ansible all -m copy -a "src=/etc/hosts dest=/tmp/hosts"

[!NOTE] Ad-hoc komutlar basit görevler için uygundur. Karmaşık işlemler için playbook kullanın.


6. İlk Playbook

Playbook’lar YAML formatında yazılan otomasyon senaryolarıdır.

Basit Playbook

# playbooks/first.yml
---
- name: İlk Playbook
  hosts: webservers
  become: yes
  
  tasks:
    - name: Nginx kurulumu
      apt:
        name: nginx
        state: present
        update_cache: yes
    
    - name: Nginx servisini başlat
      service:
        name: nginx
        state: started
        enabled: yes
    
    - name: Index sayfası oluştur
      copy:
        content: "<h1>Merhaba Ansible!</h1>"
        dest: /var/www/html/index.html

Playbook Çalıştırma

ansible-playbook playbooks/first.yml

Playbook Seçenekleri

SeçenekAçıklama
-iInventory dosyası
-lLimit (belirli hostlar)
-vVerbose (-vvv daha detaylı)
--checkDry-run (değişiklik yapmaz)
--diffDeğişiklikleri göster
-tTags (belirli task’ları çalıştır)

7. Modüller

Ansible modülleri, belirli görevleri gerçekleştiren kod parçalarıdır.

Sık Kullanılan Modüller

ModülAçıklama
apt / yumPaket yönetimi
copyDosya kopyalama
templateJinja2 şablon
fileDosya/dizin yönetimi
serviceServis yönetimi
userKullanıcı yönetimi
shell / commandKomut çalıştırma
gitGit repository
docker_containerDocker container

Modül Dokümantasyonu

Terminal
$ ansible-doc apt

8. Değişkenler

Playbook’ta Değişken Tanımlama

---
- name: Değişken Örneği
  hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  
  tasks:
    - name: Apache yapılandırması
      template:
        src: httpd.conf.j2
        dest: /etc/httpd/conf/httpd.conf

Değişken Önceliği (En düşükten en yükseğe)

  1. Role defaults
  2. Inventory variables
  3. Playbook vars
  4. Task vars
  5. Extra vars (-e)

Extra Variables

ansible-playbook site.yml -e "http_port=8080"

Konu Tekrarı - Kısa Sınav


Sonraki Adım

Bu temel bilgilerle Ansible kullanmaya başlayabilirsiniz. İleri seviye konular için:

  • Roller (Roles): Tekrar kullanılabilir otomasyon blokları
  • Jinja2 Şablonları: Dinamik konfigürasyon dosyaları
  • Ansible Galaxy: Hazır roller ve koleksiyonlar
  • Ansible Vault: Şifreli değişkenler