<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="deploymentmanager_alpha.html">Cloud Deployment Manager V2 API</a> . <a href="deploymentmanager_alpha.resources.html">resources</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(project, deployment, resource, x__xgafv=None)</a></code></p>
<p class="firstline">Gets information about a single resource.</p>
<p class="toc_element">
  <code><a href="#list">list(project, deployment, filter=None, maxResults=None, orderBy=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all resources in a given deployment.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(project, deployment, resource, x__xgafv=None)</code>
  <pre>Gets information about a single resource.

Args:
  project: string, The project ID for this request. (required)
  deployment: string, The name of the deployment for this request. (required)
  resource: string, The name of the resource for this request. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;accessControl&quot;: { # The access controls set on the resource. # The Access Control Policy set on this resource.
    &quot;gcpIamPolicy&quot;: &quot;A String&quot;, # The GCP IAM Policy to set on the resource.
  },
  &quot;finalProperties&quot;: &quot;A String&quot;, # Output only. The evaluated properties of the resource with references expanded. Returned as serialized YAML.
  &quot;id&quot;: &quot;A String&quot;,
  &quot;insertTime&quot;: &quot;A String&quot;, # Output only. Creation timestamp in RFC3339 text format.
  &quot;lastUsedCredential&quot;: { # The credential used by Deployment Manager and TypeProvider. Only one of the options is permitted. # Output only. The last used credential that successfully created/updated the resource.
    &quot;basicAuth&quot;: { # Basic Auth used as a credential. # Basic Auth Credential, only used by TypeProvider.
      &quot;password&quot;: &quot;A String&quot;,
      &quot;user&quot;: &quot;A String&quot;,
    },
    &quot;serviceAccount&quot;: { # Service Account used as a credential. # Service Account Credential, only used by Deployment.
      &quot;email&quot;: &quot;A String&quot;, # The IAM service account email address like test@myproject.iam.gserviceaccount.com
    },
    &quot;useProjectDefault&quot;: True or False, # Specify to use the project default credential, only supported by Deployment.
  },
  &quot;manifest&quot;: &quot;A String&quot;, # Output only. URL of the manifest representing the current configuration of this resource.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The name of the resource as it appears in the YAML config.
  &quot;properties&quot;: &quot;A String&quot;, # Output only. The current properties of the resource before any references have been filled in. Returned as serialized YAML.
  &quot;runtimePolicies&quot;: [ # Output only. In case this is an action, it will show the runtimePolicies on which this action will run in the deployment
    &quot;A String&quot;,
  ],
  &quot;type&quot;: &quot;A String&quot;, # Output only. The type of the resource, for example `compute.v1.instance`, or `cloudfunctions.v1beta1.function`.
  &quot;update&quot;: { # Output only. If Deployment Manager is currently updating or previewing an update to this resource, the updated configuration appears here.
    &quot;accessControl&quot;: { # The access controls set on the resource. # The Access Control Policy to set on this resource after updating the resource itself.
      &quot;gcpIamPolicy&quot;: &quot;A String&quot;, # The GCP IAM Policy to set on the resource.
    },
    &quot;credential&quot;: { # The credential used by Deployment Manager and TypeProvider. Only one of the options is permitted. # Output only. The credential that will be used creating/updating this resource.
      &quot;basicAuth&quot;: { # Basic Auth used as a credential. # Basic Auth Credential, only used by TypeProvider.
        &quot;password&quot;: &quot;A String&quot;,
        &quot;user&quot;: &quot;A String&quot;,
      },
      &quot;serviceAccount&quot;: { # Service Account used as a credential. # Service Account Credential, only used by Deployment.
        &quot;email&quot;: &quot;A String&quot;, # The IAM service account email address like test@myproject.iam.gserviceaccount.com
      },
      &quot;useProjectDefault&quot;: True or False, # Specify to use the project default credential, only supported by Deployment.
    },
    &quot;error&quot;: { # Output only. If errors are generated during update of the resource, this field will be populated.
      &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
        {
          &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
          &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
          &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
        },
      ],
    },
    &quot;finalProperties&quot;: &quot;A String&quot;, # Output only. The expanded properties of the resource with reference values expanded. Returned as serialized YAML.
    &quot;intent&quot;: &quot;A String&quot;, # Output only. The intent of the resource: `PREVIEW`, `UPDATE`, or `CANCEL`.
    &quot;manifest&quot;: &quot;A String&quot;, # Output only. URL of the manifest representing the update configuration of this resource.
    &quot;properties&quot;: &quot;A String&quot;, # Output only. The set of updated properties for this resource, before references are expanded. Returned as serialized YAML.
    &quot;runtimePolicies&quot;: [ # Output only. In case this is an action, it will show the runtimePolicies that this action will have after updating the deployment.
      &quot;A String&quot;,
    ],
    &quot;state&quot;: &quot;A String&quot;, # Output only. The state of the resource.
    &quot;warnings&quot;: [ # Output only. If warning messages are generated during processing of this resource, this field will be populated.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example: &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
          {
            &quot;key&quot;: &quot;A String&quot;, # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
            &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
          },
        ],
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
      },
    ],
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Update timestamp in RFC3339 text format.
  &quot;url&quot;: &quot;A String&quot;, # Output only. The URL of the actual resource.
  &quot;warnings&quot;: [ # Output only. If warning messages are generated during processing of this resource, this field will be populated.
    {
      &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
      &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example: &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
        {
          &quot;key&quot;: &quot;A String&quot;, # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(project, deployment, filter=None, maxResults=None, orderBy=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists all resources in a given deployment.

Args:
  project: string, The project ID for this request. (required)
  deployment: string, The name of the deployment for this request. (required)
  filter: string, A filter expression that filters resources listed in the response. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either `=`, `!=`, `&gt;`, or `&lt;`. For example, if you are filtering Compute Engine instances, you can exclude instances named `example-instance` by specifying `name != example-instance`. You can also filter nested fields. For example, you could specify `scheduling.automaticRestart = false` to include instances only if they are not scheduled for automatic restarts. You can use filtering on nested fields to filter based on resource labels. To filter on multiple expressions, provide each separate expression within parentheses. For example: ``` (scheduling.automaticRestart = true) (cpuPlatform = &quot;Intel Skylake&quot;) ``` By default, each expression is an `AND` expression. However, you can include `AND` and `OR` expressions explicitly. For example: ``` (cpuPlatform = &quot;Intel Skylake&quot;) OR (cpuPlatform = &quot;Intel Broadwell&quot;) AND (scheduling.automaticRestart = true) ```
  maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than `maxResults`, Compute Engine returns a `nextPageToken` that can be used to get the next page of results in subsequent list requests. Acceptable values are `0` to `500`, inclusive. (Default: `500`)
  orderBy: string, Sorts list results by a certain order. By default, results are returned in alphanumerical order based on the resource name. You can also sort results in descending order based on the creation timestamp using `orderBy=&quot;creationTimestamp desc&quot;`. This sorts results based on the `creationTimestamp` field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first. Currently, only sorting by `name` or `creationTimestamp desc` is supported.
  pageToken: string, Specifies a page token to use. Set `pageToken` to the `nextPageToken` returned by a previous list request to get the next page of results.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A response containing a partial list of resources and a page token used to build the next request if the request has been truncated.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token used to continue a truncated list request.
  &quot;resources&quot;: [ # Resources contained in this list response.
    {
      &quot;accessControl&quot;: { # The access controls set on the resource. # The Access Control Policy set on this resource.
        &quot;gcpIamPolicy&quot;: &quot;A String&quot;, # The GCP IAM Policy to set on the resource.
      },
      &quot;finalProperties&quot;: &quot;A String&quot;, # Output only. The evaluated properties of the resource with references expanded. Returned as serialized YAML.
      &quot;id&quot;: &quot;A String&quot;,
      &quot;insertTime&quot;: &quot;A String&quot;, # Output only. Creation timestamp in RFC3339 text format.
      &quot;lastUsedCredential&quot;: { # The credential used by Deployment Manager and TypeProvider. Only one of the options is permitted. # Output only. The last used credential that successfully created/updated the resource.
        &quot;basicAuth&quot;: { # Basic Auth used as a credential. # Basic Auth Credential, only used by TypeProvider.
          &quot;password&quot;: &quot;A String&quot;,
          &quot;user&quot;: &quot;A String&quot;,
        },
        &quot;serviceAccount&quot;: { # Service Account used as a credential. # Service Account Credential, only used by Deployment.
          &quot;email&quot;: &quot;A String&quot;, # The IAM service account email address like test@myproject.iam.gserviceaccount.com
        },
        &quot;useProjectDefault&quot;: True or False, # Specify to use the project default credential, only supported by Deployment.
      },
      &quot;manifest&quot;: &quot;A String&quot;, # Output only. URL of the manifest representing the current configuration of this resource.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The name of the resource as it appears in the YAML config.
      &quot;properties&quot;: &quot;A String&quot;, # Output only. The current properties of the resource before any references have been filled in. Returned as serialized YAML.
      &quot;runtimePolicies&quot;: [ # Output only. In case this is an action, it will show the runtimePolicies on which this action will run in the deployment
        &quot;A String&quot;,
      ],
      &quot;type&quot;: &quot;A String&quot;, # Output only. The type of the resource, for example `compute.v1.instance`, or `cloudfunctions.v1beta1.function`.
      &quot;update&quot;: { # Output only. If Deployment Manager is currently updating or previewing an update to this resource, the updated configuration appears here.
        &quot;accessControl&quot;: { # The access controls set on the resource. # The Access Control Policy to set on this resource after updating the resource itself.
          &quot;gcpIamPolicy&quot;: &quot;A String&quot;, # The GCP IAM Policy to set on the resource.
        },
        &quot;credential&quot;: { # The credential used by Deployment Manager and TypeProvider. Only one of the options is permitted. # Output only. The credential that will be used creating/updating this resource.
          &quot;basicAuth&quot;: { # Basic Auth used as a credential. # Basic Auth Credential, only used by TypeProvider.
            &quot;password&quot;: &quot;A String&quot;,
            &quot;user&quot;: &quot;A String&quot;,
          },
          &quot;serviceAccount&quot;: { # Service Account used as a credential. # Service Account Credential, only used by Deployment.
            &quot;email&quot;: &quot;A String&quot;, # The IAM service account email address like test@myproject.iam.gserviceaccount.com
          },
          &quot;useProjectDefault&quot;: True or False, # Specify to use the project default credential, only supported by Deployment.
        },
        &quot;error&quot;: { # Output only. If errors are generated during update of the resource, this field will be populated.
          &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
            {
              &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
              &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
              &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
            },
          ],
        },
        &quot;finalProperties&quot;: &quot;A String&quot;, # Output only. The expanded properties of the resource with reference values expanded. Returned as serialized YAML.
        &quot;intent&quot;: &quot;A String&quot;, # Output only. The intent of the resource: `PREVIEW`, `UPDATE`, or `CANCEL`.
        &quot;manifest&quot;: &quot;A String&quot;, # Output only. URL of the manifest representing the update configuration of this resource.
        &quot;properties&quot;: &quot;A String&quot;, # Output only. The set of updated properties for this resource, before references are expanded. Returned as serialized YAML.
        &quot;runtimePolicies&quot;: [ # Output only. In case this is an action, it will show the runtimePolicies that this action will have after updating the deployment.
          &quot;A String&quot;,
        ],
        &quot;state&quot;: &quot;A String&quot;, # Output only. The state of the resource.
        &quot;warnings&quot;: [ # Output only. If warning messages are generated during processing of this resource, this field will be populated.
          {
            &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
            &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example: &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
              {
                &quot;key&quot;: &quot;A String&quot;, # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
                &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
              },
            ],
            &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
          },
        ],
      },
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Update timestamp in RFC3339 text format.
      &quot;url&quot;: &quot;A String&quot;, # Output only. The URL of the actual resource.
      &quot;warnings&quot;: [ # Output only. If warning messages are generated during processing of this resource, this field will be populated.
        {
          &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
          &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example: &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
            {
              &quot;key&quot;: &quot;A String&quot;, # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
              &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
            },
          ],
          &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
        },
      ],
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>