אם נדרש לבצע משימות של Ansible בהתבסס על תנאים שונים, אז תהיה לך הנאה. Ansible when
ותנאים נוספים מאפשרים לך לבדוק תנאים, כגון מבוסס על מערכת הפעלה, או אם משימה אחת תלויה במשימה הקודמת.
במדריך זה, תלמד איך לעבוד עם Ansible when
ותנאים נוספים כך שתוכל לבצע משימות בלי לקרוס את הדברים.
בוא נתחיל!
דרישות קדם
מדריך זה כולל דוגמאות פרקטיות. אם ברצונך לעקוב, הקפד לוודא שיש לך את הדברים הבאים במקום:
- מארח שליטה של Ansible – מדריך זה משתמש ב-Aansible v2.9.24 המתקיים על מכונת Ubuntu 18.04.5 LTS.
- A remote computer to run commands.
- יש לך צורך בקובץ ממלא הקצאות ולפחות מארח אחד או יותר המוגדרים כבר להפעלת פקודות וניגון של סקריפטים באמצעות Ansible. המדריך ישתמש בקבוצת הממשק שנקראת web.
עבודה עם Ansible when
עם מספר משימות ב-Playbook
יש לכם מספר משימות בפלייבוק יכול להיות לא נעים אם כולן מבוצעות בלי תנאים מסוימים. בואו נתחיל את המדריך הזה על ידי הגדרת תנאי when
בפלייבוק של Ansible עם מספר משימות.
1. פתחו טרמינל בשרת ה־Ansible controller.
2. הריצו את הפקודות הבאות כדי ליצור ספרייה ולתת לה שם שתרצו בספריית הבית שלכם, ונווטו אליה.
לדוגמה, הספרייה תקרא ansible_when_condition_demo
. הספרייה הזו תכיל את ה־פלייבוק שתשתמשו בו כדי להפעיל את התנאי בתוך המשימה של Ansible.
3. בעורך הקוד שאתם מעדיפים, צרו קובץ YAML בתיקייה ~/ansible_when_condition_demo. בדוגמה זו, הקובץ נקרא my_playbook.yml. העתיקו והדביקו את תוכן הפלייבוק ב־YAML לקובץ my_playbook.yml שלכם.
בשתי המשימות מתחת (משימה-1
ו־משימה-2
), תנאי ה־when
בודק איזה מערכת הפעלה נמצאת על כל מארח רחוק. התוצאה מועברת למשתנה המקומי ansible_os_family
בכל משימה.
אם ערך המציינים בתחום של ansible_os_family
הוא אחד מבין RedHat
או Debian
, אז Ansible מבצעת אחת מהמשימות להתקין את Apache.
4. כעת הפעל את הפקודה ansible-playbook
לביצוע המשימות המוגדרות ב-playbook (my_playbook.yml) על המארח המרוחק, שהוגדר בקובץ המלאי הקיים שלך.
בצילום המסך למטה, ניתן לראות ש:
- המשימה הראשונה החזירה סטטוס OK, שמציין שאין צורך בשינויים במשימה זו.
- המשימה השנייה החזירה סטטוס skipping. כאשר התנאי אינו מתקיים, המשימה תתעבר.
- המשימה השלישית החזירה סטטוס changed, שמציין שהמארח המרוחק לא היה במצב הנכון (כלומר, אפאצ'י לא קיים) ושונה כך שיתאפשר להתקין את Apache.

5. פתח ישיבת SSH לשרת המרוחק, שהיה המטרה של דרך המשחק של Ansible, באמצעות הלקוח SSH האהוב עליך כדי לאמת שהאפאצ'י מותקן ופועל.
6. לבסוף, הרץ את הפקודה service
למטה כדי לוודא אם האפאצ'י מותקן (status apache2
) בשרת המרוחק.
כפי שאתה רואה למטה, התקנת את שירות האפאצ'י על המכונה המרוחקת.

עבודה עם Ansible when
ולולאות
קודם ביצעת משימות של Ansible לפי תנאי Ansible when
עבור פרמטר מסוים כמו ansible_os_family
. אך אולי תרצה לבדוק תנאי עם מספר פרמטרים מוגדרים ברשימה. אם כן, נסה להוסיף loop
במשימה.
פתח את הקובץ my_playbook.yml שיצרת קודם (שלב שלוש תחת "עבודה עם Ansible when
עם משימות מרובות בפלייבוק"). החלף את תוכן הקובץ my_playbook.yml בקוד למטה.
המשימה בקוד למטה (משימה-1
) מפעילה loop
שבו התנאי when
בודק אם ערך הפריט גדול מחמישה ומחזיר את התוצאה.
עכשיו הרץ את הפקודה למטה כדי לבצע את הפלייבוק כפי שעשית קודם.
למטה, ניתן לראות את מצב העבודה שמוחזר כאשר התנאי שקר.

when
condition for multiple parameters עובד עם Ansible when
ועם עובדות Ansible
אולי ברצונך להוסיף תנאים מרובים כדי לבצע משימה. אם כן, למד איך להשתמש בעובדות Ansible בתוך תנאי when
. עובדות Ansible מאפשרות לך להוסיף הצהרה תנאית לביצוע משימות בהתבסס על עובדות שנאספו, כגון מערכת ההפעלה שלך, כתובות ה-IP, מערכות הקבצים שמחוברות ועוד.
החלף את תוכן הקובץ my_playbook.yml עם הקוד שבתחתית.
בקוד שמתחת, שתי המשימות (משימה-1
ו־משימה-2
) מבצעות רק (כיבוי מערכת) כאשר תנאי אחד מתוך התנאים הבאים הוא נכון:
- שתי הערכים
הפצה
ו־גרסת_ראשי_הפצה
החזירו ערך נכון. - ערך ה־
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. לבסוף, לבצע את הפלייבוק עם פקודת ansible-playbook
למטה.
כפי שמוצג למטה, מאחר שהתוצאה הנרשמת עבור משתנה contents2
היא ריקה, המשימה השלישית מחזירה את ההודעה "התיקייה ריקה".

Ansible when
based on registered values עבודה עם Ansible when
בתפקידי Ansible
בדוגמה האחרונה זו, תלמד כיצד פקודת when
ב־Ansible פועלת בתוך תפקידי Ansible. תפקידי Ansible מאפשרים לך להשתמש בהגדרות סטנדרטיות ולבצע התקנה מהירה יותר. קרא הלאה כדי ללמוד כיצד משימה מפעילה תפקידי Ansible רק אם תנאי ה־when
ב־Ansible נכון.
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.
הפלייבוק למטה מתקין את Java בשרת המרוחק שבו הוא מופעל עם מודול apt.
4. צור קובץ YAML נוסף בשם שאתה מעדיף, והעתק/הדבק את הקוד למטה. לדוגמה, הקובץ נקרא ~/ansible_role_when_demo/java-setup.yml.
הקוד למטה מפעיל את תפקיד ה-Ansible (java
) על משתמש המרוחק (ubuntu
) שיש לו גישה מנהלית רק כאשר המשתמש המרוחק פועל על מערכת ההפעלה Debian.
5. הריצו את הפקודה tree
כדי לוודא שכל התיקיות והקבצים הנדרשים קיימים בתיקיית ~/ansible_role_when_demo.

6. לבסוף, הפעילו את הפלייבוק עם הפקודה ansible-playbook
למטה. ansible-playbook java-setup.yml
מתחת, המשימה החזרה סטטוס changed, מציינת שהתקנת ה-Java בוצעה בהצלחה מאחר והקצה המרוחק עובד עם מערכת ההפעלה Debian. הרצת פלייבוק של Ansible באמצעות
Ansible when
עם תפקידי Ansible

Ansible when
with Ansible roles סיכום
במדריך זה, למדתם דרכים שונות לשימוש ב- Ansible when
ותנאיים נוספים. למדתם גם כיצד להחיל תנאי Ansible when
, ממשימות בסיסיות שמשתמשות ב- Ansible facts
ועד לפרסום תפקידי Ansible roles
.
עכשיו כיצד תבנו על הידע החדש שרכשתם? אולי לחסוך זמן בתצורת שרתים מרובים עם תבניות Ansible בעודכם מחילים תנאי Ansible when
?