DEV Community

Suleyman
Suleyman

Posted on

Terraform Local Values and Output

Merhaba,

Bu makalede terraform üzerinde local value ve output kullanımını ve ne işe yaradığını göreceğiz.

Local value'ler bir terraform dosyası içerisindeki bir değerin birden fazla yerde kullanılması gerektiğinde tanımlanan ve kullanılmaktadır.

Output ise oluşturmuş olduğumuz bir nesne hakkında bilgi almak istediğimizde kullanılmaktadır. Output diğer yazılım dillerinde ki ekrana yazdırma görevi görür. Python'daki printf, C# 'ta Console.WriteLine() gibi.

Terraform dosyamızın içerisine aşağıdaki gibi 2 adet local değişkeni tanımlıyoruz.

locals {
   appName = "testapps"
   namespace = "testnamespace"
}
Enter fullscreen mode Exit fullscreen mode

Kubernetes üzerinde bir service ve bir pod oluşturacağım ve bunların isimlerini ve namespace lerini bu değişkenler üzerinden alacağım. Kullanım şekli "local.degiskenismi" kullanılmaktadır. Bu sayede sadece local değişkenlerinin değerini değiştirerek farklı bir isimde ve namespace üzerinde bu objeleri oluşturabilirim.

locals {
   appName = "testapps"
   namespace = "testnamespace"
}
resource "kubernetes_service" "example" {
  metadata {
    name = "terraform-example"
    namespace = local.namespace

  }
  spec {
    selector = {
      app = local.appName
    }
    session_affinity = "ClientIP"
    port {
      port        = 8080
      target_port = 80
    }
    type = "LoadBalancer"
  }
}

resource "kubernetes_pod" "example" {
  metadata {
    name = "terraform-example"
    namespace = local.namespace
    labels = {
      app = local.appName
    }
  }

  spec {
    container {
      image = "nginx"
      name  = local.appName
    }
  }
Enter fullscreen mode Exit fullscreen mode

Örneğin; farklı bir örnekte sunucunun oluşturulacağı lokasyonu local değişkenlerden alabiliriz. Bu sayede bu değişkenin değerini değiştirerek farklı bir lokasyonda oluşturabiliriz. Burada bir noktada kullanıldığı görülmekte fakat bunu belki 5-6 yerde kullanabiliriz. Böyle olunca bize kolaylık sağlamaktadır.

locals {
  location = "australiaeast"
}

resource "azurerm_resource_group" "this" {
  name     = "rg-mom-spells"
  location = local.location
}
Enter fullscreen mode Exit fullscreen mode

Aşağıdaki şekilde de bir kullanım sağlayabiliriz. Bir terraform resourcenin değerini farklı bir resource'den alabiliriz. Örneğin; aşağıdaki service nin selector değerini pod üzerinde tanımlanan label değerinden almışız. Bu kullanım da yaygın bir kullanımdır.

resource "kubernetes_service" "example" {
  metadata {
    name = "terraform-example"
  }
  spec {
    selector = {
      app = kubernetes_pod.example.metadata.0.labels.app
    }
    session_affinity = "ClientIP"
    port {
      port        = 8080
      target_port = 80
    }

    type = "LoadBalancer"
  }
}

resource "kubernetes_pod" "example" {
  metadata {
    name = "terraform-example"
    labels = {
      app = "MyApp"
    }
  }

  spec {
    container {
      image = "nginx:1.21.6"
      name  = "test"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Şimdi output'a bakalım. Örneğin; load balancer tipinde bir servis oluşturduk ve bu load balancerın değerini bu objeler oluştuktan sonra görmek istiyoruz. Kullanım şekli "terraform_resource.resource_name.parametreler" şeklindedir. kubernetes_service ve example yukarıda ki örnekte oluşturduğumuz servis objesidir. Ondan sonra parametrelerde objeye göre değişmektedir.

kubernetes_service.example.status[0].load_balancer[0].ingress[0].ip

Output objesi aşağıdaki şekilde oluşturulmaktadır.


output "LoadBalancer_IP" {
    value = "Bu servisin Load Balancer IP Adresi =  {kubernetes_service.example.status[0].load_balancer[0].ingress[0].ip}"
}
Enter fullscreen mode Exit fullscreen mode

Bu şekilde kullanım bize aşağıdaki şekilde bir çıktı vermektedir.

Bu servisin Load Balancer IP Adresi = 192.168.1.163

Mesela istersek oluşturulan pod'un hangi node üzerinde oluştuğunuda bu output ile görebiliriz. Bu değerler terraform providerlara göre değişmektedir.

kubernetes_pod.example.spec[0].node_name

Daha fazla bilgi için terraformun resmi sitesinden ulaşabilirsiniz.

Locals : https://developer.hashicorp.com/terraform/language/values/locals
Output : https://developer.hashicorp.com/terraform/language/values/outputs

Herkese iyi günler.

Top comments (0)