לכל פריסה יש מניפסט תואם. מניפסט הוא מאפיין לקריאה בלבד שמתאר את כל המשאבים בפריסה, והוא נוצר אוטומטית עם כל פריסה חדשה. אי אפשר לשנות קובצי מניפסט אחרי שהם נוצרו. קובץ מניפסט שונה מקובץ תצורה, אבל הוא נוצר על סמך קובץ התצורה.
לפני שמתחילים
- אם רוצים להשתמש בדוגמאות לשורת הפקודה במדריך הזה, צריך להתקין את כלי שורת הפקודה`gcloud`.
- כדי להשתמש בדוגמאות ל-API במדריך הזה, צריך להגדיר גישה ל-API.
- מומלץ להבין את ההגדרות.
- הסבר על תבניות
- איך יוצרים הגדרה
מבנה המניפסט
קובץ המניפסט מספק שלוש תצוגות של פריסה:
- ההגדרה הראשונית
- ההגדרה אחרי ההערכה המלאה, אחרי שכל התבניות והייבוא הורחבו
- הפריסה של הפריסה, שמתארת את כל המשאבים של הפריסה במבנה היררכי.
ההגדרה המקורית
ההגדרה המקורית היא ההגדרה שסיפקתם לפריסה, לפני הרחבת התבנית. ההגדרה הראשונית מצוינת על ידי המאפיין config:
config: |
imports:
- path: vm-template.jinja
- path: network-template.jinja
- path: firewall-template.jinja
- path: compute-engine-template.jinja
resources:
- name: compute-engine-setup
type: compute-engine-template.jinja
הגדרה מורחבת
ההגדרה המורחבת היא תיאור מלא של הפריסה, כולל כל המשאבים והמאפיינים שלהם, אחרי עיבוד כל התבניות. זהו המצב הסופי של ההגדרה.
החלק המורחב של ההגדרה במניפסט מסומן על ידי המאפיין expandedConfig:
expandedConfig: | resources: - name: datadisk-example-config-with-templates properties: sizeGb: 100 type: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/diskTypes/pd-standard zone: us-central1-a type: compute.v1.disk - name: vm-example-config-with-templates properties: disks: - autoDelete: true boot: true deviceName: boot initializeParams: diskName: disk-example-config-with-templates sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 type: PERSISTENT - autoDelete: true deviceName: datadisk-example-config-with-templates source: $(ref.datadisk-example-config-with-templates.selfLink) type: PERSISTENT machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/f1-micro metadata: items: - key: startup-script value: | #!/bin/bash python -m http.server 8080 networkInterfaces: - accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default zone: us-central1-a type: compute.v1.instance
תבניות מיובאות
המאפיין imports בקובץ המניפסט מציג את התוכן של כל התבניות שיובאו להגדרה הזו. הקטע imports במניפסט מסומן על ידי הקטע imports:
imports: - content: | resources: - name: {{ env["name"] }} type: compute.v1.instance properties: disks: - autoDelete: true type: PERSISTENT boot: true deviceName: boot initializeParams: sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 machineType: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/zones/{{ properties["zone"] }}/machineTypes/{{ properties["machineType"] }} networkInterfaces: - network: $(ref.{{ properties["network"] }}.selfLink) accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT zone: {{ properties["zone"] }} metadata: items: - key: startup-script value: | #!/bin/bash INSTANCE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/hostname -H "Metadata-Flavor: Google") echo "<html><header><title>Hello from Deployment Manager!</title></header> <body><h2>Hello from $INSTANCE</h2> <p>Deployment Manager bids you good day!</p> </body> </html>" > index.html python -m http.server 80 name: vm-template.jinja - content: | resources: - name: {{ env["name"] }} type: compute.v1.network properties: IPv4Range: 10.0.0.1/16 name: network-template.jinja - content: | resources: - name: {{ env["name"]}} type: compute.v1.firewall properties: network: $(ref.{{ properties["network"] }}.selfLink) sourceRanges: ["0.0.0.0/0"] allowed: - IPProtocol: TCP ports: ["80"] name: firewall-template.jinja - content: | {% set NETWORK_NAME = "a-new-network" %} resources: - name: the-first-vm type: vm-template.jinja properties: machineType: f1-micro zone: us-central1-f network: {{ NETWORK_NAME }} - name: the-second-vm type: vm-template.jinja properties: machineType: g1-small zone: us-central1-f network: {{ NETWORK_NAME }} - name: {{ NETWORK_NAME }} type: network-template.jinja - name: {{ NETWORK_NAME }}-firewall type: firewall-template.jinja properties: network: {{ NETWORK_NAME }} name: compute-engine-template.jinja
פריסה
הפריסה היא תרשים מתאר של הפריסה והמשאבים שלה, והיא מציגה את שמות המשאבים ואת הסוגים שלהם.
אפשר להשתמש בפריסה כדי להמחיש את המבנה של הפריסה, לראות את מאפייני התבנית שהוגדרו במהלך הפריסה הראשונית ולקבל מידע נוסף על ההגדרה לפני שהיא הורחבה.
במניפסט, אפשר לראות את הפריסה במאפיין layout:
layout: |
resources:
- name: compute-engine-setup
resources:
- name: the-first-vm
properties:
machineType: f1-micro
network: a-new-network
zone: us-central1-f
resources:
- name: the-first-vm
type: compute.v1.instance
type: vm-template.jinja
- name: the-second-vm
properties:
machineType: g1-small
network: a-new-network
zone: us-central1-f
resources:
- name: the-second-vm
type: compute.v1.instance
type: vm-template.jinja
- name: a-new-network
resources:
- name: a-new-network
type: compute.v1.network
type: network-template.jinja
- name: a-new-network-firewall
properties:
network: a-new-network
resources:
- name: a-new-network-firewall
type: compute.v1.firewall
type: firewall-template.jinja
type: compute-engine-template.jinja
זיהוי מניפסט
אפשר לזהות קובץ מניפסט לפי המזהה הייחודי שלו, בפורמט manifest-TIMESTAMP. לדוגמה:
manifest-1436393348324
בדרך כלל אפשר לקבל את מזהה המניפסט על ידי קבלת מידע על הפריסה המתאימה, או על ידי הצגת רשימה של מניפסטים לפריסה.
gcloud
ב-Google Cloud CLI, משתמשים בפקודת המשנה deployments describe:
gcloud deployment-manager deployments describe example-deployment
gcloud מחזירה תגובה שדומה לדוגמה הבאה:
id: '7428522736135856060' manifest: https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment/manifests/manifest-1436393348324 name: example-deployment resources: NAME TYPE ID STATE ERRORS ...
API
ב-API, שולחים בקשת GET ומציינים את שם הפריסה בבקשה:
GET https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment-with-config
אמורים לקבל תגובה שדומה לזו:
{
"id": "5899501332770090517",
"creationTimestamp": "2015-03-30T15:40:58.809-07:00",
"name": "example-deployment-with-config",
"fingerprint": "",
"manifest": "https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment-with-config/manifests/manifest-1427755258810-2b3498d9-530b-4f8e-b014-0342d3c9c66b",
"state": "DEPLOYED"
}הצגת מניפסט
אפשר להציג מניפסט על ידי שליחת בקשת get() למשאב Manifest או דרך Google Cloud console או gcloud.
המסוף
כדי לראות מניפסט של פריסה ב Google Cloud console:
- נכנסים לדף Deployments במסוף Google Cloud .
- ברשימה, לוחצים על הפריסה שרוצים לראות.
- בפרטי הפריסה, לוחצים על סקירה כללית.
gcloud
כדי לראות את המניפסט המלא באמצעות Google Cloud CLI, משתמשים בפקודה manifests describe. הפקודה מציגה גם את המניפסט המלא וגם את הפריסה:
gcloud deployment-manager manifests describe manifest-1436393348324 \
--deployment example-config-with-templates
gcloud מחזירה תגובה שדומה לדוגמה הבאה:
config: | imports: ["vm_template.jinja"]resources:
- name: vm-instance type: vm_template.jinja properties: zone: us-central1-a project: myproject creationTimestamp: '2015-03-30T15:40:58.815-07:00' evaluatedConfig: | resources:
- name: datadisk-example-config-with-templates properties: sizeGb: 100 type: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/diskTypes/pd-standard zone: us-central1-a type: compute.v1.disk
- name: vm-example-config-with-templates
properties:
disks:
- autoDelete: true boot: true deviceName: boot initializeParams: diskName: disk-example-config-with-templates sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 type: PERSISTENT
- autoDelete: true
deviceName: datadisk-example-config-with-templates
source: $(ref.datadisk-example-config-with-templates.selfLink)
type: PERSISTENT
machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/f1-micro
metadata:
items:
- key: startup-script value: | #!/bin/bash python -m http.server 8080 networkInterfaces:
- accessConfigs:
- name: External NAT type: ONE_TO_ONE_NAT network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default zone: us-central1-a type: compute.v1.instance id: '7174699452487462421' layout: | resources:
- name: vm-instance
type: vm_template.jinja
properties:
project: myproject
zone: us-central1-a
resources:
- name: datadisk-example-config-with-templates type: compute.v1.disk
- name: vm-example-config-with-templates type: compute.v1.instance name: manifest-1427755258810-2b3498d9-530b-4f8e-b014-0342d3c9c66b selfLink: https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-config-with-templates/manifests/manifest-1436393348324
API
ב-API, מציינים את שם הפריסה ואת שם המניפסט בGETבקשה:
GET https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment/manifests/manifest-1436393348324
אמורים לקבל תגובה שדומה לזו:
{ "id": "7174699452487462421", "selfLink": "https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-config-with-templates/manifests/manifest-1436393348324", "creationTimestamp": "2015-03-30T15:40:58.815-07:00", "name": "manifest-1427755258810-2b3498d9-530b-4f8e-b014-0342d3c9c66b", "config": "imports: [\"vm_template.jinja\"]\n\nresources:\n- name: vm-instance\n type: vm_template.jinja\n properties:\n zone: us-central1-a\n project: myproject\n", "evaluatedConfig": "resources:\n- name: datadisk-example-config-with-templates\n properties:\n sizeGb: 100\n type: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/diskTypes/pd-standard\n zone: us-central1-a\n type: compute.v1.disk\n- name: vm-example-config-with-templates\n properties:\n disks:\n - autoDelete: true\n boot: true\n deviceName: boot\n initializeParams:\n diskName: disk-example-config-with-templates\n sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619\n type: PERSISTENT\n - autoDelete: true\n deviceName: datadisk-example-config-with-templates\n source: $(ref.datadisk-example-config-with-templates.selfLink)\n type: PERSISTENT\n machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/f1-micro\n metadata:\n items:\n - key: startup-script\n value: |\n #!/bin/bash\n python -m http.server 8080\n networkInterfaces:\n - accessConfigs:\n - name: External NAT\n type: ONE_TO_ONE_NAT\n network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default\n zone: us-central1-a\n type: compute.v1.instance\n", "layout": "resources:\n- name: vm-instance\n properties:\n project: myproject\n zone: us-central1-a\n resources:\n - name: datadisk-example-config-with-templates\n type: compute.v1.disk\n - name: vm-example-config-with-templates\n type: compute.v1.instance\n type: vm_template.jinja\n" }