0Pricing
DevOps Bootcamp · درس

التعبيرات الشرطية وتعبيرات Splat

نفّذ المنطق الشرطي في تهيئاتك باستخدام العوامل الثلاثية، وتعرّف إلى تعبيرات Splat لتحويل قوائم الكائنات.

التعبيرات الشرطية وتعبيرات Splat درس مجاني في DevOps Bootcamp على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في DevOps Bootcamp، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة DevOps Bootcamp 4 دروس في المجموع.

المنطق الديناميكي في Terraform

لا يقتصر Terraform على التصريحات الثابتة! لجعل تهيئات البنية التحتية أكثر ذكاءً وقابلية للتكيف، نستخدم المنطق الديناميكي.

يقدم هذا الدرس أداتين قويتين: التعبيرات الشرطية وتعبيرات splat. تساعدكم هاتان الأداتان على تكييف البنية التحتية مع المواقف المختلفة وتحويل البيانات بكفاءة.

التعبيرات الشرطية: الأساسيات

تتيح لكم التعبيرات الشرطية، التي تُسمى غالبًا العوامل الثلاثية، اختيار إحدى قيمتين استنادًا إلى كون الشرط صحيحًا أو خاطئًا. وهي تشبه عبارة "if-else" بسيطة للقيم.

  • البنية: condition ? value_if_true : value_if_false
  • تُعد مفيدة جدًا لجعل التهيئات مرنة وقابلة لإعادة الاستخدام، وتكييفها مع البيئات أو الإعدادات المختلفة.

شرطية: مثال على قيمة بسيطة

لنرَ كيف يمكن لتعبير شرطي ضبط قيمة متغير محلي ديناميكيًا استنادًا إلى متغير إدخال. جرّبوا تغيير default = "dev" إلى default = "prod" ثم أعيدوا التشغيل.

variable "env" {
  description = "Deployment environment (dev or prod)"
  type        = string
  default     = "dev"
}

locals {
  instance_type = var.env == "prod" ? "t3.medium" : "t3.micro"
}

output "chosen_instance_type" {
  value = local.instance_type
  description = "The instance type selected based on environment."
}

شرطية: مثال على سمة مورد

يمكنكم أيضًا استخدام الشروط للتحكم في سمات الموارد، بل وتحديد ما إذا كان المورد سيُنشأ أصلًا! ننشئ هنا حاوية S3 بشكل شرطي باستخدام الوسيط الوصفي count.

variable "create_bucket" {
  description = "Whether to create an S3 bucket"
  type        = bool
  default     = true
}

resource "aws_s3_bucket" "my_bucket" {
  # If create_bucket is true, count is 1 (create one bucket).
  # If create_bucket is false, count is 0 (create no buckets).
  count  = var.create_bucket ? 1 : 0
  bucket = "coddykit-unique-bucket-12345" # IMPORTANT: Replace with a globally unique name!
  acl    = "private"
}

output "bucket_id" {
  value = var.create_bucket ? aws_s3_bucket.my_bucket[0].id : "No bucket created"
  description = "The ID of the created S3 bucket, or a message if not created."
}

فهم تعبيرات splat

تُستخدم تعبيرات splat ([*]) لتحويل قائمة من الكائنات إلى قائمة من سمات محددة مستخرجة من تلك الكائنات. وهي اختصار قوي لاستخراج البيانات من عناصر متعددة دفعة واحدة.

  • البنية: LIST_OF_OBJECTS[*].ATTRIBUTE
  • تُبسّط التعامل مع المجموعات، مثل الموارد المتعددة التي تُنشأ باستخدام count أو متغيرات القوائم المعقدة.

Splat: مثال على مخرجات الموارد

تخيلوا أنكم أنشأتم عدة مثيلات EC2. كيف تحصلون بسهولة على قائمة بعناوين IP العامة الخاصة بها جميعًا؟ تعبيرات splat مناسبة جدًا لهذا الغرض! ملاحظة: ستحتاجون إلى AMI صالح لمنطقة AWS الخاصة بكم.

resource "aws_instance" "web" {
  count         = 2 # Creates two instances
  ami           = "ami-0abcdef1234567890" # Replace with a valid AMI ID for your region
  instance_type = "t2.micro"
  tags = {
    Name = "web-instance-${count.index}"
  }
}

output "web_instance_public_ips" {
  value = aws_instance.web[*].public_ip
  description = "A list of public IP addresses for all web instances."
}

Splat: مثال على قوائم المتغيرات

