Terraform ile nasıl örnek routed network oluşturabilirim

Diyelim veritabanı sanal sunucuları için bir network oluşturmak istiyoruz, ilgili sanal sunucular 10.8.8.0/24 networkünde olacak , sunucuların gateway adresleri 10.8.8.1 olacak ve oluşturulan her bir sanal sunucu için 10.8.8.100-10.8.8.200 arasında ip adresi verilecek.

Bunun dışında bilmemiz gereken organizasyon adımız, sanal network'ün oluşturulacağı vdc adı, DorukCloud VMware Cloud Director api erişim link'i ve haliyle kullanıcı adı ve şifresimiz olacak. Tüm bu bilgileri DorukCloud VMware Cloud Director portal'ine girdiğinizdeki vdc kartınız üzerinde görebilirsiniz.

Bir önceki "Başlamadan önce terraform hakkında basit bilgiler" makalesinde terraform kodumuzu koymak için bir dizin oluşturmuş, "terraform init" komutunu çalıştırma ve bir sonraki adım için hazırlanmıştık.

Bu makalede provider.tf dosyasını version.tf olarak değiştirdik ve içersine eklenti yaptık. Buna ek olarak iki ayrı dosya daha oluşturduk, bunlar variables.tf ve networks.tf dosyaları aynı zamanda version.tf dosyasına ek bağlantı satırı ekledik, aşağıda ilgili dosyaları ve içeriklerini görebilirsiniz.

ubuntu@terraformubuntu:~/vcd_lina_tenant$ tree
.
├── networks.tf
├── variables.tf
└── version.tf

version.tf ;

Bu dosyada kullanmak istediğimiz provider'ı belirttik kendisi kısa adı ile vcd yani VMware Cloud Director provider, versiyon olarak 3.4 kurulmuştu.

Burada ek bir paragraf daha ekledik o da DorukCloud VMware Cloud Director erişim bilgileri. Aşağıda hem bu dosyaya direkt değişken ve değerini set edebileceğimizi göstermek için url değişkenini direkt set ettik, diğer kullanıcı bilgilerini ise bir değişken dosyasından nasıl alınabileceğini gösterdik.

# Configure the VMware Cloud Director Provider for DorukCloud
terraform {
  required_providers {
    vcd = {
      source = "vmware/vcd"
    }
  }
  required_version = ">= 0.13"
}

# Doğrulama için gerekli erişim noktasi, kullanici adi ve sifre, vdc, organizasyon bilgisi
# Tüm bilgiler variables.tf dosyasinda verilmistir

provider "vcd" {
  user                 = var.dorukvcloudkullanici
  password             = var.dorukvcloudsifre
  auth_type            = "integrated"
  org                  = var.dorukcloudorgadi
  vdc                  = var.dorukcloudvcdadi
  url                  = "https://vcdistbal01.dorukcloud.com/api"
}

variables.tf

İlgili değişken dosyası içeriği aşağıdaki gibi görebilirsiniz, tanımlayacağımız değişkenin adını, tipini ve varsayılı değerini bu dosya içersinde belirtiyorsunuz.

Aşağıda dorukvcloudkullanici, dorukvcloudsifre, dorukcloudorgadi, dorukcloudvcdadi adlı üç değişken string bir değer alacağı şeklinde ve varsayılı olarak alacağı değer belirtilmiş.

Not : Lüten size ait kullanıcı adı, şifre , organizasyon adi ve vdc bilgilerini kullanın.

# Terraform degiskenler ve degiskenlerin farklı bir dosyada tutulmasi hakkinda linkler
#
#https://www.terraform.io/docs/language/values/variables.html
#https://www.terraform.io/docs/language/expressions/types.html
#
#
#

variable "dorukvcloudkullanici" {
  description = "DorukCloud Portal Kullanicisi"
  type = string
  default = "size_iletilen_kullanici_adi"
}

variable "dorukvcloudsifre" {
  description = "DorukCloud Portal Sifresi"
  type = string
  default = "size_iletilen_kullanici_sifresi"
}

variable "dorukcloudorgadi" {
  description = "DorukCloud Organizasyon adi"
  type = string
  default = "size_iletilen_organizasyon_adı"
}

variable "dorukcloudvcdadi" {
  description = "DorukCloud VCD Adi"
  type = string
  default = "size_iletilen_vdc_adı"
}

