<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">Google Container Engine API</a> . <a href="container_v1beta1.projects.html">projects</a> . <a href="container_v1beta1.projects.zones.html">zones</a> . <a href="container_v1beta1.projects.zones.clusters.html">clusters</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(projectId, zoneId, body)</a></code></p>
<p class="firstline">Creates a cluster, consisting of the specified number and type of Google Compute Engine instances, plus a Kubernetes master instance.</p>
<p class="toc_element">
  <code><a href="#delete">delete(projectId, zoneId, clusterId)</a></code></p>
<p class="firstline">Deletes the cluster, including the Kubernetes master and all worker nodes.</p>
<p class="toc_element">
  <code><a href="#get">get(projectId, zoneId, clusterId)</a></code></p>
<p class="firstline">Gets a specific cluster.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, zoneId)</a></code></p>
<p class="firstline">Lists all clusters owned by a project in the specified zone.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(projectId, zoneId, body)</code>
  <pre>Creates a cluster, consisting of the specified number and type of Google Compute Engine instances, plus a Kubernetes master instance.

The cluster is created in the project's default network.

A firewall is added that allows traffic into port 443 on the master, which enables HTTPS. A firewall and a route is added for each node to allow the containers on that node to communicate with all other instances in the cluster.

Finally, an entry is added to the project's global metadata indicating which CIDR range is being used by the cluster.

Args:
  projectId: string, The Google Developers Console project ID or  project number. (required)
  zoneId: string, The name of the Google Compute Engine zone in which the cluster resides. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "cluster": { # A cluster resource.
      "status": "A String", # [Output only] The current status of this cluster.
      "containerIpv4Cidr": "A String", # The IP address range of the container pods in this cluster, in  CIDR notation (e.g. 10.96.0.0/14). Leave blank to have one automatically chosen or specify a /14 block in 10.0.0.0/8 or 172.16.0.0/12.
      "description": "A String", # An optional description of this cluster.
      "name": "A String", # The name of this cluster. The name must be unique within this project and zone, and can be up to 40 characters with the following restrictions:
          # - Lowercase letters, numbers, and hyphens only.
          # - Must start with a letter.
          # - Must end with a number or a letter.
      "numNodes": 42, # The number of nodes to create in this cluster. You must ensure that your Compute Engine resource quota is sufficient for this number of instances plus one (to include the master). You must also have available firewall and routes quota.
      "nodeRoutingPrefixSize": 42, # [Output only] The size of the address space on each node for hosting containers.
      "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this cluster.
        "A String",
      ],
      "masterAuth": { # The authentication information for accessing the master. Authentication is either done using HTTP basic authentication or using a bearer token. # The authentication information for accessing the master.
        "bearerToken": "A String", # The token used to authenticate API requests to the master. The token is to be included in an HTTP Authorization Header in all requests to the master endpoint. The format of the header is: "Authorization: Bearer ".
        "clientKey": "A String", # [Output only] Base64 encoded private key used by clients to authenticate to the cluster endpoint.
        "clientCertificate": "A String", # [Output only] Base64 encoded public certificate used by clients to authenticate to the cluster endpoint.
        "user": "A String", # The username to use for HTTP basic authentication when accessing the Kubernetes master endpoint.
        "password": "A String", # The password to use for HTTP basic authentication when accessing the Kubernetes master endpoint. Because the master endpoint is open to the internet, you should create a strong password.
        "clusterCaCertificate": "A String", # [Output only] Base64 encoded public certificate that is the root of trust for the cluster.
      },
      "clusterApiVersion": "A String", # The API version of the Kubernetes master and kubelets running in this cluster. Leave blank to pick up the latest stable release, or specify a version of the form "x.y.z". The Google Container Engine release notes lists the currently supported versions. If an incorrect version is specified, the server returns an error listing the currently supported versions.
      "network": "A String", # The name of the Google Compute Engine network to which the cluster is connected.
      "zone": "A String", # [Output only] The name of the Google Compute Engine zone in which the cluster resides.
      "endpoint": "A String", # [Output only] The IP address of this cluster's Kubernetes master. The endpoint can be accessed from the internet at https://username:password@endpoint/.
          #
          # See the masterAuth property of this resource for username and password information.
      "nodeConfig": { # The machine type and image to use for all nodes in this cluster. See the descriptions of the child properties of nodeConfig.
        "serviceAccounts": [ # The optional list of ServiceAccounts, each with their specified scopes, to be made available on all of the node VMs. In addition to the service accounts and scopes specified, the "default" account will always be created with the following scopes to ensure the correct functioning of the cluster:
            # - https://www.googleapis.com/auth/compute,
            # - https://www.googleapis.com/auth/devstorage.read_only
          { # A Compute Engine service account.
            "scopes": [ # The list of scopes to be made available for this service account.
              "A String",
            ],
            "email": "A String", # Email address of the service account.
          },
        ],
        "machineType": "A String", # The name of a Google Compute Engine machine type (e.g. n1-standard-1).
            #
            # If unspecified, the default machine type is n1-standard-1.
        "sourceImage": "A String", # The fully-specified name of a Google Compute Engine image. For example: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/backports-debian-7-wheezy-vYYYYMMDD (where YYYMMDD is the version date).
            #
            # If specifying an image, you are responsible for ensuring its compatibility with the Debian 7 backports image. We recommend leaving this field blank to accept the default backports-debian-7-wheezy value.
      },
      "statusMessage": "A String", # [Output only] Additional information about the current status of this cluster, if available.
      "servicesIpv4Cidr": "A String", # [Output only] The IP address range of the Kubernetes services in this cluster, in  CIDR notation (e.g. 1.2.3.4/29). Service addresses are typically put in the last /16 from the container CIDR.
      "creationTimestamp": "A String", # [Output only] The time the cluster was created, in RFC3339 text format.
      "enableCloudLogging": True or False, # Whether logs from the cluster should be made available via the Google Cloud Logging service. This includes both logs from your applications running in the cluster as well as logs from the Kubernetes components themselves.
      "selfLink": "A String", # [Output only] Server-defined URL for the resource.
      "enableCloudMonitoring": True or False, # Whether metrics from the cluster should be made available via the Google Cloud Monitoring service.
    },
  }


Returns:
  An object of the form:

    { # Defines the operation resource. All fields are output only.
    "status": "A String", # The current status of the operation.
    "name": "A String", # The server-assigned ID for the operation.
    "zone": "A String", # The name of the Google Compute Engine zone in which the operation is taking place.
    "errorMessage": "A String", # If an error has occurred, a textual description of the error.
    "targetLink": "A String", # Server-defined URL for the target of the operation.
    "operationType": "A String", # The operation type.
    "selfLink": "A String", # Server-defined URL for the resource.
    "target": "A String", # [Optional] The URL of the cluster resource that this operation is associated with.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(projectId, zoneId, clusterId)</code>
  <pre>Deletes the cluster, including the Kubernetes master and all worker nodes.

Firewalls and routes that were configured at cluster creation are also deleted.

Args:
  projectId: string, The Google Developers Console project ID or  project number. (required)
  zoneId: string, The name of the Google Compute Engine zone in which the cluster resides. (required)
  clusterId: string, The name of the cluster to delete. (required)

Returns:
  An object of the form:

    { # Defines the operation resource. All fields are output only.
    "status": "A String", # The current status of the operation.
    "name": "A String", # The server-assigned ID for the operation.
    "zone": "A String", # The name of the Google Compute Engine zone in which the operation is taking place.
    "errorMessage": "A String", # If an error has occurred, a textual description of the error.
    "targetLink": "A String", # Server-defined URL for the target of the operation.
    "operationType": "A String", # The operation type.
    "selfLink": "A String", # Server-defined URL for the resource.
    "target": "A String", # [Optional] The URL of the cluster resource that this operation is associated with.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(projectId, zoneId, clusterId)</code>
  <pre>Gets a specific cluster.

Args:
  projectId: string, The Google Developers Console project ID or  project number. (required)
  zoneId: string, The name of the Google Compute Engine zone in which the cluster resides. (required)
  clusterId: string, The name of the cluster to retrieve. (required)

Returns:
  An object of the form:

    {
    "status": "A String", # [Output only] The current status of this cluster.
    "containerIpv4Cidr": "A String", # The IP address range of the container pods in this cluster, in  CIDR notation (e.g. 10.96.0.0/14). Leave blank to have one automatically chosen or specify a /14 block in 10.0.0.0/8 or 172.16.0.0/12.
    "description": "A String", # An optional description of this cluster.
    "name": "A String", # The name of this cluster. The name must be unique within this project and zone, and can be up to 40 characters with the following restrictions:
        # - Lowercase letters, numbers, and hyphens only.
        # - Must start with a letter.
        # - Must end with a number or a letter.
    "numNodes": 42, # The number of nodes to create in this cluster. You must ensure that your Compute Engine resource quota is sufficient for this number of instances plus one (to include the master). You must also have available firewall and routes quota.
    "nodeRoutingPrefixSize": 42, # [Output only] The size of the address space on each node for hosting containers.
    "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this cluster.
      "A String",
    ],
    "masterAuth": { # The authentication information for accessing the master. Authentication is either done using HTTP basic authentication or using a bearer token. # The authentication information for accessing the master.
      "bearerToken": "A String", # The token used to authenticate API requests to the master. The token is to be included in an HTTP Authorization Header in all requests to the master endpoint. The format of the header is: "Authorization: Bearer ".
      "clientKey": "A String", # [Output only] Base64 encoded private key used by clients to authenticate to the cluster endpoint.
      "clientCertificate": "A String", # [Output only] Base64 encoded public certificate used by clients to authenticate to the cluster endpoint.
      "user": "A String", # The username to use for HTTP basic authentication when accessing the Kubernetes master endpoint.
      "password": "A String", # The password to use for HTTP basic authentication when accessing the Kubernetes master endpoint. Because the master endpoint is open to the internet, you should create a strong password.
      "clusterCaCertificate": "A String", # [Output only] Base64 encoded public certificate that is the root of trust for the cluster.
    },
    "clusterApiVersion": "A String", # The API version of the Kubernetes master and kubelets running in this cluster. Leave blank to pick up the latest stable release, or specify a version of the form "x.y.z". The Google Container Engine release notes lists the currently supported versions. If an incorrect version is specified, the server returns an error listing the currently supported versions.
    "network": "A String", # The name of the Google Compute Engine network to which the cluster is connected.
    "zone": "A String", # [Output only] The name of the Google Compute Engine zone in which the cluster resides.
    "endpoint": "A String", # [Output only] The IP address of this cluster's Kubernetes master. The endpoint can be accessed from the internet at https://username:password@endpoint/.
        #
        # See the masterAuth property of this resource for username and password information.
    "nodeConfig": { # The machine type and image to use for all nodes in this cluster. See the descriptions of the child properties of nodeConfig.
      "serviceAccounts": [ # The optional list of ServiceAccounts, each with their specified scopes, to be made available on all of the node VMs. In addition to the service accounts and scopes specified, the "default" account will always be created with the following scopes to ensure the correct functioning of the cluster:
          # - https://www.googleapis.com/auth/compute,
          # - https://www.googleapis.com/auth/devstorage.read_only
        { # A Compute Engine service account.
          "scopes": [ # The list of scopes to be made available for this service account.
            "A String",
          ],
          "email": "A String", # Email address of the service account.
        },
      ],
      "machineType": "A String", # The name of a Google Compute Engine machine type (e.g. n1-standard-1).
          #
          # If unspecified, the default machine type is n1-standard-1.
      "sourceImage": "A String", # The fully-specified name of a Google Compute Engine image. For example: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/backports-debian-7-wheezy-vYYYYMMDD (where YYYMMDD is the version date).
          #
          # If specifying an image, you are responsible for ensuring its compatibility with the Debian 7 backports image. We recommend leaving this field blank to accept the default backports-debian-7-wheezy value.
    },
    "statusMessage": "A String", # [Output only] Additional information about the current status of this cluster, if available.
    "servicesIpv4Cidr": "A String", # [Output only] The IP address range of the Kubernetes services in this cluster, in  CIDR notation (e.g. 1.2.3.4/29). Service addresses are typically put in the last /16 from the container CIDR.
    "creationTimestamp": "A String", # [Output only] The time the cluster was created, in RFC3339 text format.
    "enableCloudLogging": True or False, # Whether logs from the cluster should be made available via the Google Cloud Logging service. This includes both logs from your applications running in the cluster as well as logs from the Kubernetes components themselves.
    "selfLink": "A String", # [Output only] Server-defined URL for the resource.
    "enableCloudMonitoring": True or False, # Whether metrics from the cluster should be made available via the Google Cloud Monitoring service.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, zoneId)</code>
  <pre>Lists all clusters owned by a project in the specified zone.

Args:
  projectId: string, The Google Developers Console project ID or  project number. (required)
  zoneId: string, The name of the Google Compute Engine zone in which the cluster resides. (required)

Returns:
  An object of the form:

    {
    "clusters": [ # A list of clusters in the project in the specified zone.
      {
        "status": "A String", # [Output only] The current status of this cluster.
        "containerIpv4Cidr": "A String", # The IP address range of the container pods in this cluster, in  CIDR notation (e.g. 10.96.0.0/14). Leave blank to have one automatically chosen or specify a /14 block in 10.0.0.0/8 or 172.16.0.0/12.
        "description": "A String", # An optional description of this cluster.
        "name": "A String", # The name of this cluster. The name must be unique within this project and zone, and can be up to 40 characters with the following restrictions:
            # - Lowercase letters, numbers, and hyphens only.
            # - Must start with a letter.
            # - Must end with a number or a letter.
        "numNodes": 42, # The number of nodes to create in this cluster. You must ensure that your Compute Engine resource quota is sufficient for this number of instances plus one (to include the master). You must also have available firewall and routes quota.
        "nodeRoutingPrefixSize": 42, # [Output only] The size of the address space on each node for hosting containers.
        "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this cluster.
          "A String",
        ],
        "masterAuth": { # The authentication information for accessing the master. Authentication is either done using HTTP basic authentication or using a bearer token. # The authentication information for accessing the master.
          "bearerToken": "A String", # The token used to authenticate API requests to the master. The token is to be included in an HTTP Authorization Header in all requests to the master endpoint. The format of the header is: "Authorization: Bearer ".
          "clientKey": "A String", # [Output only] Base64 encoded private key used by clients to authenticate to the cluster endpoint.
          "clientCertificate": "A String", # [Output only] Base64 encoded public certificate used by clients to authenticate to the cluster endpoint.
          "user": "A String", # The username to use for HTTP basic authentication when accessing the Kubernetes master endpoint.
          "password": "A String", # The password to use for HTTP basic authentication when accessing the Kubernetes master endpoint. Because the master endpoint is open to the internet, you should create a strong password.
          "clusterCaCertificate": "A String", # [Output only] Base64 encoded public certificate that is the root of trust for the cluster.
        },
        "clusterApiVersion": "A String", # The API version of the Kubernetes master and kubelets running in this cluster. Leave blank to pick up the latest stable release, or specify a version of the form "x.y.z". The Google Container Engine release notes lists the currently supported versions. If an incorrect version is specified, the server returns an error listing the currently supported versions.
        "network": "A String", # The name of the Google Compute Engine network to which the cluster is connected.
        "zone": "A String", # [Output only] The name of the Google Compute Engine zone in which the cluster resides.
        "endpoint": "A String", # [Output only] The IP address of this cluster's Kubernetes master. The endpoint can be accessed from the internet at https://username:password@endpoint/.
            #
            # See the masterAuth property of this resource for username and password information.
        "nodeConfig": { # The machine type and image to use for all nodes in this cluster. See the descriptions of the child properties of nodeConfig.
          "serviceAccounts": [ # The optional list of ServiceAccounts, each with their specified scopes, to be made available on all of the node VMs. In addition to the service accounts and scopes specified, the "default" account will always be created with the following scopes to ensure the correct functioning of the cluster:
              # - https://www.googleapis.com/auth/compute,
              # - https://www.googleapis.com/auth/devstorage.read_only
            { # A Compute Engine service account.
              "scopes": [ # The list of scopes to be made available for this service account.
                "A String",
              ],
              "email": "A String", # Email address of the service account.
            },
          ],
          "machineType": "A String", # The name of a Google Compute Engine machine type (e.g. n1-standard-1).
              #
              # If unspecified, the default machine type is n1-standard-1.
          "sourceImage": "A String", # The fully-specified name of a Google Compute Engine image. For example: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/backports-debian-7-wheezy-vYYYYMMDD (where YYYMMDD is the version date).
              #
              # If specifying an image, you are responsible for ensuring its compatibility with the Debian 7 backports image. We recommend leaving this field blank to accept the default backports-debian-7-wheezy value.
        },
        "statusMessage": "A String", # [Output only] Additional information about the current status of this cluster, if available.
        "servicesIpv4Cidr": "A String", # [Output only] The IP address range of the Kubernetes services in this cluster, in  CIDR notation (e.g. 1.2.3.4/29). Service addresses are typically put in the last /16 from the container CIDR.
        "creationTimestamp": "A String", # [Output only] The time the cluster was created, in RFC3339 text format.
        "enableCloudLogging": True or False, # Whether logs from the cluster should be made available via the Google Cloud Logging service. This includes both logs from your applications running in the cluster as well as logs from the Kubernetes components themselves.
        "selfLink": "A String", # [Output only] Server-defined URL for the resource.
        "enableCloudMonitoring": True or False, # Whether metrics from the cluster should be made available via the Google Cloud Monitoring service.
      },
    ],
  }</pre>
</div>

</body></html>