ليه موديول
الفولدر اللي بتشغّل فيه terraform اسمه الـ root module. أول ما نفس بلوك الملف أو السيرفر يتكرر في مشروعين، انقله لفولدر واستدعِه. الموديول مش سيرفر. ده مجموعة بلوكات ليها مدخلات ومخرجات.
الاستدعاء
الموديول اللي اتشغّل:
variable "greeting" { type = string}resource "local_file" "note" { filename = "${path.module}/hello.txt" content = "${var.greeting}\n"}output "path" { value = local_file.note.filename}module "note" { source = "./modules/note" greeting = "hello from a module"}output "path" { value = module.note.path}source هنا مسار محلي. init يجهّز الموديول. apply كتب الملف في modules/note/hello.txt لأن path.module جوه الموديول هو فولدر الموديول، مش الفولدر اللي وقفت فيه. path.root هو فولدر الأمر.
العنوان جوه الدفتر بقى module.note.local_file.note. المخرج اتقرأ module.note.path.
count بيزحزح العناوين
count = 2 يعمل local_file.note[0] وlocal_file.note[1]. لو شلت العنصر الأول من القائمة، اللي كان [1] يبقى [0]. الخطة تشوف العنوان اتغير، فتهدد مورد وتخلّق واحد تاني حتى لو المحتوى نفسه.
for_each على map العنوان فيه المفتاح: local_file.note["a"]. شلت المفتاح b، الخطة تمس b بس.
variable "notes" { type = map(string) default = { a = "hello" b = "again" }}resource "local_file" "note" { for_each = var.notes filename = "${path.module}/${each.key}.txt" content = "${each.value}\n"}استخدم count لما العدد هو المعلومة، زي «نسختين متطابقين». استخدم for_each لما كل نسخة ليها اسم هيفضل ثابت لو شلت واحدة من النص.
خلّصت الفصل لما
١) path.module جوه modules/note هيكتب الملف فين؟
modules/note، مش في فولدر الـ root. المعمل كتب modules/note/hello.txt.٢) إزاي الـ root يقرأ مخرج path من الموديول؟
module.note.path