إدارة تكوينات الخوادم والبيئات المتعددة هي فائدة كبيرة من استخدام Ansible. ولكن ماذا يحدث عندما تختلف ملفات التكوين من خادم إلى آخر؟ بدلاً من إنشاء تكوين منفصل لكل خادم أو بيئة، يجب أن تنظر إلى قوالب Ansible.
في هذا البرنامج التعليمي، ستتعلم ما هي قوالب Ansible، وكيفية عملها، وكيف يمكنك استخدام وحدة القالب Ansible لتوفير الكثير من الوقت.
المتطلبات المسبقة
سيكون هذا المقال برنامجًا تعليميًا خطوة بخطوة. إذا كنت ترغب في المتابعة، تأكد من أن لديك خادم تحكم Ansible. سيتم استخدام إصدار Ansible v2.9.18 في هذا البرنامج التعليمي
ما هو قالب Ansible؟
في بعض الأحيان، قد تحتاج إلى نقل ملفات نصية إلى مضيفين بعيدين. تلك الملفات النصية عادةً ما تكون نوعًا من ملف التكوين. إذا كنت تعمل مع خادم واحد، على سبيل المثال، قد تحتاج إلى إنشاء ملف تكوين يسمى app.conf يستخدمه بعض الخدمات.
تلك الملفات التكوينية قد تحتوي على معلومات خاصة بتلك الخادم مثل اسم المضيف وعنوان IP، وما إلى ذلك. نظرًا لأنك تعمل مع خادم واحد، يمكنك إنشاء الملف على تحكم Ansible، ثم استخدام وحدة النسخ في سيناريو لنسخه إلى الخادم.
لكن ماذا لو كان لديك عدة خوادم ويحتاج كل منها إلى نفس ملف التكوين ولكن مع قيم خاصة بها؟ لا يمكنك فقط نسخ ملف التكوين إلى جميع الأجهزة. إنها مصممة فقط لخادم واحد بمضيف وعنوان IP محددين. تحتاج إلى قالب Ansible.
تسمح لك القوالب في Ansible بتعريف ملفات نصية بمتغيرات بدلاً من قيم ثابتة، ثم استبدال تلك المتغيرات أثناء تشغيل السيناريو.
كيف يبدو قالب Ansible؟
إن قالب Ansible هو ملف نصي يستخدم لغة Jinja2 للتنسيق مع امتداد ملف j2. يبدو قالب Jinja2 تمامًا مثل ملف النص الذي ترغب في نقله إلى الخادم البعيد. الفارق الوحيد هو أنه بدلاً من القيم الثابتة، يحتوي الملف على متغيرات.
بعنوان مثال، ربما تحتاج إلى الحصول على ملف تكوين يسمى app.conf على جميع خوادم الويب الخاصة بك الذي يحتوي على إشارات إلى عنوان IP الخاص بكل خادم، ومضيف Ansible، ومستخدم Ansible. ملف app.conf لخادم واحد قد يكون مشابهًا للمثال أدناه.
لا يمكنك نسخ هذا الملف إلى كل خادم ويب لأن كل عنصر سيكون فريدًا اعتمادًا على عنوان الخادم البعيد، واسم الجهاز المضيف لـ Ansible، ومستخدم Ansible.
بدلاً من تحديد قيم كل من هذه القيم بشكل ثابت، يسمح لك قالب Ansible بتعريف متغيرات تُفسر في وقت التشغيل وتستبدل على الخادم البعيد.
أدناه، ستجد مثالًا على ملف قالب app.conf.j2. يمكنك الآن رؤية أن كل قيمة ثابتة تم استبدالها بمتغير مشار إليه بفاصلتين متعرجتين من كلا الجانبين. في هذا السياق، تأتي هذه المتغيرات من حقائق Ansible.
تحمل ملفات القوالب دائمًا امتداد ملف J2 وتحمل عادة نفس اسم الملف الذي تنشئه على الخادم المستهدف.
كيف يتم إنشاء ملفات القوالب على الخوادم البعيدة؟
بمجرد أن تقوم بإنشاء قالب، تحتاج إلى نقل ملف القالب هذا إلى الخادم البعيد وتحويله “إلى” الملف النصي الفعلي لما يفترض أن يبدو عليه. للقيام بذلك، تحتاج إلى الإشارة إلى ملف القالب في سيناريو اللعبة.
أغلب مسؤولي Ansible يستخدمون وحدة النسخ لنقل الملفات إلى الخوادم البعيدة، ولكن كما هو مذكور أعلاه، لا يمكن تحقيق ذلك باستخدام القوالب.
فيما يلي مثال بسيط من الملف التنفيذي يستند إلى الوحدة التي تقوم بنسخ ملف app.conf إلى الدليل /opt على جميع خوادم الملف التنفيذي.
الآن لنفترض أنك قمت بتحويل ملف تكوين app.conf إلى ملف قالب app.conf.j2 كما تم شرحه في القسم السابق على جهاز تحكم Ansible الخاص بك. يتعين عليك الآن التأكد من وصول app.conf إلى الدليل /opt ولكن مع استبدال المتغيرات بالقيم الحقيقية.
لإخبار الملف التنفيذي بإنشاء ملف app.conf في الدليل /opt، قم ببساطة بتغيير الإشارة من copy
إلى template
كما هو موضح أدناه. عند القيام بذلك، يستدعي Ansible وحدة القالب لنقل القالب واستبدال المتغيرات بالقيم الثابتة.
بمجرد تنفيذ المهمة أعلاه في الملف التنفيذي، سيقوم Ansible بنسخ app.conf.j2 إلى دليل الخادم البعيد /opt، واستبدال جميع المتغيرات بقيم ثابتة وإعادة تسمية الملف إلى app.conf.
عندما تقدم القالب
src
مع مسار الدليل، يبحث Ansible عن القوالب في دليل /<مسار_تثبيت_ansible>/files/. إذا قمت بتقديم اسم الملف فقط، سيبحث Ansible عن القالب في دليل /<مسار_تثبيت_ansible>/templates/ بدلاً من ذلك.
عرض ملف تكوين: مثال على القالب
لنقم الآن بالانتقال إلى عرض توضيحي لنرى كيفية إعداد قالب Ansible واستخدام وحدة القالب Ansible لإنشاء ملف تكوين بشكل ديناميكي. في هذا المثال، ستقوم بإنشاء ملف يسمى app.conf في الدليل /etc على خادم يسمى SRV1.
ستعمل الخطوات في هذا القسم لأي نوع من ملفات النص. ستستخدم البرنامج التعليمي ملف تكوين كمثال واحد.
1. تسجيل الدخول إلى مضيف تحكم Ansible الخاص بك باستخدام أي مستخدم تستخدمه عادة لإدارة Ansible.
2. إنشاء مجلد في دليل المستخدم الخاص بك لاحتواء ملفات العرض التوضيحي لهذا البرنامج التعليمي وتغيير دليل العمل إليه.
3. إنشاء ملف قالب يُسمى app.conf.j2 في الدليل الذي يبدو مشابهًا للأسفل.
يمكنك أيضًا استخدام متغيرات متنوعة محددة لوحدة القالب Ansible نفسها في قالبك.
4. إنشاء كتاب عمل بسيط في نفس الدليل يسمى my_playbook.yml. ينشئ هذا الكتاب عرض الـ app.conf في الدليل /etc.
5. استدعاء كتاب العمل Ansible مستهدفًا المضيف البعيد SRV1.

