كيفية استخدام متغيرات Ansible والأقبية

[ware_item id=33][/ware_item]

كيف يستخدم ExpressVPN Ansible


كيف نستخدم Ansible على نطاق واسع في ExpressVPN

تعمل فرق التطوير لدينا بشكل مستقل ، بمعنى أن الفريق يمتلك منتجه طوال دورة حياته الكاملة. يعني هذا الإعداد أن فهمنا المرئي يأتي من مجموعة من المعرفة من العديد من الفرق المختلفة في الشركة بدلاً من مجموعة مركزية تدير Ansible..

تمنح القوى العاملة اللامركزية فرقنا الكثير من المرونة والتنقل ، لكنها تمارس أيضًا ضغوطًا على الأفراد لمعرفة الكثير عن العديد من الأدوات.

لتسهيل تبادل المعرفة واستخدام الأدوات بشكل صحيح ، قررنا توحيد كيفية استخدام Ansible لإدارة التهيئة وعمليات الخادم.

تغطي هذه المدونة الدروس التي تعلمناها تعمل على نطاقنا ، والأفكار حول الطريقة التي نعمل بها ، وكيف ندير Ansible في مثل هذا السياق.

وثائق Ansible

هيا بنا! تترك وثائق Ansible بعض الأشياء المطلوبة ، خاصة عندما يتعلق الأمر بالوثائق من البداية إلى النهاية (مثل ، كيف يمكنك الانتقال من النقطة أ إلى النقطة Z؟).

بعض الأسئلة التي نواجهها بانتظام هي: "كيف تعمل أسبقية المتغير؟" و "كيف تنسجم Ansible Vault؟"

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

لذلك ، سنحاول اليوم تغطية التقاطع بين المتغيرات والأقبية وأفضل الممارسات.

ما يمكنك استخدام ملفات Ansible Vault لـ

باختصار: تنص وثائق Vault على ذلك يمكنك تشفير أي شيء داخل مجلد Ansible في ملف Vault, وسيحاول Ansible فك تشفيره "بذكاء" عندما تتضمن المسرحية هذه الملفات. هوه. رائع!

لا تذكر الوثائق حول المتغيرات أي شيء عن ملفات Vault على الإطلاق ، وهو أمر غريب حيث تم تصميم Vault لملفات Variable. إذن كيف تتلاءم معًا؟ من المهم أن نلاحظ ذلك ملفات Vault نفسها ليس لها معنى خاص للمعالجة أو الأسبقية, لذلك هناك الكثير من المرونة. لكن من المحتمل ألا يترك هذا لك معلومات كافية حول كيفية استخدامه بشكل صحيح.

كيف لا تستخدم Ansibleأنت تعمل ذلك بالطريقة الخاطئة.

خذ هذا المثال لمجلد Ansible البسيط:

.
├── group_vars
├── ├── الكل
│ ├── الإنتاج
aging └── التدريج
├── ansible.cfg
├── المخزون
book playbook.yml

للوهلة الأولى ، يبدو هذا الإعداد جيدًا ؛ سيكون هذا بنية شائعة نسبيًا إذا قمت بقراءة الوثائق. يمكن أن يفترض أحد المراقبين أن ملفات التدريج والإنتاج في group_vars عبارة عن أقبية ، لكن هذا ليس صحيحًا بالضرورة ، وهو بحد ذاته مشكلة.

الآن ، لا يمكن أن يكون الملف "all" ملف Vault لأنك (نأمل) تشفير ملفات Vault وإنتاجها بكلمات مرور مختلفة. ولكن هذا يعني أيضًا أن ملف group_vars الخاص بالبيئات يجب أن يحتوي على مزيج من الأسرار وغير الأسرار لأنك مقيد بملف واحد لكل بيئة.

وبسبب هذا - وإذا استنبطت قليلاً بعد قراءة المقدمة إلى Vaults في وثائق Ansible - فمن المحتمل أنك قمت بإنشاء خزائن الإنتاج / التدريج عن طريق نسخ محتويات "الكل" في البداية ثم تعديلها.

هذا يعني أن ملف "الكل" قد يبدو كالتالي:

قاعدة البيانات:
اسم المستخدم: default_user
كلمة المرور: خطأ

super_important_var_that_should_be_one: 1

وقد يبدو ملف Vault الخاص بالإنتاج كما يلي:

قاعدة البيانات:
اسم المستخدم: produser
كلمة المرور: supersecretpasswordnoonecansee

super_important_var_that_should_be_one: 1

(لا تقلق ، هذه ليست كلمة المرور الفعلية للإنتاج! لقد تحققنا من ذلك مرتين).

ما سبق خطير لأسباب قد لا تكون واضحة. على سبيل المثال ، قد تفقد تغيير الإعداد الافتراضي للإنتاج ، و / أو قد يكون اسم ملف "الكل" خاطئًا ولا يتم تضمينه على الإطلاق! (هذا هو السبب الجذري لانقطاع انقطاع لدينا الأسبوع الماضي.)

أفضل ممارسة: كيفية استخدام ملفات Ansible Vault بأمان

كما هو مذكور في صفحة أفضل الممارسات ، فإن عمل ملف في ملف Vault يحجب محتويات الملف ، لذلك يأتي به عيب كبير: لا يمكنك البحث عن المتغيرات الموجودة في ملف Vault دون فك تشفيرها صراحة. يعني هذا النظام أن كل من ينظر إلى تهيئة Ansible لديك ليس لديه فكرة عما يوجد داخل هذه الملفات دون معرفة كلمة مرور Vault (فظيعة لمراجعات الكود!). وبالتالي ، نوصي بوضع أقل عدد ممكن من المتغيرات البشرية داخل ملفات Vault. (بمعنى آخر ، ضع الأسرار فقط في ملفات Vault!)

لذلك ، دعونا ننظر إلى هيكل من شأنه أن يجعل من السهل عدم إطلاق النار على نفسك في القدم:

.
├── group_vars
├── ├── الكل
ars │ └── vars.yml
│ ├── الإنتاج
ars │ ├── vars.yml
ault │ └── vault.yml
aging └── التدريج
ault └── vault.yml
├── ansible.cfg
├── المخزون
book playbook.yml

تنصح وثائق أفضل الممارسات أيضًا باستخدام "طبقة من الاتجاه غير المباشر" ، وهذا يعني أنك يجب أن تروق لكل المتغيرات في ملف Vault في المتغيرات المشار إليها في قواعد اللعب الخاصة بك. كما توصي أيضًا بادئة متغيرات قبو الخاص بك بعلامة "vault_" مما يعني أن جميع / vars.yml قد تبدو مثل:

قاعدة البيانات:
اسم المستخدم: default_user
كلمة المرور: "{{vault_database_password}}"

super_important_var_that_should_be_one: 1

يبدو الإنتاج / vars.yml الخاص بك كما يلي:

قاعدة البيانات:
اسم المستخدم: produser

ويجب أن يحتوي ملف الإنتاج / vault.yml على هذا فقط:

vault_database_password: supersecretpasswordnoonecansee

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

والأهم من ذلك ، أن Ansible سوف تفشل حتى في تقديم vars إذا كانت مفقودة vault_database_password متغير داخل Vault ، مما سيوفر لك على الأقل عددًا كبيرًا من المشكلات التي قد تواجهها إذا كنت لا تحتفظ بعلامات تبويب قريبة على ملفات Vault الخاصة بك.

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

كل هذا في الوقت الحالي ، نأمل أن يكون هذا مفيدًا لك!

كيفية استخدام متغيرات Ansible والأقبية
admin Author
Sorry! The Author has not filled his profile.