إذا كنت بحاجة إلى تنفيذ مهام Ansible استنادًا إلى شروط مختلفة ، فأنت محظوظ. تسمح لك “Ansible when” والشروط الأخرى بتقييم الشروط ، مثل النظام الأساسي ، أو إذا كانت مهمة واحدة تعتمد على المهمة السابقة.
في هذا البرنامج التعليمي ، ستتعلم كيفية العمل مع “Ansible when” والشروط الأخرى حتى تتمكن من تنفيذ المهام دون تدمير الأمور.
دعنا نبدأ!
المتطلبات المسبقة
يتضمن هذا البرنامج التعليمي أمثلة عملية. إذا كنت ترغب في متابعتها ، تأكد من وجود ما يلي:
- مضيف تحكم “Ansible” – يستخدم هذا البرنامج التعليمي “Ansible v2.9.24” المستضاف على جهاز “Ubuntu 18.04.5 LTS”.
- A remote computer to run commands.
- سيتعين عليك إعداد ملف “التجهيز” وتكوين مضيف واحد أو أكثر بالفعل لتشغيل أمر Ansible وسيناريوات اللعب. سيستخدم هذا البرنامج التعليمي مجموعة تجهيز تسمى “الويب”.
العمل مع “Ansible when” مع عدة مهام في السيناريو
إمتلاك مهام متعددة في سيناريو يمكن أن يكون مزعجًا إذا تم تنفيذها جميعًا دون شروط محددة. دعنا نبدأ هذا البرنامج التعليمي بتعريف شروط when
في سيناريو أنسيبل باستخدام مهام متعددة.
1. قم بفتح نافذة الطرفية على مضيف تحكم أنسيبل.
2. قم بتشغيل الأوامر أدناه لإنشاء دليل وتسميته بأي اسم تفضله في دليل المستخدم الخاص بك، وانتقل إلى ذلك الدليل.
في هذا المثال، يتم تسمية الدليل بـ ansible_when_condition_demo
. سيحتوي هذا الدليل على سيناريو الذي ستستخدمه لتنفيذ الشرط “when” في مهمة أنسيبل.
3. في محرر الشفرة المفضل لديك، قم بإنشاء ملف YAML في الدليل ~/ansible_when_condition_demo. في هذا المثال، يسمى الملف my_playbook.yml. قم بنسخ ولصق محتويات سيناريو YAML أدناه في ملف my_playbook.yml.
في كلا المهام أدناه (Task-1
و Task-2
)، تتحقق الشروط when
من نظام التشغيل الذي يتواجد عليه كل مضيف عن بُعد. يتم تمرير النتيجة إلى المتغير العام ansible_os_family
في كل مهمة.
إذا كانت قيمة العلامات التالية ansible_os_family
تساوي إما RedHat
أو Debian
، فإن Ansible ينفذ أحد المهام لتثبيت Apache.
4. قم بتشغيل الأمر ansible-playbook
أدناه لتنفيذ المهام المعرفة في دفتر الأعمال (my_playbook.yml) على الخادم البعيد المعرف في ملف المخزون الحالي الخاص بك.
في الصورة المرفقة أدناه، يمكنك أن ترى أن:
- المهمة الأولى عادت بحالة موافقة، مما يظهر أن المهمة لا تتطلب أي تغييرات.
- المهمة الثانية عادت بحالة تخطي. عندما لا تتوافق الشرط، سيتم تخطي المهمة.
- المهمة الثالثة عادت بحالة تغيير، مما يشير إلى أن الخادم البعيد لم يكن في الحالة المناسبة (أي أن Apache غير موجود) وتم تعديله لتثبيت Apache.

5. افتح جلسة SSH إلى الخادم البعيد، الذي كان هدف سيناريو Ansible، باستخدام عميل SSH المفضل لديك للتحقق من تثبيت وتشغيل Apache.
6. أخيرًا، قم بتشغيل الأمر service
أدناه للتحقق مما إذا كانت Apache مثبتة (status apache2
) على الخادم البعيد.
كما يمكنك رؤية أدناه، قمت بتثبيت خدمة Apache على الجهاز البعيد.

