البداية · فصل ٢

البلوكات جوه الملف

resource · variable · output · required_providers · address
🎯 الهدف: تقرأ ملف Terraform وتعرف نوع المورد من اسمه المحلي، وتعرف إن init بيثبت النسخة في ملف القفل.

كل ملفات tf بتتلم

Terraform يقرا كل ملف اسمه ينتهي بـ .tf في الفولدر. ترتيب الملفات مش ترتيب تنفيذ. تقدر تقسّم main.tf وvariables.tf وoutputs.tf، والأداة تشوفهم كل واحد.

الاسم المحلي جوّه البلوك هو عنوانك. اسم الملف مجرد تنظيم.

بلوك terraform

ده بيقول أنهي مترجمين مسموح بيهم، وبأي مدى إصدارات.

versions.tf
terraform {  required_providers {    local = {      source  = "hashicorp/local"      version = "~> 2.5"    }  }}

source عنوان الـ provider في الريجستري. ~> 2.5 يعني من 2.5 لحد قبل 3.0. على التشغيل ده init نزّل 2.9.1 وكتب الاختيار في .terraform.lock.hcl.

بلوك resource

سطرين الاسم: الأول نوع المورد عند الـ provider، والتاني اسمك أنت.

main.tf
resource "local_file" "note" {  filename = "${path.module}/hello.txt"  content  = "${var.greeting}\n"}

العنوان يبقى local_file.note. path.module فولدر الملف اللي فيه البلوك. var.greeting قيمة متغير هنعرفه في فصل لوحده.

لو كتبت المورد من غير file_permission، خطة النسخة دي طلعت الصلاحية الافتراضية 0777. على ملف تجربة ده عادي. على ملف فيه سر، حط file_permission بنفسك.

المتغير والمخرج

variables.tf
variable "greeting" {  type        = string  description = "text written into the file"  default     = "hello from terraform"}output "path" {  value = local_file.note.filename}

variable مدخل. output حاجة تطبعها بعد apply وتقدر تمرّرها لموديول تاني. الوصف للناس، والنوع عشان قيمة غلط تتقفش قبل التنفيذ.

خلّصت الفصل لما

🧠 اختبر نفسك
١) عندي main.tf وvariables.tf. أنهي واحد يتنفّذ الأول؟
مفيش ترتيب ملفات. Terraform يلم كل .tf في الفولدر.
٢) إيه عنوان المورد اللي نوعه local_file واسمه note؟
local_file.note
٣) ليه ملف القفل في git والكاش لأ؟
القفل يثبت نسخة الـ provider. .terraform/ يتنزّل تاني بـ init.