Ansible AWX kurulumu ve Onay mekanizmalı Sanal Sunucu Otomasyonu

onur kocaman
Turk Telekom Bulut Teknolojileri
7 min readOct 16, 2022

Merhaba,

Açık kaynak kodlu Ansible AWX yazılımı sayesinde, VMware sanallaştırma ortamında, sanal sunucu kurulumu ve sonrasındaki işletim sistemi konfigurasyonlarını tamamen otomatize edebiliriz. Ayrıca kurulumun başına bir onay mekanizması koyup, onay alındıktan otomasyona devam edilmesini sağlayacağız.

Öncelikle AWX kurulumunu, ubuntu sunucusu üzerinde aşağıdaki gibi yapalım.

apt update -y
apt upgrade -y
reboot now
apt install python-setuptools -y
apt install python3-pip -y
pip3 install ansible
apt install docker docker.io -y
systemctl enable --now docker
pip3 install docker-compose
usermod -aG docker $USER
apt install git vim pwgen -y
wget https://github.com/ansible/awx/archive/refs/tags/17.1.0.tar.gz

Kurulumda awx 17 .1.0 versiyonu kullanıldı.

cd awx/installer
pwgen -N 1 -s 30
vi inventory

pwgen komutundan alınan secret değeri, inventory file içindeki secret_key’e verildi. Ayrıca “admin_password” değişkenede değer atandı.

Sonrasında AWX kurulumu için install yaml’ı çalıştırıldı.

ansible-playbook -i inventory install.yml
sudo docker ps -a

Sunucu ip’si den awx web arayüzüne bağlanıldı.

Şimdi akış diyagramlarında kullanacağımız yaml dosyalarını saklayacağımız gitlab yazılımını da awx sunucusu üzerine kuralım.

apt update
apt install ca-certificates curl openssh-server postfix
cd /tmp
curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
bash /tmp/script.deb.sh
apt install gitlab-ce

Sunucu üzerinde firewall açıksa http ve https portlarına izin veriyoruz.

> ufw allow https http

Gitlab konfigürasyon dosyasını aşağıdaki gibi düzenliyoruz. URL de gitlab’ı kurarken kullandığımız adresi kullanıyoruz.

##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
external_url 'https://gitlabtest.com'

Ve yapılandırma dosyasını kullanarak aşağıdaki gibi konfigürasyonunu tamamlıyoruz.

gitlab-ctl reconfigure

Awx ile aynı makina da kurulum yaptığımız için gitlab’ın kullandığı :80 portunu değiştirmemiz gerekir.

gitlab-ctl stop
vi /var/opt/gitlab/nginx/conf/gitlab-http.conf
listen *:80 -> listen *:90 # 90 portu olarak değiştiriyoruz.
gitlab-ctl start

Not: Port değişikliğinden sonra “gitlab-ctl reconfigure” çalıştırılırsa port 80'e dönüyor. Bu yüzden komutu tekrar çalıştırmamalıyız. Artık gitlaba :90 port’dan erişebiliriz.

Ayrıca gitlab şifresi ile ilgili bir problem yaşadığımızda aşağıdaki gibi root accoutunu resetleyebiliriz.

gitlab-rake gitlab:password:reset

Şimdi gitlab da “vmware” isimli public projemizi oluşturup awx de kullanacağımız yaml dosyalarını koyalım.

Gitlab web IDE arayüzüne geçiş yapıyoruz.

Awx isimli bir klasör yaratıp içine kullanacağımız yaml dosyalarını atıyoruz. Sonra “commit” ediyoruz.

Kullanacağımız yaml ve içerikleri aşağıdaki gibidir. Bu yaml içeriklerine “docs.ansible.com” dan erişebilirsiniz.

00_vm_deploy_template.yml

01_ip_config.yml

Template ve gateway iplerinin girilmesi gerekiyor. Ama ileride bahsedeceğimiz “survey ” ile de girilebilir.

02_add_data_disk.yml

Not: datastore_name “survey” kullanılarak girilebilir.

03_disk_part.yml

04_create_vg.yml

05_create_lv.yml

06_mount_lv.yml

ip_check.yml

vars.yml

Şimdi AWX arayüzüne geri dönüyoruz. Öncelikle template’lerimizi yaratacağız ve içine ilgili yaml dosyalarımızı koyacağız. Sonrasında da bu şablonlarımızı (template) kullanarak, iş akışımızı (workflow) oluşturacağız.

