Terraform / اللغة والمزود والهوية المُدارة / الدرس 4
متطلبات المزود والإصدارات وملف القفل
افصل توافق CLI واختيار المزود وإعداده وسلامة الاعتماد.
في هذه الصفحة
أهداف الدرس
- اشرح عنوان المصدر والاسم المحلي والقيد والإصدار المختار.
- ميّز قفل المزود عن اختيار إصدار الموديول.
لـ Terraform والمزودين إصدارات مستقلة
يقيد required_version أداة Terraform نفسها، وتحدد required_providers عناوين المزودين وإصدارات الإضافات المقبولة. أما provider فتضبط إعدادات المزود المختار ولا تعوض تصريح مصدره. لا يلزم أن تتساوى أرقامها؛ فقد تعتمد ميزة لغوية على الأداة وخاصية مورد على المزود. حدد الحد الصحيح قبل ترقية الجميع أو نسبة خطأ المخطط لترقيم HCL. نعتمد عائلة 1.16 الموثقة دون افتراض ميزات 1.17.
صرح بالأصل والمدى المقبول
يعلن المثال Random الرسمي اعتماداً خارجياً تعليمياً، ويضم كذلك terraform_data المدمج. قيد Random مثال توافق لا ادعاء تثبيت هذه الإصدارات أو اختبار تكاملها. لا توجد بيانات دخول أوجهة API حقيقية، ولا يحتاج المزود المدمج تصريحاً خارجياً. ولا يجوز اختراع بصمات لملف القفل؛ بل يجب أخذ هوية الحزم الفعلية من سير الاعتماد المدعوم في بيئة معتمدة مستقلة.
terraform {
required_version = ">= 1.16.0, < 1.17.0"
required_providers {
random = {
source = "hashicorp/random"
version = "~> 3.7.0"
}
}
}
resource "terraform_data" "catalog" {
input = "atlas-lab"
}
يقبل قيد الأداة عائلة 1.16، ويقبل قيد المزود تصحيحات 3.7 دون 3.8.0. لا يثبت الإعلان المزود هنا؛ فلا تهيئة أو تنزيل.
القيد ليس حزمة مختارة
يحدد القيد الإصدارات الممكنة، بينما يسجل ملف القفل إصدار المزود المختار وبصمات حزمه للإعداد، مما يدعم إعادة التثبيت وفحص السلامة. راجع تغيره مع تحديث الاعتماد بدلاً من حذفه حين يصعب الاختيار. يشرح حقل constraints سياق الاختيار ولا يعوض متطلبات المصدر. ويثبت تطابق البصمة سلامة الحزمة مقارنة بدليل موثوق، لا أمان كل فعل مقترح على مواردها.
اقرأ القيد المتشائم بدقته الصحيحة
تغير دقة الرقم بعد ~> المدى المقبول. يسمح ~>3.7.0 بتصحيحات 3.7 لا 3.8.0، بينما يسمح ~>3.7 ببقية 3.x دون 4.0.0. يمثل المثال المجال المستقر الأول فقط ولا يحلل الإصدارات التجريبية. وعندما تطلب موديولات عدة المصدر نفسه، يجب أن تتقاطع قيودها لاختيار متوافق واحد. ولا تنشئ المطالبات المتناقضة بإصدارات دقيقة نسخ إضافات مستقلة للمصدر داخل الإعداد نفسه.
lower, upper = (3, 7, 0), (3, 8, 0)
for version in ((3, 7, 0), (3, 7, 2), (3, 8, 0), (4, 0, 0)):
text = '.'.join(map(str, version))
print(f'{text}: {lower <= version < upper}')
3.7.0: True
3.7.2: True
3.8.0: False
4.0.0: False
يلائم 3.7.0 و 3.7.2 المجال فقط. لا يسأل البرنامج سجلاً أو يثبت وجود حزمة. تبقى الصياغة والتجريبي لقواعد Terraform.
تحتاج الموديولات عقد إصدار مستقلاً
لا يقفل ملف اعتماد المزود إصدارات الموديولات البعيدة؛ فمصدر الموديول وإصداره أو مراجعته الثابتة يحتاجان مراجعة مستقلة. وتمثل aliases إعدادات متعددة للمزود الواحد لا إصدارات إضافة مختلفة. صرح بمتطلبات الموديول القابل لإعادة الاستخدام ومرر إعداد المستدعي المقصود حيث يلزم. سجل الأداة والمزود والموديول والمنصة واختبر الترقيات عمداً؛ فقد يتغير المقترح مع ترقية المزود دون تغيير آخر للنص.
الأخطاء الشائعة وإصلاحها
Failed to query available provider packages.
- لماذا يحدث؟
- قد يخطئ المصدر أو القيد أو الوصول أو مسار التثبيت.
- كيف تصلحه؟
- افحص السياق دون تعطيل السلامة أو تخمين المصدر.
- كيف تتجنب تكراره؟
- راجع الأصل والمدى قبل التغيير.
افتراض أن القفل يثبت الموديولات.
- لماذا يحدث؟
- عُمم قفل المزود على اعتماد مختلف.
- كيف تصلحه؟
- حدد الموديول ومراجعته مستقلاً.
- كيف تتجنب تكراره؟
- تتبع أصناف الاعتماد في أدلة الإصدار.
استخدام alias لطلب إصدار إضافة آخر.
- لماذا يحدث؟
- اختلطت نسخ الإعداد باختيار إصدار المصدر.
- كيف تصلحه؟
- استخدمها للإعداد واحسم إصداراً متوافقاً واحداً.
- كيف تتجنب تكراره؟
- افصل المصدر والإصدار والإعداد في المراجعة.
اختبر فهمك
1. هل تقبل~>3.7 الإصدار 3.8.0 بينما ترفضه~>3.7.0؟
اعرض الحل المشروح
نعم للقواعد المستقرة. يسمح الأقصر بتحديث 3.x ويحصر الثلاثي تصحيحات 3.7. اختره من التوافق والسياسة لا افتراض أفضلية الاتساع.
2. هل تثبت required_version مزود Random؟
اعرض الحل المشروح
لا؛ تقيد الأداة. يقيد required_providers الإضافة ويسجل القفل المختار وسلامته. لكل آلية حد مختلف ويصعب خلطها التشخيص.
أهم ما تعلمته
- قيد الأداة والمزود والموديول مستقلة.
- راجع دليل القفل الحقيقي ولا تختلق البصمات أو تهملها.