لینوکس ۳۰۵؛ شب ۵۳: Terraform؛ plan، state و provider
فهرست نوشته
Terraform تغییر زیرساخت را از پیکربندی و state محاسبه میکند. امشب چرخهٔ plan/apply را با resource داخلی تمرین میکنیم تا بدون حساب cloud، تفاوت بررسی و اعمال روشن شود.
این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.
جایگاه در دوره: هدفهای 353.1 آزمون 305-300.
محیط: Terraform نسخهٔ 1.4 یا جدیدتر از بستهٔ معتبر ناشر، پوشهٔ تازهٔ ~/lpic305/terraform؛ resource نمونه هیچ VM، فایل یا سرویس خارجی نمیسازد.
main.tf:
terraform {
required_version = ">= 1.4.0, < 2.0.0"
}
variable "lab_label" {
type = string
default = "lpic305-v1"
}
resource "terraform_data" "lab" {
input = {
label = var.lab_label
role = "training"
}
}
output "lab_identity" {
value = terraform_data.lab.output
}
terraform version
terraform init
terraform fmt -check
terraform validate
terraform plan -out=lab305.tfplan
terraform show lab305.tfplan
terraform apply lab305.tfplan
terraform state list
terraform output
terraform plan
provider داخلی terraform.io/builtin/terraform به دانلود plugin خارجی نیاز ندارد. plan آخر با ورودی یکسان باید تغییر تازه نخواهد؛ این شاهد آزمایش چرخه است، نه provisioning واقعی cloud.
در زیرساخت واقعی چه عوض میشود؟#
provider API محصول را پیاده میکند؛ resource lifecycle object، data source خواندن object موجود، variable ورودی و output نتیجه است. برای OpenStack، provider مستند و نسخهٔ ثابت، credential کماختیار، backend state مناسب و محدودیت project لازماند.
state mapping و اطلاعات resource را نگه میدارد و ممکن است راز داشته باشد؛ sensitive نمایش را محدود میکند و الزاماً داده را از state حذف نمیکند. plan ذخیرهشده نیز artifact خصوصی است. فایل state را در Git عمومی نگذار و برای تیم، locking و backup backend را طراحی کن.
تمرین: lab_label را تغییر بده و plan را با قبل مقایسه کن؛ هیچ apply ناشناخته را فقط چون plan ساخته شده قبول نکن. drift تغییر بیرونی است و refresh/import با ساخت جدید یکی نیست.
بازگشت: terraform plan -destroy را بخوان؛ در این پوشهٔ محلی destroy تنها resource داخلی را حذف میکند. همین دستور در پروژهٔ cloud میتواند داده/VM واقعی را نابود کند و باید جدا بررسی شود.
منبع: terraform_data ، state ، plan .