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ı
[…] web sayfamda paylaşmışım (Ansible – Bölüm 1). Ansible ile ilgili yazdığım ilk makalemi, https://asiyeyigit.com/ansible/, bu yazıma başlamadan önce paylaşmak istiyorum. Belki önce bu ilk makaleyi okumak istersiniz […]