<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="container_v1beta1.html">Kubernetes Engine API</a> . <a href="container_v1beta1.projects.html">projects</a> . <a href="container_v1beta1.projects.locations.html">locations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="container_v1beta1.projects.locations.clusters.html">clusters()</a></code>
</p>
<p class="firstline">Returns the clusters Resource.</p>

<p class="toc_element">
  <code><a href="container_v1beta1.projects.locations.operations.html">operations()</a></code>
</p>
<p class="firstline">Returns the operations Resource.</p>

<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="#getServerConfig">getServerConfig(name, projectId=None, zone=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns configuration info about the Google Kubernetes Engine service.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, x__xgafv=None)</a></code></p>
<p class="firstline">Fetches locations that offer Google Kubernetes Engine.</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="getServerConfig">getServerConfig(name, projectId=None, zone=None, x__xgafv=None)</code>
  <pre>Returns configuration info about the Google Kubernetes Engine service.

Args:
  name: string, The name (project and location) of the server config to get, specified in the format `projects/*/locations/*`. (required)
  projectId: string, Required. Deprecated. The Google Developers Console [project ID or project number](https://support.google.com/cloud/answer/6158840). This field has been deprecated and replaced by the name field.
  zone: string, Required. Deprecated. The name of the Google Compute Engine [zone](https://cloud.google.com/compute/docs/zones#available) to return operations for. This field has been deprecated and replaced by the name field.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Kubernetes Engine service configuration.
    &quot;validNodeVersions&quot;: [ # List of valid node upgrade target versions, in descending order.
      &quot;A String&quot;,
    ],
    &quot;validMasterVersions&quot;: [ # List of valid master versions, in descending order.
      &quot;A String&quot;,
    ],
    &quot;validImageTypes&quot;: [ # List of valid image types.
      &quot;A String&quot;,
    ],
    &quot;defaultClusterVersion&quot;: &quot;A String&quot;, # Version of Kubernetes the service deploys by default.
    &quot;channels&quot;: [ # List of release channel configurations.
      { # ReleaseChannelConfig exposes configuration for a release channel.
        &quot;defaultVersion&quot;: &quot;A String&quot;, # The default version for newly created clusters on the channel.
        &quot;validVersions&quot;: [ # List of valid versions for the channel.
          &quot;A String&quot;,
        ],
        &quot;availableVersions&quot;: [ # Deprecated. This field has been deprecated and replaced with the valid_versions field.
          { # Deprecated.
            &quot;version&quot;: &quot;A String&quot;, # Kubernetes version.
            &quot;reason&quot;: &quot;A String&quot;, # Reason for availability.
          },
        ],
        &quot;channel&quot;: &quot;A String&quot;, # The release channel this configuration applies to.
      },
    ],
    &quot;defaultImageType&quot;: &quot;A String&quot;, # Default image type.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, x__xgafv=None)</code>
  <pre>Fetches locations that offer Google Kubernetes Engine.

Args:
  parent: string, Required. Contains the name of the resource requested. Specified in the format `projects/*`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # ListLocationsResponse returns the list of all GKE locations and their recommendation state.
    &quot;locations&quot;: [ # A full list of GKE locations.
      { # Location returns the location name, and if the location is recommended for GKE cluster scheduling.
        &quot;type&quot;: &quot;A String&quot;, # Contains the type of location this Location is for. Regional or Zonal.
        &quot;name&quot;: &quot;A String&quot;, # Contains the name of the resource requested. Specified in the format `projects/*/locations/*`.
        &quot;recommended&quot;: True or False, # Whether the location is recomended for GKE cluster scheduling.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Only return ListLocationsResponse that occur after the page_token. This value should be populated from the ListLocationsResponse.next_page_token if that response token was set (which happens when listing more Locations than fit in a single ListLocationsResponse).
  }</pre>
</div>

</body></html>