Ansible

Yönetilen Noktalarda Konfigürasyonlar Yapmak için Ansible’da Şablonlar Nasıl Oluşturulur – Bölüm 7

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

Apache Web Page on CentOS 7
CentOS 7’de Apache Web Sayfası

Ubuntu 18.04 için

Apache Web Page on Ubuntu 18.04
Ubuntu 18.04’te Apache Web Sayfası

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
Create Ansible Template File
Ansible Şablon Dosyası Oluşturun

Şimdi hem CentOS 7 hem de Ubuntu web sunucuları için web sayfalarını yeniden yükleyelim.

CentOS 7 için

Verify Apache Web Page on CentOS 7
CentOS 7’de Apache Web Sayfasını Doğrulayın

Ubuntu 18.04 için

Verify Apache Web Page on Ubuntu 18.04
Ubuntu 18.04’te Apache Web Sayfasını Doğrulayın

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
Make String Uppercase
Dizeyi Büyük Harf Yap

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
Make String Lowercase

Ö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.