Şimdi asıl işi yapacak olan kaynakları oluşturma script'i networks.tf olusturalim, oldukca basit yukarıda bir paragraf olarak yazdığımı birkaç değişken ile birkaç fonksiyon içersinde belirli değişkenlerle tanımlıyorum.

#Routed Network (Sanal network) olusturma

#data source, var olan bir objeyi okuma, onun hakkındaki bilgileri edinmek için kullanilir, ansible'daki facts gibi
#asagida organizasyonunuzu atanmis Lina-VDC-X-EdgeGateway adındaki edge gateway bilgilerini terraform vmware cloud director dan okuyacak

data "vcd_nsxt_edgegateway" "varolan" {
  name = "Lina-VDC-X-EdgeGateway"
}

resource "vcd_network_routed_v2" "databasenetwork" {
  name        = "DB Network 1"

#Buradaki edge_gateway_id , DB Network 1 hangi edge gateway üzerinde acilacagini belirtiyor, biraz önce data source ile
#ilgili edge gw hakkinda bilgi almistik, burada acilacak ilgili network

  edge_gateway_id = data.vcd_nsxt_edgegateway.varolan.id

#Gateway ip, prefix ve dns bilgileri ataniyor

  gateway       = "10.8.8.1"
  prefix_length = 24
  dns1          = "8.8.8.8"
  dns2          = "8.8.4.4"

#Bir ip araligi verecektik sanal sunuculara atamak icin, asagida 100-200 arasini vermiş bulunmaktayiz

  static_ip_pool {
    start_address = "10.8.8.100"
    end_address   = "10.8.8.200"
  }

}

Şimdi ne olacağını görme zamanı, terraform konsept'ine göre sıradaki adım plan, aşağıdaki gibi komutu çalıştırın.

ubuntu@terraformubuntu:~/vcd_lina_tenant$ terraform plan

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # vcd_network_routed_v2.databasenetwork will be created
  + resource "vcd_network_routed_v2" "databasenetwork" {
      + dns1            = "8.8.8.8"
      + dns2            = "8.8.4.4"
      + edge_gateway_id = "urn:vcloud:gateway:838949ec-6e79-487b-ba59-524812f2e9dc"
      + gateway         = "10.8.8.1"
      + id              = (known after apply)
      + interface_type  = "internal"
      + name            = "DB Network 1"
      + prefix_length   = 24

      + static_ip_pool {
          + end_address   = "10.8.8.200"
          + start_address = "10.8.8.100"
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Terraform burada alt yapıyı kontrol ederek olmayan bir objenin oluşturulacağı bilgisini bize veriyor, haydi oluşturalım

ubuntu@terraformubuntu:~/vcd_lina_tenant$ terraform apply

Size bu aksiyonu almak isteyip istemediğiniz soracak, yes diyerek gecelim ...

Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

Enter a value: yes

Herşey yolunda gitti ve hata yok ise ilgili network oluşmuş olacak ve olayın tamamlandığına dair size bilgi dönecek terraform, şimdi bir panel'den kontrol edelim

vcd_network_routed_v2.databasenetwork: Creating...
vcd_network_routed_v2.databasenetwork: Creation complete after 7s [id=urn:vcloud:network:a68d7950-eadf-4674-a29b-1d7df909c733]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Hepsi bu kadar son bir dizinimizdeki dosyaların durumuna bir bakalım, gördüğünüz gibi state (durum) dosyaları oluşmuş durumda.

ubuntu@terraformubuntu:~/vcd_lina_tenant$ tree
.
├── networks.tf
├── terraform.tfstate
├── terraform.tfstate.backup
├── variables.tf
└── version.tf

Not : Örnek olarak verilen kod parçacıkları, değişkenler, UI üzerinde görülen isimler ve dosya isimleri çeşitli makalelerde değişiklik gösterebilir, tüm kod parçacıklarının son hali için github adresine bakabilirsiniz.

Geri bildirim

Bu makaleyle ilgili bir sorun bulursanız ve/veya hizmetlerimizden herhangi birini nasıl iyileştirebileceğimize dair bir fikriniz varsa, info@doruk.net adresine bir e-posta gönderin.

Bu cevap yeterince yardımcı oldu mu? 0 Bu dökümanı faydalı bulan kullanıcılar: (0 Oy)