6. الآن قم بتأكيد وجود ملف التكوين /etc/app.conf والتحقق من أن لديه القيم المتوقعة.

تحديث أذونات الملف باستخدام وحدة القالب
الآن بعد أن رأيت أساسيات استخدام وحدة القالب، دعنا ننتقل إلى مستوى أكثر تقدمًا. في هذا العرض التوضيحي، ستقوم بإنشاء نفس ملف app.conf كما هو موضح سابقًا. ولكن هذه المرة، ستقوم بتعيين مالك الملف وأذوناته.
لتغيير الأذونات على الملف الذي تقوم بإنشائه وحدة القالب، يجب عليك استخدام ثلاثة معاملات داخل الـ playbook:
- المالك – مالك الملف
- المجموعة – المجموعة التي يجب أن يكون الملف عضوًا فيها
- الوضع – الأذونات. يمكن أن يكون هذا السلسلة إما عبر الرموز أو كأرقام ثمانية
في الوضع الرمزي،
u
يمثل “المستخدم”،g
يمثل “المجموعة”، وo
يمثل “آخرين”.
في افتراض أن لديك المجلد ~/ansible_template_demo لا يزال مُنشأً من القسم السابق، افتح دفتر الأعمال my_playbook.yml واستبدل المحتويات بتلك الموجودة أدناه. في هذا المثال، سيقوم Ansible بتعيين المالك والمجموعة إلى مستخدم Ansible باستخدام متغيرات الاتصال. ثم يضبط أذونات الملف إلى 0644
مما يمثل:
- المالك لديه إذن القراءة/الكتابة
- المستخدمون في المجموعة والآخرون لديهم إذن القراءة
يمكنك العثور على جميع معلمات وحدة القوالب المتاحة في وثائق وحدة القوالب في Ansible.
الآن، قم بتنفيذ دفتر الأعمال مرة أخرى كما هو موضح أدناه.
يمكنك الآن رؤية أن app.conf لديه أذونات الملف المتوقعة المخصصة له.

استخدام الحلقات لقوالب ملفات متعددة
في بعض الأحيان، لا يكفي ملف واحد؛ فقد تحتاج إلى إضافة ملفات متعددة على مضيف بعيد. في هذه الحالة، يمكنك استخدام الحلقات مع وحدة القوالب. تعريف حلقة باستخدام معلمة loop
يسمح لك بإضافة العديد من ملفات النص المخزنة في دليل.
في افتراض أن لديك المجلد ~/ansible_template_demo لا يزال مُنشأً من القسم السابق، يجب أن يكون لديك بالفعل app.conf.j2 فيه.
1. قم بإنشاء ملف قالب ثاني يسمى app2.conf.j2 في المجلد ~/ansible_template_demo كما هو موضح أدناه.
2. افتح الكتاب my_playbook.yml واستبدل جميع المحتويات بال YAML التالي. يستخدم هذا الكتاب الأمر {{item}}
لتمثيل كل ملف قالب يتم معالجته في الحلقة. يعرف المعامل loop
بعدد ملفات القوالب التي يجب أن تعالجها الحلقة.
3. الآن قم بتشغيل الكتاب التنفيذي مرة أخرى. ansible-playbook my_playbook.yml --inventory SRV1

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