Bu kılavuzda, Ansible’da değişkenleri eklemenin ve kullanmanın farklı yollarını detaylı örneklerle inceleyeceğiz.
Ansible’da değişkenler neden kullanılır?
Ansible’daki değişkenler şunları yapmanıza olanak tanır:
- Yapılandırmayı basitleştirin ve yedekliliği azaltın.
- Farklı ortamları (örneğin geliştirme, hazırlama, üretim) kolaylıkla yönetin.
- Sabit kodlamayı azaltarak oyun kitaplarını daha okunabilir ve sürdürülebilir hale getirin.
include_vars kullanımı
include_vars modülü, harici bir dosyadaki değişkenleri oyun kitaplarınıza eklemenize olanak tanır. Bu, değişkenlerinizi daha iyi okunabilirlik ve yeniden kullanılabilirlik için ayrı dosyalarda düzenlemek istediğinizde kullanışlıdır.
Örnek:
Aşağıdaki içeriğe sahip app_vars.yml adlı bir dosyayı ele alalım:
# app_vars.yml
app_name: "MyApp"
app_version: "1.0.0"
Bu değişkenleri include_vars kullanarak bir oyun kitabına dahil edebilirsiniz:
- name: Include variables from a file
hosts: all
tasks:
- name: Include app variables
include_vars: app_vars.yml
- name: Use included variables
debug:
msg: "Deploying {{ app_name }} version {{ app_version }}"
Bu oyun kitabı app_vars.yml’deki değişkenleri içerecek ve bunları dağıtım sırasında kullanacaktır.
Değişkenleri koşullu olarak dahil etme
Bazen belirli koşullara bağlı olarak değişkenleri eklemeniz gerekebilir. include_vars modülü, ana bilgisayar grupları veya ortam değişkenleri gibi faktörlere bağlı olarak bir dosyayı koşullu olarak eklemenize olanak tanır.
Örnek:
Farklı ortamlar için iki değişken dosyanız olduğunu varsayalım:
dev_vars.ymlgeliştirme içinprod_vars.ymlüretim için
Bu değişkenleri koşullu olarak nasıl dahil edebileceğiniz aşağıda açıklanmıştır:
- name: Include environment-specific variables
hosts: all
tasks:
- name: Include variables based on environment
include_vars: "{{ env }}_vars.yml"
when: env is defined
- name: Use included environment variables
debug:
msg: "Environment: {{ env }}"
Bu örnekte, env değeri hangi değişken dosyasının dahil edileceğini belirleyecektir.
Döngüdeki her öğe için değişkenleri dahil etme
Bir döngüdeki her öğe için farklı değişken dosyaları eklemek isteyebileceğiniz senaryolarınız olabilir. Bu, birden fazla yapılandırmayı dinamik olarak yönetirken faydalı olabilir.
Örnek:
Farklı uygulamalar için ayrı değişken dosyalarınız olduğunu varsayalım:
app1_vars.ymlapp2_vars.yml
Bu değişken dosyalarını bir döngü kullanarak ekleyebilirsiniz:
- name: Include variables for each app
hosts: all
tasks:
- name: Include app-specific variables
include_vars: "{{ item }}_vars.yml"
loop:
- app1
- app2
- name: Use included variables
debug:
msg: "Configured app: {{ app_name }}"
Bu örnekte, include_vars her bir öğeyi dolaşacak ve ilgili değişken dosyasını ekleyecektir.
Harici dosyalardan değişkenleri dahil etme
Değişkenleri ayrı dosyalarda düzenlemek, oyun kılavuzlarınızı temiz ve modüler tutar. Harici dosyalardan değişkenleri vars_files veya include_vars kullanarak ekleyebilirsiniz.
Örnek:
common_vars.yml adında bir değişken dosyası tanımlayın:
# common_vars.yml
timezone: "UTC"
Bu dosyayı oyun kitabınıza ekleyin:
- name: Include external variables
hosts: all
vars_files:
- common_vars.yml
tasks:
- name: Display timezone
debug:
msg: "The configured timezone is {{ timezone }}"
vars_files’ı kullanmak, birden fazla görev ve rolde ortak değişkenleri eklemeyi kolaylaştırır.
Ansible Vault’tan değişkenleri dahil etme
Ansible Vault, parolalar veya API anahtarları gibi hassas verileri şifrelemenize olanak tanır. Bu değişkenleri güvenli bir şekilde eklemek için include_vars komutunu kullanabilirsiniz.
Örnek:
vault.yml adında şifrelenmiş bir dosya oluşturun:
Hassas değişkenlerinizi ekleyin:
# vault.yml
db_password: "supersecret"
Şifrelenmiş dosyayı oyun kitabınıza ekleyin:
- name: Include variables from Ansible Vault
hosts: all
tasks:
- name: Include encrypted variables
include_vars: vault.yml
- name: Display database password
debug:
msg: "The database password is {{ db_password }}"
Değişkenleri şifresini çözmek ve kullanmak için playbook’u çalıştırırken kasa parolasını sağlamanız gerekecektir.
Çalışma zamanında değişkenleri tanımlamak için set_fact’i kullanma
set_fact modülü, playbook çalışması sırasında değişkenleri dinamik olarak tanımlamak için kullanılır. Bu, özellikle görev çıktısına veya diğer çalışma zamanı koşullarına dayalı değerler oluşturmak için kullanışlıdır.
Örnek:
- name: Set variables at runtime
hosts: all
tasks:
- name: Set a fact
set_fact:
app_status: "deployed"
- name: Use runtime variable
debug:
msg: "The application is {{ app_status }}"
set_fact modülü, app_status’u çalışma zamanında ayarlayarak sonraki görevlerde kullanıma hazır hale getirir.