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