أستخدم الملف .terraform-version
لتحديد أي إصدار (إصدارات) من Terraform يجب استخدامه لشجرة دليل معينة. أستخدم بانتظام طريقة regex لمحتويات .terraform-version
. عند الضرورة ، سأقوم بتشغيل tfenv install
للحصول على إصدار Terraform المناسب على نظامي إذا لم يكن موجودًا. ومع ذلك ، عند القيام بذلك ، يقوم tfenv بالكتابة فوق ملف .terraform-version
الخاص بي برقم الإصدار الدقيق الذي تم تثبيته.
$ echo "latest:^0.12" > .terraform-version
$ tfenv install
....
$ terraform version
Terraform v0.12.6
$ cat .terraform-version
0.12.6
أتوقع أن تظل محتويات .terraform-version
هي إلا إذا قمت بتغييرها على وجه التحديد.
هذا مقلق. سوف يحقق في اسرع وقت ممكن
يبدو أن هذا يأتي من المكالمة إلى tfenv-use
في نهاية tfenv-install
، لأن tfenv-use
يحل محل ملف الإصدار .
يبدو لي أن استدعاء tfenv-use
ليس ضروريًا للتثبيت ، لأنه يجب تحديث ملف الإصدار العام فقط ، وفقط إذا لم يكن ملف الإصدار العمومي موجودًا بالفعل.
@ e-nomem يبدو أن هذه هي المشكلة بالفعل. بالنظر إلى كيفية استخدامي لـ tfenv ، أعتقد أنه يمكن إنشاء حالة لعدم استدعاء tfenv-use
في نهاية tfenv-install
. لمجرد أنني قمت بتثبيت إصدار من Terraform ، لا يعني أنني أريد استخدامه الآن ، أو استخدامه كإصدار افتراضي عالمي.
ومع ذلك ، سيكون من الجيد أن تتمكن من تكوين هذا السلوك. على سبيل المثال:
## Default, use version file
$ tfenv install
(just installs version from file, no tfenv-use required)
$ tfenv install 0.12.6
(just installs, but when detecting an interactive shell, it asks what you want)
Do you want to set Terraform 0.12.6 as your global default (y/n)? y
Updating global version in /Users/benny/.terraform-version... done
$ tfenv install 0.12.6 --global
(installs and sets the default)
أود بالتأكيد طريقة لإيقاف الكتابة فوق على الأقل ، حتى لو كان متغيرًا في shell. نحن نطرح مجموعة من الترقيات المعقدة من tf 0.11 إلى 0.12 ونريد تتبع أحدث 0.12 بشكل عام ، ولكن عندما يقوم شخص ما بتشغيل tfenv install
من خارج CI ، يتم تحديث إصدار .terraform بالإصدار المحدد كما في المثال. أنا بخير لعدم كسر الوظيفة الحالية لـ tfenv install
إذا كان الأشخاص يستخدمون بالفعل الكتابة الفوقية ، ولكن إذا تمكنا من إيقافها عن طريق تعيين شيء مثل TFENV_NOOVERWRITE ، فسأكون سعيدًا بذلك.
تؤدي الكتابة فوق الملف .terraform-version
الخاص بالمشروع إلى جعل استخدام الملف عديم الفائدة تقريبًا ، كما أنه يعرضك لخطر قيام شخص ما عن غير قصد بإجراء التغيير في التحكم بالمصادر. نستخدم الملف في الريبو إلى _fix_ الإصدار المستخدم للمشروع ، لذا فإن الكتابة فوقه بأمر tfenv
هي مشكلة إلى حد ما.
أوافق على ألا يؤدي استخدام tfenv إلى تعديل ملف الإصدار .terraform.
من المحتمل أن يؤدي إيقافه عن القيام بذلك إلى إرباك المستخدمين الذين يصدرون tfenv ، ثم لا يحصلون على الإصدار الذي طلبوه لأن لديهم ملف إصدار.
أرحب بالأفكار المتعلقة بتحسين تجربة المستخدم هذه ، لكن من المؤكد أن إيقاف الكتابة هو الشيء الصحيح.
لست متأكدًا من نوع الأفكار التي تبحث عنها ، ولكن في رأيي ، يجب ألا يكتب _ أبدًا _ على هذا الملف tfenv
، حتى لو لم يكن موجودًا. يجب أن يتعامل مع هذا الملف على أنه _ read only_. الأمر متروك لمستخدمي tfenv
لإنشاء هذا الملف ، إذا رغبوا في ذلك ، ومن ثم إلزامه بمستودعاتهم الخاصة إذا كانوا يريدون استخدام إصدار ثابت من Terraform لمشاريعهم.
يجب أن يبحث الأمران tfenv install
و tfenv use
عن ملف .terraform-version
عندما لا يتم تحديد إصدار صريحًا في سطر الأوامر. إذا كان الملف موجودًا ، يجب أن تستخدمه الأوامر لتحديد الإصدار الذي سيتم استخدامه مع الأمر ، وإذا لم يكن موجودًا ، فيجب أن تفشل الأوامر ، مما يشير إلى أنه يجب على المستخدم تحديد إصدار في سطر الأوامر ، أو داخل .terraform-version
ملف. عند تحديد إصدار في سطر الأوامر ، يجب تجاهل الملف .terraform-version
.
التعليق الأكثر فائدة
@ e-nomem يبدو أن هذه هي المشكلة بالفعل. بالنظر إلى كيفية استخدامي لـ tfenv ، أعتقد أنه يمكن إنشاء حالة لعدم استدعاء
tfenv-use
في نهايةtfenv-install
. لمجرد أنني قمت بتثبيت إصدار من Terraform ، لا يعني أنني أريد استخدامه الآن ، أو استخدامه كإصدار افتراضي عالمي.ومع ذلك ، سيكون من الجيد أن تتمكن من تكوين هذا السلوك. على سبيل المثال: