Ansible Serisinin 7. Bölümünde, yönetilen noktalarda özelleştirilmiş yapılandırmalar oluşturmak için Ansible’da şablonların nasıl üretileceğini ve kullanılacağını öğreneceksiniz. Ansible’da şablon oluşturma, çalışma kitabı dosyalarını minimum düzeyde düzenleyerek özel yapılandırmaları farklı sistemler çalıştıran yönetilen noktalara aktarmanın kolay ve basit bir yoludur.
Ansible’da Şablon Oluşturma nedir?
Bir şablonun ne olduğunu daha iyi anlamak için, departmanını bir seminere davet etmek üzere bir e-posta taslağı hazırlayan bir BT yöneticisini düşünelim. E-posta, üyelerin her birine gönderilir .
E-posta, e-postanın gövdesi aynı kalacak, ancak üyelerin adresleri ve adları farklı olacak şekilde özelleştirildi. Alıcılar değişkenken, e-posta şablon haline gelir.
Bu genel bir örnekti. Ansible, dinamik içerik veya ifadeler oluşturmak için kullanılan Python çerçeveleri için modern bir şablon oluşturma motoru olan Jinja2’yi kullanır. Şablon oluşturma, birden çok sunucu için özel yapılandırma dosyaları oluştururken son derece yararlıdır, ancak her biri için benzersizdir.
Jinja2, tanımlanmış bir değişkeni çevrelemek için çift süslü parantez {{ … }} kullanır. Yorumlar için {{# #} ve koşullu ifadeler için {% … %} kullanabilrisiniz.
Ağınızda, gösterildiği gibi ilgili VLAN’larına göndermek istediğiniz ana sistemlere sahip bir VLAN veri modeliniz olduğunu varsayalım.
vlans: - id: 10 name: LB - id: 20 name: WB_01 - id: 30 name: WB_02 - id: 40 name: DB
Bu yapılandırmayı işlemek için vlans.j2 adlı ilgili jinja2 şablonu gösterildiği gibi görünecektir. Gördüğünüz gibi, vlan.id ve vlan.name değişkenleri kaşlı ayraçlar içine alınmıştır.
vlan {{ vlan.id }} name {{ vlan.name }}
Her şeyi çalışma kitabında bir araya getirdiğimizde, aşağıda gösterildiği gibi görünecektir:
- hosts tasks: - name: Rendering VLAN configuration template: src: vlans.j2 dest: "vlan_configs/{{ inventory_hostname }}.conf"
Örnek 1: Web Sunucularını Farklı Dağıtımlarda Yapılandırma
Bu örnekte, CentOS ve Ubuntu çalıştıran 2 web sunucusunun bilgisayar adı ve işletim sistemi hakkında bilgi görüntüleyecek olan index.html dosyaları oluşturacağız.
Setup
Ubuntu 18 - IP address: 173.82.202.239 CentOS 7 - IP address: 173.82.115.165
Apache web sunucusu zaten her iki sunucuda da kurulu.
CentOS 7 için
Ubuntu 18.04 için
O halde gösterildiği gibi birçalışma kitabı test_server.yml oluşturalım:
--- - hosts: all become: yes tasks: - name: Install index.html template: src: index.html.j2 dest: /var/www/html/index.html mode: 0777
Jinja dosya şablonumuz, her web sunucusundaki index.html dosyasına gönderilecek olan index.html.j2’dir. Bunun bir jinja2 dosyası olduğunu belirtmek için sonuna .j2 uzantısını koymayı unutmayın.
Şimdi index.html.j2 şablon dosyasını oluşturalım.
<html> <center> <h1> The hostname of this webserver is {{ ansible_hostname }}</h1> <h3> It is running on {{ ansible_os_family}}system </h3> </center> </html>
Bu şablon, ansible_hostname ve ansible_os_family’nin, tarayıcıdaki ayrı web sunucularının ilgili ana bilgisayar adları ve işletim sistemleriyle değiştirilecek yerleşik değişkenler olduğu temel bir HTML dosyasıdır.
Şimdi çalışma kitabını çalıştıralım.
# ansible-playbook test_server.yml
Şimdi hem CentOS 7 hem de Ubuntu web sunucuları için web sayfalarını yeniden yükleyelim.
CentOS 7 için
Ubuntu 18.04 için
Gördüğünüz gibi, her sunucuda bilgisayar adı ve işletim sistemi ailesi hakkında farklı bilgiler görüntülendi.
FİLTRELER:
Bazen, bir değişkenin değerini belirli bir şekilde görünen bir dizeyle değiştirmeye karar verebilirsiniz.
Örnek 1: Dizelerin Büyük/Küçük Harf Görünmesini Sağlama
Örneğin, önceki örnekte, Ansible değişkenlerini Büyük Harf olarak göstermeye karar verebiliriz. Bunu yapmak için, üstteki değeri değişkene ekleyin. Bu şekilde değişkendeki değer Büyük harf biçimine dönüştürülür.
{{ ansible_hostname | upper }} => CENTOS 7 {{ ansible_os_family | upper }} => REDHAT
Benzer şekilde, alt bağımsız değişkeni ekleyerek dize çıktısını küçük harfe dönüştürebilirsiniz.
{{ ansible_hostname | lower }} => centos 7 {{ ansible_os_family | lower }} => redhat
Örnek 2: Bir Dizeyi Diğeriyle Değiştirme
Ek olarak, bir dizeyi başka bir dizeyle değiştirebilirsiniz.
Örneğin:
Filmin adı {{ movie_name }} => Filmin adı Ring.
Çıktıyı başka bir dizeyle değiştirmek için, replace bağımsız değişkenini gösterildiği gibi kullanın:
Filmin adı {{ film_adı | replace (“Ring“,”Heist”) }} => Filmin adı Heist.
Örnek 3: List ve Set Filtreleri
Bir dizideki en küçük değeri almak için min filtresini kullanın.
{{ [ 2, 3, 4, 5, 6, 7 ] | min }} => 2
Benzer şekilde, en büyük sayıyı almak için maksimum filtresini kullanın.
{{ [ 2, 3, 4, 5, 6, 7 ] | max }} => 7
Benzersiz değerleri görüntülemek için unique filtresini kullanın.
{{ [ 2, 3, 3, 2, 6, 7 ] | unique }} => 2, 3
0 ile değer arasında rastgele bir sayı elde etmek için random filtresini kullanın.
{{ 50 | random }} => Some random number
DÖNGÜLER:
Tıpkı programlama dillerinde olduğu gibi, Ansible Jinja2’de de döngülerimiz var.
Örneğin, bir sayı listesi içeren bir dosya oluşturmak için aşağıdaki örnekte gösterildiği gibi for döngüsünü kullanın:
Örnek 1:
{% for number in [0, 1, 2, 3, 4, 5, 6, 7] %} {{ number }} {% end for %}
Belirli değerleri filtrelemek ve elde etmek için for döngüsünü if-else ifadeleriyle birleştirebilirsiniz.
Örnek 2:
{% for number in [0, 1, 2, 3, 4, 5, 6, 7] %} {% if number == 5 %} {{ number }} {% endif%} {% endfor %}
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.