Esitliklerle Ansible – Variables/Degerler Kontrol ve Moduller

Degiskenler , her yazilimi dilinde oldugu gibi playbook icersinde, Inentory icersinde birtakim degiskenler kullanma ihtiyacimiz olacaktir.

Ansible ile once dogru degisken nasil kullanilmali ona bakalim ;

  • degisken1 –> olur
  • degisken_1 –> olur
  • 1234 –> olmaz, rakamla baslayamaz
  • ahmet abi –> olmaz, bosluk yok
  • en.guzel –> olmaz
  • Birde python ile gelistirildiginden kullandiginiz key’ler python rezerve edilmis ozel anlamli seyler olmazin mesela –> islower , split , encode gibi gibi , aksi taktirde olasi bir degiskene erisimde eger “.” notasyonu kullaniyorsaniz problem yaratacaktir

Inventory ve Variables 

Buna en guzel ornek gurupladigimiz hostlar olabilir , ornegin

 

noroot@ansible:~$ cat /etc/ansible/hosts

[testsunucular]

sunucu1 ansible_user=noroot

Mesela yukarida sunucu1 hostuna ansible_user degiskeni noroot olacak sekilde set edilmis

noroot@ansible:~$ cat /etc/ansible/hosts

[testsunucular]

sunucu1 ansible_user=noroot

sunucu2 ansible_user=noroot

[testsunucular:vars]

ntp_server_adresi=NTP1.ULAKBIM.GOV.TR

Yukarda ise tum testsunucular gurubuna uye olan sunucu1 ve sunucu2 icin ntp_server_adresi diye bir deger atadik bunu playbook’da kullanilabilir olacak.

Simdi bunu test etmenin kolay bir yolu var bir onceki makaledeki playbook a ufak bir eklenti yapalim , eklentiyi task altindaki ilgili name girdisinin altina ayni esitlikte koyalim, yani

– hosts: sunucu1

tasks:

– name: Apache kurulumuna baslayalim

apt: name=apache2 state=latest

become: yes

       – debug: var=ntp_server_adresi

Cikti olarak asagidaki gibi gormeniz lazim

TASK [debug] *******************************************************************

ok: [sunucu1] => {

“ntp_server_adresi”: “NTP1.ULAKBIM.GOV.TR”

}

Playbook ve Variables 

– hosts: sunucu1

    vars:

    cok_guzel: cidden_guzel

tasks:

– name: Apache kurulumuna baslayalim

apt: name=apache2 state=latest

become: yes

               – debug: msg=”ilk deger ve ciktisi {{ntp_server_adresi}} sonrada ikinci deger ve ciktisi {{cok_guzel}}”

Yukarda cok_guzel diye bir degisken hazirladik , deger olarak cidden_guzel dedik yanliz burada Inventory de oldugu gibi esitlikle degil bir key/value cifti olarak girdik, vars key’i eger devam edilir ise bir array halinde birden fazla deger tutacak, ek olarak debug icinde farkli bir yazilim koyduk buraya, ekrana belirttigimiz mesaji donuyor.

Burada degiken illa cok_guzelcidden_guzel seklinde degil, mesela dosya yolu ve kendisi olabilir ;

vars:

dosya_1/etc/network-scripts/ifcfg-eth0 

Degiskenler istenir ise disarida bir YAML dosyasi olarak yuklenebilir ;

  • task disinda
    • – hosts: sunucu1
    •   vars_files:
    •       – dosya_adi.yml

Burada dosya_adi.yml icersinde sadece asagidaki key/value degerini tutuyor olabilir

dosya_1/etc/network-scripts/ifcfg-eth0

  • task icinde
    • include_vars: dosya_adi.yml

Istenir ise bir YAML dosyasi bir playbook’a include edilebilir , ornegin ;

– include : deneme.yml

Bu arada birde normalde programa dillerinde return ile bir fonksiyon veya class’in degerini nasil donebiliyorsaniz , buradada register ile ilgili komut ciktisini bir degiskene atayabilirsiniz, ornegin ;

-name Ben Kimim

command: whoami

register: ben_kimim_degiskeni

Bu arada calisan tum task icerindeki komutlar olumlu sonlayabilir bu durumda playbook durur , eger durmasini istemiyor iseniz ignore_errors: True degiskenini ilgili task altina koyabilirsiniz .

– hosts: sunucu1

tasks:

– name: Apache kurulumuna baslayalim

apt: name=apache2 state=latest

become: yes

ignore_error: True

       – debug: var=ntp_server_adresi

Playbook interactive’de olabilir , disardan deger alabilir ve bunu size sorabilir ;

– name: Neyi kuralim usta ?

pause: prompt=”Paket Adi ne olacak ?”

register: paket_adi

Kontrol kismina gecmeden once “facts” olayindan basedelim , daha once yaptigimiz gibi komut satirina asagidaki gibi yazip calistirin.

noroot@ansible:~/playbooks$ ansible sunucu1 -m setup

veya

noroot@ansible:~/playbooks$ ansible sunucu1 -m setup -a ‘filter=ansible_distribution’

Size bir suru degisken ve degiskenlere karsilik degerler gelecek , iste bunlari playbook’da kullanabiliriz , mesela apache kurulumu yapacagiz ve ubuntu icin farkli centos icin farkli paket adlari mevcut bu durumda iste facts’leri kullanarak bu isi yapabiliriz mesela ;

- set_fact package_name=httpd
  when: ansible_os_family == "Redhat"
- set_fact package_name=apache2
  when: ansible_os_family == "Debian"
- name: Apache Kur Redhat
  yum: name=httpd state=latest
  when: ansible_os_family == "Redhat"
- name: Apache Kur Ubuntu
  apt: name=apache2 state=latest
  when: ansible_os_family == "Debian"
Not : Ubuntu -> Debian olarak gozukuyor ciktida

Bunla beraber istenir ise command prompt’da degerler set edilebilir , ornegin

noroot@ansible:~$ ansible/ansible-playbook localhost ……. –extra-vars “”package_name=apache2”

Ansible ile islem yaparken paralel islem yapabilirsiniz bunu icin -f 10 mesela ayni anda 10 islem yapilabilir , diyelim host dosyasina bir gurup altinda 10 sunucu koydunuz , calistirdginiz playbook 10 host da birden paralel calistirilabilir, varsayili deger 5

Ornek Birkac Modul Kullanimi ;

  • command: /sbin/shutdown -r now
  • raw: yum -y install vim-common
  • script: list_number_of_directories.sh /etc
  • shell: /bin/ls -l /tmp > /tmp/list
  • file: path=/etc/httpd/conf/httpd.conf owner=root group=root mode=0644
  • copy: src=test2.conf dest=/etc/test2.conf owner=root group=root mode=0644
  • git: repo=https://github.com/github/gitignore.git dest=/opt/gitignore

Tum Modullere http://docs.ansible.com/ansible/modules_by_category.html adresinden ulasabilirsiniz , inanilmaz.

Bu arada https://galaxy.ansible.com mutlaka ziyaret edin !

Ayni zamanda http://www.ansible.com/tower managed bu servisi kullanmak isteyenler icin

Posted on 20/01/2016, in Ansible and tagged , , , . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: