<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="spanner_v1.html">Cloud Spanner API</a> . <a href="spanner_v1.projects.html">projects</a> . <a href="spanner_v1.projects.instanceConfigs.html">instanceConfigs</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets information about a particular instance configuration.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, x__xgafv=None, pageSize=None)</a></code></p>
<p class="firstline">Lists the supported instance configurations for a given project.</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(name, x__xgafv=None)</code>
  <pre>Gets information about a particular instance configuration.

Args:
  name: string, Required. The name of the requested instance configuration. Values are of
the form `projects/<project>/instanceConfigs/<config>`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A possible configuration for a Cloud Spanner instance. Configurations
      # define the geographic placement of nodes and their replication.
    "displayName": "A String", # The name of this instance configuration as it appears in UIs.
    "name": "A String", # A unique identifier for the instance configuration.  Values
        # are of the form
        # `projects/<project>/instanceConfigs/a-z*`
    "replicas": [ # The geographic placement of nodes in this instance configuration and their
        # replication properties.
      {
        "defaultLeaderLocation": True or False, # If true, this location is designated as the default leader location where
            # leader replicas are placed. See the [region types
            # documentation](https://cloud.google.com/spanner/docs/instances#region_types)
            # for more details.
        "type": "A String", # The type of replica.
        "location": "A String", # The location of the serving resources, e.g. "us-central1".
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, x__xgafv=None, pageSize=None)</code>
  <pre>Lists the supported instance configurations for a given project.

Args:
  parent: string, Required. The name of the project for which a list of supported instance
configurations is requested. Values are of the form
`projects/<project>`. (required)
  pageToken: string, If non-empty, `page_token` should contain a
next_page_token
from a previous ListInstanceConfigsResponse.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  pageSize: integer, Number of instance configurations to be returned in the response. If 0 or
less, defaults to the server's maximum allowed page size.

Returns:
  An object of the form:

    { # The response for ListInstanceConfigs.
    "nextPageToken": "A String", # `next_page_token` can be sent in a subsequent
        # ListInstanceConfigs call to
        # fetch more of the matching instance configurations.
    "instanceConfigs": [ # The list of requested instance configurations.
      { # A possible configuration for a Cloud Spanner instance. Configurations
          # define the geographic placement of nodes and their replication.
        "displayName": "A String", # The name of this instance configuration as it appears in UIs.
        "name": "A String", # A unique identifier for the instance configuration.  Values
            # are of the form
            # `projects/<project>/instanceConfigs/a-z*`
        "replicas": [ # The geographic placement of nodes in this instance configuration and their
            # replication properties.
          {
            "defaultLeaderLocation": True or False, # If true, this location is designated as the default leader location where
                # leader replicas are placed. See the [region types
                # documentation](https://cloud.google.com/spanner/docs/instances#region_types)
                # for more details.
            "type": "A String", # The type of replica.
            "location": "A String", # The location of the serving resources, e.g. "us-central1".
          },
        ],
      },
    ],
  }</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>