Viewing a Manifest

Each deployment has a corresponding manifest. A manifest is a read-only property that describes all the resources in your deployment and is automatically created with each new deployment. Manifests are not modifiable after they have been created. A manifest is not the same as a configuration file, but is created based on the configuration file.

Before you begin

Manifest structure

A manifest provides three views of a deployment:

  • The initial configuration
  • The fully-evaluated configuration after all templates and imports have been expanded
  • The layout of the deployment, which describes all the resources for the deployment in a hierarchical structure.

Original configuration

The original configuration is the configuration you provided to the deployment, before any template expansion. The initial configuration is indicated by the config property:

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 

Expanded configuration

The expanded configuration is a full description of your deployment, including all resources and their properties, after processing all your templates. This is the final state of your configuration.

The expanded configuration portion of your manifest is indicated by the expandedConfig property:

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

Imported templates

The imports property in your manifest shows the content of any templates you imported for this configuration. The imports section of your manifest is indicated by the imports section:

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

The layout is an outline of your deployment and its resources, and shows the resource names and types.

Use the layout to visualize the structure of your deployment, view template properties that were set during the initial deployment, and other information about your configuration before it was expanded.

In your manifest, you can see the layout in the layout property:

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 

Identify a manifest

You can identify a manifest by its unique ID, in the format manifest-TIMESTAMP. For example:

manifest-1436393348324 

Usually, you can get the manifest ID by getting information about the corresponding deployment, or by listing manifests for a deployment.

gcloud

With the Google Cloud CLI, use the deployments describe sub-command:

gcloud deployment-manager deployments describe example-deployment 

gcloud returns a response similar to the following:

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

In the API, make a GET request, providing the deployment name in the request:

GET https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment-with-config 

You should receive a response similar to the following:

{ "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" }

View a manifest

You can view a manifest by making a get() request to a Manifest resource or through the Google Cloud console or gcloud.

Console

To view a manifest of a deployment in the Google Cloud console:

  1. Go to the Deployments page in the Google Cloud console.
  2. From the list, click the deployment that you want to view.
  3. In the deployment's details, click Overview.

gcloud

With the Google Cloud CLI, view the full manifest using the manifests describe command. The command lists both the full manifest and the layout:

gcloud deployment-manager manifests describe manifest-1436393348324 \ --deployment example-config-with-templates 

gcloud returns a response similar to the following:

 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

In the API, provide the deployment name and the manifest name in a GET request:

 GET https://www.googleapis.com/deploymentmanager/v2beta1/projects/myproject/global/deployments/example-deployment/manifests/manifest-1436393348324 

You should receive a response similar to the following:

{  "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" }