مقدمه
در Terraform، خروجیها (Outputs) برای استخراج اطلاعات مربوط به منابع زیرساخت از وضعیت پروژه (state) استفاده میشوند. با کمک قابلیتهای دیگر HashiCorp Configuration Language (HCL) که زبان تنظیمات Terraform است، میتوان اطلاعات منابع را کوئری گرفت و آنها را به ساختارهای پیچیدهتر مثل لیست (list) یا مپ (map) تبدیل کرد.
Outputs زمانی مفید هستند که بخواهید اطلاعات زیرساخت ساختهشده را به نرمافزارهای خارجی بدهید تا روی آنها عملیات انجام دهند.
در این آموزش یاد میگیرید:
-
سینتکس Terraform Output چیست
-
پارامترهای آن چگونه کار میکنند
-
چطور یک زیرساخت ساده با Droplet بسازید
-
و چطور خروجیها را به JSON تبدیل کرده و بهصورت برنامهنویسی پردازش کنید
پیشنیازها
برای انجام این آموزش نیاز دارید:
-
یک DigitalOcean Personal Access Token
-
نصب Terraform روی سیستم
-
ایجاد پروژه Terraform با provider دیجیتالاوشن
-
آشنایی اولیه با انواع داده در HCL و حلقهها
(این آموزش با Terraform نسخه 1.0.2 تست شده است)
تعریف Output
در این بخش یک Droplet تعریف میکنید، آن را در cloud deploy میکنید و یک output برای نمایش IP آن میسازید.
در فایل droplets.tf بنویسید:
image = “ubuntu-20-04-x64”
name = “test-droplet”
region = “fra1”
size = “s-1vcpu-1gb”
}output “droplet_ip_address” {
value = digitalocean_droplet.web.ipv4_address
}
ابتدا یک Droplet به نام web تعریف میکنید. سپس یک output با نام droplet_ip_address که مقدارش برابر IP همان Droplet است.
پس از اجرای:
در انتهای خروجی، IP نمایش داده میشود.
همچنین میتوانید خروجیها را با دستور زیر ببینید:
یا فقط یک خروجی خاص:
پارامترهای اختیاری Output
علاوه بر value، پارامترهای دیگری هم وجود دارد:
-
description → توضیح کوتاه درباره خروجی
-
depends_on → تعیین وابستگی صریح به منابع دیگر
-
sensitive → اگر true باشد، مقدار خروجی مخفی میشود
مثال:
value = digitalocean_droplet.web.ipv4_address
sensitive = true
}
در این حالت مقدار در لاگها نمایش داده نمیشود.
خروجی گرفتن از ساختارهای پیچیده
حالا چند Droplet با هم ایجاد میکنید:
count = 3
image = “ubuntu-20-04-x64”
name = “test-droplet-${count.index}”
region = “fra1”
size = “s-1vcpu-1gb”
}
استفاده از حلقه for برای ساخت map
value = {
for droplet in digitalocean_droplet.web:
droplet.name => droplet.ipv4_address
}
}
خروجی:
test-droplet-1 → IP
test-droplet-2 → IP
دریافت خروجی بهصورت JSON
خروجی:
این روش اجازه میدهد خروجی را در برنامههای دیگر پردازش کنید.
استفاده از Splat Expressions
روش کوتاهتر برای گرفتن همه IPها:
value = digitalocean_droplet.web[*].ipv4_address
}
خروجی:
“ip1”,
“ip2”,
“ip3”
]
پردازش خروجیها با jq
ابزار jq برای کار با JSON استفاده میشود.
مثلاً:
نمایش زیباتر JSON.
دریافت آیتم دوم:
دریافت بازه:
جمعبندی
در این مقاله یاد گرفتید:
-
Terraform Outputs چیست
-
چگونه اطلاعات منابع را استخراج کنید
-
چگونه map و list بسازید
-
چگونه خروجی را JSON کنید
-
و چطور با jq آن را پردازش کنید
از همراهی شما با پارمین کلود سپاسگزاریم.
نظرات کاربران