Terraform / اللغة والمزود والهوية المُدارة / الدرس 2
بنية HCL والقيم والتعبيرات
اقرأ الكتل والتعبيرات ذات الأنواع دون جعل الاستيفاء والتحويل بديلاً عن نموذج واضح.
في هذه الصفحة
أهداف الدرس
- حدد الكتل والخصائص والمجموعات ومراجع التعبيرات.
- افهم null والفراغ والأنواع والتحويلات الحتمية.
تصف الكتل والخصائص بنيتين مختلفتين
تستخدم HCL الكتل لوصف الموارد والمتغيرات، وتستخدم الخصائص لإسناد تعبير إلى اسم إعداد. تعرف التسميات كتلاً محددة وفق المخطط المحيط. وقد تستعمل الأقواس أيضاً لبناء كائن داخل تعبير، فلا تكون كل بنية بين قوسين كتلة مورد. يحدد المزود ولغة Terraform الحقول والكتل المتداخلة المقبولة. لذلك لا تكفي صياغة مألوفة لإثبات صلاحية حقل منقول من أداة أخرى؛ ارجع إلى المخطط المعني.
اجعل القيم ذات أنواع والتحويل صريحاً
تختلف معاني النص والعدد والمنطق والمجموعة والكائن و null. تحفظ القائمة الترتيب وتسمح بالتكرار، بينما تمثل المجموعة أعضاء فريدين دون ترتيب يختاره المستخدم. تربط الخريطة مفاتيح نصية بقيم، ويمكن للكائن جمع خصائص مختلفة الأنواع. اختر البنية الموافقة للعقد؛ فتحويل كل شيء لنص قد يخفي خطأ التحقق ويسبب سلوك مزود مفاجئاً. وتحتاج فروع التعبير الشرطي أنواعاً متوافقة، لا قيمتين لا علاقة بينهما.
terraform {
required_version = ">= 1.16.0, < 1.17.0"
}
locals {
prefix = "atlas"
services = ["api", "worker"]
labels = { for name in local.services : name => "${local.prefix}-${name}" }
}
output "labels" {
value = local.labels
}
ينتج التعبير api إلى atlas-api و worker إلى atlas-worker. المخرج خريطة لا موردان، والمفاتيح هويات صريحة. لا يلزم مزود أو تنفيذ لاستنتاج القيم.
ليست null نصاً أو مجموعة فارغة
تمثل null غالباً الحذف أو غياب قيمة في عقد الإعداد، بينما يعد النص الفارغ قيمة نصية مقدمة والمجموعة الفارغة مجموعة ذات صفر عناصر. يمكن أن يميز المزود والمتغير بين هذه الحالات، وتضيف الخصائص الاختيارية والافتراضيات قواعد أخرى يجب توثيقها. لا تستبدل قيمة مطلوبة مفقودة بفراغ لإسكات خطأ النوع. حدد هل الغياب مشروع، وهل يوجد افتراضي، وهل يسمح المورد بحذف الخاصية.
مثل التعبير المعلن فقط في نموذج مستقل
يماثل Python التالي تحويلاً واحداً ثابتاً للمجموعة ليسهل فحص نتيجته التعليمية. لكنه يختلف عن Terraform في الأنواع والتقييم والقيم المجهولة وتحويل المجموعات؛ فلا يثبت نجاح الحساب صحة HCL عامة. احفظ هذا الحد كلما استخدمت الدورة نموذجاً مستقلاً. المقصود إظهار القيم المتوقعة دون تهيئة مزود أو الوصول لمساحة عمل أو خلفية أو استدعاء عملية بنية.
prefix = 'atlas'
services = ['api', 'worker']
labels = {name: f'{prefix}-{name}' for name in services}
for key in sorted(labels):
print(f'{key}={labels[key]}')
api=atlas-api
worker=atlas-worker
يحدد الفرز العرض api ثم worker، ولا يعد بترتيب نشر من تكرار خريطة Terraform. لا تنشأ موارد.
تحسن التعبيرات المقروءة المراجعة
استخدم locals لتسمية تحويل متكرر حين يوضح الاسم معناه. تجنب تعبيراً ضخماً يمزج الافتراضات واختيار الهوية وخصائص المزود بحيث يصعب تدقيقه. افصل المفاتيح المستقرة عن تسميات العرض، واختبر null والفراغ والتكرار والحدود. يساعد التنسيق على فهم البنية ولا يتحقق من مخطط المزود أو آثار التنفيذ. هنا نفحص النص ونماذج صغيرة، ولا ندعي تحقق Terraform مع غياب الأداة واعتمادياتها.
الأخطاء الشائعة وإصلاحها
Unsupported argument.
- لماذا يحدث؟
- اختُرع الحقل أو نُقل من مخطط آخر.
- كيف تصلحه؟
- راجع المورد وإصدار المزود وبنيته المقبولة.
- كيف تتجنب تكراره؟
- راجع المخطط مستقلاً عن الترقيم والمسافات.
اعتبار null والنص الفارغ متساويين.
- لماذا يحدث؟
- دُمج الغياب والقيمة المقدمة.
- كيف تصلحه؟
- حدد الغياب والافتراض عند المتغير والمورد.
- كيف تتجنب تكراره؟
- اختبر المفقود و null والفراغ والقيمة العادية منفصلة.
يزيل تحويل المجموعة تكرارات مهمة.
- لماذا يحدث؟
- حُولت القائمة لمجموعة دون مراجعة الهوية.
- كيف تصلحه؟
- احتفظ بالترتيب أو المفاتيح المناسبة للعقد.
- كيف تتجنب تكراره؟
- وثق معنى الترتيب والتكرار.
اختبر فهمك
1. كم مورداً يعلن مخرج labels؟
اعرض الحل المشروح
لا موارد؛ يحسب خريطة من نصين بمدخلين. تختلف القيم عن النسخ. قد يستهلكها مورد لاحق، ولا يطلب تعبير for وحده إنشاء أو يعين هويات مُدارة.
2. لماذا قد يكون النص الفارغ بديلاً سيئاً لمعرّف مفقود؟
اعرض الحل المشروح
يقدم نصاً بلا هوية صحيحة ويؤخر الفشل لخطأ مزود أقل وضوحاً. اسمح بـ null إن صح، أو اشترط معرّفاً غير فارغ، أو أعد الاعتماد ليرجع الهوية الصحيحة.
أهم ما تعلمته
- اختر بنية المجموعة من متطلبات الهوية والترتيب.
- لا يعوض التنسيق والحساب تحقق المخطط.