קובץ הגדרה בסיסי יכול להספיק לעומסי עבודה פשוטים, אבל לארכיטקטורות מורכבות יותר או להגדרות שאתם מתכננים לעשות בהן שימוש חוזר, אתם יכולים לפצל את ההגדרה לתבניות.
תבנית היא קובץ נפרד שמייבאים ומשתמשים בו כסוג בהגדרה. אפשר להשתמש בכמה תבניות שרוצים בהגדרה.
תבניות מאפשרות לכם לפצל את ההגדרה לחלקים שונים שבהם תוכלו להשתמש שוב ושוב בפריסות שונות. התבניות יכולות להיות כלליות או ספציפיות, בהתאם לצורך. בעזרת תבניות, אתם יכולים גם ליהנות מתכונות כמו מאפייני תבניות, משתני סביבה, מודולים ופונקציות אחרות של תבניות כדי ליצור קובצי הגדרה ותבניות דינמיים.
דוגמאות לתבניות שאפשר להשתמש בהן בפריסות שלכם זמינות במאגר GitHub של Deployment Manager.
לפני שמתחילים
- אם רוצים להשתמש בדוגמאות לשורת הפקודה במדריך הזה, צריך להתקין את כלי שורת הפקודה`gcloud`.
- כדי להשתמש בדוגמאות ל-API במדריך הזה, צריך להגדיר גישה ל-API.
- איך יוצרים הגדרה בסיסית
תחביר התבנית
אפשר לכתוב תבניות ב-Jinja 2.10.x או ב-Python 3.x. Jinja דומה יותר לתחביר של YAML, ולכן אם אתם מכירים יותר את YAML, יכול להיות שיהיה לכם קל יותר לכתוב תבניות ב-Jinja.
אפשר גם לכתוב קובצי תבניות ב-Python ולהשתמש ב-Python כדי ליצור באופן פרוגרמטי חלקים מהתבניות. לדוגמה, אפשר להשתמש בספריות Python כדי לעצב הגדרות של תבניות. אם אתם מכירים את Python, יכול להיות שהפורמט הזה יתאים לכם יותר.
Deployment Manager מקבל תבניות Jinja ו-Python. אפשר לייבא תבניות בשתי השפות באותה הגדרה.
יצירת תבנית בסיסית
תבנית היא קובץ שאתם יוצרים, שנכתב ב-Jinja או ב-Python. לדוגמה, קובץ ההגדרות הבא:
ההגדרה הזו תקינה, אבל אפשר לפשט אותה עוד יותר על ידי פיצול החלקים השונים לקובצי תבנית נפרדים שניתנים לשימוש חוזר. כדי ליצור תבנית על סמך ההגדרה שלמעלה, מוציאים את הקטע של המשאב הרלוונטי ויוצרים קובץ Jinja או Python חדש.
בקטעי הקוד הבאים מוצגים החלקים בתבניות שיכולים לפשט את הפריסה. כדי לראות את התבניות המלאות, לוחצים על הצגה ב-GitHub.
Jinja
Python
תבניות Python צריכות לעמוד בדרישות הבאות:
בתבנית צריך להגדיר שיטה בשם
GenerateConfig(context)אוgenerate_config(context). אם משתמשים בשני שמות השיטות באותו תבנית, השיטהgenerate_config()מקבלת עדיפות.אובייקט
contextמכיל מטא-נתונים על הפריסה והסביבה שלכם, כמו שם הפריסה, הפרויקט הנוכחי וכן הלאה. מידע נוסף על שימוש במשתני סביבה ספציפיים לפריסההשיטה צריכה להחזיר מילון Python.
מעבר לכך, אתם אחראים ליצירת התוכן של התבנית.
דוגמה
הדוגמה המלאה ב-Python זמינה במאגר GitHub של Deployment Manager.
ייבוא התבנית
אחרי שיוצרים תבנית, מייבאים אותה לקובץ ההגדרות כדי להשתמש בה.
כדי לייבא תבנית, מוסיפים קטע imports להגדרה, ואחריו את הנתיב היחסי או המוחלט מהספרייה הנוכחית. לדוגמה, אפשר לייבא את תבנית המכונה הווירטואלית מהשלב הקודם על ידי הוספת השורה הבאה לחלק העליון של ההגדרה:
imports:
- path: path/to/my_vm_template.jinja
אם נתיב הקובץ ארוך, אפשר לספק מאפיין name אופציונלי בתור כינוי לקובץ. אפשר להשתמש בשם הזה כדי להפנות לתבנית בהמשך. אם לא תספקו את השם, אפשר להפנות לתבנית באמצעות התג path.
imports:
- path: path/to/my_vm_template.jinja
name: my_renamed_template.jinja
אתם יכולים לשלב בין ייבוא של כמה תבניות, בלי קשר לסוג התבנית (Jinja או Python):
imports:
- path: path/to/my_vm_template.jinja
name: my_renamed_template.jinja
- path: special_vm.py
אם התבנית שלכם משתמשת בתבניות אחרות כתלות, צריך לייבא גם את התבניות התלויות בהגדרות:
imports:
- path: path/to/my_vm_template.jinja
- path: special_vm.py
- path: base_vm.jinja
אפשר גם לייבא קובצי טקסט כדי להוסיף את התוכן שלהם בתוך המסמך. לדוגמה, אם יוצרים קובץ בשם resource_type.txt עם המחרוזת הבאה:
compute.v1.instance
מייבאים אותו להגדרה ומספקים את התוכן בתוך השורה, באופן הבא:
imports: - path: resource_type.txt resources: - name: my-vm type: {{ imports["resource_type.txt"] }} # Resolves to "compute.v1.instance" properties: zone: us-central1-a machineType: zones/us-central1-a/machineTypes/f1-micro disks: - deviceName: boot type: PERSISTENT boot: true autoDelete: true initializeParams: sourceImage: projects/debian-cloud/global/images/family/debian-9 networkInterfaces: - network: global/networks/default accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT
פריסת תבניות
אחרי שמייבאים תבנית, משתמשים בה כסוג בהגדרה:
Jinja
Python
אם לא ציינתם שם לתבנית, קוראים לתבנית באמצעות נתיב התבנית:
imports:
- path: path/to/my_vm_template.jinja
resources:
- name: my-first-virtual-machine
type: path/to/my_vm_template.jinja
פריסת תבניות ישירות באמצעות כלי שורת הפקודה
במקום ליצור קובץ הגדרה ברמה העליונה, Deployment Manager מאפשר לפרוס תבנית ישירות ב-Google Cloud CLI.
לדוגמה, הבקשה הבאה פורסת תבנית בשם vm-template.jinja:
gcloud deployment-manager deployments create a-single-vm --template vm-template.jinja
אם בתבנית יש מאפייני תבנית, אפשר להגדיר אותם בשורת הפקודה באמצעות הדגל --properties:
gcloud deployment-manager deployments create my-igm \
--template vm-template.jinja \
--properties zone:us-central1-a
חשוב לזכור:
כל הערכים מנותחים כערכי YAML. לדוגמה, הערך
version: 3מועבר כמספר שלם. אם רוצים לציין אותו כמחרוזת, צריך להוסיף גרשיים בודדים עם תו בריחה סביב הערך,version: \'3\'.ערכים בוליאניים לא תלויי-רישיות, ולכן המערכת מתייחסת ל-
TRUE, ל-trueול-Trueבאותו אופן.צריך להעביר את כל המאפיינים הנדרשים שמוגדרים בתבנית. אי אפשר לספק רק קבוצת משנה של הנכסים. אם למאפיינים מסוימים יש ערכי ברירת מחדל, אפשר להשמיט את המאפיין משורת הפקודה.
כדי לציין כמה מאפיינים, צריך לספק צמדים של מפתח:ערך שמופרדים בפסיקים. לא משנה באיזה סדר מציינים את הזוגות. לדוגמה:
gcloud deployment-manager deployments create my-igm
--template vm-template.jinja
--properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9
אחרי שמריצים את הפקודה הזו, Deployment Manager יוצר פריסה באמצעות התבנית שסיפקתם. אפשר לוודא שהפריסה נוצרה באמצעות מסוף Google Cloud או ה-CLI של gcloud. מידע על צפייה בפריסה מופיע במאמר צפייה במניפסט.
המאמרים הבאים
- דוגמאות לתבניות שמוכנות לייצור אפשר למצוא בדוגמאות של Cloud Foundation Toolkit ב-GitHub.
- אפשר להשתמש במאפייני תבנית כדי לבצע הפשטה נוספת של התוכן.
- מאכלסים מידע על הפרויקטים והפריסות באמצעות משתני סביבה.
- מוסיפים תבנית באופן קבוע לפרויקט כסוג מורכב.