محتويات الدورة

Helm / أساسي: أسس الحزمة والتصيير / الدرس 5

تدفق التحكم والنطاق والمسافات

استخدم الشروط والحلقات بسياق صريح مع إبقاء الوثائق الناتجة مقروءة وحفظ حدود YAML الصحيحة.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • شرح تغير معنى النقطة داخل with وrange.
  • الاحتفاظ بسياق الجذر والمتغيرات المحلية عمدا.
  • مراجعة إزالة المسافات من خلال أثرها على الناتج.

ابدأ بالسياق الحالي

تمثل النقطة سياق القالب الحالي. عند مدخل القالب تعرض عادة كائنات مثل Values وRelease. داخل with أو range تتغير إلى القيمة المختارة أو العنصر الحالي. يسهل ذلك التعبيرات القصيرة، لكن .Release.Name قد يفشل داخل التداخل لأن Release ليس حقلا في الخريطة المختارة. لا تصلح الخطأ بإضافة بيانات Release زائفة إلى القيم. حدد بدلا من ذلك السياق الذي يحتاجه كل تعبير. وغالبا يشرح رسم نطاق صغير الفشل أسرع من تكرار تعديل الإزاحة أو الاقتباس.

احتفظ بالجذر صراحة

يحفظ متغير يُعين قبل الكتلة قيمة مطلوبة. ويتيح المتغير الجذري $ الوصول إلى السياق الممرر عند مدخل القالب، مع أن المساعد قد يتلقى جذرا مختلفا عمدا. يحفظ المقطع الأول Release.Name ويستخدمه داخل with. بافتراض settings.mode يساوي demo وRelease.Name يساوي preview-catalog، يكون حقلا data المقصودان نصيين. لا يجلب المتغير معلومات جديدة ولا يتجاوز حد تفويض؛ بل يشير إلى سياق سبق تقديمه ويظهر اعتماد البيانات للمراجع.

gotemplate حفظ قيمة واحدة من الجذر
{{- $releaseName := .Release.Name -}}
data:
  {{- with .Values.settings }}
  mode: {{ .mode | quote }}
  release: {{ $releaseName | quote }}
  {{- end }}
الناتج المتوقع
data:
  mode: "demo"
  release: "preview-catalog"

داخل with تصبح النقطة settings. يبقى المتغير متاحا من نطاقه المحيط. هذا مقطع manifest توضيحي.

استخدم متغيرات حلقة صريحة

يمكن لـrange ربط الفهرس والقيمة في قائمة أو المفتاح والقيمة في خريطة. تقلل الأسماء الواضحة الخلط بين العنصر وشجرة القيم كاملة. يتوقع المقطع الثاني قائمة نصين public وinternal وينتج مدخلات نصية مفهرسة ضمن data في ConfigMap. إنه مثال تعليمي لا توصية لتخزين كل قوائم التطبيق بهذه الطريقة. حين يهم الترتيب للتطبيق اعرض قائمة ولا تعتمد على عرض عارض للخريطة. افحص الحالة الفارغة أيضا؛ فقد تترك حلقة بلا دورات فرعا null بدلا من خريطة فارغة.

gotemplate فهرس القائمة وعنصرها
data:
  {{- range $index, $name := .Values.channels }}
  channel-{{ $index }}: {{ $name | quote }}
  {{- end }}
الناتج المتوقع
data:
  channel-0: "public"
  channel-1: "internal"

للقائمة channels [public, internal] يكون المفتاحان المقصودان channel-0 وchannel-1، وتُقتبس كل قيمة حسب عقد ConfigMap.data.

أزل المسافات بحذر

تزيل الشرطة في محدد القالب المسافات المجاورة بما فيها الأسطر الجديدة. وقد يؤدي حذف المسافات على جانبي شرط إلى لصق مفتاحي YAML في سطر واحد. ولأن لغة القالب لا تعرف بنية YAML، فقد ينتج قالب صحيح نحويا مخرجا غير صالح. حدد مواضع الأسطر التي يجب حفظها ثم ضع علامات الإزالة. راجع فرعي الوجود والغياب، لا مسار التطوير فقط. كثيرا ما يغير غياب كتلة اختيارية الإزاحة المجاورة أو فواصل الوثائق، فيستحق فحصا مماثلا للحالة المملوءة.

صمم مصفوفات فروع صغيرة

تغطي مصفوفة المراجعة المفيدة الموارد المفعلة والمعطلة والخرائط الغائبة والموجودة والقوائم الفارغة والمملوءة والقيم false المقصودة. تختبر هذه الحالات مسارات تحكم مختلفة دون عنقود كبير. اجعل كل ملف قيم صغيرا واشرح عدد الموارد أو الفرع المتوقع. لا توسع كل التركيبات عشوائيا؛ اختر حالات تمثل نتائج بنيوية متميزة. عند ظهور مشكلة نطاق اعزل أصغر كتلة وحدد قيمة النقطة في كل سطر قبل إدخال مساعدين. يحول ذلك فشلا غامضا إلى عدم تطابق محدد بين المدخل والسياق.

الأخطاء الشائعة وإصلاحها

تعذر تقييم Release.Name داخل with

لماذا يحدث؟
أصبحت النقطة تشير إلى خريطة settings المختارة.
كيف تصلحه؟
استخدم متغيرا محفوظا أو سياق الجذر المناسب.
كيف تتجنب تكراره؟
وضح حدود النطاق عند مراجعة القوالب.

ظهور مفتاحي YAML في سطر واحد

لماذا يحدث؟
أزالت علامات القص سطرا جديدا ضروريا.
كيف تصلحه؟
احفظ حد السطر وراجع فرعي الشرط.
كيف تتجنب تكراره؟
افحص النص الناتج لا إزاحة القالب وحدها.

إنتاج حلقة فارغة لخريطة null غير مقصودة

لماذا يحدث؟
بقي المفتاح الأب دون إخراج أبناء.
كيف تصلحه؟
احذف الفرع الاختياري كله أو أخرج بنية فارغة صريحة إذا سمح المخطط.
كيف تتجنب تكراره؟
أدرج حالات بلا عناصر في مصفوفة المراجعة.

اختبر فهمك

1. أي تعبير يصل إلى اسم الإصدار الأصلي داخل range .Values.channels؟

اعرض الحل المشروح

في القالب الأعلى يصل $.Release.Name إلى الجذر الأصلي، أو يمكن حفظ الاسم بمتغير قبل range. لكن داخل مساعد استُدعي بسياق آخر يشير $ إلى السياق الممرر له؛ لذلك يجب معرفة عقد المساعد. لا تفترض أن الجذر يعني دائما جذر الحزمة الأصلي عبر كل الاستدعاءات.

2. تعمل كتلة annotations عند ملئها وتفشل عند غيابها. ماذا تفحص أولا؟

اعرض الحل المشروح

قارن النص الناتج حول المفتاح الأب والأسطر المجاورة. ابحث عن مفتاح null متبق أو إزاحة تغيرت بسبب الشرط أو أسطر أزالتها علامات القص. تأكد أن المدخل غائب فعلا وليس من نوع خاطئ. أصلح الفرع البنيوي واحتفظ بالحالتين كيلا يخفي نجاح الحالة المملوءة تراجعا آخر.

أهم ما تعلمته

  • تتغير النقطة بتغير النطاق، وللجذر والمتغيرات المحفوظة عقود استدعاء صريحة.
  • الفروع الفارغة والمسافات جزء من عقد الوثيقة الناتجة.

المراجع الرسمية