כיצד להשתמש במשתנים וברווחים ראויים

כיצד ExpressVPN משתמש ב- Ansible

כיצד אנו משתמשים ב- Ansible בהרחבה ב- ExpressVPN

צוותי הפיתוח שלנו עובדים באופן עצמאי, כלומר צוות מחזיק במוצר שלהם לאורך מחזור החיים המלא שלו. הגדרה זו פירושה שההבנה של Ansible שלנו נובעת מאוסף של ידע מצוותים שונים בחברה ולא מקבוצה מרכזית המנהלת את Ansible.

כוח עבודה מבוזר מעניק לצוותים שלנו גמישות רבה וניידות אך גם מפעיל לחץ על אנשים לדעת הרבה על כלים רבים.

כדי להקל על שיתוף הידע ושימוש נכון בכלים, החלטנו לתקן את האופן שבו אנו משתמשים ב- Ansible לניהול תצורה ופעולות שרת..

בלוג זה עוסק בשיעורים שלמדנו בהיקף שלנו, הרהורים על אופן עבודתנו וכיצד אנו מנהלים את Ansible בהקשר כזה..

תיעוד ברור

בואו ונכנס לזה! התיעוד של Ansible משאיר כמה דברים לבחירה, במיוחד כשמדובר בתיעוד מקצה לקצה (כמו איך מגיעים מנקודה A לנקודה Z?).

כמה שאלות שאנו נתקלים בהן בקביעות הן: “כיצד עובדת עדיפות משתנה?” ו”איך הכספת של Ansible Vault נכנסת? “

שתי הבעיות מתועדות בצורה מאוד עצמאית (כאן וכאן), ובדף המשתנים הניתנים יש קטע נחמד מאוד על קדימות במפורש, אך צומת השניים מקבל אזכור קצר בלבד. הבעיה היא שאין קשרים בין התיעוד על משתנים וכספות, ונותנים את הרושם שהאינטרנט נמצא על המשתמש להבין כיצד השניים מצטלבים זה בזה..

אז היום ננסה לכסות את הצומת בין משתנים וכספות ואת התרגול הטוב ביותר.

לשם מה תוכל להשתמש בקבצי Ansible Vault

לסיכום: בתיעוד הכספת נכתב כי למעשה תוכלו להצפין כל דבר שבתיקיית Ansible לקובץ Vault, ו- Ansible ינסה לפענח את זה “בחוכמה” בכל פעם שהמחזה כולל קבצים אלה. הא. מגניב!

התיעוד אודות משתנים לא מזכיר כלל שום דבר אודות קבצי הכספת, וזה מוזר שכן Vault תוכנן לקבצי משתנים. אז איך הם משתלבים זה בזה? חשוב לציין את זה לקבצי הכספת עצמם אין משמעות מיוחדת לעיבוד משתנה או עדיפות, כך שיש הרבה גמישות. אך פוטנציאל זה לא משאיר לך מספיק מידע כיצד להשתמש בו כראוי.

איך לא להשתמש ב- Ansibleאתה עושה את זה לא נכון.

קח דוגמה זו לתיקייה Ansible פשוטה:

.
├── group_vars
│ ├── הכל
ייצור │ ├──
בימוי
├── ansible.cfg
├── מלאי
└── playbook.yml

במבט ראשון ההתקנה הזו נראית טוב; זה יהיה מבנה נפוץ יחסית לייצור אם היית קורא את התיעוד. צופה יכול היה להניח שקבצי ההקמה וההפקה בקבוצה_vars הם כרכים, אך זה לא בהכרח נכון, וזה כשלעצמו בעיה.

כעת, הקובץ “הכל” אינו יכול להיות קובץ Vault מאחר ואתם מקווים להצפין את קבצי הכספות של הייצור והייצור עם סיסמאות שונות. אבל זה גם אומר שקובץ group_vars שלך לסביבות צריך להכיל תערובת של סודות ולא סודות מכיוון שאתה מוגבל לקובץ אחד לכל סביבה.

בגלל זה – ואם הוצאתם חילוץ מעט לאחר שקראתם את ההקדמה לכספות בתיעוד Ansible – כנראה שיצרתם את קמרונות ההפקה / הבמה על ידי העתקת התוכן של “הכל” בתחילה ואז שינוים.

