Ansible

Değişkenler ve Factler Nasıl Çalışılır – 8. Bölüm

Bu Ansible serisinde değişkenlerden bahsedeceğiz. Bir değişken, tıpkı birçok programlama dilinde olduğu gibi, temelde bir değeri temsil eden bir anahtardır.

Geçerli Değişken Adını Ne Oluşturur?

Bir değişken adı, harfleri, sayıları, alt çizgileri veya 2’sinin veya hepsinin bir karışımını içerir. Ancak, bir değişken adının her zaman bir harfle başlaması gerektiğini ve boşluk içermemesi gerektiğini unutmayın.

Geçerli ve kabul edilemez değişken adlarına ilişkin birkaç örneğe göz atalım:

Geçerli Değişken Adı Örnekleri:

football 
foot_ball
football20 
foot_ball20

Geçersiz Değişken Adı Örnekleri:

foot ball
20 
foot-ball

Değişken türlerini tartışalım:

1. Çalışma Kitabı Değişkenleri

Çalışma kitabı değişkenleri oldukça kolay ve basittir. Bir çalışma kitabında değişken tanımlamak için, değişkenlerinizi girintili olarak yazmadan önce vars anahtar kelimesini kullanmanız yeterlidir.

Değişkenin değerine erişmek için, değişkeni tırnak işaretleri içine alınmış süslü parantezler arasına yerleştirin.

İşte basit bir çalışma kitabı örneği:

- hosts: all
  vars:
    greeting: Hello world! 

  tasks:
  - name: Ansible Basic Variable Example
    debug:
      msg: "{{ greeting }}"

Yukarıdaki çalışma kitabında, greeting değişkenine Hello world! değeri atanmıştır. Çalışma kitabı çalıştırıldığında Merhaba dünya! mesajını yazdırır.

Playbook Variables in Ansible
Ansible’da Çalışma Kitabı Değişkenleri

Ek olarak, gösterildiği gibi bir listeye veya değişken dizisine sahip olabilirsiniz:

Aşağıdaki çalışma kitabı, continents adı verilen bir değişkenitanımlamaktadır. Değişken 5 farklı değere sahiptir. Bu değerlerin her birine, ilk değişken olarak indeks 0 kullanılarak kolayca erişilebilir.

Aşağıdaki çalışma kitabı örneği Asya değişkenini alır ve görüntüler (Dizin 1).

- hosts: all
  vars:
    continents:
      - Africa
      - Asia
      - South America
      - North America
      - Europe
      
  tasks:
  - name: Ansible List variable Example
    debug:
      msg: "{{ continents [1] }}"
Array of Variables in Ansible
Ansible’da Değişken Dizisi

Değişken listesi benzer şekilde gösterildiği gibi yapılandırılabilir:

vars:
    Continents: [Africa, Asia, South America, North America, Europe]

Listedeki tüm öğeleri listelemek için with_items modülünü kullanın. Bu, dizideki tüm değerler arasında döngü oluşturacaktır.

- hosts: all
  vars:
    continents: [Africa, Asia, South America, North America, Europe]

  tasks:
  - name: Ansible array variables example
    debug: 
      msg: "{{ item }}"
    with_items:
      - "{{ continents }}"
List Ansible Array Variables
Ansible Dizi Değişkenlerini Listeleme

Başka bir Ansible değişkeni türü de dictionary değişkenidir.

Dictionary değişkenleri ayrıca çalışma kitabında desteklenir. Dictionary değişkenini tanımlamak için, dictionary değişkeni adının hemen altındaki anahtar/değer çiftini tanımlamanız yeterlidir.

hosts: switch_f01

vars:
   http_port: 8080
   default_gateway: 10.200.50.1
   vlans:
       id: 10
       port: 2

Yukarıdaki örnekte, vlans sözlük değişkenidir, id ve port ise anahtar/değer çiftleridir.

hosts: switch_f01

vars:
   http_port: 8080
   default_gateway: 
   vlans:
      id: 10
      port: 20

 tasks:
   name: Configure default gateway
   system_configs:
   default_gateway_ip: “{{ default_gateway  }}“


   name: Label port on vlan 10
   vlan_config:
	vlan_id: “{{ vlans[‘id’]  }}“
     port_id: 1/1/ {{ vlans[‘port’]  }}

port_id için, değeri değişkenle değil metinle başlattığımız için, süslü parantezleri tırnak işaretleri içine almak gerekli değildir.

2. Özel Değişkenler

Ansible, Jinja2 şablonlarında ve çalışma kitaplarında başvurulabilen ancak kullanıcı tarafından değiştirilemeyen veya tanımlanamayan önceden tanımlanmış değişkenlerin bir listesini sağlar.

Toplu olarak, Ansible önceden tanımlanmış değişkenlerinin listesine Ansible facts denir ve bunlar bir çalışma kitabı yürütüldüğünde toplanır.

Tüm Ansible değişkenlerinin bir listesini almak için, aşağıda gösterildiği gibi Ansible ad-hoc komutundaki kurulum modülünü kullanın:

# ansible -m setup hostname

Bu, çıktıyı gösterildiği gibi JSON formatında görüntüler:

