Değişkenler inventory ya da playbook dosyamız üzerine tanımladığımız değerlerin playbooklar içerisine direk yazılmaması ve inventoryde tanımlı değerin playbook içerisine değişkenler ile tanımlanmasında kullanılmaktadır.
Biraz örnek yapmak gerekirse,
Playbook.yml adında bir palybookum var. Aşağıdaki şekilde playbook içerisine vars: altında değişkenim dns_server olarak tanımlanmıi. taskslar altında ise yapılacak işlemler adım adım belirtilmiş. Tasks altında bulunan nameserver içerisindeki ip adresini değişkenimiz olarak güncellenmesi, atanmış değerin aktif kullanımına güzel bir örnek olacaktır.
- Name: add dns server to resolv.conf hosts: localhost vars: dns_server: 10.1.250.10 tasks: - lineinfile: path:/etc/resolv.conf line: 'nameserver 10.1.250.10'
- Name: add dns server to resolv.conf hosts: localhost vars: dns_server: 10.1.250.10 tasks: - lineinfile: path:/etc/resolv.conf line: 'nameserver {{ dns_server }}'
Multible firewall konfigurasyonu yaptığımız bir playbook üzerinde de ilgili işlemleri nasıl yaparız inceleyelim. Bu sefer inventory içerisinden değişkenlerimizi çağıralım. playbookumuzun mevcut hali aşağıdaki gibidir.
- name: Set Firewall Configurations hosts: web tasks: - firewalld: service: https permanent: true state: enabled - firewalld: port:8081/tcp permanent: true state: diasbled - firewalld: port: 161-162/udp permanent: true state: disabled - firewalld: source: 192.0.2.0/24 zone: internal state: enabled
Inventory dosyamıza bu değişkenlerimizi tanımlayalım.
#sample Inventory file Web http_port:8081 snmp_port=161-162 inter_ip_range=192.0.2.0
Değişkenler Jinja2 templating olarak playbook içerisinde kullanılır parantezler ” tırnak içerisine alınır.
- name: Set Firewall Configurations hosts: web tasks: - firewalld: service: https permanent: true state: enabled - firewalld: port: '{{http_port}}'/tcp permanent: true state: diasbled - firewalld: port: '{{snmp_port}}'/udp permanent: true state: disabled - firewalld: source: '{{inter_ip_range}}'/24 zone: internal state: enabled
Inventory dosyası yanı sıra değişken file da oluşturulabilir. web.yml gibi.
#sample varible file - web.yml http_port: 8081 snmp_port: 161-162 inter_ip_range: 192.0.2.0
İnternetten bulmuş olduğum bazı örnekleri de aşağıda paylaşıyorum.
- name: 'Update nameserver entry into resolv.conf file on localhost' hosts: localhost tasks: - name: 'Update nameserver entry into resolv.conf file' lineinfile: path: /etc/resolv.conf line: 'nameserver 10.1.250.10'
# Sample Inventory File localhost ansible_connection=localhost nameserver_ip=10.1.250.10
Bizlerden beklenen ise resolv.conf içerisinde tanımlanmış olna nameserver_ip değerinin inventoryden alınıp resolv.conf içerisine yazılması.
- name: 'Update nameserver entry into resolv.conf file on localhost' hosts: localhost tasks: - name: 'Update nameserver entry into resolv.conf file' lineinfile: path: /etc/resolv.conf line: 'nameserver {{ nameserver_ip }}'
# Sample Inventory File localhost ansible_connection=localhost nameserver_ip=10.1.250.10
Playbook’ta SNMP portunu devre dışı bırakmak için yeni bir görev ekledik. Ancak bağlantı noktası, oyun kitabında sabit kodlanmıştır. Yeni bir snmp_port değişkeni eklemek için envanter dosyasını güncelleyin ve burada kullanılan değeri atayın. Ardından, değişkenden gelen değeri kullanmak için çalışma kitabını güncelleyin.
Mevcut yapımız,
- name: 'Update nameserver entry into resolv.conf file on localhost' hosts: localhost tasks: - name: 'Update nameserver entry into resolv.conf file' lineinfile: path: /etc/resolv.conf line: 'nameserver {{ nameserver_ip }}' - name: 'Disable SNMP Port' firewalld: port: 160-161 permanent: true state: disabled
# Sample Inventory File localhost ansible_connection=localhost nameserver_ip=10.1.250.10
Değişkenler kullanılarak işlemlerin tamamlanmış hali,
- name: 'Update nameserver entry into resolv.conf file on localhost' hosts: localhost tasks: - name: 'Update nameserver entry into resolv.conf file' lineinfile: path: /etc/resolv.conf line: 'nameserver {{ nameserver_ip }}' - name: 'Disable SNMP Port' firewalld: port: '{{ snmp_port }}' permanent: true state: disabled
# Sample Inventory File localhost ansible_connection=localhost nameserver_ip=10.1.250.10 snmp_port=160-161