משמעות הדבר היא שקובץ “הכל” שלך עשוי להיראות כך:

מאגר מידע:
שם משתמש: default_user
סיסמא: שקר

super_important_var_that_should_be_one: 1

וקובץ הכספת הייצור שלך עשוי להיראות כך:

מאגר מידע:
שם משתמש: יצרן
סיסמה: supersecretpasswordnoonecansee

super_important_var_that_should_be_one: 1

(אל דאגה, זו לא סיסמת הייצור האמיתית שלנו! בדקנו שוב.)

האמור לעיל מסוכן מסיבות שאינן ברורות מאליה. לדוגמה, אתה עלול להחמיץ את שינוי ברירת המחדל לייצור, ו / או שקובץ “הכל” שלך עשוי אפילו להיות שם שגוי ולא נכלל בכלל! (זה גורם השורש להפסקה שהיה לנו בשבוע שעבר.)

שיטת העבודה הטובה ביותר: כיצד להשתמש בקבצי Ansible Vault בבטחה

כאמור בדף שיטות העבודה המומלצות, הפיכת קובץ לקובץ Vault מעלימה את תוכן הקובץ, כך שהם מגיעים עם חסרון גדול: אינך יכול לחפש אילו משתנים נמצאים בקובץ הכספת מבלי לפענח אותם במפורש. משמעות מערכת זו היא שמי שמסתכל על תצורת Ansible שלך ​​אין מושג מה יש בתוך הקבצים האלה מבלי לדעת גם את סיסמת הכספת (נורא לבדיקת קוד!). מכאן אנו ממליצים להכניס כמה שפחות משתנים לקבצי הכספת. (במילים אחרות, רק הכניסו סודות לקבצי הכספת!)

אז בואו נסתכל על מבנה שיקל עליכם לא לירות בעצמכם בכף הרגל:

.
├── group_vars
│ ├── הכל
│ │ └── vars.yml
ייצור │ ├──
│ │ ├── vars.yml
Ault │ └── vault.yml
בימוי
Ault └── vault.yml
├── ansible.cfg
├── מלאי
└── playbook.yml

תיעוד שיטות העבודה המומלצות ממליץ גם להשתמש ב”שכבת indirection “, כלומר עליכם לעצב את כל המשתנים בקובץ הכספת אל המשתנים המוזכרים בספרי ההשמעה שלכם. כמו כן, מומלץ להקדים קידומת של משתני הכספת שלך ל- “vault_”, כלומר הכל / vars.yml שלך יכול להיראות כמו:

מאגר מידע:
שם משתמש: default_user
סיסמא: “{{vault_database_password}}”

super_important_var_that_should_be_one: 1

ההפקה שלך / vars.yml נראית כך:

מאגר מידע:
שם משתמש: יצרן

וקובץ הייצור / vault.yml צריך להכיל רק את זה:

vault_database_password: supersecretpasswordnoonecansee

למבנה המתוקן הזה יש כמה יתרונות. ראשית, אם אתה מבצע ביקורות על קוד (בבקשה עשה זאת!), זה אומר שהמבקרים שלך יכולים לראות מה שינית, יחד עם מה שהוספת והסרת (כמעט את כל) התצורה שלך. באמצעות מבנה זה, הסוקרים לא רואים רק שינוי קבצים מלא בכספת שצריך לפענח ידנית, לשמור אותם בדיסק ולהבדיל עם הגירסה הקודמת..

וחשוב מכך, אננסיביל תיכשל אפילו בהעברת המקורות אם היא חסרה כספת הכספת משתנה בתוך הכספת, מה שיחסוך אותך לפחות ממגוון של בעיות שאתה עלול להיתקל בהן אם לא תעקוב לעקוב אחר קבצי הכספת שלך..

אם אתה דבק בדפוס הזה, לא משנה אם מדובר בקבוצה מארחת בסביבה, בסביבה מלאה שאתה מגדיר לה משתנים או אפילו את התיקיה “הכל”, עמיתיהם לעולם לא יתבלבלו ביחס למה שאינו נמצא בתוך הכספת.

זה הכל לעת עתה, אנו מקווים שזה מועיל לך!