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.
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] }}"
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 }}"
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
Çı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:
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
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.