Merhaba;

Bugün sizlerle Red Hat 7 makinemize “Ansible” kuracağız ve “Ansible” ile neler yapabileceğimize bir giriş yapacağız.  Kurulumu yapacak olduğumuz sistem “terry”. “terry” sisteminin “uname –a” çıktısını aşağıya ekledim.

[root@terry ~]# uname -a

Linux terry 3.10.0-514.10.2.el7.x86_64 #1 SMP Mon Feb 20 02:37:52 EST 2017 x86_64 x86_64 x86_64 GNU/Linux

[root@terry ~]#

“terry” sistemine “Ansible” kurmak için kullandığımız komut aşağıdadır.

[root@terry ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Yükleme işlemi sonlandıktan sonra “Ansible” sürümüne “ansible –version” komutuyla bakabiliriz.

[root@terry ~]# ansible –version

ansible 2.2.1.0

 config file = /etc/ansible/ansible.cfg

 configured module search path = Default w/o overrides

[root@terry ~]#

“playbook” verisyonuna “ansible-playbook –version” komutuyla bakabiliriz.

[root@terry ansible]# ansible-playbook –version

ansible-playbook 2.2.1.0

 config file = /etc/ansible/ansible.cfg

 configured module search path = Default w/o overrides

[root@terry ansible]#

 

“Ansible” kurulumunu yaptıktan sonra, “/etc/ansible” dizini altında aşağıdaki gibi bir yapılanma görüyoruz.

[root@terry ansible]# pwd

/etc/ansible

[root@terry ansible]#

[root@terry ansible]#

[root@terry ansible]# ls -ltr

total 20

drwxr-xr-x 2 root root     6 Jan 17 01:35 roles

-rw-r–r– 1 root root  1016 Jan 17 01:35 hosts

-rw-r–r– 1 root root 14388 Jan 17 01:35 ansible.cfg

[root@terry ansible]#

“Ansible” çalışmalarım için ben farklı bir dizin oluşturdum.

[root@terry ~]# cd /work/ansible

[root@terry ansible]# ls

ansible.cfg  test_hosts

[root@terry ansible]#

“test_hosts” dosyası içerisinde [control] host olarak “terry” i görüyoruz. [Managed_Clients] olarak da “zero, maya, heidi, peter” görüyoruz.

[root@terry ansible]# more test_hosts

[Managed_Clients]

zero

maya

heidi

peter

[control]

terry ansible_connection=local

[root@terry ansible]#

“ansible.cfg” dosyamızda da host dosyası olarak “test_hosts” dosyasını kullandığını görüyoruz.

[root@terry ansible]# more ansible.cfg

[defaults]

inventory = ./test_hosts

[root@terry ansible]#

[control] host ile [Managed_Clients] lar arasında “ssh”ı şifresiz çalışacak şekilde konfigüre ettim.

“ansible -i test_hosts –list-hosts all” komutuyla yönetilecek “host” bilgilerini listeleyebiliriz.

[root@terry ansible]# ansible -i test_hosts –list-hosts all

 hosts (5):

   terry

   zero

   maya

   heidi

   peter

[root@terry ansible]#

“ansible -i test_hosts –list-hosts Managed_Clients” komutuyla sadece [Managed_Clients] altında yazılan host’ları görebiliriz.

[root@terry ansible]# ansible -i test_hosts –list-hosts Managed_Clients

 hosts (4):

   zero

   maya

   heidi

   peter

[root@terry ansible]#

Mesela “ -i test_hosts –list-hosts \!control” komutuyl “control” host’un dışındaki “host”ları listeleyebiliriz.

[root@terry ansible]# ansible -i test_hosts –list-hosts \!control

 hosts (4):

   zero

   maya

   heidi

   peter

[root@terry ansible]#

 

Şimdi en basit olarak ne yapabilirize bir bakalım. Örneğin bir komut ile “test_hosts” dosyasındaki “host” lara “ping” komutu gönderebiliriz.

[root@terry ansible]# ansible -i test_hosts -m ping all

heidi | SUCCESS => {

   “changed”: false,

   “ping”: “pong”

}

terry | SUCCESS => {

   “changed”: false,

   “ping”: “pong”

}

zero | SUCCESS => {

   “changed”: false,

   “ping”: “pong”

}

peter | SUCCESS => {

   “changed”: false,

   “ping”: “pong”

}

maya | SUCCESS => {

   “changed”: false,

   “ping”: “pong”

}

[root@terry ansible]#

“test_hosts” içerisindeki tüm “host” larda “hostname” komutunu çalıştırabiliriz.

[root@terry ansible]# ansible -i test_hosts -a “hostname” all

terry | SUCCESS | rc=0 >>

terry

zero | SUCCESS | rc=0 >>

zero

heidi | SUCCESS | rc=0 >>

heidi

maya | SUCCESS | rc=0 >>

maya

peter | SUCCESS | rc=0 >>

peter

[root@terry ansible]#

 

“test_hosts” dosyası içinde “terry ansible_connection=local” satırına dikkatinizi çekmek istiyorum. Normal şartlarda “Ansible”, “ssh” bağlantısı yapmaya çalışır. Ama “control” host’un kendi kendine “ssh” yapmasını istemeyiz. Bu nedenle bağlantı şeklini “local” olarak tanımlayabiliriz. “test_hosts” dosyasında takip kolaylığı için yöneteceğiniz “host” larınızı gruplara ayırabilirsiniz. Dosyada aşağıdaki şekilde bir değşiklik yaptım.

[root@terry ansible]# more test_hosts

[Web_Servers]

zero

maya

 

[App_Servers]

heidi

peter

 

[control]

terry ansible_connection=local

[root@terry ansible]#

 

Aşağıda gördüğünüz gibi host’ları gruplara ayırdıktan sonra grup bazında komutları çalıştırabilirim.

[root@terry ansible]# ansible -i test_hosts –list-hosts App_Servers

 hosts (2):

   heidi

   peter

[root@terry ansible]#

[root@terry ansible]# ansible -i test_hosts –list-hosts Web_Servers

 hosts (2):

   zero

   maya

[root@terry ansible]#

[root@terry ansible]# ansible -i test_hosts –list-hosts control

 hosts (1):

   terry

[root@terry ansible]#

 

Grup bazında aşağıda görüldüğü gibi bir komut da çalıştırabilirsiniz. “-m ping” opsiyonuyla, “ping” modülünü dahil ediyoruz.

[root@terry ansible]# ansible -i test_hosts -m ping Web_Servers

zero | SUCCESS => {

   “changed”: false,

   “ping”: “pong”

}

maya | SUCCESS => {

   “changed”: false,

   “ping”: “pong”

}

[root@terry ansible]#

 

Aşağıdaki komutta “-m command” ile “command” modülünü dahil ediyoruz.”-a hostname” ile “command” modülne argümanda eklemiş oluyoruz.

[root@terry ansible]# ansible -i test_hosts -m command -a  hostname  App_Servers

heidi | SUCCESS | rc=0 >>

heidi

peter | SUCCESS | rc=0 >>

peter

[root@terry ansible]#

 

“Ansible”, pek çok modüle sahiptir. https://docs.ansible.com/ansible/modules_by_category.html sayfasında “Module Index” kısmında modülleri görebilirsiniz.

“Ansible”ın sunduğu önemli bir diğer özellik, “playbook” dur. “Playbook”, YML dilinde yazılan “play” lerden oluşur.  Yazımın ikinci bölümünde “playbook” larla ilgili bazı örnekler yapıyor olacağız.

Asiye Yiğit – 2 Mayıs 2017  Salı