# ansible -m setup localhost
List Ansible Variables
Yanıtlanabilir Değişkenleri Listeleme

Çıktıdan, Ansible özel değişkenlerinin bazı örneklerinin şunları içerdiğini görebiliriz:

ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux

Diğer birçok Ansible özel değişkeni vardır, bunlar sadece birkaç örnektir.

Bu değişkenler, gösterildiği gibi bir Jinja2 şablonunda kullanılabilir:

<html>
<center>
   <h1> The hostname of this webserver is {{ ansible_hostname }}</h1>
   <h3> It is running on {{ ansible_os_family}}system </h3>
</center>
</html>

3. Envanter Değişkenleri

Son olarak, listede Ansible envanter değişkenlerimiz var. Envanter, Ansible tarafından yönetilecek tüm bilgisayarları içeren INI biçimindeki bir dosyadır.

Envanterlerde, bir ana sisteme bir değişken atayabilir ve daha sonra bunu bir çalışma kitabında kullanabilirsiniz.

[web_servers]

web_server_1 ansible_user=centos http_port=80
web_server_2 ansible_user=ubuntu http_port=8080

Yukarıdakiler, gösterildiği gibi bir çalışma kitabı YAML dosyasında temsil edilebilir:

---
   web_servers:
     web_server_1:
        ansible_user=centos
	   http_port=80

web_server_2:
        ansible_user=ubuntu
	   http_port=8080

Ana sistemler aynı değişkenleri paylaşıyorsa envanter dosyasında başka bir grup tanımlayarak daha az zahmetli hale getirebilir ve gereksiz tekrarlardan kaçınabilirsiniz.

Örneğin:

[web_servers]

web_server_1 ansible_user=centos http_port=80
web_server_2 ansible_user=centos http_port=80

Yukarıdakiler şu şekilde yapılandırılabilir:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

Ve çalışma kitabı YAML dosyasında bu, gösterildiği gibi tanımlanacaktır:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

Ansible Facts

Çalışma kitaplarını çalıştırırken, Ansible’ın yaptığı ilk görev, kurulum görevinin yürütülmesidir. Çıktıya rastlamış olmanız gerektiğine eminim:

TASK:  [Gathering facts] *********

Ansible facts, bağlandığınız uzak bilgisayarlar hakkındaki sistem özelliklerinden veya bilgi parçalarından başka bir şey değildir. Bu bilgiler, Sistem mimarisini, işletim sistemi sürümünü, BIOS bilgilerini, sistem saatini ve tarihini, sistem çalışma süresini, IP adresini ve donanım bilgilerini içerir.

Herhangi bir sistemle ilgili gerçekleri öğrenmek için aşağıdaki komutta gösterildiği gibi setup modülünü kullanmanız yeterlidir:

# ansible -m setup hostname

Örneğin:

# ansible -m setup database_server

Bu, gösterildiği gibi JSON biçiminde büyük bir veri kümesini yazdırır:

Ansible Get System Facts
Ansible Sistem Bilgilerini Alın

Mantıklı gerçekler, sistem yöneticilerine hangi işlemleri gerçekleştirmeleri gerektiği konusunda yardımcı olur; örneğin, işletim sistemine bağlı olarak, hangi yazılım paketlerinin yüklenmesi gerektiğini ve bunların nasıl yapılandırılması gerektiğini vb. bilebilirler.

Özel Bilgiler

Ansible tarafından toplanabilecek kendi özel factlerinizi oluşturabileceğinizi de biliyor muydunuz?

İlk adım, yönetilen veya uzak bilgisayarda bir /etc/ansible/facts.d dizini oluşturmaktır.

Bu dizinin içinde, .fact uzantılı bir dosya(lar) oluşturun. Bu dosyalar, Ansible’ın bir çalışma kitabı çalıştırıldıktan sonra aldığı diğer factsleri içeren JSON verilerini döndürür.

Tarih ve saati alan, date_time.fact adlı özel bir olgu dosyası örneğini burada bulabilirsiniz.

# mkdir -p /etc/ansible/facts.d
# vim /etc/ansible/facts.d/date_time.fact

İçine aşağıdaki satırları ekleyin.

#!/bin/bash
DATE=`date`
echo "{\"date\" : \"${DATE}\"}"

Dosyayı kaydedin ve çıkın.

Şimdi yürütme izinlerini atayın:

# chmod +x /etc/ansible/facts.d/date_time.fact

Şimdi, Ansible kontrol merkezinde check_date.yml adlı bir çalışma kitabı oluşturalım

---

- hosts: webservers

  tasks:
   - name: Get custom facts
     debug:
      msg: The custom fact is {{ansible_local.date_time}}

Olgu dosyasını ansible_local değişkenine ekleyin. ansible_local, tüm özel gerçekleri saklar.

Şimdi çalışma kitabını çalıştırın ve Ansible’ın olgu dosyasına kaydedilen bilgileri aldığını gözlemleyin:

# ansible_playbook check_date.yml
Create Ansible Custom Facts
Ansible Özel Bilgiler Oluşturun

Yazının orijinalini buradan okuyabilirsiniz.