اسپیسلیفت: دیپلوی ماژول ترافرم با زبان ساده
خلاصهٔ کاملتر
به گفتهٔ نویسنده، مشکل اصلی «آخرین مایل» رجیستری ماژوله. تو رجیستری ماژول اسپیسلیفت (Spacelift) کلی ماژولِ بازبینیشده و ورژندار مثل لود بالانسر، دیتابیس و استک شبکه آمادهست، ولی برای استفاده ازش توسعهدهنده هنوز باید ماژول رو پیدا کنه، اسلاگش رو یاد بگیره، بلاک ماژول رو بنویسه، ورودیها رو وصل کنه و یه PR باز کنه؛ یا کلاً بیخیال بشه و کارو بندازه گردن تیم پلتفرم. برای همین گاردریلهایی که تو ماژول گذاشتی، تو رو از صف تیکت نجات نمیدن.
قابلیت جدید اینه که دستیار هوشمند اسپیسلیفت به اسم Intent حالا میتونه یه ماژول رو از رجیستری خودت بهعنوان یه منبع مدیریتشدهٔ واحد و فقط با توصیف به زبان ساده دیپلوی کنه. توسعهدهنده اسلاگ یا شمارهٔ ورژن نمیخواد؛ فقط ماژول رو به اسم میخواد. Intent تو رجیستری دنبالش میگرده و آخرین نسخهٔ فعالش رو برمیداره؛ اگه ماژول ورودی لازم داشته باشه، قبل از هر کاری اونا رو ازت میپرسه. اگه بخوای دقیقتر باشی هم میتونی ورژن و ورودی مشخص بدی.
اسم ماژولها تو رجیستری فرم terraform-- رو داره، برای همین مثلاً elb روی پرووایدر aws به terraform-aws-elb تبدیل میشه، ولی کسی لازم نیست اینو حفظ باشه. قبل از اینکه چیزی اعمال بشه، Intent سه تا بررسی میکنه: این ماژول برای این کاربر قابلدیدنه؟ ورژن خواستهشده وجود داره و فعاله؟ و همهٔ ورودیهای لازم داده شده و چیز اضافهای نیومده؟ اگه هر کدوم رد بشه، درخواست با یه خطای واضح متوقف میشه و هیچی اعمال نمیشه. نکتهٔ مهم اینه که فقط به ماژولهای منتشرشده تو رجیستری خودت دسترسی داره، نه رجیستری عمومی ترافرم یا مستقیم از Git.
آپدیت و ارتقا هم مکالمهای میمونه. برای عوض کردن یه ورودی یا رفتن به ورژن جدید، لازم نیست ورودیهای قبلی رو دوباره بگی؛ Intent ورژن فعلی رو با ورژن مقصد مقایسه میکنه، میفهمه ورودیها چه فرقی کردن، مقادیر فعلیات رو با خودش میبره جلو و فقط دربارهٔ چیزهای تازه ازت میپرسه. ارتقا هم درجا اعمال میشه؛ یعنی کد ورژن جدید روی state موجودت اجرا میشه. یه چیز ثابت میمونه: نمیتونی ماژولی که یه دیپلوی بهش اشاره میکنه رو عوض کنی؛ اون موقع ساخت دیپلوی تعیین میشه.
حذف هم گراف وابستگی رو رعایت میکنه. وقتی میخوای یه دیپلوی رو حذف کنی، Intent اول چک میکنه چیز دیگهای تو پروژه بهش وابسته نباشه، بعد ازت تأیید میگیره و منابعش رو نابود میکنه. سمت رجیستری هم محافظت شده: تا وقتی یه دیپلوی Intent از یه ماژول یا ورژنش استفاده میکنه، اسپیسلیفت اجازهٔ حذفش رو نمیده تا اتفاقی یتیم نشه.
نویسنده تأکید میکنه که این قابلیت چیزی از حاکمیت رو کنار نمیذاره. ماژول دیپلویشده تو تب Resources مثل هر منبع دیگه بهشکل یه منبعِ از نوع spacelift/module ظاهر میشه، تاریخچهٔ کاملش تو تب History ثبت میشه و state هم مثل بقیه رمزنگاری میشه. مهمتر اینکه هر دیپلوی قبل از اعمال در برابر سیاستهای Intent ارزیابی میشه؛ پالیسی اسلاگ ماژول، عملیات (ساخت/آپدیت/حذف)، ورژن دقیق و متغیرهای ورودی رو میبینه. جمعبندی نویسنده اینه که رجیستری ماژول قبلاً هم جواب «چطور بذاریم توسعهدهندهها سلفسرویس باشن بدون اینکه هر کاری بکنن» بود؛ این قابلیت فقط اون بخشی که هنوز از تیم پلتفرم رد میشد رو حذف میکنه.
نکات کلیدی:
- دستیار Intent اسپیسلیفت حالا ماژولهای ترافرم رو مستقیم از رجیستری خودت با زبان ساده دیپلوی میکنه
- توسعهدهنده لازم نیست اسلاگ یا ورژن رو بلد باشه یا بلاک ماژول و PR بنویسه
- قبل از اعمال سه بررسی میکنه: دسترسی کاربر، وجود و فعال بودن ورژن، و کامل بودن ورودیها
- ارتقا مکالمهای و درجاست؛ ورودیهای فعلی خودکار جلو برده میشن
- همهچیز زیر همون state، لاگ حسابرسی و سیاستهای حاکمیتی موجود انجام میشه




