<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="redis_v1.html">Google Cloud Memorystore for Redis API</a> . <a href="redis_v1.projects.html">projects</a> . <a href="redis_v1.projects.locations.html">locations</a> . <a href="redis_v1.projects.locations.instances.html">instances</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body, instanceId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a Redis instance based on the specified tier and memory size.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a specific Redis instance.  Instance stops serving and data is</p>
<p class="toc_element">
  <code><a href="#export">export(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Export Redis instance data into a Redis RDB format file in Cloud Storage.</p>
<p class="toc_element">
  <code><a href="#failover">failover(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Initiates a failover of the master node to current replica node for a</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the details of a specific Redis instance.</p>
<p class="toc_element">
  <code><a href="#import_">import_(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Import a Redis RDB snapshot file from Cloud Storage into a Redis instance.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all Redis instances owned by a project in either the specified</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>
<p class="toc_element">
  <code><a href="#patch">patch(name, body, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the metadata and configuration of a specific Redis instance.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body, instanceId=None, x__xgafv=None)</code>
  <pre>Creates a Redis instance based on the specified tier and memory size.

By default, the instance is accessible from the project's
[default network](/compute/docs/networks-and-firewalls#networks).

The creation is executed asynchronously and callers may check the returned
operation to track its progress. Once the operation is completed the Redis
instance will be fully functional. Completed longrunning.Operation will
contain the new instance object in the response field.

The returned operation is automatically deleted after a few hours, so there
is no need to call DeleteOperation.

Args:
  parent: string, Required. The resource name of the instance location using the form:
    `projects/{project_id}/locations/{location_id}`
where `location_id` refers to a GCP region. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A Google Cloud Redis instance.
  "labels": { # Resource labels to represent user provided metadata
    "a_key": "A String",
  },
  "displayName": "A String", # An arbitrary and optional user-provided name for the instance.
  "name": "A String", # Required. Unique name of the resource in this scope including project and
      # location using the form:
      #     `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
      # 
      # Note: Redis instances are managed and addressed at regional level so
      # location_id here refers to a GCP region; however, users may choose which
      # specific zone (or collection of zones for cross-zone instances) an instance
      # should be provisioned in. Refer to [location_id] and
      # [alternative_location_id] fields for more details.
  "alternativeLocationId": "A String", # Optional. Only applicable to STANDARD_HA tier which protects the instance
      # against zonal failures by provisioning it across two zones. If provided, it
      # must be a different zone from the one provided in [location_id].
  "currentLocationId": "A String", # Output only. The current zone where the Redis endpoint is placed. For Basic
      # Tier instances, this will always be the same as the [location_id]
      # provided by the user at creation time. For Standard Tier instances,
      # this can be either [location_id] or [alternative_location_id] and can
      # change after a failover event.
  "reservedIpRange": "A String", # Optional. The CIDR range of internal addresses that are reserved for this
      # instance. If not provided, the service will choose an unused /29 block,
      # for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique
      # and non-overlapping with existing subnets in an authorized network.
  "redisVersion": "A String", # Optional. The version of Redis software.
      # If not provided, latest supported version will be used. Updating the
      # version will perform an upgrade/downgrade to the new version. Currently,
      # the supported values are `REDIS_3_2` for Redis 3.2.
  "state": "A String", # Output only. The current state of this instance.
  "createTime": "A String", # Output only. The time the instance was created.
  "memorySizeGb": 42, # Required. Redis memory size in GiB.
  "host": "A String", # Output only. Hostname or IP address of the exposed Redis endpoint used by
      # clients to connect to the service.
  "persistenceIamIdentity": "A String", # Output only. Cloud IAM identity used by import / export operations to
      # transfer data to/from Cloud Storage. Format is
      # "serviceAccount:<service_account_email>". The value may change over time
      # for a given instance so should be checked before each import/export
      # operation.
  "authorizedNetwork": "A String", # Optional. The full name of the Google Compute Engine
      # [network](/compute/docs/networks-and-firewalls#networks) to which the
      # instance is connected. If left unspecified, the `default` network
      # will be used.
  "redisConfigs": { # Optional. Redis configuration parameters, according to
      # http://redis.io/topics/config. Currently, the only supported parameters
      # are:
      # 
      #  *   maxmemory-policy
      #  *   notify-keyspace-events
    "a_key": "A String",
  },
  "tier": "A String", # Required. The service tier of the instance.
  "locationId": "A String", # Optional. The zone where the instance will be provisioned. If not provided,
      # the service will choose a zone for the instance. For STANDARD_HA tier,
      # instances will be created across two zones for protection against zonal
      # failures. If [alternative_location_id] is also provided, it must be
      # different from [location_id].
  "port": 42, # Output only. The port number of the exposed Redis endpoint.
  "statusMessage": "A String", # Output only. Additional information about the current status of this
      # instance, if available.
}

  instanceId: string, Required. The logical name of the Redis instance in the customer project
with the following restrictions:

* Must contain only lowercase letters, numbers, and hyphens.
* Must start with a letter.
* Must be between 1-40 characters.
* Must end with a number or a letter.
* Must be unique within the customer project / location
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # {
        #
        # `createTime`: The time the operation was created.
        #
        # `endTime`: The time the operation finished running.
        #
        # `target`: Server-defined resource path for the target of the operation.
        #
        # `verb`: Name of the verb executed by the operation.
        #
        # `statusDetail`: Human-readable status of the operation, if any.
        #
        # `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
        #
        # `apiVersion`: API version used to start the operation.
        #
        # }
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a specific Redis instance.  Instance stops serving and data is
deleted.

Args:
  name: string, Required. Redis instance resource name using the form:
    `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
where `location_id` refers to a GCP region. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # {
        #
        # `createTime`: The time the operation was created.
        #
        # `endTime`: The time the operation finished running.
        #
        # `target`: Server-defined resource path for the target of the operation.
        #
        # `verb`: Name of the verb executed by the operation.
        #
        # `statusDetail`: Human-readable status of the operation, if any.
        #
        # `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
        #
        # `apiVersion`: API version used to start the operation.
        #
        # }
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="export">export(name, body, x__xgafv=None)</code>
  <pre>Export Redis instance data into a Redis RDB format file in Cloud Storage.

Redis will continue serving during this operation.

The returned operation is automatically deleted after a few hours, so
there is no need to call DeleteOperation.

Args:
  name: string, Required. Redis instance resource name using the form:
    `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
where `location_id` refers to a GCP region. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request for Export.
    "outputConfig": { # The output content # Required. Specify data to be exported.
      "gcsDestination": { # The Cloud Storage location for the output content # Google Cloud Storage destination for output content.
        "uri": "A String", # Required. Data destination URI (e.g.
            # 'gs://my_bucket/my_object'). Existing files will be overwritten.
      },
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # {
        #
        # `createTime`: The time the operation was created.
        #
        # `endTime`: The time the operation finished running.
        #
        # `target`: Server-defined resource path for the target of the operation.
        #
        # `verb`: Name of the verb executed by the operation.
        #
        # `statusDetail`: Human-readable status of the operation, if any.
        #
        # `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
        #
        # `apiVersion`: API version used to start the operation.
        #
        # }
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="failover">failover(name, body, x__xgafv=None)</code>
  <pre>Initiates a failover of the master node to current replica node for a
specific STANDARD tier Cloud Memorystore for Redis instance.

Args:
  name: string, Required. Redis instance resource name using the form:
    `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
where `location_id` refers to a GCP region. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request for Failover.
    "dataProtectionMode": "A String", # Optional. Available data protection modes that the user can choose. If it's
        # unspecified, data protection mode will be LIMITED_DATA_LOSS by default.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # {
        #
        # `createTime`: The time the operation was created.
        #
        # `endTime`: The time the operation finished running.
        #
        # `target`: Server-defined resource path for the target of the operation.
        #
        # `verb`: Name of the verb executed by the operation.
        #
        # `statusDetail`: Human-readable status of the operation, if any.
        #
        # `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
        #
        # `apiVersion`: API version used to start the operation.
        #
        # }
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets the details of a specific Redis instance.

Args:
  name: string, Required. Redis instance resource name using the form:
    `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
where `location_id` refers to a GCP region. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Google Cloud Redis instance.
    "labels": { # Resource labels to represent user provided metadata
      "a_key": "A String",
    },
    "displayName": "A String", # An arbitrary and optional user-provided name for the instance.
    "name": "A String", # Required. Unique name of the resource in this scope including project and
        # location using the form:
        #     `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
        #
        # Note: Redis instances are managed and addressed at regional level so
        # location_id here refers to a GCP region; however, users may choose which
        # specific zone (or collection of zones for cross-zone instances) an instance
        # should be provisioned in. Refer to [location_id] and
        # [alternative_location_id] fields for more details.
    "alternativeLocationId": "A String", # Optional. Only applicable to STANDARD_HA tier which protects the instance
        # against zonal failures by provisioning it across two zones. If provided, it
        # must be a different zone from the one provided in [location_id].
    "currentLocationId": "A String", # Output only. The current zone where the Redis endpoint is placed. For Basic
        # Tier instances, this will always be the same as the [location_id]
        # provided by the user at creation time. For Standard Tier instances,
        # this can be either [location_id] or [alternative_location_id] and can
        # change after a failover event.
    "reservedIpRange": "A String", # Optional. The CIDR range of internal addresses that are reserved for this
        # instance. If not provided, the service will choose an unused /29 block,
        # for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique
        # and non-overlapping with existing subnets in an authorized network.
    "redisVersion": "A String", # Optional. The version of Redis software.
        # If not provided, latest supported version will be used. Updating the
        # version will perform an upgrade/downgrade to the new version. Currently,
        # the supported values are `REDIS_3_2` for Redis 3.2.
    "state": "A String", # Output only. The current state of this instance.
    "createTime": "A String", # Output only. The time the instance was created.
    "memorySizeGb": 42, # Required. Redis memory size in GiB.
    "host": "A String", # Output only. Hostname or IP address of the exposed Redis endpoint used by
        # clients to connect to the service.
    "persistenceIamIdentity": "A String", # Output only. Cloud IAM identity used by import / export operations to
        # transfer data to/from Cloud Storage. Format is
        # "serviceAccount:<service_account_email>". The value may change over time
        # for a given instance so should be checked before each import/export
        # operation.
    "authorizedNetwork": "A String", # Optional. The full name of the Google Compute Engine
        # [network](/compute/docs/networks-and-firewalls#networks) to which the
        # instance is connected. If left unspecified, the `default` network
        # will be used.
    "redisConfigs": { # Optional. Redis configuration parameters, according to
        # http://redis.io/topics/config. Currently, the only supported parameters
        # are:
        #
        #  *   maxmemory-policy
        #  *   notify-keyspace-events
      "a_key": "A String",
    },
    "tier": "A String", # Required. The service tier of the instance.
    "locationId": "A String", # Optional. The zone where the instance will be provisioned. If not provided,
        # the service will choose a zone for the instance. For STANDARD_HA tier,
        # instances will be created across two zones for protection against zonal
        # failures. If [alternative_location_id] is also provided, it must be
        # different from [location_id].
    "port": 42, # Output only. The port number of the exposed Redis endpoint.
    "statusMessage": "A String", # Output only. Additional information about the current status of this
        # instance, if available.
  }</pre>
</div>

<div class="method">
    <code class="details" id="import_">import_(name, body, x__xgafv=None)</code>
  <pre>Import a Redis RDB snapshot file from Cloud Storage into a Redis instance.

Redis may stop serving during this operation. Instance state will be
IMPORTING for entire operation. When complete, the instance will contain
only data from the imported file.

The returned operation is automatically deleted after a few hours, so
there is no need to call DeleteOperation.

Args:
  name: string, Required. Redis instance resource name using the form:
    `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
where `location_id` refers to a GCP region. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request for Import.
    "inputConfig": { # The input content # Required. Specify data to be imported.
      "gcsSource": { # The Cloud Storage location for the input content # Google Cloud Storage location where input content is located.
        "uri": "A String", # Required. Source data URI. (e.g. 'gs://my_bucket/my_object').
      },
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # {
        #
        # `createTime`: The time the operation was created.
        #
        # `endTime`: The time the operation finished running.
        #
        # `target`: Server-defined resource path for the target of the operation.
        #
        # `verb`: Name of the verb executed by the operation.
        #
        # `statusDetail`: Human-readable status of the operation, if any.
        #
        # `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
        #
        # `apiVersion`: API version used to start the operation.
        #
        # }
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists all Redis instances owned by a project in either the specified
location (region) or all locations.

The location should have the following format:
* `projects/{project_id}/locations/{location_id}`

If `location_id` is specified as `-` (wildcard), then all regions
available to the project are queried, and the results are aggregated.

Args:
  parent: string, Required. The resource name of the instance location using the form:
    `projects/{project_id}/locations/{location_id}`
where `location_id` refers to a GCP region. (required)
  pageSize: integer, The maximum number of items to return.

If not specified, a default value of 1000 will be used by the service.
Regardless of the page_size value, the response may include a partial list
and a caller should only rely on response's
next_page_token
to determine if there are more instances left to be queried.
  pageToken: string, The next_page_token value returned from a previous List request,
if any.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for ListInstances.
    "nextPageToken": "A String", # Token to retrieve the next page of results, or empty if there are no more
        # results in the list.
    "unreachable": [ # Locations that could not be reached.
      "A String",
    ],
    "instances": [ # A list of Redis instances in the project in the specified location,
        # or across all locations.
        #
        # If the `location_id` in the parent field of the request is "-", all regions
        # available to the project are queried, and the results aggregated.
        # If in such an aggregated query a location is unavailable, a dummy Redis
        # entry is included in the response with the "name" field set to a value of
        # the form projects/{project_id}/locations/{location_id}/instances/- and the
        # "status" field set to ERROR and "status_message" field set to "location not
        # available for ListInstances".
      { # A Google Cloud Redis instance.
        "labels": { # Resource labels to represent user provided metadata
          "a_key": "A String",
        },
        "displayName": "A String", # An arbitrary and optional user-provided name for the instance.
        "name": "A String", # Required. Unique name of the resource in this scope including project and
            # location using the form:
            #     `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
            #
            # Note: Redis instances are managed and addressed at regional level so
            # location_id here refers to a GCP region; however, users may choose which
            # specific zone (or collection of zones for cross-zone instances) an instance
            # should be provisioned in. Refer to [location_id] and
            # [alternative_location_id] fields for more details.
        "alternativeLocationId": "A String", # Optional. Only applicable to STANDARD_HA tier which protects the instance
            # against zonal failures by provisioning it across two zones. If provided, it
            # must be a different zone from the one provided in [location_id].
        "currentLocationId": "A String", # Output only. The current zone where the Redis endpoint is placed. For Basic
            # Tier instances, this will always be the same as the [location_id]
            # provided by the user at creation time. For Standard Tier instances,
            # this can be either [location_id] or [alternative_location_id] and can
            # change after a failover event.
        "reservedIpRange": "A String", # Optional. The CIDR range of internal addresses that are reserved for this
            # instance. If not provided, the service will choose an unused /29 block,
            # for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique
            # and non-overlapping with existing subnets in an authorized network.
        "redisVersion": "A String", # Optional. The version of Redis software.
            # If not provided, latest supported version will be used. Updating the
            # version will perform an upgrade/downgrade to the new version. Currently,
            # the supported values are `REDIS_3_2` for Redis 3.2.
        "state": "A String", # Output only. The current state of this instance.
        "createTime": "A String", # Output only. The time the instance was created.
        "memorySizeGb": 42, # Required. Redis memory size in GiB.
        "host": "A String", # Output only. Hostname or IP address of the exposed Redis endpoint used by
            # clients to connect to the service.
        "persistenceIamIdentity": "A String", # Output only. Cloud IAM identity used by import / export operations to
            # transfer data to/from Cloud Storage. Format is
            # "serviceAccount:<service_account_email>". The value may change over time
            # for a given instance so should be checked before each import/export
            # operation.
        "authorizedNetwork": "A String", # Optional. The full name of the Google Compute Engine
            # [network](/compute/docs/networks-and-firewalls#networks) to which the
            # instance is connected. If left unspecified, the `default` network
            # will be used.
        "redisConfigs": { # Optional. Redis configuration parameters, according to
            # http://redis.io/topics/config. Currently, the only supported parameters
            # are:
            #
            #  *   maxmemory-policy
            #  *   notify-keyspace-events
          "a_key": "A String",
        },
        "tier": "A String", # Required. The service tier of the instance.
        "locationId": "A String", # Optional. The zone where the instance will be provisioned. If not provided,
            # the service will choose a zone for the instance. For STANDARD_HA tier,
            # instances will be created across two zones for protection against zonal
            # failures. If [alternative_location_id] is also provided, it must be
            # different from [location_id].
        "port": 42, # Output only. The port number of the exposed Redis endpoint.
        "statusMessage": "A String", # Output only. Additional information about the current status of this
            # instance, if available.
      },
    ],
  }</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>

<div class="method">
    <code class="details" id="patch">patch(name, body, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the metadata and configuration of a specific Redis instance.

Completed longrunning.Operation will contain the new instance object
in the response field. The returned operation is automatically deleted
after a few hours, so there is no need to call DeleteOperation.

Args:
  name: string, Required. Unique name of the resource in this scope including project and
location using the form:
    `projects/{project_id}/locations/{location_id}/instances/{instance_id}`

Note: Redis instances are managed and addressed at regional level so
location_id here refers to a GCP region; however, users may choose which
specific zone (or collection of zones for cross-zone instances) an instance
should be provisioned in. Refer to [location_id] and
[alternative_location_id] fields for more details. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A Google Cloud Redis instance.
  "labels": { # Resource labels to represent user provided metadata
    "a_key": "A String",
  },
  "displayName": "A String", # An arbitrary and optional user-provided name for the instance.
  "name": "A String", # Required. Unique name of the resource in this scope including project and
      # location using the form:
      #     `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
      # 
      # Note: Redis instances are managed and addressed at regional level so
      # location_id here refers to a GCP region; however, users may choose which
      # specific zone (or collection of zones for cross-zone instances) an instance
      # should be provisioned in. Refer to [location_id] and
      # [alternative_location_id] fields for more details.
  "alternativeLocationId": "A String", # Optional. Only applicable to STANDARD_HA tier which protects the instance
      # against zonal failures by provisioning it across two zones. If provided, it
      # must be a different zone from the one provided in [location_id].
  "currentLocationId": "A String", # Output only. The current zone where the Redis endpoint is placed. For Basic
      # Tier instances, this will always be the same as the [location_id]
      # provided by the user at creation time. For Standard Tier instances,
      # this can be either [location_id] or [alternative_location_id] and can
      # change after a failover event.
  "reservedIpRange": "A String", # Optional. The CIDR range of internal addresses that are reserved for this
      # instance. If not provided, the service will choose an unused /29 block,
      # for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique
      # and non-overlapping with existing subnets in an authorized network.
  "redisVersion": "A String", # Optional. The version of Redis software.
      # If not provided, latest supported version will be used. Updating the
      # version will perform an upgrade/downgrade to the new version. Currently,
      # the supported values are `REDIS_3_2` for Redis 3.2.
  "state": "A String", # Output only. The current state of this instance.
  "createTime": "A String", # Output only. The time the instance was created.
  "memorySizeGb": 42, # Required. Redis memory size in GiB.
  "host": "A String", # Output only. Hostname or IP address of the exposed Redis endpoint used by
      # clients to connect to the service.
  "persistenceIamIdentity": "A String", # Output only. Cloud IAM identity used by import / export operations to
      # transfer data to/from Cloud Storage. Format is
      # "serviceAccount:<service_account_email>". The value may change over time
      # for a given instance so should be checked before each import/export
      # operation.
  "authorizedNetwork": "A String", # Optional. The full name of the Google Compute Engine
      # [network](/compute/docs/networks-and-firewalls#networks) to which the
      # instance is connected. If left unspecified, the `default` network
      # will be used.
  "redisConfigs": { # Optional. Redis configuration parameters, according to
      # http://redis.io/topics/config. Currently, the only supported parameters
      # are:
      # 
      #  *   maxmemory-policy
      #  *   notify-keyspace-events
    "a_key": "A String",
  },
  "tier": "A String", # Required. The service tier of the instance.
  "locationId": "A String", # Optional. The zone where the instance will be provisioned. If not provided,
      # the service will choose a zone for the instance. For STANDARD_HA tier,
      # instances will be created across two zones for protection against zonal
      # failures. If [alternative_location_id] is also provided, it must be
      # different from [location_id].
  "port": 42, # Output only. The port number of the exposed Redis endpoint.
  "statusMessage": "A String", # Output only. Additional information about the current status of this
      # instance, if available.
}

  updateMask: string, Required. Mask of fields to update. At least one path must be supplied in
this field. The elements of the repeated paths field may only include these
fields from Instance:

 *   `displayName`
 *   `labels`
 *   `memorySizeGb`
 *   `redisConfig`
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # {
        #
        # `createTime`: The time the operation was created.
        #
        # `endTime`: The time the operation finished running.
        #
        # `target`: Server-defined resource path for the target of the operation.
        #
        # `verb`: Name of the verb executed by the operation.
        #
        # `statusDetail`: Human-readable status of the operation, if any.
        #
        # `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
        #
        # `apiVersion`: API version used to start the operation.
        #
        # }
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

</body></html>