Ansible Nedir?

Ansible, bir Linux/Unix tabanlı açık kaynak yazılım paketi yönetim sistemidir. Bu sistem, birden çok sunucu ve çalışma istasyonu üzerinde aynı anda yapılandırma değişiklikleri yapmanıza ve bunların izlenmesine yardımcı olur. Ansible, komut satırı arabirimi veya konfigürasyon dosyaları kullanılarak çalışır ve sunucularınızın yapılandırmasını değiştirirken SSH kullanır. Ansible, yönetim işlemlerinin otomatikleştirilmesi için kullanılan bir araçtır ve çoğu zaman dağıtım, yapılandırma yönetimi ve uygulama dağıtımı gibi görevler için kullanılır. Ansible, açık kaynaklı bir yönetim aracıdır ve ağ cihazları, sistemler ve uygulamalar üzerinde otomatikleştirilmiş görevler gerçekleştirmeye yarar. Bu makalede, ansible’ın ne olduğunu ve nasıl kullanılabileceğini anlatacağım. Örneklerle destekleyerek, ansible’ın nasıl yükleneceğini, nasıl konfigüre edileceğini ve nasıl kullanılacağını göstereceğim.

Ansible’ın temel özellikleri nelerdir?

  • Ansible, konfigürasyon dosyalarını kullanarak birden çok sunucu üzerinde yapılandırma değişiklikleri yapabilir. Bu dosyalar, sunucularınızın ne yapmasını istediğinizi belirtir ve hangi komutların çalıştırılması gerektiğini belirtir.
  • Ansible, sunucularınız üzerinde adım adım görevler yaparak işlemleri otomatikleştirir. Bu görevler, bir komut satırında girilir veya bir konfigürasyon dosyasında belirtilir.
  • Ansible, sunucular üzerinde değişiklik yaptıktan sonra, değişikliklerin nasıl etkilediğini izleyebilir ve bu değişiklikleri geri alabilir.
  • Ansible dağıtımı kolaydır ve yüklenmesi çok kolaydır. Python 2.6 veya 2.7 veya 3.5 ve üstü gerektiri. Linux, MacOS ve Windows üzerinde çalışır.
  • Ansible, dağıtılan sistemler üzerinde otomatikleştirilmiş görevler gerçekleştirirken SSH protokolünü kullanır. Bu, ansible’ın çok fazla yapılandırma gerektirmeyen ve dağıtım sırasında güvenlik açıklarına neden olmayan bir yönetim aracı olmasını sağlar.
  • Ansible, dağıtım sırasında çok sayıda sistemi birden yönetebilir ve dağıtım işlemlerinin geri dönüşümünü destekler. Bu, ansible’ın sistemleri güncelleştirirken, yüklerken ve yapılandırırken kullanışlı bir seçenek olmasını sağlar.
ansible

Ansible’ın kurulumu nasıl yapılır?

1. Yöntem

Ansible’ı kurmak için öncelikle Python’un kurulu olması gerekir. Python, çoğu Linux dağıtımında varsayılan olarak kuruludur ve kurulu değilse kurulum komutları aşağıdaki gibidir:

  • CentOS/Fedora: “sudo yum install python”
  • Ubuntu/Debian: “sudo apt-get install python”

Daha sonra, ansible’ı kurmak için aşağıdaki komutları çalıştırın:

  • CentOS/Fedora: “sudo yum install ansible”
  • Ubuntu/Debian: “sudo apt-get install ansible”

2. Yöntem

Ansible’ı yüklemek için pip aracını kullanabilirsiniz. Öncelikle pip’i yükleyin:

sudo apt-get install python-pip

Sonra ansible’ı yükleyin:

sudo pip install ansible

Ansible’ın yüklendiğini doğrulamak için aşağıdaki komutu çalıştırın:

ansible --version

Ansible’ın yüklendiğini doğruladıktan sonra, ansible’ı kullanmaya hazırsınız.

Ansible’ın Yapılandırılması

Ansible’ı kullanmadan önce, yapılandırma dosyası oluşturmanız gerekir. Bu dosya, ansible’ın nasıl çalışacağını belirleyen bilgileri içerir. Yapılandırma dosyası, ansible.cfg olarak adlandırılır ve ansible kurulu olduğu dizinin içinde bulunur. Örneğin, Ubuntu üzerinde ansible.cfg dosyası /etc/ansible/ansible.cfg dizininde bulunur.

Ansible.cfg dosyasının içeriği aşağıdaki gibi olabilir:

[defaults]
host_key_checking = False
retry_files_enabled = False

Bu yapılandırma dosyası, ansible’ın anahtar doğrulamasını devre dışı bırakır ve geri yükleme dosyalarını etkinleştirmez. Bu ayarlar, ansible’ın çalışmasını hızlandırmak için yararlıdır.

Ansible’ı Kullanma

Ansible’ı kullanmak için, bir adım adım görev tanımlamanız gerekir. Bu görevler, YAML dilinde tanımlanır ve adımları ile birlikte açıkça belirtilir. Örneğin, aşağıdaki görev, 192.168.1.10 adresinde bulunan sistemde paketlerin güncellenmesini içerir:

---
- name: Update packages on webserver
  hosts: webservers
  become: true
  tasks:
    - name: Update package cache
      apt: update_cache=yes
    - name: Upgrade packages
      apt: upgrade=dist

Bu görev, hosts değişkeni ile tanımlanan webservers grubunda çalıştırılır. Görev, become değişkeni ile root yetkileri ile çalıştırılır. Görev, apt modülünü kullanarak paketlerin önbelleğini günceller ve paketleri günceller.

Ansible’ı kullanarak daha fazla görev yazmak için, yönetmek istediğiniz sistemleri ve görevleri tanımlayan inventory dosyası ve YAML dilinde yazılmış görev dosyaları oluşturmanız gerekir. Görev dosyaları, ansible-playbook komutu ile çalıştırılır. Örneğin, aşağıdaki komut ile webservers.yml adlı görev dosyası çalıştırılır:

ansible-playbook -i inventory webservers.yml

Inventory Dosyaları

Ansible inventory dosyaları, ansible playbooklarının çalıştırılacağı sistemleri tanımlayan dosyalardır. Inventory dosyaları, sistemlerin IP adreslerini, hostname’lerini veya özel etiketlerini içerebilir. Bu sayede, playbooklar belirli sistemler üzerinde çalıştırılabilir.

Ansible inventory dosyaları, aşağıdaki gibi bir yapıya sahiptir:

[group1]
host1 ansible_host=192.168.1.1
host2 ansible_host=192.168.1.2

[group2]
host3 ansible_host=192.168.1.3
host4 ansible_host=192.168.1.4

Bu inventory dosyasında, group1 ve group2 adlı iki grup tanımlanır. Group1 grubu içinde host1 ve host2 adlı sistemler, Group2 grubu içinde host3 ve host4 adlı sistemler tanımlanır. Bu sistemlerin IP adresleri ansible_host etiketi ile belirtilir.

Ansible inventory dosyaları, aşağıdaki gibi bir playbookda kullanılır:

---
- name: Use the inventory file
  hosts: group1
  tasks:
    - name: Run a command on group1 systems
      command: uptime

Bu playbookda, hosts anahtar kelimesi ile group1 grubu tanımlanır ve tasks anahtar kelimesi altında uptime komutu çalıştırılır. Bu sayede, group1 grubu içinde tanımlanan host1 ve host2 adlı sistemler üzerinde uptime komutu çalıştırılır.

Ansible inventory dosyaları, ansible playbooklarını belirli sistemler üzerinde çalıştırabilme özelliğini sağlar. Bu sayede, playbooklar sadece belirli sistemler üzerinde çalıştırılabilir veya belirli grup içindeki sistemler üzerinde aynı görevler yapılabilir.

nsible inventory dosyalarında ssh anahtarı kullanımı, Ansible üzerinden bir sunucuya bağlantı kurarken parolalar yerine güvenli bir şekilde anahtar kullanılarak bağlantı kurulmasını sağlar.

Ansible inventory dosyalarında ssh anahtarı kullanımını aşağıdaki şekilde yapabilirsiniz:

[server]
server1 ansible_ssh_host=192.168.1.10 ansible_ssh_user=root ansible_ssh_private_key_file=/path/to/ssh/key
server2 ansible_ssh_host=192.168.1.11 ansible_ssh_user=root ansible_ssh_private_key_file=/path/to/ssh/key
server3 ansible_ssh_host=192.168.1.12 ansible_ssh_user=root ansible_ssh_private_key_file=/path/to/ssh/key

Bu örnekte, inventory dosyasında “server” adında bir grup tanımlanmış ve bu grupta “server1”, “server2” ve “server3” adında üç sunucu listelenmiştir. Bu sunuculara ansible üzerinden bağlantı kurulurken, ansible_ssh_host değişkeni ile sunucunun IP adresi, ansible_ssh_user değişkeni ile kullanılacak kullanıcı adı ve ansible_ssh_private_key_file değişkeni ile ssh anahtarının yolu belirtilmiştir.

Bu şekilde, ansible üzerinden bu sunuculara bağlantı kurulurken parolalar yerine ssh anahtarı kullanılacaktır.

Dikkat etmeniz gereken bir husus, ssh anahtarının sunuculara root kullanıcısı olarak atanmış olmasıdır. Eğer farklı bir kullanıcı adı ile bağlantı kurulmak istenirse, ansible_ssh_user değişkenini değiştirin ve ssh anahtarını o kullanıcının authorized_keys dosyasına ekleyin.

Ansible Modülleri

Ansible modülleri, ansible playbooklarında kullanılan özel işlevlerdir. Ansible modülleri, sistemler üzerinde çeşitli işlemler yapar ve playbookların daha etkili hale gelmesini sağlar.

Ansible modülleri, aşağıdaki gibi bir playbookda kullanılır:

---
- name: Use the file module
  hosts: all
  tasks:
    - name: Create a file
      file:
        path: /tmp/test.txt
        state: touch
    - name: Set the owner and group of the file
      file:
        path: /tmp/test.txt
        owner: ansible
        group: ansible

Bu playbookda, file modülü kullanılarak /tmp/test.txt adlı bir dosya oluşturulur ve dosyanın sahibi ve grubu ansible olarak ayarlanır.

Ansible modülleri, sistemler üzerinde çeşitli işlemler yapar. Örneğin, aşağıdaki gibi apt modülü kullanılarak paketler yüklenir:

---
- name: Install packages
  hosts: all
  tasks:
    - name: Install package1
      apt: pkg=package1 state=present
    - name: Install package2
      apt: pkg=package2 state=present

Bu playbookda, apt modülü kullanılarak package1 ve package2 adlı paketler yüklenir.

Ansible modülleri, sistemler üzerinde çeşitli işlemler yapar ve playbookların daha etkili hale gelmesini sağlar. Örneğin, aşağıdaki gibi service modülü kullanılarak hizmetler yönetilebilir:

---
- name: Manage services
  hosts: all
  tasks:
    - name: Start service1
      service: name=service1 state=started
    - name: Stop service2
      service: name=service2 state=stopped

Bu playbookda, service modülü kullanılarak service1 hizmeti başlatılır ve service2 hizmeti durdurulur.

Ansible modülleri, sistemler üzerinde çeşitli işlemler yapar. Örneğin, aşağıdaki gibi template modülü kullanılarak template dosyalarının dağıtımı yapılabilir:

---
- name: Deploy templates
  hosts: all
  tasks:
    - name: Deploy template1
      template: src=template1.j2 dest=/etc/template1.conf
    - name: Deploy template2
      template: src=template2.j2 dest=/etc/template2.conf

Bu playbookda, template modülü kullanılarak template1.j2 ve template2.j2 adlı template dosyaları /etc dizinine dağıtılır.

Ansible modülleri, playbookların daha etkili hale gelmesini sağlar ve sistemler üzerinde çeşitli işlemler yapar.

Aşağıda bazı örnek Ansible modülleri ve nasıl kullanılabilecekleri hakkında bir özet sunuyorum:

  • apt: Bu modül, Debian tabanlı bir sistemde paketleri yüklemek, kaldırmak ve güncellemek için kullanılır. Örnek kullanım:
- name: Install Nginx web server
  apt:
    name: nginx
    state: present
  • command: Bu modül, bir komut çalıştırmak için kullanılır. Örnek kullanım:
- name: Print current date and time
  command: date
  • copy: Bu modül, bir dosyayı hedef sisteme kopyalamak için kullanılır. Örnek kullanım:
- name: Copy file to target system
  copy:
    src: /path/to/local/file
    dest: /path/to/remote/file
  • file: Bu modül, bir dosya oluşturmak, düzenlemek ve silmek gibi işlemleri yapmak için kullanılır. Örnek kullanım:
- name: Create new file
  file:
    path: /path/to/new/file
    state: touch

- name: Edit file content
  file:
    path: /path/to/existing/file
    state: present
    content: |
      This is the new content of the file.
  • user: Bu modül, bir kullanıcı oluşturmak, düzenlemek ve silmek için kullanılır. Örnek kullanım:
- name: Create new user
  user:
    name: newuser
    state: present

- name: Edit user's home directory
  user:
    name: existinguser
    home: /path/to/new/home/directory
    state: present

Daha fazla modül ayrıntısı için burayı ziyaret etmenizde fayda var.

Ansible Rol Yönetimi

Ansible rol yönetimi, ansible playbooklarını daha organize hale getirir. Rol, ansible playbooklarının bir bölümünü temsil eder ve aynı rolü kullanan playbooklar arasında ortak noktalar olur. Bu sayede, playbooklar daha düzenli ve anlaşılır hale gelir.

Ansible rol yönetiminde, rol dizini oluşturulur ve rol için gerekli tüm dosyalar bu dizine eklenir. Rol dizini, aşağıdaki yapıya uygun olmalıdır:

roles/
  role_name/
    defaults/
      main.yml
    files/
    handlers/
      main.yml
    meta/
      main.yml
    tasks/
      main.yml
    templates/
    vars/
      main.yml

Bu dizinde, defaults, files, handlers, meta, tasks, templates ve vars dizinleri bulunur. Bu dizinler, rolün görevlerini, dosyalarını, meta bilgilerini, vars değişkenlerini ve template dosyalarını saklar.

Ansible rol yönetiminde, rolü kullanmak için aşağıdaki gibi bir playbook oluşturulur:

---
- hosts: all
  roles:
    - role_name

Bu playbookda, hosts anahtar kelimesi ile hangi sistemler üzerinde çalışacağı tanımlanır ve roles anahtar kelimesi ile hangi rolün kullanılacağı belirtilir. Bu sayede, role_name adlı rolün tüm görevleri, dosyaları, meta bilgileri, vars değişkenleri ve template dosyaları çalıştırılır.

Ansible rol yönetimi, playbookları daha düzenli ve okunabilir hale getirir ve aynı görevleri yapmak için tekrarlamayı önler. Bu sayede, playbookların bakımı ve yönetimi daha kolay hale gelir.

Ansible Playbooks

Ansible playbookları, ansible’ın adım adım nasıl çalışacağını tanımlayan YAML dosyalarıdır. Ansible-playbook komutu ile çalıştırılırlar ve çok sayıda sistemi birden yönetebilirler.

Ansible playbookları, — satırı ile başlar ve name anahtar kelimesi ile görev tanımı yapılır. Hosts anahtar kelimesi ile görevin çalıştırılacağı sistemler tanımlanır. Become anahtar kelimesi ile görev root yetkileri ile çalıştırılır. Tasks anahtar kelimesi altında, görevler açıkça tanımlanır. Örneğin, aşağıdaki playbook, webservers grubundaki sistemlerde paketlerin güncellenmesini içerir:

---
- name: Update packages on webservers
  hosts: webservers
  become: true
  tasks:
    - name: Update package cache
      apt: update_cache=yes
    - name: Upgrade packages
      apt: upgrade=dist

Bu playbook, — satırı ile başlar ve name anahtar kelimesi ile görev tanımı yapılır. Hosts anahtar kelimesi ile görevin çalıştırılacağı sistemler (webservers grubu) tanımlanır. Become anahtar kelimesi ile görev root yetkileri ile çalıştırılır. Tasks anahtar kelimesi altında, Update package cache ve Upgrade packages adlı iki görev tanımlanır. Bu görevler, ansible’ın apt modülünü kullanarak paketlerin güncellenmesini içerir.

Ansible playbookları, çok sayıda görev içerebilir ve bu görevleri yapılandırma diline göre yazabilirsiniz. Örneğin, aşağıdaki playbook, nginx sunucusunun yüklenmesini ve yapılandırılmasını içerir:

---
- name: Configure nginx
  hosts: all
  become: true
  tasks:
    - name: Install nginx
      apt: pkg=nginx state=present
    - name: Update nginx configuration
      template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
    - name: Start nginx
      service: name=nginx state=started

Bu playbook, — satırı ile başlar ve name anahtar kelimesi ile görev tanımı yapılır. Hosts anahtar kelimesi ile görevin çalıştırılacağı sistemler (all) tanımlanır. Become anahtar kelimesi ile görev root yetkileri ile çalıştırılır. Tasks anahtar kelimesi altında, Install nginx, Update nginx configuration ve Start nginx adlı üç görev tanımlanır. Bu görevler, ansible’ın apt ve service modüllerini kullanarak nginx sunucusunun yüklenmesini ve yapılandırılmasını içerir.

Ansible playbookları, yapılandırma dosyalarının dağıtımı, paket yönetimi, hizmetlerin yönetimi, dosya dağıtımı gibi işlemleri yapabilir. Bu sayede, sistemlerin konfigürasyonlarını otomatikleştirebilir ve sistemler arasında konsistensiyi sağlayabilirsiniz.