العمل مع شرط when
وحلقات في Ansible
سابقًا، قمت بتنفيذ مهام Ansible وفقًا لشرط when
فيما يتعلق بمعلمة معينة مثل ansible_os_family
. ولكن ربما تحتاج إلى التحقق من حالة معينة باستخدام معلمات متعددة محددة في قائمة. إذا كان الأمر كذلك، فيمكنك محاولة إضافة حلقة في المهمة.
افتح ملف my_playbook.yml الذي قمت بإنشائه مسبقًا (الخطوة الثالثة في “العمل مع Ansible when
مع مهام متعددة في السيناريو”). استبدل محتوى ملف my_playbook.yml بالشفرة أدناه.
المهمة في الشفرة أدناه (Task-1
) تقوم بتشغيل حلقة حيث يتحقق الشرط when
مما إذا كانت قيمة العنصر أكبر من خمسة وتعيد النتيجة.
قم الآن بتشغيل الأمر أدناه لتنفيذ سيناريو العمل كما فعلت سابقًا.
أدناه يمكنك رؤية حالة التخطي عندما تكون الشرط غير صحيح وحالة التغيير عندما يكون الشرط صحيح.

when
condition for multiple parameters العمل مع Ansible when
و Ansible facts
ربما ترغب في إضافة شروط متعددة لتنفيذ مهمة. إذا كان الأمر كذلك، تعلم كيفية استخدام حقائق Ansible ضمن شرط when
. تتيح لك حقائق Ansible إضافة عبارة شرطية لتنفيذ المهام بناءً على الحقائق التي تم جمعها، مثل نظام التشغيل الخاص بك، عناوين IP، أنظمة الملفات المرفقة، وأكثر من ذلك.
استبدل محتوى ملف my_playbook.yml بالكود أدناه.
في الكود أدناه، تنفذ كلتا المهام (Task-1
و Task-2
) فقط (إيقاف نظام التشغيل) عندما يكون أحد الشروط التالية صحيحًا:
- تمت إرجاع قيمة صحيحة لكل من
distribution
وdistribtion_major_version
. - قيمة
os_family
تساويCentOS
.
قم بتنفيذ الكتاب النصي كما فعلت سابقًا باستخدام الأمر أدناه.
لاحظ أدناه أن كلا المهام تظهر الحالة التخطي لأنك تستخدم Ubuntu. تنفذ المهمة فقط إذا كنت تستخدم CentOS.

العمل مع Ansible when
بناءً على القيم المسجلة
في بعض الأحيان تحتاج إلى تنفيذ أو تخطي مهمة استنادًا إلى نتيجة مهمة سابقة في الخطة. على سبيل المثال، قد ترغب في تكوين خدمة بعد ترقية مهمة سابقة. في هذه الحالة، استخدم متغيرًا مسجلًا. يسمح لك المتغير المسجل بتسجيل نتيجة المهمة السابقة كمتغير واستخدامها في المهمة التالية كإدخال.
1. أنشئ دليلاً فارغًا باسم /home/ubuntu/hello.
2. استبدل محتوى ملف my_playbook.yml بالكود أدناه، الذي يقوم بالأمور التالية:
المهمة الأولى (Task-1
) تقوم بسرد محتويات (الملفات والمجلدات الفرعية) في دليل /etc/hosts
في الذاكرة وتحفظ هذه النتيجة في متغير contents1
من خلال أمر register
.
المهمة الثانية (Task-2
) تقوم بسرد محتويات (فارغة حاليًا) في الدليل /home/ubuntu/hello في الذاكرة وتحفظ هذا القائمة في متغير contents2
.
المهمة الثالثة (Task-3
) تفحص وتقوم بطباعة رسالة “الدليل فارغ” إذا كانت إما نتيجة المتغير المسجل للمتغير contents1
أو contents2
فارغة.
خاصية
stdout
لمتغيرcontents1
وcontents2
هي الإخراج الخاص بالشيل المحفوظ من نتيجة تشغيل أوامر المهمة.
3. أخيرًا، قم بتنفيذ الـ playbook بواسطة الأمر ansible-playbook
أدناه.
كما هو موضح أدناه، نظرًا لأن النتيجة المسجلة لمتغير contents2
فارغة، يقوم المهمة الثالثة بإرجاع رسالة الدليل فارغ.

Ansible when
based on registered values العمل مع Ansible when
في أدوار Ansible
في هذا المثال النهائي، ستتعلم كيف يعمل Ansible when
داخل أدوار Ansible. تُمكنك أدوار Ansible من إعادة استخدام التكوينات القياسية وجعل عملية النشر أسرع. تابع لتتعلم كيف يستدعي المهمة أدوار Ansible فقط إذا كانت شرط Ansible when
صحيحة.
1. قم بتشغيل الأوامر أدناه لإنشاء دليل يسمى ~/ansible_role_when_demo في دليل المستخدم الخاص بك وتغيير إلى ذلك الدليل كدليل عمل. سيحتوي الدليل ~/ansible_role_when_demo على ملفات العرض التوضيحي لهذا المثال.
2. بعد ذلك، قم بتشغيل الأوامر أدناه لإنشاء دليل ~/ansible_role_when_demo/roles و ~/ansible_role_when_demo/roles/java/tasks.
أدناه ما سيحتويه كل دليل:
- سيحتوي الدليل ~/ansible_role_when_demo/roles على الدور الذي تحتاج إلى نشره.
بشكل افتراضي، يبحث Ansible عن الأدوار في موقعين في دليل يسمى roles/ داخل الدليل الذي يتواجد فيه ملف السيناريو أو في /etc/ansible/roles. إذا كنت ترغب في تخزين الأدوار في مسارات مختلفة، قم بتعريف المسارات باستخدام المعلمة
- role:
في ملف السيناريو.
- ستحتوي المجلد ~/ansible_role_when_demo/roles/java/tasks على ملف main.yml ستحتاج إلى نشر دور.
الآن، قم بإنشاء ملف يسمى main.yml في الدليل ~/ansible_role_when_demo/roles/java/tasks، ثم قم بنسخ ولصق كود السيناريو أدناه إلى ملف main.yml.
السيناريو أدناه يقوم بتثبيت الجافا على العقدة البعيدة التي يتم تشغيلها عليها باستخدام وحدة التحكم apt.
4. قم بإنشاء ملف YAML آخر بالاسم الذي تفضله، وانسخ/لصق الكود أدناه. لهذا المثال، يُسمى الملف ~/ansible_role_when_demo/java-setup.yml.
الكود أدناه ينفذ دور Ansible (java
) إلى المستخدم البعيد (ubuntu
) الذي يحتوي على صلاحيات المسؤول فقط عندما يكون المستخدم البعيد على نظام Debian.
5. قم بتشغيل الأمر tree
للتحقق من وجود جميع المجلدات والملفات المطلوبة في ~/ansible_role_when_demo directory.

6. أخيرًا، قم بتنفيذ الملف التنفيذي باستخدام أمر ansible-playbook
التالي. ansible-playbook java-setup.yml
فيما يلي، أظهر المهمة حالة changed، مشيرًا إلى نجاح تثبيت Java بنجاح حيث أن العقد البعيد على نظام Debian.
تشغيل الملف التنفيذي لأنسيبل باستخدام Ansible when
مع أدوار Ansible

Ansible when
with Ansible roles الختام
في هذا البرنامج التعليمي، تعلمت طرق مختلفة لاستخدام Ansible when
وشروط أخرى. كما تعلمت كيفية تطبيق شروط Ansible when
، من المهام الأساسية باستخدام حقائق Ansible facts
ونشر أدوار Ansible roles
.
الآن كيف يمكنك الاستفادة من هذه المعرفة الجديدة؟ ربما توفير الوقت في تكوين خوادم متعددة باستخدام قوالب Ansible مع تطبيق شروط Ansible when
؟