كيفية استخدام Ansible: دليل المرجعية

المقدمة

أنسيبل هو أداة إدارة تكوين حديثة تسهل مهمة إعداد وصيانة الخوادم عن بعد.

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

كيفية استخدام هذا الدليل:

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

معجم أنسيبل

يتم استخدام المصطلحات الخاصة بأنسيبل التالية على نطاق واسع في هذا الدليل:

  • الجهاز / العقدة التحكمية: النظام الذي يتم فيه تثبيت أنسيبل وتكوينه للاتصال وتنفيذ الأوامر على العقد.
  • العقدة: خادم يتم التحكم فيه بواسطة أنسيبل.
  • ملف المخزون: ملف يحتوي على معلومات حول الخوادم التي تتحكم فيها Ansible، عادة ما يوجد في /etc/ansible/hosts.
  • الملف النصي: ملف يحتوي على سلسلة من المهام التي يجب تنفيذها على خادم عن بعد.
  • الدور: مجموعة من الملفات النصية والملفات الأخرى ذات الصلة بغرض معين مثل تثبيت خادم ويب.
  • اللعبة: تشغيل Ansible كامل. يمكن أن تحتوي الـ لعبة على عدة ملفات نصية وأدوار، مدرجة من ملف نصي واحد يعمل كنقطة دخول.

إذا كنت ترغب في مثال على هذه الأوامر في الممارسة، انظر دليلنا على كيفية استخدام Ansible لتلقيم الخادم الأولي على Ubuntu 20.04. ستحتاج إلى خادم عن بعد واحد على الأقل لاستخدامه كعقدة.

اختبار الاتصال بالعقد

للاختبار ما إذا كان بإمكان Ansible الاتصال وتشغيل الأوامر والملفات النصية على عقدك، يمكنك استخدام الأمر التالي:

  1. ansible all -m ping

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

الاتصال كمستخدم مختلف

افتراضيًا، يحاول Ansible الاتصال بالعقد كمستخدم النظام الحالي، باستخدام زوج مفاتيح SSH المقابل. للاتصال كمستخدم مختلف، قم بإضافة الأمر بعلامة -u واسم المستخدم المقصود:

  1. ansible all -m ping -u sammy

نفس الشيء صحيح أيضًا بالنسبة لـ ansible-playbook:

  1. ansible-playbook myplaybook.yml -u sammy

استخدام مفتاح SSH مخصص

إذا كنت تستخدم مفتاح SSH مخصصًا للاتصال بالخوادم البعيدة، يمكنك توفيره أثناء التنفيذ باستخدام الخيار --private-key:

  1. ansible all -m ping --private-key=~/.ssh/custom_id

هذا الخيار صالح أيضًا لـ ansible-playbook:

  1. ansible-playbook myplaybook.yml --private-key=~/.ssh/custom_id

استخدام المصادقة عبر كلمة المرور

إذا كنت بحاجة إلى استخدام المصادقة عبر كلمة المرور للاتصال بالعقد، فيجب عليك إضافة الخيار --ask-pass إلى أمر Ansible الخاص بك.

سيطلب منك هذا الأمر من Ansible إدخال كلمة مرور المستخدم على الخادم البعيد الذي تحاول الاتصال به:

  1. ansible all -m ping --ask-pass

هذا الخيار صالح أيضًا لـ ansible-playbook:

  1. ansible-playbook myplaybook.yml --ask-pass

توفير كلمة مرور sudo

إذا كان المستخدم عن بعد بحاجة إلى توفير كلمة مرور لتشغيل أوامر sudo، يمكنك تضمين الخيار --ask-become-pass في أمر Ansible الخاص بك. سيطلب منك هذا توفير كلمة مرور sudo للمستخدم عن بعد:

  1. ansible all -m ping --ask-become-pass

هذا الخيار صالح أيضًا لـ ansible-playbook:

  1. ansible-playbook myplaybook.yml --ask-become-pass

استخدام ملف جرد مخصص

يتم توجيه ملف الجرد الافتراضي عادةً إلى /etc/ansible/hosts، ولكن يمكنك أيضًا استخدام الخيار -i للإشارة إلى ملفات جرد مخصصة عند تشغيل أوامر وسيناريوهات Ansible. تدعم Ansible أيضًا نصوص الجرد لإنشاء ملفات جرد ديناميكية، عندما يتغير جردك، مع إنشاء الخوادم وتدميرها بشكل متكرر. تُستخدم ملفات الجرد المخصصة لإعداد جرود مخصصة لكل مشروع يمكن تضمينها في أنظمة التحكم بالنسخ مثل Git:

  1. ansible all -m ping -i my_custom_inventory

نفس الخيار صالح لـ ansible-playbook:

  1. ansible-playbook myplaybook.yml -i my_custom_inventory

تشغيل الأوامر العرضية

لتنفيذ أمر على العقدة، استخدم الخيار -a تليه الأمر الذي تريد تشغيله، بين علامتي اقتباس.

سينفذ ذلك uname -a على جميع العقد في قائمة المخزون:

  1. ansible all -a "uname -a"

من الممكن أيضًا تشغيل وحدات Ansible باستخدام الخيار -m. ستقوم الأمر التالي بتثبيت الحزمة vim على server1 من قائمة المخزون:

  1. ansible server1 -m apt -a "name=vim"

قبل إجراء تغييرات على عقدك، يمكنك إجراء تجربة جافة لتوقع كيف ستتأثر الخوادم بأمرك. يمكن القيام بذلك عن طريق تضمين الخيار --check:

  1. ansible server1 -m apt -a "name=vim" --check

تشغيل السيناريوهات

لتشغيل سيناريو وتنفيذ جميع المهام المعرفة ضمنه، استخدم الأمر ansible-playbook:

  1. ansible-playbook myplaybook.yml

لتجاوز الخيار الافتراضي hosts في السيناريو وتقييد التنفيذ لمجموعة معينة أو عقدة، ضمن الخيار -l في أمرك:

  1. ansible-playbook -l server1 myplaybook.yml

الحصول على معلومات حول مسرحية

الخيار --list-tasks يُستخدم لعرض جميع المهام التي ستتم تنفيذها بواسطة المسرحية دون إجراء أي تغييرات على الخوادم البعيدة:

  1. ansible-playbook myplaybook.yml --list-tasks

بالمثل، من الممكن عرض جميع الخوادم التي ستتأثر بالمسرحية دون تشغيل أي مهام على الخوادم البعيدة:

  1. ansible-playbook myplaybook.yml --list-hosts

يمكنك استخدام العلامات لتقييد تنفيذ المسرحية. لعرض جميع العلامات المتاحة في المسرحية، استخدم الخيار --list-tags:

  1. ansible-playbook myplaybook.yml --list-tags

التحكم في تنفيذ الدليل

يمكنك استخدام الخيار --start-at-task لتحديد نقطة بداية جديدة لدليلك. سيقوم Ansible بتخطي أي شيء يأتي قبل المهمة المحددة، وتنفيذ بقية المسرحية ابتداءً من تلك النقطة. يتطلب هذا الخيار اسم مهمة صالحًا كوسيط:

  1. ansible-playbook myplaybook.yml --start-at-task="Set Up Nginx"

لتنفيذ المهام المرتبطة بعلامات محددة فقط، يمكنك استخدام الخيار --tags. على سبيل المثال، إذا كنت ترغب في تنفيذ المهام الموسومة بـ nginx أو mysql فقط، يمكنك استخدام:

  1. ansible-playbook myplaybook.yml --tags=mysql,nginx

إذا كنت ترغب في تجاوز جميع المهام التي تنتمي إلى علامات معينة، استخدم --skip-tags. سيُنفّذ الأمر التالي myplaybook.yml، متجاوزًا جميع المهام التي تحمل علامة mysql:

  1. ansible-playbook myplaybook.yml --skip-tags=mysql

استخدام Ansible Vault لتخزين البيانات الحساسة

إذا كانت سكربتات Ansible الخاصة بك تتعامل مع بيانات حساسة مثل كلمات المرور ومفاتيح API وبيانات اعتماد، فمن المهم الاحتفاظ بهذه البيانات بأمان باستخدام آلية تشفير. يوفر Ansible أداة ansible-vault لتشفير الملفات والمتغيرات.

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

إنشاء ملف مشفر جديد

يمكنك إنشاء ملف Ansible مشفر جديد باستخدام:

  1. ansible-vault create credentials.yml

سيقوم هذا الأمر بأداء الإجراءات التالية:

  • أولاً، سيطلب منك إدخال كلمة مرور جديدة. ستحتاج إلى توفير هذه الكلمة السرية في كل مرة تصل فيها إلى محتويات الملف، سواء كان ذلك للتحرير أو المشاهدة، أو مجرد تشغيل النصوص التوجيهية أو الأوامر باستخدام تلك القيم.
  • ثم، سيقوم بفتح محرر سطر الأوامر الافتراضي الخاص بك حتى تتمكن من ملء الملف بالمحتويات المطلوبة.
  • وأخيرًا، عند الانتهاء من التحرير، سيقوم ansible-vault بحفظ الملف كبيانات مشفرة.

