İçerik
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’ı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.