Skip to content

Terraform ile vCenter ortama Sanal Sunucu Açma

Otomasyon artık gündelik hayatımızın bir parçası. Eskiden gün içi sunucu oluşturma taskları ile uğraşırken , artık hayatımız okadar hızlandı ki , sunucu açma rutinini bir otomasyon yardımı ile hallediyoruz.

Sunucu açma otomasyonunu vRealize Automation ürünü yapmak ayrı bir zevk tabiiki. Ancak eğer elinizde böyle bir lisans yok ise terraform bir IaaS olarak size destek olmaya hazır.

Şu anda konumuz VMware olduğuiçin çok fazla Terraform detayı veremeyeceğim. Ancak Iaas olarak her türlü cloud / on-prem ortama kurulum yapabilmenize yarayan bu tool’u çok seveceğinizi söyleyebilirim.

Terraform, AWS, VMware, Azure vb. gibi farklı altyapı kaynakları ile API iletişimi kurar. Her sağlayıcı, terraform’un bu kaynakları oluşturmasına ve yönetmesine izin vermek için her kaynak API’siyle arayüz oluşturacak şekilde tasarlanmıştır. VMware vSphere provider , Terraform’un Vcenter ve ESXi ile çalışmak için kullandığı versiyondur.

Başlamak için, Terraform.exe ile aynı dosyamızla aynı klasörde bir main.tf dosyası oluşturacağız. Bu dosyayı aşağıdaki adımlardaki configleri sırasıyla ekleyerek, en sonunda deploy edeceğiz.

İlk olarak, bir provider bloğu oluşturarak, ortam yapılandırmamızı belirleyeceğiz. Bu yüzden main.tf dosyasını düzenleyeceğiz ve aşağıdaki örnek gibi gireceğiz. Provider tanımı, kullanıcı, parola ve vsphere_server tanımlarını yapıyoruz. Allow_unverified_ssl argümanı isteğe bağlı.

provider "vsphere" {
user = "administrator@vmwarelab.local"
password = "VMware1!"
vsphere_server = "10.10.10.200"

# If you have a self-signed cert
allow_unverified_ssl = true
}

Artık Provider’ı yapılandırdığımıza göre, “main.tf” dosyasını kaydedip, terraform’u initleyelim. Böylece provider gerekli dosyaları indirecek.

Data Source Tanımları

Data Source, config içerisinde sonradan kullanacağımız değişkenleri tanımladığımız alandır. Yani bu deploy hangi Datacenter’a, hangi Datastore’a, hangi cluster ve hangi network’u kullanarak açılacak bu gibi bilgileri girdiğimiz alandır. Eğer bir template kullanarak sunucu açıyorsak burada kullanılacak template’de yine datasource bölümünde tanımlanır. Kullanılabilecek data sourcelara buradan ulaşabilirsiniz. Bu örnekte benim Datastore cluster ile terraform çalıştığımı unutmayın lütfen.

Data Sources
 data "vsphere_datacenter" "dc" {
   name = "vmwarelab"
 }
 data "vsphere_datastore_cluster" "datastore_cluster" {
   name          = "PATH-TO/STORAGE-CLUSTER-NAME/"
   datacenter_id = "${data.vsphere_datacenter.dc.id}"
 }
 data "vsphere_compute_cluster" "cluster" {
   name          = "vmwarelab-cls"
   datacenter_id = "${data.vsphere_datacenter.dc.id}"
 }
 data "vsphere_network" "network" {
   name          = "LOCAL_10.10.10.X"
   datacenter_id = "${data.vsphere_datacenter.dc.id}"
 }
 data "vsphere_virtual_machine" "template" {
   name          = "Centos7_Template"
   datacenter_id = "${data.vsphere_datacenter.dc.id}"
 }

VM – Sanal Sunucu Configi

Data Source, yani içeriği açacağımız config tanımlandıktan sonra, sanal makine kaynağımızı yapılandırabiliriz. Burada sunucunun Adı, CPU / Mem kaynakları, disk ve disk tipi , ek disk configi, gibi configleri yapıyoruz. Buna ek olarak ben bazı vm options’da buraya girdim. Örneğin hot-add tanımları gibi. Network tanımları IP adresi, gateway, DNS gibi yine bu örnek var.

Not: Ben datastore Cluster ile Terraform kullandığım için buraya datastore girdim. Siz sadece datastore’a acacaksanız, datastore_cluster değişkeni yerine “vsphere_Datastore” configini kullanmalısınız.

Virtual Machine Resource
 resource "vsphere_virtual_machine" "HOSTNAME" {
   folder                = "VM/Host/Folder"
   count                 = 1
   name                  = "HOSTNAME"
   resource_pool_id      = "${data.vsphere_compute_cluster.cluster.resource_pool_id}"
   datastore_cluster_id  = "${data.vsphere_datastore_cluster.datastore_cluster.id}"
 num_cpus = 1
   #num_cores_per_socket = 2
   memory   = 4096
   guest_id = "${data.vsphere_virtual_machine.template.guest_id}"
 cpu_hot_add_enabled       = true
 cpu_hot_remove_enabled    = true
 memory_hot_add_enabled    = true
 scsi_type = "${data.vsphere_virtual_machine.template.scsi_type}"
   firmware = "bios"
 network_interface {
     network_id   = "${data.vsphere_network.network.id}"
     adapter_type = "vmxnet3"
   }
 disk {
     label            = "disk0"
     size             = "${data.vsphere_virtual_machine.template.disks.0.size}"
     thin_provisioned = "${data.vsphere_virtual_machine.template.disks.0.thin_provisioned}"
   }
 disk {
     label            = "disk1"
     size             = 50
     unit_number      = 1
     thin_provisioned = true
   }
 clone {
     template_uuid = "${data.vsphere_virtual_machine.template.id}"

 customize {   
   linux_options { 
     host_name  = "HOSTNAME"
     domain = "vmwarelab.local"   
    } 
 network_interface {   
   ipv4_address = "10.10.10.100"   
   ipv4_netmask = 24  
  }
   ipv4_gateway = "10.10.10.1"   
   dns_server_list = ["8.8.8.8", "8.8.4.4"]   
  }
 }
}

Sanal Sunucu Oluşturma

Artık config hazır olduğuna göre sunucumuzu yaratabiliriz. Ancak öncesinde son bir adım olarak terraform bize bir kontrol yapmamızı öneriyor. Aşağıdaki kodu çalıştırarak, config gönderildiğinde neler olacağını açıklıyor.

terraform plan -out=deployvm

Yukarıda görüldüğü gibi planı oluşturuyorum ama bir aksiyon almıyorum diyor. Böylece bir problem görülmediğini varsayarak sunucuyu aşağıdaki komut ile yaratıyoruz.

terraform apply deployvm

vCenter’a dönerek sunucunuzu görebilir, atadığınız IP adreslerinden sunucuya erişebilirsiniz.

Umarım faydalı bir yazı olmuştur.

Published inESXiVMware

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *