Jede Bereitstellung hat ein entsprechendes Manifest. Ein Manifest ist ein schreibgeschütztes Attribut, das alle Ressourcen in einer Bereitstellung beschreibt und automatisch bei jeder neuen Bereitstellung erstellt wird. Manifeste sind nach der Erstellung nicht änderbar. Ein Manifest ist nicht das gleiche wie eine Konfigurationsdatei, aber es wird auf Grundlage der Konfigurationsdatei erstellt.
Hinweis
- Wenn Sie die Befehlszeilenbeispiele in dieser Anleitung verwenden möchten, installieren Sie das gcloud-Befehlszeilentool.
- Wenn Sie die API-Beispiele in dieser Anleitung verwenden möchten, richten Sie den API-Zugriff ein.
- Informieren Sie sich über Konfigurationen.
- Informieren Sie sich über Vorlagen.
- Informieren Sie sich darüber, wie Konfigurationen erstellt werden.
Aufbau eines Manifests
Ein Manifest bietet drei Ansichten einer Bereitstellung:
- Die ursprüngliche Konfiguration
- Die vollständig evaluierte Konfiguration, nachdem alle Vorlagen und Importe erweitert wurden
- Den Aufbau der Bereitstellung, der alle Ressourcen für die Bereitstellung in einer hierarchischen Struktur anzeigt.
Ursprüngliche Konfiguration
Die ursprüngliche Konfiguration ist die Konfiguration, die Sie der Bereitstellung zur Verfügung gestellt haben, bevor jegliche Vorlagen expandiert wurden. Die ursprüngliche Konfiguration ist am Attribut config
zu erkennen:
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
Expandierte Konfiguration
Die expandierte Konfiguration enthält eine vollständige Beschreibung Ihrer Bereitstellung, einschließlich aller Ressourcen und ihrer Attribute, nachdem alle Vorlagen verarbeitet wurden. Dies ist der endgültige Status Ihrer Konfiguration.
Der Teil eines Manifests, in dem es um die expandierte Konfiguration geht, ist am Attribut expandedConfig
zu erkennen:
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
Importierte Vorlagen
Das Attribut imports
in einem Manifest zeigt den Inhalt jeglicher Vorlagen an, die Sie für diese Konfiguration importiert haben. Der Abschnitt zu Importen im Manifest wird durch den Abschnitt imports
angezeigt:
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
Das Layout ist ein Grundriss Ihrer Bereitstellung und der Ressourcen. Er zeigt die Ressourcennamen und -typen.
Sie nutzen dieses Layout, um die Struktur Ihrer Bereitstellung zu visualisieren, Vorlagen-Attribute zu betrachten, die während der ursprünglichen Bereitstellung festgelegt wurden, und andere Informationen über Ihre Konfiguration zu erhalten, bevor sie expandiert wurde.
In dem Manifest können Sie das Layout im Attribut layout
sehen:
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 identifizieren
Sie können ein Manifest anhand seiner eindeutigen ID im Format manifest-TIMESTAMP
identifizieren. Beispiel:
manifest-1436393348324
Gewöhnlich können Sie die Manifest-ID beziehen, wenn Sie Informationen über die korrespondierende Bereitstellung abrufen oder wenn Sie Manifeste für eine Bereitstellung auflisten.
gcloud
Verwenden Sie in der Google Cloud CLI den Unterbefehl deployments describe
:
gcloud deployment-manager deployments describe example-deployment
gcloud
gibt eine Antwort ähnlich der folgenden zurück:
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
Stellen Sie in der API eine GET
-Anfrage und geben Sie den Namen der Bereitstellung in der Anfrage an.
GET https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment-with-config
Sie sollten eine Antwort ähnlich der folgenden erhalten:
{ "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" }
Manifest aufrufen
Sie können ein Manifest aufrufen, indem Sie eine get()
-Anfrage an ein Manifest senden
Ressource oder über die Google Cloud Console oder gcloud
.
Console
So rufen Sie das Manifest einer Bereitstellung in der Google Cloud Console auf:
- Rufen Sie in der Google Cloud Console die Seite Deployments auf.
- Klicken Sie in der Liste auf die Bereitstellung, die Sie aufrufen möchten.
- Klicken Sie in den Details der Bereitstellung auf Übersicht.
gcloud
Sehen Sie sich mit der Google Cloud CLI das vollständige Manifest an. Verwenden Sie dazu den Befehl
manifests describe
-Befehl. Dieser Befehl listet sowohl das vollständige Manifest als auch das Layout des Manifests auf.
gcloud deployment-manager manifests describe manifest-1436393348324 \
--deployment example-config-with-templates
gcloud
gibt eine Antwort ähnlich der folgenden zurück:
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
Geben Sie in der API den Namen der Bereitstellung und den Namen des Manifests in einer GET
-Anfrage ein:
GET https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment/manifests/manifest-1436393348324
Sie sollten eine Antwort ähnlich der folgenden erhalten:
{ "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" }