Sanallaştırma teknolojileri hayatımıza girdiğinden beri kurulan sunucu sayısında ciddi bir artış var. Hatta o kadar çoklar ki kimi zaman ne için kullanıldığı bile unutuluyor bu neydi acaba diye araştırmak zorunda kalıyoruz. Eskiden fiziksel bir sunucu kurduğumuzda harcadığımız efor\emek sebebi ile mi bilmiyorum ama sanırım biraz daha kıymetli oluyordu ve her şeyini ezbere biliyorduk. Günümüzde sunucuları artık tek tek manuel olarak değil platforma özel hazırladığımız Template leri kullanarak ayağa kaldırıyoruz. Tabi burada iş bitmiyor yapılması gereken farklı konfigürasyon lar ve öncesinde tetiklenmesi gereken manuel süreçler hala var.
Template üzerinden sunucu kurulumlarınızı Ansible kullanarak Vmware için nasıl otomatize edebilirsiniz ,bunun üzerine bir yazı olacak fakat ufak bir fark var. Sunucu üzerinde duran hazır bir Template’i değil elimizde OVA formatında bulunan yani dışarıdaki bir dosya üzerinden deployment yapacağız.
Hocam direk sunucuya template olarak yüklesek sonra oradan yeni sunucu oluştursak diyebilirsiniz ki haklısınız normalde süreç böyle işler ama burada ki senaryo biraz daha farklı. Diyelim ki geliştirdiğiniz bir uygulama mevcut ve arka tarafta aşağıdaki gibi 4 farklı sunucuya ihtiyaç duyuyor.
-
Application
-
Database
-
Messages Queue
-
Loglama
Bu durumda yaygın 2 farklı yükleme yöntemi var. Ya gidip müşteride bunları sıfırdan kuracaksınız ya da elinizdeki hazır OVA dosyalarını müşteriye ileteceksiniz deploy etmesini isteyeceksiniz. Biz buraya 3 ncü bir yöntem ekliyoruz ve bu OVA deployment sürecini ansible ile vmware web paneline login bile olmaya gerek olmadan gerçekleştiriyoruz.
Ön Gereksinimler:
Aşağıdaki gibi pyvmomi kurulumunu yapabilirsiniz
pip install pyvmomi
Collection yüklemesi için çalıştırmanız gereken komut.
ansible-galaxy collection install community.vmware
2-Hazırladığımız template üzerinde Vmware Tools yüklü olmalı.
Hemen playbook’umuzu yazmaya başlıyoruz. İlk kısımda Vmware altında ” DemoApplication” adında yeni bir folder oluşturuyoruz.
- name: Vmware Deploy OVA hosts: localhost gather_facts: no tasks: - name: Klasor Olusturma community.vmware.vcenter_folder: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" datacenter: "{{ datacenter }}" folder_name: DemoApplication state: present validate_certs: no delegate_to: localhost
Sonrasında ise Sunucularımızı Deploy ediyoruz. Hazırladığımız template olarak kullanılacak ova dosyasını sunucu üzerinde bir path’e atarak playbook üzerinde tanımlamanız gerekiyor. Ben burada path olarak /var/lib/awx/template.ova verdim.
- name: Ova Deploy Etme Application community.vmware.vmware_deploy_ovf: hostname: “{{ vcenter_hostname }}” username: “{{ vcenter_username }}” password: “{{ vcenter_password }}” datacenter: “{{ datacenter }}” cluster: “{{ cluster }}” datastore: Data name: Application folder: “{{ datacenter }}”/vm/DemoApplication validate_certs: no power_on: yes ovf: /var/lib/awx/template.ova delegate_to: localhost - name: Ova Deploy Etme Database community.vmware.vmware_deploy_ovf: hostname: “{{ vcenter_hostname }}” username: “{{ vcenter_username }}” password: “{{ vcenter_password }}” datacenter: “{{ datacenter }}” cluster: “{{ cluster }}” datastore: Data name: Database folder: “{{ datacenter }}”/vm/DemoApplication validate_certs: no power_on: yes ovf: /var/lib/awx/template.ova delegate_to: localhost - name: Ova Deploy Etme Messages Queue community.vmware.vmware_deploy_ovf: hostname: “{{ vcenter_hostname }}” username: “{{ vcenter_username }}” password: “{{ vcenter_password }}” datacenter: “{{ datacenter }}” cluster: “{{ cluster }}” datastore: Data name: MessageQueue folder: “{{ datacenter }}”/vm/DemoApplication validate_certs: no power_on: yes ovf: /var/lib/awx/template.ova delegate_to: localhost - name: Ova Deploy Etme Logging community.vmware.vmware_deploy_ovf: hostname: “{{ vcenter_hostname }}” username: “{{ vcenter_username }}” password: “{{ vcenter_password }}” datacenter: “{{ datacenter }}” cluster: “{{ cluster }}” datastore: Data name: Logging folder: “{{ datacenter }}”/vm/DemoApplication validate_certs: no power_on: yes ovf: /var/lib/awx/template.ova delegate_to: localhost - pause: seconds=120
– pause parametresi ile deployment’ların bitmesini bekliyoruz, siz burada süreyi istediğniz kadar uzatabilirsiniz. Buraya tıklayarak modül ile igili detaylara erişebilirsiniz. Otomatik olarak power on etme ya da disk tipi olarak thin\thick parametlerini kendinize göre düzenleyebilirsiniz. Sonrasında ise sunucuların ip adreslerini güncelliyoruz. Bunun için vmware_vm_shell modülü kullanarak vmware tools üzerinden direk sunucuya login olup istediğimiz gibi network konfigürasyonlarını yapabiliriz. Tek bir task ile de yapılabilir fakat ben örnek olması açısından her taskı ayrı ayrı yazdım.
- name: IP adresi Degistirme community.vmware.vmware_vm_shell: hostname: “{{ vcenter_hostname }}” username: “{{ vcenter_username }}” password: “{{ vcenter_password }}” validate_certs: no datacenter: “{{ datacenter }}” folder: “{{ datacenter }}”/vm/DemoApplication vm_id: Application vm_username: root vm_password: “{{ vm_password }}” vm_shell: "/usr/bin/nmcli" vm_shell_args: "connection modify ens160 IPv4.address 172.16.10.41" delegate_to: localhost - name: Gateway Degistirme community.vmware.vmware_vm_shell: hostname: “{{ vcenter_hostname }}” username: “{{ vcenter_username }}” password: “{{ vcenter_password }}” validate_certs: no datacenter: “{{ datacenter }}” folder: “{{ datacenter }}”/vm/DemoApplication vm_id: Application vm_username: root vm_password: “{{ vm_password }}” vm_shell: "/usr/bin/nmcli" vm_shell_args: "connection modify ens160 IPv4.gateway 172.16.10.1" delegate_to: localhost - name: DNS Adresi Güncelleme community.vmware.vmware_vm_shell: hostname: “{{ vcenter_hostname }}” username: “{{ vcenter_username }}” password: “{{ vcenter_password }}” validate_certs: no datacenter: “{{ datacenter }}” folder: “{{ datacenter }}”/vm/DemoApplication vm_id: Application vm_username: root vm_password: “{{ vm_password }}” vm_shell: "/usr/bin/nmcli" vm_shell_args: "connection modify ens160 IPv4.dns 8.8.8.8" delegate_to: localhost - name: Network Servisleri Restart community.vmware.vmware_vm_shell: hostname: “{{ vcenter_hostname }}” username: “{{ vcenter_username }}” password: “{{ vcenter_password }}” validate_certs: no datacenter: “{{ datacenter }}” folder: “{{ datacenter }}”/vm/DemoApplication vm_id: Application vm_username: root vm_password: “{{ vm_password }}” vm_shell: "/usr/bin/nmcli" vm_shell_args: "networking off && nmcli networking on" delegate_to: localhost
Playbook’umuzu AWX üzerinde template olarak oluşturduktan sonra. Çalıştırıp kontrol ediyoruz ve kurulumlara başladığını görüyoruz. Task’lar sıra ile execute ederek VM’leri oluşturacak
Resim-1
Vmware web konsol üzerinden baktığımızda ise deployment işlemleri başlamış olarak gözüküyor.
Resim-2
Playbook tamamlandıktan sonra kontrol ettiğimizde bütün sunucuların kurulumları tamamlanmış olarak gözüküyor
Resim-3