لا تقتصر تعبيرات splat على الموارد؛ فهي تعمل بشكل ممتاز مع المتغيرات المعقدة أيضًا. لدينا هنا قائمة من كائنات المستخدمين ونريد استخراج عناوين بريدهم الإلكتروني فقط.

variable "users" {
  description = "List of user objects, each with name, email, and role."
  type = list(object({
    name  = string
    email = string
    role  = string
  }))
  default = [
    { name = "Alice", email = "alice@example.com", role = "admin" },
    { name = "Bob", email = "bob@example.com", role = "viewer" },
    { name = "Charlie", email = "charlie@example.com", role = "editor" }
  ]
}

output "user_emails" {
  value = var.users[*].email
  description = "A list containing only the email addresses of the users."
}

دمج الشروط وتعبيرات splat

يمكن دمج التعبيرات الشرطية وتعبيرات splat لتنفيذ منطق أكثر تقدمًا واختصارًا. فمثلًا، يمكنكم اختيار قائمة من الموارد بشكل شرطي، ثم استخدام تعبير splat على القائمة المختارة.

  • يتيح ذلك إنشاء تهيئات شديدة التكيف تستجيب للسيناريوهات المعقدة.
  • مثال: يمكن للتعبير (var.env == "prod" ? aws_instance.prod : aws_instance.dev)[*].id جلب المعرّفات من مجموعات مثيلات مختلفة استنادًا إلى البيئة.

أفضل الممارسات للمنطق الديناميكي

على الرغم من قوة المنطق الديناميكي، فإنه قد يجعل فهم التهيئات أصعب أحيانًا إذا لم يُستخدم بحذر. إليكم بعض النصائح:

  • حافظوا على سهولة القراءة: قسّموا التعبيرات المعقدة إلى أجزاء أصغر وأسهل في الإدارة.
  • استخدموا القيم المحلية: خزّنوا التعبيرات الشرطية أو تعبيرات splat المعقدة في كتل locals لتحسين سهولة القراءة وتجنب التكرار.
  • اختبروا بدقة: قد يؤدي المنطق الديناميكي إلى سلوك غير متوقع. شغّلوا دائمًا terraform plan وراجعوا التغييرات المقترحة بعناية.
  • وثّقوا الشيفرة: أضيفوا تعليقات تشرح المنطق المعقد، لا سيما عند دمج الشروط وتعبيرات splat.

تحقق سريع

ألقوا نظرة على تهيئة Terraform التالية:

variable "server_names" {
  type    = list(string)
  default = ["web-01", "db-01", "cache-01"]
}

output "filtered_names" {
  value = var.server_names[*]
}

مراجعة وخطوات تالية

أحسنتم! لقد تعلمتم كيفية جعل تهيئات Terraform أكثر ديناميكية ومرونة:

  • استكشفنا التعبيرات الشرطية (العامل الثلاثي) لجعل القيم ديناميكية استنادًا إلى شروط محددة.
  • أتقنّا تعبيرات splat ([*]) لاستخراج قوائم السمات بكفاءة من مجموعات الكائنات أو الموارد.

تُعد هذه الأدوات أساسية لبناء بنية تحتية قابلة للتوسع وإعادة الاستخدام والتكيف باستخدام الشيفرة. واصلوا التدريب لدمجها في عمليات عملكم اليومية باستخدام Terraform!

الأسئلة الشائعة

هل درس «التعبيرات الشرطية وتعبيرات Splat» مجاني؟

نعم — نص درس «التعبيرات الشرطية وتعبيرات Splat» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة DevOps Bootcamp، انتقل إلى CoddyKit PRO. تتضمن دورة DevOps Bootcamp 4 دروس في المجموع.

ماذا ستتعلم في «التعبيرات الشرطية وتعبيرات Splat»؟

نفّذ المنطق الشرطي في تهيئاتك باستخدام العوامل الثلاثية، وتعرّف إلى تعبيرات Splat لتحويل قوائم الكائنات. تتمرن على DevOps Bootcamp مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ DevOps Bootcamp؟

لا تُشترط خبرة سابقة. DevOps Bootcamp على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «التعبيرات الشرطية وتعبيرات Splat»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس DevOps Bootcamp هذا؟

نعم. كل درس في DevOps Bootcamp يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. استخدام الحلقات مع `for_each` و`count`
  2. الدوال المضمّنة في Terraform
  3. التعبيرات الشرطية وتعبيرات Splat
  4. الكتل الديناميكية للإعدادات المتداخلة
← العودة إلى DevOps Bootcamp