Ansible Serisinin 6. Bölümünde, şimdi daha derine ineceğiz ve bir dizi sistem yönetimi görevini gerçekleştirmede yardımcı olan ek modülleri keşfedeceğiz.
Her modül hakkında temel bir fikir edinecek ve belirli görevleri gerçekleştirmek için mevcut seçeneklere bakacaksınız.
1. Ansible’da Yazılım Paketlerini ve Havuzları Yönetme
Linux sistemlerde paket kurarken farklı dağıtımlar ile farklı paket yöneticileri gelmektedir. RedHat dağıtımları için yum & dnf kullanılmaktadır, Debian ve benzerleri için ise apt kullanılır.
Ansible, farklı sistemler için farklı paket yöneticileri kullanma ihtiyacını ortadan kaldıran package adı verilen bir modülle birlikte gelir. Ana sistemin ilgili paket yöneticisini otomatik olarak kullanır ve böylece işi kolaylaştırır.
Yazılım Paketlerini Kurma
Örneğin, hem Debian hem de RedHat dağıtımlarını içeren bir bilgisayar grubuna htop yüklemek için aşağıdaki install_htop.yml çalışma kitabında gösterilen paket modülünü kullanın.
--- - name: Install htop on Ubuntu and CentOS hosts: all tasks: - package: name: htop state: installed
NOT: Paket adları bir işletim sisteminden diğerine farklılık gösterebilir. Örneğin, Redhat dağıtımlarında httpd ve Debian/Ubuntu sistemlerinde Apache2, Apache web sunucusunu belirtir. Bu nedenle, bu paketleri geçerken ekstra dikkatli olunmalıdır. Genellikle değişkenleri veya koşullu ifadeleri kullanmak en iyisidir.
2. Servisleri Ansible Kullanarak Yönetme
Ardından, Linux sistemlerindeki servisleri yönetmek için kullanılan bir service modülümüz var. Bir hizmeti başlatmak, durdurmak veya yeniden başlatmak için kullanılır. Bir hizmeti etkinleştirmek için de kullanabilirsiniz, böylece bir sistem önyüklendiğinde hizmeti otomatik olarak başlatır.
Bir Hizmeti Başlatma ve Etkinleştirme
Örneğin, RHEL 8’de Apache web sunucusunu başlatmak ve etkinleştirmek için, service’i gösterildiği gibi kullanın.
--- - name: Start and enable httpd service hosts: webservers tasks: - service: name: httpd state: started enabled: yes
Bir Hizmeti Durdurma
httpd hizmetini durdurmak için, stop özelliğini iletin.
--- - name: Stop httpd service hosts: webservers tasks: - service: name: httpd state: stopped
Bir Hizmeti Yeniden Başlatın
httpd hizmetini yeniden başlatmak için yeniden başlatılan özniteliği iletin.
--- - name: Restart httpd service hosts: webservers tasks: - service: name: httpd state: restarted
3. Managing Firewall with Ansible
Sistem yöneticilerinin üstlendiği bir diğer önemli görev de güvenlik duvarının yönetimidir. Ansible oyun kitaplarında, güvenlik duvarı ve ufw modülleri ile bu çok daha kolay hale getirildi. Güvenlik duvarını bir bağlantı noktasına veya hizmete ve hatta bir kaynak adresine izin verecek veya bunları engelleyecek şekilde yapılandırabilirsiniz.
Hemen konuya geçelim ve birkaç örneğe bakalım:
Güvenlik duvarında Port 80’i açma/engelleme
--- - name: Allow port 80 hosts: webservers tasks: -firewalld: port: 80/tcp permanent: yes state: enabled
Yukarıdaki çalışma kitabında, güvenlik duvarında 80 numaralı bağlantı noktasına izin verilir.
Permanent: yes seçeneği, güvenlik duvarı kuralını uygular ve yeniden başlatmalarda kalıcı olmasını sağlar. Ancak bu kural hemen uygulanmaz. Yalnızca yeniden başlatmanın ardından yürürlüğe girer. Kuralı hemen uygulamak için hemen seçeneğini immediate: yes
İzin verilen adresleri belirtmek için source:0.0.0.0/0 deyimini kullanın.
- firewalld: source: 192.168.0.0/24 zone: public state: enabled
Bağlantı noktası seçeneğinin kullanılmasına izin verilecek bağlantı noktası aralığını aşağıdaki gibi belirtmek için:
- firewalld: port: 213-567/udp permanent: yes state: enabled
Bağlantı noktasını engellemek için durum seçeneğini gösterildiği gibi devre dışı olarak değiştirin:
-firewalld: port: 80/tcp permanent: yes state: disabled
Güvenlik duvarında Hizmet Ekleme/Engelleme
Bir bağlantı noktası ekleme/engelleme dışında, aynı kuralları bir hizmete de uygulayabilirsiniz. Servis modülünü kullanın ve eklenecek servisi ekleyin ve durum seçeneğinin etkin olarak ayarlandığından emin olun.
- firewalld: service: https permanent: true state: enabled
Hizmeti engellemek için durum seçeneğini devre dışı olarak ayarlayın.
- firewalld: service: https permanent: true state: disabled
4. Dosyaları veya Klasörleri Ansible ile Arşivleme
Arşivleme, bir dosya veya klasörün kolayca taşınabilir ve boyut olarak daha küçük bir biçime sıkıştırılması anlamına gelir. Ansible, archive adı verilen bir modülle birlikte gelir. Tek gereken, dosyanın kaynak yolunu ve sıkıştırılmış dosyanın hedefini belirtmektir.
Bir Dizini Sıkıştırma
Aşağıda archive.yml isimli örneği inceleyin.
--- - hosts: webservers tasks: • name: Compress a folder archive: path: /opt/data/web dest: /tmp/web.gz
Yukarıdaki çalışma kitabı /opt/data/web dizinini sıkıştırır ve /tmp/web.gz dosyasına kaydeder.
Bir Dizini İstenilen Formatla Sıkıştırma
Varsayılan sıkıştırma formatı .gz’dir, ancak bu, format parametresi kullanılarak değiştirilebilir. Aşağıdaki çalışma kitabını inceleyin.
--- - hosts: webservers Tasks: - name: Create a zip archive archive: path: /opt/data/web dest: /tmp/web format: zip
Yukarıdaki çalışma kitabı /opt/data/web dizinini /tmp/web.zip olarak sıkıştırır.
Bir Dosyayı Açma
Unarchive parametresini kullanarak sıkıştırılmış bir dosyayı da açabilirsiniz. Aşağıdaki çalışma kitabını inceleyin.
--- - hosts: webservers tasks: - name:Uncompress /tmp/web.gz to/opt directory on Ansible controller unarchive: src: /tmp/web.bz2 dest: /opt/
Yukarıdaki çalışma kitabı /opt/data/web.gz dosyasını Ansible denetleyicisinde /opt olarak açar.
Uzak Bilgisayardaki Bir Dosyayı Açma
Uzak kaynak sistemini belirtmek için remote_src=yes seçeneğini kullanın.
--- - hosts: webservers tasks: - name:Uncompress /tmp/web.bz2 to/opt on remote host unarchive: src: /tmp/web.bz2 dest: /opt/ remote_src=yes
Yukarıdaki çalışma kitabı, uzak düğümdeki /tmp/web.bz2 dosyasını /opt/ dizinine açar.
5. Ansible ile Görevleri Planlama
Cron modülü, Ansible Playbooks’ta işlerin planlanmasına yardımcı olur.
Zamanlanmış Görev Oluşturma
Aşağıdaki çalışma kitabını inceleyin.
--- - hosts: webservers tasks: - name: Create a scheduled task cron: name: Run employee attendance job: sh /opt/scripts/attendace.sh month: 4 day: 5 hour: 17 minute: 00
Çalışma kitabı, komut dosyasını 5 Nisan’da saat 17:00’de çalıştırır.
Belirli Bir Tarihte Komut Dosyası Planlama
Bu komut dosyasını yalnızca Nisan ayının 5. günü Pazartesi olduğunda çalışacak şekilde programlamak istiyorsanız, hafta içi gün: 1 niteliğini kullanın. 0, Pazar’ı ve 6, cron notasyonuna göre Cumartesi’yi belirtir.
month: 4 day: 5 hour: 17 minute: 00 weekday: 1
Bu alanların herhangi birindeki yıldız işareti (*), herhangi bir değeri gösterir.
Belirli Bir Tarihte Bir Görev Çalıştırma
İşi hafta içi gün ne olursa olsun 5 Nisan’da 17:00’de çalıştırmak için gösterilen zaman parametrelerini kullanın.
month: 4 day: 5 hour: 17 minute: 00 weekday: *
Her Ay Belirli Bir Günde Bir İşi Çalıştırma
Her ayın 5. günü saat 17:00’de cron işini yürütmek için aşağıdaki ayarları kullanın.
month: * day: 5 hour: 17 minute: 00 weekday: *
Günlük Bir Görev Çalıştırma
Cron işini her gün saat 17:00’de yürütmek için saat ayarlarını gösterildiği gibi yapın:
month: * day: * hour: 17 minute: 00 weekday: *
Görevi Her 5 Saatte Bir Çalıştırma
Her 5 saatte bir cron işini yürütmek için, gösterildiği gibi */5 adım değerini kullanın.
month: * day: * hour: */5 minute: * weekday: *
6. Ansible ile Kullanıcıları ve Grupları Yönetme
Ansible ile kullanıcıları ve grupları da oldukça zahmetsizce yönetebilirsiniz.
Yeni Kullanıcı Oluşturma
Yeni bir kullanıcı oluşturmak için user modülünü gösterildiği gibi kullanın.
--- - hosts: webservers tasks: - name: Create a new user user: name: Jack
UID, gruplar gibi ek seçenekler de ekleyebilirsiniz.
- name: Create a new user user: name: Jack comment: Jack Peters uid: 1002 group: administrators shell: /bin/bash
Bir Kullanıcıyı Kaldırma
Kullanıcıyı kaldırmak için remove: yes ifadesini kullanın.
- name: Remove the user 'Jack' user: name: Jack state: absent remove: yes
Yeni Grup Oluşturma
Yeni bir grup oluşturmak için group modülünü kullanın.
- name: Create a group group: name: developers
7. Ansible ile Dosyalar ve Dizinler Oluşturma
Dizin dosyaları oluşturmak için file modülünü kullanın.
Yeni Bir Dizin Oluşturma
Örneğin, yeni bir dizin oluşturmak için.
--- - hosts: webservers tasks: - name: Create a new directory file: path: /opt/app state: directory
Sahip, grup ve dosya izinleri gibi diğer öznitelikleri ekleyebilirsiniz.
- hosts: webservers tasks: - name: Create a new directory file: path: /opt/web state: directory owner: www-data group: www-data mode: 0644
Ek olarak, recurse: yes ifadesini kullanarak yinelemeli olarak dizinler oluşturabilirsiniz.
--- - hosts: webservers tasks: - name: Create directories recursively file: path: /opt/web/app state: directory owner: www-data group: www-data mode: 0644 recurse: yes
Dosya Oluşturma
Bir dosya oluşturmak için state: touch seçeneğini kullanın.
--- - hosts: webservers tasks: - name: Create a new file file: path: /opt/web/index.html state: touch owner: www-data group: www-data mode: 0644
8. Ansible ile Depolamayı Yönetme
lvg modülü, LVM hacimlerini ve gruplarını yapılandırmak için kullanılır.
Bir LVM Hacim Grubu Oluşturun
Aşağıdaki çalışma kitabını inceleyin:
--- - hosts: webservers tasks: • name: Create lVM volume group lvg: vg: vg1 pvs: /dev/sda1 pesize: 32
Bu, /dev/sda1 bölümünün üzerinde 32 MB fiziksel boyuta sahip bir birim grubu oluşturur.
Oluşturulduktan sonra, gösterildiği gibi mantıksal bir birim oluşturmak için lvol modülünü kullanın.
Mantıksal Birim Oluşturma
--- - hosts: webservers tasks: - name: Create lVM volume lvol: vg: vg1 lv: lvol1 pvs: /dev/sda1
9. Ansible ile Dosya Sistemlerini Yönetme
Bir blok cihazda dosya sistemi oluşturmak için filesystem modülünü kullanın.
Bir Dosya Sistemi Oluşturma
Aşağıdaki çalışma kitabı, blok biriminde xfs dosya sistemi türünü oluşturur.
--- - hosts: webservers tasks: - name: Create a filesystem filesystem: fstype: xfs dev: /dev/vg1/lvol1
Bir Dosya Sistemi Bağlama
Daha sonra, aşağıdaki çalışma kitabında gösterildiği gibi, mount modülünü kullanarak blok alanı bağlamaya devam edebilirsiniz:
--- - hosts: webservers tasks: - name: Mount a filesystem mount: fstype: xfs src: /dev/vg1/lvol1 path: /opt/web state: mounted
Yazının orijinalini 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.