הגדרת מאפייני תבנית

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

לדוגמה, השורה הבאה מציינת מאפיין של תבנית בכתובת ה-URL של סוג המכונה:

machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1

בהגדרה שמשתמשת בתבנית הזו, אפשר להגדיר את הערך של zone בקטע properties של התבנית:

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

המערכת של Deployment Manager תדע להעביר את הערך של zone לתבנית הבסיסית.

לפני שמתחילים

יצירת נכס תבנית

כדי ליצור נכס תבנית:

Jinja

ב-Jinja, מגדירים מאפיין באמצעות התחביר הבא:

{{ properties["PROJECT_NAME"] }}

לדוגמה:

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Python

ב-Python, מגדירים מאפיין באמצעות התחביר הבא:

  context.properties["PROPERTY_NAME"]

לדוגמה:

resources.append({
    'name': 'vm-' + context.env['deployment'],
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': ''.join(['zones/', context.properties['zone'],
                                '/machineTypes/n1-standard-1']),
        'disks': [{
            'deviceName': 'boot',
            'type': 'PERSISTENT',
            'boot': True,
            'autoDelete': True,
            'initializeParams': {
                'sourceImage':
                    'projects/debian-cloud/global/images/family/debian-11'
            }
        }],
        'networkInterfaces': [{
            'network': 'global/networks/default'
        }]
    }

})

הדוגמה המלאה ב-Python זמינה במאגר GitHub של Deployment Manager.

קביעת ערכים למאפייני תבנית בהגדרת התצורה ברמה העליונה

בהגדרה ברמה העליונה, אפשר להגדיר ערכים למאפייני התבנית באמצעות התחביר:

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

חובה להגדיר ערכים לכל מאפייני התבנית בתבנית. לדוגמה, אם בתבנית יש מאפייני תבנית zone, image ו-network, צריך להגדיר ערכים לכל המאפיינים האלה בהגדרה ברמה העליונה.

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

הגדרת ערכים למאפייני תבנית בשורת הפקודה

במקום לספק ערכים למאפייני התבנית בקובץ ההורה שמייבא את התבנית, Deployment Manager מאפשר להגדיר את הערכים האלה ישירות ב-Google Cloud CLI. אפשר לדלג על יצירת קובץ YAML ברמה העליונה. Deployment Manager ייצור באופן אוטומטי הגדרה ברמה העליונה לפריסה על סמך המידע שבבקשה.

לדוגמה, נניח שיש לכם את התבנית הבאה עם מאפיין תבנית שנקרא zone:

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

בעזרת Google Cloud CLI, אפשר להעביר את קובץ התבנית הזה ישירות ולספק את הערכים של מאפייני התבנית בשורת הפקודה. לדוגמה, הבקשה הבאה מעבירה את התבנית ומציינת את המאפיין zone ישירות בשורת הפקודה:

gcloud deployment-manager deployments create a-single-vm --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. מידע על צפייה בפריסה מופיע במאמר צפייה במניפסט.

המאמרים הבאים