Bu makalemizde VMware vSphere ortamımızdaki Windows OS templateleri kullanarak Ansible ile basitçe sanal makine deploy etme ve ilk erişim için yeterli olacak ayarları yapacağız.
Bu konularda makale yazmayı ne kadar çok istesem de vakit bulamadığım için yazamıyordum. Son zamanlarda bu konuda gelen sorular artmaya başlayınca sizleri daha fazla bekletmeyeyim dedim. Bu vesileyle yazılarımı takip ettiğiniz ve gönderdiğiniz mailler için teşekkür ederim. Küçük hatırlatma: sorularınızı ilgili makalelerin altına yorum olarak yazarsanız herkes bu cevaplardan faydalanabilir 🙂
Ansible nedir nasıl kullanılır konularına girmeyeceğim, bu konuda yeterince kaynak mevcut aklınıza takılan bir konu olursa yorum bırakmanızı rica ederim. Bu makale hali hazırda en azından giriş seviyesi ansible bilgisi olanlar için uygundur.
Windows templatelerinizde vmware tools yüklü olmalıdır.
Ansible için community.vmware ayrıca pyvmomi python paketini collectionlarını yüklememiz gerekiyor.
Değişkenlerimiz için vars_common.yaml dosyasını oluşturalım. Bu sayede her vm için ortak olacak değerleri tekrar girmemiz gerekmeyecek. Burada yer alan değerleri kendi ortamınıza göre güncelleyin.
Aşağıda yazdığımız değişkenleri farklı makalelerde yazacağımız playbooklar için de kullanacağız. Bu nedenle bu makale için kullanmayacağımız değişkenlerde yer alıyor olabilir bu sizi yanıltmasın.
vcenter_hostname: vcenter.fatihsolen.com
vcenter_username: ansible@fatihsolen.com
vcenter_password: Parola
datacenter: Istanbul
dns_servers: ['10.34.0.11', '10.34.0.11']
dns_suffix: fatihsolen.com
win_timezone: "Turkey Standard Time"
lin_timezone: "Europe/Istanbul"
YAMLYukarıdaki değerleri girdikten sonra her sanal makine deploymentı için değişkenleri güncelleyeceğimiz vars_vm.yaml dosyasını oluşturalım.
template_name: win2022std-template
vm_name: win2022std_test
vm_folder: LabTemp/Test
cluster: FS
network_name: vlan37
datastore: san_09
disk_size_gb: 100
ram_mb: 8192
num_cpus: 4
static_ip: 10.34.254.5
netmask: 255.255.255.0
gateway: 10.34.254.1
YAMLŞimdi bu değişkenleri kullanacak playbookumuzu yazalım. Bu playbook belirttiğimiz templateden sanal makinemizi clonelayıp, ip, dns, subnet, gateway, sanal makine kaynakları, timezone gibi bilgilerini girecek. Sanal makineyi power-on edip sonrasında 3389 (RDP) portunun erişilip erişelemediği kontrol edecek. (Template VM üzerinde RDP nin açık olduğuna dikkat edin, alternatif olarak sunucu üzerindeki başka bir portu da kontrol ettirebilirsiniz.)
Hem vmware_guest, hem de vmware_guest/disk alanında datastore alanı mevcut, bildiğimiz gibi vm dosyaları ile diskleri farklı datastorelarda konumlandırabiliyoruz, eğer birden fazla disk eklemek isterseniz de yine disk altındaki datastore alanına girebilirsiniz.
- name: Templateden Windows VM Olusturma
hosts: localhost
connection: local
vars_files:
- vars_common.yaml
- vars_vm.yaml
tasks:
- name: VM Template Clone
vmware_guest:
customization :
domain: "{{ dns_suffix }}"
dns_servers: "{{ dns_servers }}"
dns_suffix: "{{ dns_suffix }}"
timezone: "{{ win_timezone }}"
hostname: "{{ vm_name }}"
# customization_spec : Windows # Eger VMware uzerinde guest customization templateiniz var ise adini buraya yazabilirsiniz. Bu durumda bir ust satırı silmeniz/comment out gerekir, ayrıca asagida vereceginiz ip vb. degerleri template degerleri ile ezecektir.
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
validate_certs: no
name: "{{ vm_name }}"
template: "{{ template_name }}"
folder: "{{ vm_folder }}"
datastore: "{{ datastore }}"
# autoselect_datastore: true # Bir ust satirda spesifik bir datastore belirtiyoruz. Eger en fazla bos alana sahip datastoreun otomatik secilmesini istiyorsanız ust satiri silin/comment out edin.
state: powered-off
datacenter: "{{ datacenter }}"
cluster: "{{ cluster }}"
hardware:
memory_mb: "{{ ram_mb }}"
num_cpus: "{{ num_cpus }}"
scsi: paravirtual
disk:
- size_gb: "{{ disk_size_gb }}"
type: thick
# autoselect_datastore: true
datastore: "{{ datastore }}"
networks:
- name: "{{ network_name }}"
ip: "{{ static_ip }}"
netmask: "{{ netmask }}"
gateway: "{{ gateway }}"
delegate_to: localhost
run_once: true
- name: VM'i calistir
vmware_guest_powerstate:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
validate_certs: no
name: "{{ vm_name }}"
state: powered-on
delegate_to: localhost
run_once: true
- name: RDP baglantisini kontrol et
wait_for:
host: "{{ static_ip }}"
port: 3389 # Windows templatede RDP açık ise
delay: 10
timeout: 300
sleep: 5
delegate_to: localhost
run_once: true
YAMLEğer herşey yolunda gittiyse artık yeni kurduğunuz vm’e belirttiğiniz ip adresi üzerinden erişebilir olmanız gerekiyor. Dilerseniz bu aşamada makinenizi customization alanında domaine de join edebilirsiniz. Kullanabileceğiniz tüm parametreler için aşağıdaki resmi dokumana göz atabilirsiniz.
https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_guest_module.html
Haftaya yazacağım makalemde aynı işlemi linux dağıtımları için nasıl yapacağımızı paylaşacağım.