Öncelikle awx sunucu için “demo inventory”i ve “demo credential”ı AWX inventory ve AWX Credentials olarak kopyalalıyoruz. Ayrıca template’den sunucu kurulduğunda sunucuya erişim için gerekli credential bilgisini de “template credential” olarak ekliyoruz.

Şimdi oluşturduğumuz awx inventory içindeki localhost’u kullanarak bilgi çekip çekemediğimizi kontrol edelim.

“df -hT” çıktısını localhost üzerinden shell komutu ile çekiyoruz.

Ayrıca inventory kısmına template’in ayağa kalktığında kullanacağı ip’yi ve daha sonra değiştireceğimiz vm ip’sini ekliyoruz.

“vi /etc/hosts” ile host dosyasına gitlab’ın host kaydını ekliyoruz.

<vm_ip> gitlabtest.com

Öncelikle gitlab ile bağlantılı projemizi oluşturuyoruz. “Update Revision on launch” opsiyonunu mutlaka işaretliyoruz. Bu sayede awx de tetiklenen her template ya da workflow, yaml dosyalarında değişiklik olup olmadığı job başlamadan gitlab’dan kontrol ediliyor.

Şimdi artık şablonlarımızı ve iş akış diagramımızı oluşturabiliriz.

ip_check: Ping testi yaparak verilecek olan ip’nin kullanılıp kontrol eder.

vm_deploy_template: Vmware da template’den sanal sunucumuzu oluşturuyor.

ip_config: Oluşturulan vm de ip yapılandırılması yapılır. IP değişikliği için network interface up/down yapıldıktan sonra jobı sonlandırmek için timeout değeri girmek gerekiyor. Timeout değeri girildiği için job sonunda otomatik fail olur. Bu sebeple bir sonraki template’e “on failure” olarak bağlamamız gerekli.

add_data_disk: OS dışında ek olarak yeni bir disk veriyoruz.

disk_part: Disk üzerinde partition yaratır ve Linux LVM olarak diski etiketler.

create_vg: volume group tanımı yapar.

create_lv: Logical volume tanımı yapar.

mount_lv: Logical volume dizine mount eder ve üzerine dosya sistemi atar.

Şablonlarımızı tamamladıktan sonra artık iş akışımızı hazırlayabiliriz.

İş akışında dikkat edilmesi gereken “enable concurrent jobs” etkin hale getirilmesidir. Bu sayede aynı anda birden fazla sanal sunucu kurulumu yapılabilir. Aksi halde işler kuyruğa alınır.

Şimdi awx’deki “survey” opsiyonundan faydalanalım. Bu sayede iş akışı içindeki ihtiyaç duyulacak değişkenlere değer gönderebiliriz.

Sonraki aşamada “Visualizer” kısmından tek templateleri birbirine zincir şeklinde bağlıyoruz. Template’leri biribirine bağlarken “on success”, “on failure” ya da “always” gibi seçeneklerden faydalanabiliriz.

İş akşının başına onay bölümü eklemek için öncelikle “mail notification” eklememiz gerekiyor.

İş akış diyagramının en başına “vm_create_mail_notification” isimli notification eklenir.

Son olarak “vm_kurulum_is_akisi” workflow template’ini başlatıyoruz.

Sonrasında karşımıza doldurmamız gereken “survey” geliyor. Vcenter ve sunucu ile ilgili bilgileri burada dolduruyoruz.

İş akışının çalıştırılmasından sonra awx tarafından mail notifikasyonu gönderilir. Aynı zamanda akışa da bakıldığında onay beklendiği görülür.

Akışın devam etmesi için onay gönderilir ya da kurulumun iptal edilmesi sağlanabilir.

İş onaylandıktan sonra , akış kaldığı yerden devam eder.

Sonunda LVM yapısındaki diski mount edilmiş şekilde sanal sunucuyu elde ediyoruz. Aslında volume group, logical volume group ve mount işlemlerini template için de yapıp o şekilde direk kurulumu yapabilirdik. Ama amacım awx esnekliğini ve her türlü işin awx üzerinden yürütülebileceğini göstermek idi.

Bundan sonraki aşamalarda sanal sunucu üzerine farklı yazılım kurma çalışmaları yapılabilir. Örneğin makinalara otomasyon ile postgresql veritabanı kurup aynı zamanda OS ve SQL ile ilgili metriklerinin toplanması için node_exporter ajanı kurup makina grafana izleme yazılımına otomasyon ile eklenebilir.

--

--