Ansible Vault

Ansible Vault, ansible’ın parolalı ve şifreli dosyalar oluşturma özelliğidir. Bu özellik, güvenliği ve gizliliği önemli olan bilgileri (örneğin parolalar, özel anahtarlar vb.) saklamak için kullanılabilir. Ansible Vault ile oluşturulan dosyalar, ansible-vault komutu ile şifrelenir ve parola ile açılır.

Ansible Vault’ı kullanmak için, ansible-vault komutunu kullanarak dosya oluşturulur ve parola ile şifrelenir. Örneğin, aşağıdaki komut ile secrets.txt adlı dosya oluşturulur ve parola ile şifrelenir:

ansible-vault create secrets.txt

Ansible Vault ile oluşturulan dosyalar, ansible-vault edit komutu ile açılır ve düzenlenebilir. Örneğin, aşağıdaki komut ile secrets.txt adlı dosya açılır ve parola ile şifresi kırılır:

ansible-vault edit secrets.txt

Ansible Vault ile oluşturulan dosyalar, ansible-vault view komutu ile görüntülenebilir ancak düzenlenemez. Örneğin, aşağıdaki komut ile secrets.txt adlı dosya görüntülenir:

ansible-vault view secrets.txt

Ansible Vault ile oluşturulan dosyalar, ansible-vault decrypt komutu ile şifresi kaldırılır ve dosya açık hale getirilir. Örneğin, aşağıdaki komut ile secrets.txt adlı dosyanın şifresi kaldırılır:

ansible-vault decrypt secrets.txt

Ansible Vault ile oluşturulan dosyalar, ansible-vault rekey komutu ile parolası değiştirilebilir. Örneğin, aşağıdaki komut ile secrets.txt adlı dosyanın parolası değiştirilir:

ansible-vault rekey secrets.txt

Ansible Vault ile oluşturulan dosyalar, ansible-vault encrypt komutu ile tekrar şifrelenebilir. Örneğin, aşağıdaki komut ile secrets.txt adlı dosya tekrar şifrelenir:

ansible-vault encrypt secrets.txt

Ansible Vault, ansible görev dosyalarında da kullanılabilir. Örneğin, aşağıdaki görev dosyasında, secrets.txt adlı dosya secrets adlı değişkende yüklenir ve görevde kullanılır:

---
- name: Use secrets from Vault
  hosts: all
  tasks:
    - name: Load secrets from Vault
      include_vars:
        file: secrets.txt
        name: secrets
    - name: Print secrets
      debug:
        msg: "{{ secrets }}"

Bu görev dosyasında, include_vars anahtar kelimesi ile secrets.txt adlı dosya yüklenir ve secrets adlı değişkende saklanır. Sonra, debug anahtar kelimesi ile secrets değişkeni ekrana yazdırılır.

Ansible Vault’ı kullanarak, parolalı ve şifreli dosyalar oluşturarak güvenliği önemli olan bilgileri saklayabilir ve görev dosyalarında bu bilgileri kullanabilirsiniz.

Ansible Galaxy

Ansible Galaxy, ansible rol yönetiminin paylaşım platformudur. Ansible Galaxy, ansible kullanıcılarının oluşturduğu rol yönetim dosyalarını paylaştıkları bir platformdur. Bu sayede, ansible kullanıcıları farklı rol yönetim dosyalarını keşfedebilir ve kendi playbooklarına ekleyebilir.

Ansible Galaxy, aşağıdaki gibi bir komut ile kullanılır:

ansible-galaxy install username.rolename

Bu komut, username adlı kullanıcının oluşturduğu rolename adlı rolü yükler. Bu sayede, rol yönetim dosyaları kullanıma hazır hale gelir.

Ansible Galaxy, aşağıdaki gibi bir playbookda kullanılır:

---
- name: Use the role from Ansible Galaxy
  hosts: all
  roles:
    - username.rolename

Bu playbookda, roles anahtar kelimesi ile username adlı kullanıcının oluşturduğu rolename adlı rol kullanılır. Bu sayede, rol yönetim dosyaları çalıştırılır ve playbooklar daha etkili hale gelir.

Ansible Galaxy, ansible kullanıcılarının oluşturduğu rol yönetim dosyalarını paylaştıkları bir platformdur. Bu sayede, ansible kullanıcıları farklı rol yönetim dosyalarını keşfedebilir ve kendi playbooklarına ekleyebilir.