<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">Google Cloud Deployment Manager Alpha API</a> . <a href="deploymentmanager_alpha.manifests.html">manifests</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(project, deployment, manifest)</a></code></p>
<p class="firstline">Gets information about a specific manifest.</p>
<p class="toc_element">
  <code><a href="#list">list(project, deployment, orderBy=None, maxResults=None, pageToken=None, filter=None)</a></code></p>
<p class="firstline">Lists all manifests for 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="get">get(project, deployment, manifest)</code>
  <pre>Gets information about a specific manifest.

Args:
  project: string, The project ID for this request. (required)
  deployment: string, The name of the deployment for this request. (required)
  manifest: string, The name of the manifest for this request. (required)

Returns:
  An object of the form:

    {
    "layout": "A String", # Output only. The YAML layout for this manifest.
    "name": "A String", # Output only.
        #
        # The name of the manifest.
    "expandedConfig": "A String", # Output only. The fully-expanded configuration file, including any templates and references.
    "imports": [ # Output only. The imported files for this manifest.
      {
        "content": "A String", # The contents of the file.
        "name": "A String", # The name of the file.
      },
    ],
    "insertTime": "A String", # Output only. Creation timestamp in RFC3339 text format.
    "config": { # Output only. The YAML configuration for this manifest.
      "content": "A String", # The contents of the file.
    },
    "id": "A String",
    "selfLink": "A String", # Output only. Self link for the manifest.
  }</pre>
</div>

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

Args:
  project: string, The project ID for this request. (required)
  deployment: string, The name of the deployment for this request. (required)
  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="creationTimestamp desc". 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.
  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)
  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.
  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 =, !=, >, or <.

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 = "Intel Skylake"). By default, each expression is an AND expression. However, you can include AND and OR expressions explicitly. For example, (cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND (scheduling.automaticRestart = true).

Returns:
  An object of the form:

    { # A response containing a partial list of manifests and a page token used to build the next request if the request has been truncated.
    "nextPageToken": "A String", # Output only. A token used to continue a truncated list request.
    "manifests": [ # Output only. Manifests contained in this list response.
      {
        "layout": "A String", # Output only. The YAML layout for this manifest.
        "name": "A String", # Output only.
            #
            # The name of the manifest.
        "expandedConfig": "A String", # Output only. The fully-expanded configuration file, including any templates and references.
        "imports": [ # Output only. The imported files for this manifest.
          {
            "content": "A String", # The contents of the file.
            "name": "A String", # The name of the file.
          },
        ],
        "insertTime": "A String", # Output only. Creation timestamp in RFC3339 text format.
        "config": { # Output only. The YAML configuration for this manifest.
          "content": "A String", # The contents of the file.
        },
        "id": "A String",
        "selfLink": "A String", # Output only. Self link for the manifest.
      },
    ],
  }</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 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>