Ogni deployment ha un manifest corrispondente. Un manifest è una proprietà di sola lettura che descrive tutte le risorse del deployment e viene creato automaticamente con ogni nuovo deployment. I manifest non possono essere modificati dopo la creazione. Un manifest non è uguale a un file di configurazione, ma viene creato in base al file di configurazione.
Prima di iniziare
- Se vuoi utilizzare gli esempi di riga di comando in questa guida, installa lo strumento a riga di comando `gcloud`.
- Se vuoi utilizzare gli esempi di API in questa guida, configura l'accesso alle API.
- Informazioni sulle configurazioni.
- Informazioni sui modelli.
- Informazioni su come creare una configurazione.
Struttura del manifest
Un manifest fornisce tre visualizzazioni di un deployment:
- La configurazione iniziale
- La configurazione completamente valutata dopo l'espansione di tutti i modelli e le importazioni
- Il layout del deployment, che descrive tutte le risorse del deployment in una struttura gerarchica.
Configurazione originale
La configurazione originale è la configurazione che hai fornito al deployment, prima di qualsiasi espansione del modello. La configurazione iniziale è indicata dalla proprietà 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
Configurazione espansa
La configurazione espansa è una descrizione completa del deployment, incluse tutte le risorse e le relative proprietà, dopo l'elaborazione di tutti i modelli. Questo è lo stato finale della configurazione.
La parte della configurazione espansa del manifest è indicata dalla proprietà 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
Modelli importati
La proprietà imports nel manifest mostra i contenuti di tutti i modelli importati per questa configurazione. La sezione delle importazioni del manifest è indicata dalla sezione 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
Il layout è una struttura del deployment e delle relative risorse e mostra i nomi e i tipi di risorse.
Utilizza il layout per visualizzare la struttura del deployment, visualizzare le proprietà del modello impostate durante il deployment iniziale e altre informazioni sulla configurazione prima dell'espansione.
Nel manifest, puoi visualizzare il layout nella proprietà 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
Identificare un manifest
Puoi identificare un manifest in base al suo ID univoco, nel formato manifest-TIMESTAMP. Ad esempio:
manifest-1436393348324
In genere, puoi ottenere l'ID del manifest recuperando le informazioni sul deployment corrispondente o elencando i manifest per un deployment.
gcloud
Con Google Cloud CLI, utilizza il sottocomando deployments describe:
gcloud deployment-manager deployments describe example-deployment
gcloud restituisce una risposta simile alla seguente:
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
Nell'API, invia una richiesta GET fornendo il nome del deployment nella richiesta:
GET https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment-with-config
Dovresti ricevere una risposta simile alla seguente:
{
"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"
}Visualizzare un manifest
Puoi visualizzare un manifest inviando una get() richiesta a una risorsa Manifest
o tramite Google Cloud console o gcloud.
Console
Per visualizzare un manifest di un deployment nella Google Cloud console:
- Vai alla pagina Deployment nella Google Cloud console.
- Nell'elenco, fai clic sul deployment che vuoi visualizzare.
- Nei dettagli del deployment, fai clic su Panoramica.
gcloud
Con Google Cloud CLI, visualizza il manifest completo utilizzando il
manifests describe comando. Il comando elenca sia il manifest completo
sia il layout:
gcloud deployment-manager manifests describe manifest-1436393348324 \
--deployment example-config-with-templates
gcloud restituisce una risposta simile alla seguente:
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
Nell'API, fornisci il nome del deployment e il nome del manifest in una richiesta GET:
GET https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment/manifests/manifest-1436393348324
Dovresti ricevere una risposta simile alla seguente:
{ "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" }