تشفير ملف Ansible الحالي

لتشفير ملف Ansible حالي، يمكنك استخدام الصيغة التالية:

  1. ansible-vault encrypt credentials.yml

سيطلب منك هذا إدخال كلمة مرور ستحتاج إليها كلما كنت تصل إلى ملف credentials.yml.

عرض محتويات ملف مشفر

إذا كنت ترغب في عرض محتويات ملف تم تشفيره سابقًا باستخدام ansible-vault ولم تكن بحاجة لتغيير محتوياته، يمكنك استخدام:

  1. ansible-vault view credentials.yml

سيطلب منك هذا توفير كلمة المرور التي اخترتها عندما قمت بتشفير الملف للمرة الأولى باستخدام ansible-vault.

تحرير ملف مشفر

لتحرير محتويات ملف تم تشفيره سابقًا باستخدام Ansible Vault، قم بتشغيل:

  1. ansible-vault edit credentials.yml

سيطلب منك هذا إدخال كلمة المرور التي اخترتها عند تشفير الملف credentials.yml لأول مرة باستخدام ansible-vault. بعد التحقق من صحة كلمة المرور، سيتم فتح محرر الأوامر الافتراضي الخاص بك مع محتويات الملف غير المشفرة، مما يتيح لك إجراء التغييرات الخاصة بك. عند الانتهاء، يمكنك حفظ وإغلاق الملف كالمعتاد، وسيتم حفظ المحتويات المحدثة كبيانات مشفرة.

فك تشفير الملفات المشفرة

إذا كنت ترغب في إرجاع ملف تم تشفيره سابقًا بواسطة ansible-vault إلى نسخته غير المشفرة بشكل دائم، يمكنك القيام بذلك بهذا النحو:

  1. ansible-vault decrypt credentials.yml

سيطلب منك هذا إدخال نفس كلمة المرور المستخدمة عند تشفير الملف credentials.yml لأول مرة باستخدام ansible-vault. بعد التحقق من صحة كلمة المرور، ستتم حفظ محتويات الملف على القرص كبيانات غير مشفرة.

استخدام كلمات مرور متعددة للخزنة

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

لإنشاء ملف مشفر جديد باستخدام معرف خزنة مخصص، قم بتضمين الخيار --vault-id بالإضافة إلى التسمية والموقع الذي يمكن فيه لـ ansible-vault العثور على كلمة مرور تلك الخزنة. يمكن أن تكون التسمية أي معرف، ويمكن أن يكون الموقع إما prompt، مما يعني أن الأمر يجب أن يطلب منك إدخال كلمة مرور، أو مسارًا صالحًا إلى ملف كلمة المرور.

  1. ansible-vault create --vault-id dev@prompt credentials_dev.yml

سينشئ هذا معرف خزنة جديد بالاسم dev يستخدم prompt كمصدر لكلمة المرور. من خلال دمج هذه الطريقة مع ملفات المتغيرات الجماعية، ستتمكن من الحصول على خزنات ansible منفصلة لكل بيئة تطبيق:

  1. ansible-vault create --vault-id prod@prompt credentials_prod.yml

استخدمنا dev و prod كمعرفات خزنة لتوضيح كيف يمكنك إنشاء خزنات منفصلة لكل بيئة، ولكن يمكنك إنشاء عدد لا حصر له من الخزنات، ويمكنك استخدام أي معرف تختاره كمعرف خزنة.

الآن لعرض أو تحرير أو فك تشفير هذه الملفات، ستحتاج إلى تقديم نفس معرف الخزنة ومصدر كلمة المرور مع أمر ansible-vault:

  1. ansible-vault edit credentials_dev.yml --vault-id dev@prompt

استخدام ملف كلمة مرور

إذا كنت بحاجة إلى أتمتة عملية توفير الخوادم باستخدام أنسيبل باستخدام أداة من طرف ثالث، فستحتاج إلى وسيلة لتوفير كلمة مرور السرد دون طلبها. يمكنك القيام بذلك عن طريق استخدام ملف كلمة مرور مع ansible-vault.

A password file can be a plain text file or an executable script. If the file is an executable script, the output produced by this script will be used as the vault password. Otherwise, the raw contents of the file will be used as vault password.

لاستخدام ملف كلمة المرور مع ansible-vault، تحتاج إلى توفير مسار إلى ملف كلمة مرور عند تشغيل أي من أوامر vault:

  1. ansible-vault create --vault-id dev@path/to/passfile credentials_dev.yml

