ניהול הגדרות של שרתים וסביבות מרובות הוא יתרון גדול בשימוש ב- Ansible. אבל מה קורה כשקבצי התצורה שונים משרת לשרת? במקום ליצור תצורה נפרדת עבור כל שרת או סביבה, כדאי לבדוק את תבניות ה- Ansible.
במדריך זה, אתה תלמד מהם הן תבניות ה- Ansible, איך הן פועלות וכיצד ניתן להשתמש ב- מודול התבנית של Ansible כדי לחסוך המון זמן.
דרישות קדם
המדריך הזה יהיה מדריך שלב אחרי שלב. אם ברצונך לעקוב, וודא שיש לך מחשב מארח של מנהל ה- Ansible. במדריך הזה ישמשו גירסת Ansible v2.9.18
מהן תבניות ה- Ansible?
לעיתים יש צורך להעביר קבצי טקסט למארחים מרוחקים. קבצי הטקסט הללו נהיים בדרך כלל סוג של קובץ הגדרות. אם אתה עובד עם שרת בודד, למשל, ייתכן ויהיה צורך ליצור קובץ הגדרות בשם app.conf ששירות מסוים משתמש בו.
הקובץ תצורה יכול להכיל מידע מסוים לשרת כמו שם המארח, כתובת ה-IP, וכו '. מאחר ואתה עובד עם שרת בודד, תוכל ליצור את הקובץ על ידי בקר ה-Ansible ולאחר מכן להשתמש במודול ה-copy ב-playbook כדי להעתיק אותו לשרת.
אבל מה קורה אם יש לך מספר שרתי אינטרנט שכל אחד מהם צריך את אותו הקובץ תצורה אך כל אחד עם ערכים ספציפיים משלו? אתה לא יכול פשוט להעתיק את קובץ התצורה לכל המכונות; הוא נבנה רק עבור שרת בודד עם שם מארח מסוים, כתובת ה-IP, וכו '. נדרש תבנית של Ansible.
תבניות Ansible מאפשרות לך להגדיר קבצי טקסט עם משתנים במקום ערכים סטטיים ולאחר מכן להחליף את המשתנים הללו בזמן ההרצה של ה-
איך נראית תבנית של Ansible?
תבנית של Ansible היא קובץ טקסט שנבנה עם שפת התבנית Jinja2 עם סיומת קובץ j2. תבנית של Jinja2 נראית בדיוק כמו הקובץ הטקסט שתרצה להעביר לשרת מרוחק. ההבדל היחיד הוא שבמקום ערכים סטטיים, הקובץ מכיל משתנים.
לדוגמה, אולי תצטרך לקבל קובץ תצורה בשם app.conf בכל שרתי האינטרנט שלך שמכיל קישורים לכתובת ה-IP של כל שרת, לשם המארח של אנסיבל ולשם המשתמש של אנסיבל. קובץ app.conf של שרת בודד יכול להיראות כמו הדוגמה למטה.
אתה לא יכול להעתיק את הקובץ הזה לכל שרת האינטרנט כי כל אחד מהפריטים יהיה ייחודי תלוי בכתובת IP של המארח המרוחק, שם המארח של אנסיבל והמשתמש של אנסיבל.
במקום להגדיר רבים מהערכים אלו בצורה סטטית, תבנית אנסיבל מאפשרת לך להגדיר משתנים שמתורגמים בזמן ריצה ומוחלפים בשרת המרוחק.
למטה תמצא דוגמה לקובץ התבנית app.conf.j2. כעת תוכל לראות שכל הערך הסטטי נמצא במשתנה המסומן בסוגריים מסולסלות משני צידיו. במקרה זה, המשתנים הללו מגיעים מ- עובדות אנסיבל.
קבצי תבניות תמיד מכילים סיומת J2 ולרוב יש אותו שם כמו הקובץ שהם יוצרים במארח היעד.
איך נוצרים קבצי התבניות במארחים מרוחקים?
לאחר שיצרת תבנית, עליך להביא את קובץ התבנית הזה למארח המרוחק ול"המיר" אותו לקובץ הטקסט הממשי שהוא אמור להיראות כמו. כדי לעשות זאת, עליך להפנות לקובץ התבנית בקובץ פעולה.
רוב מנהלי ה-Ansible משתמשים במודול ההעתקה copy כדי להעביר קבצים לשרתים מרוחקים, אך כפי שצוין לעיל, זה לא אפשרי עם תבניות.
מתחת לך תוכל לראות משל פשוט לפקודה שמעתיקה את הקובץ app.conf לתיקיית /opt בכל שרת מטרה של הפלייבוק.
עכשיו נניח שהמילוי של קובץ ההגדרות app.conf הפך להיות קובץ תבנית app.conf.j2 כפי שנדברת עליו בקטע הקודם בבקר ה-Ansible שלך. עכשיו עליך לוודא שהקובץ app.conf עדיין מגיע לתיקיית /opt כאשר המשתנים מוחלפים בערכים אמיתיים.
כדי לספר לפלייבוק ליצור את הקובץ app.conf בתיקיית /opt, פשוט החלף את ההפניה copy
בהפניה template
כפי שמוצג להלן. כשאתה עושה זאת, ה-Ansible מפעיל את מודול התבנית template כדי להעביר את התבנית ולהחליף את המשתנים בערכים סטטיים.
כאשר המשימה לעיל בפלייבוק מתבצעת, ה-Ansible יעתיק את הקובץ app.conf.j2 לתיקיית /opt בשרת המרוחק, יחליף את כל המשתנים בערכים סטטיים וישנה את שמו של הקובץ ל-app.conf.
כאשר אתה מספק את התבנית
src
עם נתיב לתיקייה, Ansible מחפש תבניות בתיקיית /<ansible_installation_directory>/files/. אם אתה פשוט מספק את שם הקובץ, אנסיבל יחפש את התבנית בתיקיית /<ansible_installation_directory>/templates/.
עיבוד קובץ תצורה: דוגמת תבנית
בוא נתחיל עכשיו בדוגמה כדי לראות איך להגדיר תבנית אנסיבל ולהשתמש במודול התבנית של אנסיבל כדי ליצור באופן דינמי קובץ תצורה. בדוגמה זו, אתה יוצר קובץ בשם app.conf בתיקייה /etc בשרת בשם SRV1.
שלבים אלו יעבדו עבור כל סוג של קובץ טקסט. המדריך ישתמש בקובץ תצורה כדוגמה יחידה.
1. SSH לשרת הבקרה של אנסיבל באמצעות המשתמש אותו אתה רגיל להשתמש בו לניהול אנסיבל.
2. צור תיקייה בתיקיית הבית שלך כדי לאחסן את קבצי הדגמה למדריך זה ושנה את התיקייה הפעילה לתוך התיקייה.
3. צור קובץ תבנית בשם app.conf.j2 בתיקייה המצויינת מתחת.
אתה יכול גם להשתמש במשתנים שונים הקשורים למודול התבנית של אנסיבל בתבנית שלך.
4. צור פלייבוק פשוט באותו התיקייה בשם my_playbook.yml. הפלייבוק הזה יוצר את הקובץ app.conf בתיקייה /etc.
5. הפעל את פלייבוק אנסיבל והשתמש בשרת המרוחק SRV1.

