التطبيق · فصل ٣

من init لحد apply

terraform init · plan · apply · destroy · fmt · validate
🎯 الهدف: تشغّل الدورة على ملف محلي، وتقرأ رموز الخطة، وتعرف إن مسح الملف بإيدك يخلّي الخطة تعمله تاني.

الدورة

init آمن تعيده. مبيمسحش الرسمة ولا الدفتر. لو غيّرت الـ provider أو الـ backend أو الموديول، شغّله تاني.

🧪 Lab

الفولدر فيه الملف ده. المتغير الافتراضي hello from terraform.

main.tf
terraform {  required_providers {    local = {      source  = "hashicorp/local"      version = "~> 2.5"    }  }}variable "greeting" {  type        = string  description = "text written into the file"  default     = "hello from terraform"}resource "local_file" "note" {  filename = "${path.module}/hello.txt"  content  = "${var.greeting}\n"}output "path" {  value = local_file.note.filename}
terminal
terraform initterraform planterraform apply

على 1.16.6 الناتج كان:

  • init ثبّت hashicorp/local v2.9.1 وعمّل .terraform.lock.hcl.
  • plan قال local_file.note will be created وبعدين Plan: 1 to add, 0 to change, 0 to destroy.
  • apply كتب hello.txt فيه السطر hello from terraform، وطبَع path = "./hello.txt".

apply من غير ملف خطة محفوظ بيسألك توافق. -auto-approve يعدّي السؤال. على كلاود فيها حاجات شغالة، سيّب السؤال أو راجع خطة محفوظة.

رموز الخطة

الرمزالمعنى
+هيتخلق
~هيتعدّل في مكانه
-/+هيتمسح ويتخلق تاني
-هيتمسح

المعمل ده ورّى + و-/+ و-. الرمز ~ يظهر لما الخاصية تتغير من غير ما المورد كله يتبدّل.

غيّرت النص

terminal
terraform apply -var 'greeting=hello again'

الخطة قالت local_file.note must be replaced وPlan: 1 to add, 0 to change, 1 to destroy. المحتوى عند الـ provider ده بيجبر استبدال، مش تعديل في مكانه. الملف اتمسح واتكتب تاني، والسطر بقى hello again.

مش كل تغيير استبدال. اقرأ الخطة. لو لقيت -/+ على سيرفر، ده هدم وبناء، مش تعديل هادي.

مسحت الملف بإيدك

بعد ما apply خلّص، الملف اتمسح من الطرفية وplan اشتغل تاني. الدفتر لسه فاكر إن local_file.note موجود، والقرص فاضي، فالخطة رجعت + create و1 to add.

ده الانحراف: الواقع مش زي الدفتر. الفصل الجاي يكمل على الدفتر نفسه.

destroy

terraform destroy خطة مسح لكل اللي في الدفتر. على المعمل: Destroy complete! Resources: 1 destroyed. وhello.txt اختفى.

الملف terraform.tfstate وterraform.tfstate.backup فضلوا. المسح مسح المورد، ومسحش الدفتر من القرص.

fmt و validate

terminal
terraform fmtterraform validate

fmt يرتّب الأقواس والمسافات. validate على الملف ده طبع Success! The configuration is valid. الاتنين قبل plan على أي تغيير هيروح للناس.

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

🧠 اختبر نفسك
١) init تاني هيمسح terraform.tfstate؟
لأ. init يجهّز الفولدر والـ provider. الدفتر يفضل.
٢) plan قال 1 to add و 1 to destroy على نفس المورد. ده معناه إيه؟
استبدال: يتهدّم ويتخلق تاني. في المعمل ده حصل لما النص اتغير.
٣) في CI ليه plan -out وبعدين apply على الملف؟
عشان اللي اتراجع هو اللي يتنفّذ، مش خطة جديدة اتعملت وقت التنفيذ.