لا يقوم أنسيبل بعمل تمييز بين المحتوى الذي تم تشفيره باستخدام prompt أو ملف كلمة مرور كمصدر لكلمة المرور، طالما كانت كلمة المرور المدخلة هي نفسها. من الناحية العملية، يعني هذا أنه من المقبول تشفير ملف باستخدام prompt ثم استخدام ملف كلمة المرور لتخزين نفس كلمة المرور المستخدمة مع طريقة prompt. العكس صحيح أيضًا: يمكنك تشفير المحتوى باستخدام ملف كلمة مرور وبعد ذلك استخدام طريقة prompt، عند توجيه طلب من أنسيبل.

للحصول على مرونة وأمان موسعين، بدلاً من وجود كلمة مرور السرد المخزنة في ملف نصي عادي، يمكنك استخدام نص برمجي Python للحصول على كلمة المرور من مصادر أخرى. يحتوي مستودع أنسيبل الرسمي على بضعة أمثلة لنصوص الخزان التي يمكنك استخدامها كمرجع عند إنشاء نص مخصص يتناسب مع احتياجات مشروعك الخاص.

تشغيل دليل (Playbook) بيانات مشفرة عبر Ansible Vault

كلما قمت بتشغيل دليل يستخدم بيانات تم تشفيرها مسبقًا عبر ansible-vault، ستحتاج إلى تقديم كلمة مرور الفولت (Vault) لأمر الدليل الخاص بك.

إذا استخدمت الخيارات الافتراضية وكانت مصدر كلمة المرور prompt عند تشفير البيانات المستخدمة في هذا الدليل، يمكنك استخدام الخيار --ask-vault-pass ليطلب منك Ansible إدخال كلمة المرور:

  1. ansible-playbook myplaybook.yml --ask-vault-pass

إذا استخدمت ملف كلمة مرور بدلاً من طلب كلمة المرور، يجب عليك استخدام الخيار --vault-password-file بدلاً من ذلك:

  1. ansible-playbook myplaybook.yml --vault-password-file my_vault_password.py

إذا كنت تستخدم بيانات مشفرة تحت معرف فولت (Vault ID)، ستحتاج إلى تقديم نفس معرف الفولت ومصدر كلمة المرور الذي استخدمته عند تشفير البيانات لأول مرة:

  1. ansible-playbook myplaybook.yml --vault-id dev@prompt

إذا كنت تستخدم ملف كلمة مرور مع معرف الفولت، يجب عليك تقديم التسمية تليها المسار الكامل إلى ملف كلمة المرور كمصدر لكلمة المرور:

  1. ansible-playbook myplaybook.yml --vault-id dev@vault_password.py

إذا استخدم دليلك عدة فولتات، يجب عليك تقديم معلمة --vault-id لكل منها، بأي ترتيب:

  1. ansible-playbook myplaybook.yml --vault-id dev@vault_password.py --vault-id test@prompt --vault-id ci@prompt

تصحيح الأخطاء (Debugging)

إذا واجهتك أخطاء أثناء تنفيذ أوامر وسيناريوهات Ansible ، فمن الجيد زيادة تفصيل إخراج النتائج للحصول على مزيد من المعلومات حول المشكلة. يمكنك فعل ذلك من خلال تضمين الخيار -v في الأمر:

  1. ansible-playbook myplaybook.yml -v

إذا كنت بحاجة إلى مزيد من التفاصيل ، يمكنك استخدام -vvv وسيزيد هذا من تفصيل إخراج النتائج. إذا كنت غير قادر على الاتصال بالعقد البعيدة عبر Ansible ، استخدم -vvvv للحصول على معلومات تصحيح الاتصال:

  1. ansible-playbook myplaybook.yml -vvvv

الاستنتاج

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

هناك متغيرات أخرى للأوامر والعلامات التي قد تجدها مفيدة لسير عملك في Ansible. للحصول على نظرة عامة على جميع الخيارات المتاحة ، يمكنك استخدام الأمر help:

  1. ansible --help

إذا كنت ترغب في الحصول على نظرة شاملة على Ansible وجميع أوامره وميزاته المتاحة ، يرجى الرجوع إلى التوثيق الرسمي لـ Ansible.

إذا كنت ترغب في رؤية مثال عملي آخر لـ Ansible ، تحقق من دليلنا حول كيفية استخدام Ansible لتثبيت وإعداد Docker على Ubuntu 20.04.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide