Ansible ve Ansible Tower Kurulum ve Kullanımı

elifcan cakmak
Kod Gemisi
Published in
6 min readJan 8, 2018

Ansible, en yaygın kullanılan otomasyon araçlarından bir tanesi. Bildiğiniz gibi geçtiğimiz günlerde Ansible’ı daha kolay kullanmamızı sağlayan arayüzü olan Ansible Tower da Red Hat tarafından satın alınıp açık kaynak haline getirildi.

Ansible tek başına bile konsol üzerinden kolay bir kullanıma sahip olmasına rağmen, Tower ile işler çok daha kolaylaşıyor. Ansible ve Ansible Tower, kullanmaya ilk başladığınızda zor ve karmaşıkmış gibi görünse de bir kere temel kavramları anladıktan sonra öyle olmadığını görüyorsunuz.

Ansible ile ilgili nadir sıkıntılardan bir tanesi neredeyse hiç Türkçe kaynak olmaması. Bu yüzden (Ubuntu için) Ansible ve Ansible Tower kurulum ve kullanımı ile ilgili bir doküman hazırlamak istedik.

Ansible Kurulumu

Ansible kurulumu için aşağıdaki komutları çalıştırın.

$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible

Kurulum gerçekleştikten sonra aşağıdaki komut ile Ansible versiyonunu görebilirsiniz.

$ ansible --version

Ansible Kullanımı

Ansible’ı kullanabilmek için öncelikle bir kullanıcı belirleyip ssh key oluşturuyoruz. Daha sonra bu ssh key’i bağlanmak istediğimiz uzak sunuculardaki bağlanmak istediğimiz kullanıcı için authorized_key olarak belirliyoruz. Biz hem Ansible hem Ansible Tower için default awx kullanıcısını kullanıyoruz. Bununla birlikte en temel olarak aşağıdaki dosyalara ihtiyacınız var.

/etc/ansible/hosts dosyası, Ansible ile bağlanmak istediğiniz sunucuları belirlediğiniz dosyadır.

[servers]
host1 ansible_ssh_host=123.123.123.123
host2 ansible_ssh_host= test.com

/etc/ansible/group_vars/servers dosyası ise Ansible ile gerçekleştirmek istediğiniz işlemler için vereceğiniz çeşitli değişkenlerin tutulduğu yerdir. Burada uzak sunucuda bağlanmak istediğimiz kullanıcıyı her işlemde tekrar tekrar vermemek için, tutabiliriz.

---
ansible_ssh_user: awx

Bu konfigürasyonları yaptıktan sonra Ansible komutunu kullanmaya başlayabiliriz.

Öncelikle hosts dosyasında belirlediğimiz sunuculara erişebiliyor muyuz aşağıdaki komutla test edebilirsiniz:

Bütün sunucuları test etmek için:

ansible all -m ping 

Sunucu listesinden herhangi bir sunucuyu test etmek için:

ansible host1 -m ping 

Bağlantı başarılıysa şöyle bir geri bildirim alıyoruz:

host2 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
host1 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}

Bunun dışında temel olarak sunucuda yapabildiğiniz tüm işlemleri Ansible ile uzaktan yapabilirsiniz. Örneğin bir dizinin içindekileri görüntüleyebilir veya sunucularınızı baştan başlatabilirsiniz:

ansible host1 -a “ls /home/awx/test” 
ansible servers -a “reboot”

Ansible ile daha karmaşık işlemler yapabilmek için Playbook adı verilen yaml formatında dosyalar oluşturmamız gerekiyor. Örnek olarak uzak sunucuda güncelleme ve ardından postgresql kurulumu yapan aşağıdaki postgres.yml dosyasını inceleyebilirsiniz. Playbook’lar hakkında daha fazla bilgi edinmek için resmi dokümana göz atabilirsiniz.

---
- hosts: host1
become: yes
become_user: root
tasks:
— name: update
apt: update_cache=yes
- name: ensure postgresql is installed
apt: name=postgresql state=present
— name: make sure postgresql is running
service: name=postgresql state=started

Playbook’ları çalıştırmak için ansible-playbook komutunu kullanıyoruz. Bu komut hakkında daha fazla bilgi almak için aşağıdaki komutu çalıştırabilirsiniz.

ansible-playbook -h

Yukarıdaki postgres.yml dosyasını çalıştırmak için aşağıdaki komutu kullanıyoruz.

ansible-playbook postgres.yml --extra-vars “ansible_sudo_pass=password”

Burada güncelleme ve uygulama kurma gibi işlemler olduğu için uzak sunucunun sudo parolasına ihtiyacımız var. Bunu da - -extra-vars parametresi ile verebiliyoruz.

Ansible’ın en temel kullanımını bu şekilde özetleyebiliriz.

Ansible Tower Kurulumu

Ansible Tower pek çok bağımlılığı beraberinde indirdiği için ve default olarak 80 ve 443 portlarında çalıştığı için, yeni ve temiz bir sunucu kullanmanızı öneririm. Ansible Tower kurulumu yapmadan önce Ansible kurmamız gerekiyor. Ardından linkten lisans isteğinde bulunup Ansible Tower’ın son versiyonunu bilgisayarınıza indirmeniz gerekiyor. Daha sonra tar dosyasını istediğiniz bir dizine açmanız gerekiyor.

$ tar xvzf ansible-tower-setup-latest.tar.gz
$ cd ansible-tower-setup-<tower_version>

Bu dizinde inventory isimli bir dosya bulunuyor. Bu dosyada uygulamanın kurulabilmesi için gerekli bilgileri veriyoruz. Aşağıda Ansible Tower’ın çalışabilmesi için gerekli olan en temel bilgilere sahip örnek bir dosyayı görebilirsiniz. Birden fazla node çalıştırmak istiyorsanız inventory dosyasını buna göre değiştirmeniz gerekiyor. Kurulumla ilgili resmi dokümana linkten ulaşabilirsiniz.

[tower]
localhost ansible_connection=local ansible_host=localhost
[database][all:vars]
admin_password=’password’
pg_host=’’
pg_port=’’
pg_database=’awx’
pg_username=’awx’
pg_password=’password’
rabbitmq_port=5672
rabbitmq_vhost=tower
rabbitmq_username=tower
rabbitmq_password=’password’
rabbitmq_cookie=rabbitmqcookie
# Needs to be true for fqdns and ip addresses
rabbitmq_use_long_name=false
# Needs to remain false if you are using localhost

Son olarak dizin içerisindeki setup.sh dosyasını çalıştırıyoruz. Bu işlem, bağımlılıkları ile birlikte Tower kurulumu yaptığı için biraz uzun sürebilir. Kurulum bittikten sonra 80 portundan uygulamaya erişebilirsiniz.

Burada username:admin ve password:password olacak şekilde giriş yapabilirsiniz.

Ansible Tower’da en çok kullanacagımız kavramlar şunlar: Projects, Inventories, Templates, Jobs, Credentials.

Credentials

Credentials, adı üstünde sunuculara ve scm araçlarına bağlanmak için kullandığımız bilgiler. Bunların içinde private key, kullanıcı adı, parola gibi şeyler bulunuyor.

Ansible Tower sunucumuzda awx kullanıcısı ile çalışıyor. Dolayısıyla sunuculara bağlanmak için bu kullanıcıyı kullanıyoruz. Ansible’da olduğu gibi bu kullanıcı için ssh key oluşturup public key’imizi bağlanmak istediğimiz sunuculara veriyoruz. Bununla birlikte bir de Ansible Tower üzerinde machine credential oluşturmamız gerekiyor. Buraya da awx kullanıcısının private key’ini tanımlıyoruz.

Örneğin playbook’larımızı bir scm aracından çekmek istiyorsak da bir scm credential’ı oluşturmamız gerekiyor. Bunun için yine awx kullanıcısı için oluşturduğumuz private key’i kullanıyoruz. Credential Type olarak da Source Control seçiyoruz. Bununla birlikte playbooklarımızın olduğu repoya da access key olarak awx kullanıcısının public key’ini veriyoruz.

Projects

Projects, kısaca Playbook’larımızın tutulduğu yer diyebiliriz. Playbooklarımızı istersek Ansible Tower’ın bulunduğu makinede lokal olarak tutabilir veya istersek bir scm aracından çekebiliriz.

Lokalde tutmak istiyorsak /var/lib/awx/projects altında p,Playbook’ların bulunduğu bir dizin oluşturmamız gerekiyor.

Bir scm aracı kullanmak istiyorsak aşağıdaki gibi bilgileri verip credential olarak yukarıda oluşturduğumuz scm credential’ını kullanmamız gerekiyor.

Inventories

Inventory, kısaca bağlanmak istediğimiz sunucuları tuttuğumuz ve yönettiğimiz yer diyebiliriz. Birden fazla sunucuda aynı işlemi yapmak için burada sunucuları gruplayabiliriz.

Templates

Templates, çalıştırmak istediğimiz playbooklar için şablon oluşturduğumuz yerdir. Burada playbookları daha önce oluşturduğumuz proje içerisinden seçiyor ve sunucuya bağlanabilmek için daha önce oluşturduğumuz credential seçimini yapıyoruz. Bununla birlikte vermek istediğimiz ekstra değişken varsa burada verebiliyoruz. Örneğin ping için oluşturduğumuz Playbook’u ele alalım:

---
- hosts: "{{ host }}"
tasks:
- action: ping

Aşağıda bu ping Playbook’u için yapılandırdığımız template’i görebilirsiniz. Host değişkenini şablon üzerinden veriyoruz.

Jobs

Jobs, Ansible Tower içerisinde çalışan, hatalı veya başarılı, tüm işlemlerin gösterildiği yerdir. Bu işlemeler scm güncellemesi, Playbook çalıştırılması gibi işlemler olabilir.

Aşağıda kullanıcı oluşturmak için kullandığımız template’in çalışma sonucunu görebilirsiniz:

Scheduling

Oluşturduğumuz şablonları otomatize etmek için scheduling özelliğinden yararlanıyoruz. Ansible Tower’ın en kullanışlı özelliklerinden birisi de scheduling yapmanın çok kolay olması. Şablonun yanında bulunan takvim ikonuna tıklayarak bu işlemi çok kolay bir şekilde halledebilirsiniz.

Genel hatlarıyla Ansible Tower ile çalışmak için ihtiyacınız olan en temel bilgilerden bahsettik. Ansible’ın resmi dokümanlarına linkten ulaşabilirsiniz.

--

--