6. אשר כעת שקובץ התצורה /etc/app.conf קיים ויש בו את הערכים המצופים.

עדכון הרשאות הקובץ עם מודול התבנית
עכשיו שראית את היסודות של שימוש במודול התבנית, בואו נתקדם קצת יותר. עבור הדגמה זו, תיצור את אותו קובץ app.conf כמו שראית קודם. אך הפעם תגדיר את בעל הקובץ והרשאותיו על הקובץ הזה.
כדי לשנות את הרשאות הקובץ שמודול התבנית יוצר, עליך להשתמש בשלושה פרמטרים בתוך הפלייבוק:
- בעלים – בעלים של הקובץ
- קבוצה – הקבוצה שבה הקובץ צריך להיות חבר
- מצב – ההרשאות. מחרוזת זו יכולה להיות ביטויים סימבוליים או במספרים אוקטליים
במצב סימבולי,
u
מייצג "משתמש",g
מייצג "קבוצה" ו־o
מייצג "אחרים".
בהנחה שיש לך עדיין את התיקייה ~/ansible_template_demo שנוצרה בסעיף הקודם, פתח את קובץ הפלייבוק my_playbook.yml והחלף את התוכן שבתוכו עם מהלך הפעולות הבא. בדוגמה זו, אנסיבל מגדיר את בעל הקובץ והקבוצה למשתמש אנסיבל באמצעות משתנים חיבור. לאחר מכן, הוא מגדיר את הרשאות הקובץ ל־0644
, שמייצג:
- בעל הקובץ יש לו הרשאות קריאה/כתיבה
- משתמשים בקבוצה וכל אחד אחר יש לו הרשאה לקרוא
אתה יכול למצוא את כל הפרמטרים הזמינים של מודול התבנית במסמך מודול התבנית של אנסיבל.
עכשיו, הרץ שוב את הפלייבוק כפי שמוצג למטה.
עכשיו תוכל לראות שלקובץ 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 יכולים לחסוך לך המון זמן וליצור קבצי טקסט דינמיים על כל המארחים המרוחקים שלך. מודול ההעתקה מספק פונקציות דומות אך אם אי פעם תזדקק ליצור קבצי טקסט דינמיים, מודול התבנית יהיה החבר שלך.