<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="compute_alpha.html">Compute Engine API</a> . <a href="compute_alpha.httpHealthChecks.html">httpHealthChecks</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(project, httpHealthCheck, requestId=None)</a></code></p>
<p class="firstline">Deletes the specified HttpHealthCheck resource.</p>
<p class="toc_element">
  <code><a href="#get">get(project, httpHealthCheck)</a></code></p>
<p class="firstline">Returns the specified HttpHealthCheck resource. Get a list of available HTTP health checks by making a list() request.</p>
<p class="toc_element">
  <code><a href="#insert">insert(project, body, requestId=None)</a></code></p>
<p class="firstline">Creates a HttpHealthCheck resource in the specified project using the data included in the request.</p>
<p class="toc_element">
  <code><a href="#list">list(project, orderBy=None, maxResults=None, pageToken=None, filter=None)</a></code></p>
<p class="firstline">Retrieves the list of HttpHealthCheck resources available to the specified 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>
<p class="toc_element">
  <code><a href="#patch">patch(project, httpHealthCheck, body, requestId=None)</a></code></p>
<p class="firstline">Updates a HttpHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(project, resource, body)</a></code></p>
<p class="firstline">Returns permissions that a caller has on the specified resource.</p>
<p class="toc_element">
  <code><a href="#update">update(project, httpHealthCheck, body, requestId=None)</a></code></p>
<p class="firstline">Updates a HttpHealthCheck resource in the specified project using the data included in the request.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(project, httpHealthCheck, requestId=None)</code>
  <pre>Deletes the specified HttpHealthCheck resource.

Args:
  project: string, Project ID for this request. (required)
  httpHealthCheck: string, Name of the HttpHealthCheck resource to delete. (required)
  requestId: string, begin_interface: MixerMutationRequestBuilder Request ID to support idempotency.

Returns:
  An object of the form:

    { # An Operation resource, used to manage asynchronous API requests.
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] Reserved for future use.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(project, httpHealthCheck)</code>
  <pre>Returns the specified HttpHealthCheck resource. Get a list of available HTTP health checks by making a list() request.

Args:
  project: string, Project ID for this request. (required)
  httpHealthCheck: string, Name of the HttpHealthCheck resource to return. (required)

Returns:
  An object of the form:

    { # An HttpHealthCheck resource. This resource defines a template for how individual instances should be checked for health, via HTTP.
      "kind": "compute#httpHealthCheck", # [Output Only] Type of the resource. Always compute#httpHealthCheck for HTTP health checks.
      "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
      "timeoutSec": 42, # How long (in seconds) to wait before claiming failure. The default value is 5 seconds. It is invalid for timeoutSec to have greater value than checkIntervalSec.
      "checkIntervalSec": 42, # How often (in seconds) to send a health check. The default value is 5 seconds.
      "port": 42, # The TCP port number for the HTTP health check request. The default value is 80.
      "healthyThreshold": 42, # A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2.
      "host": "A String", # The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.
      "requestPath": "A String", # The request path of the HTTP health check request. The default value is /.
      "unhealthyThreshold": 42, # A so-far healthy instance will be marked unhealthy after this many consecutive failures. The default value is 2.
      "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
      "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
      "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
      "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(project, body, requestId=None)</code>
  <pre>Creates a HttpHealthCheck resource in the specified project using the data included in the request.

Args:
  project: string, Project ID for this request. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # An HttpHealthCheck resource. This resource defines a template for how individual instances should be checked for health, via HTTP.
    "kind": "compute#httpHealthCheck", # [Output Only] Type of the resource. Always compute#httpHealthCheck for HTTP health checks.
    "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
    "timeoutSec": 42, # How long (in seconds) to wait before claiming failure. The default value is 5 seconds. It is invalid for timeoutSec to have greater value than checkIntervalSec.
    "checkIntervalSec": 42, # How often (in seconds) to send a health check. The default value is 5 seconds.
    "port": 42, # The TCP port number for the HTTP health check request. The default value is 80.
    "healthyThreshold": 42, # A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2.
    "host": "A String", # The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.
    "requestPath": "A String", # The request path of the HTTP health check request. The default value is /.
    "unhealthyThreshold": 42, # A so-far healthy instance will be marked unhealthy after this many consecutive failures. The default value is 2.
    "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
  }

  requestId: string, begin_interface: MixerMutationRequestBuilder Request ID to support idempotency.

Returns:
  An object of the form:

    { # An Operation resource, used to manage asynchronous API requests.
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] Reserved for future use.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(project, orderBy=None, maxResults=None, pageToken=None, filter=None)</code>
  <pre>Retrieves the list of HttpHealthCheck resources available to the specified project.

Args:
  project: string, Project ID 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, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: field_name comparison_string literal_string.

The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.

For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.

You can filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.

To filter on multiple expressions, provide each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.

Returns:
  An object of the form:

    { # Contains a list of HttpHealthCheck resources.
    "nextPageToken": "A String", # [Output Only] This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.
    "items": [ # A list of HttpHealthCheck resources.
      { # An HttpHealthCheck resource. This resource defines a template for how individual instances should be checked for health, via HTTP.
          "kind": "compute#httpHealthCheck", # [Output Only] Type of the resource. Always compute#httpHealthCheck for HTTP health checks.
          "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
          "timeoutSec": 42, # How long (in seconds) to wait before claiming failure. The default value is 5 seconds. It is invalid for timeoutSec to have greater value than checkIntervalSec.
          "checkIntervalSec": 42, # How often (in seconds) to send a health check. The default value is 5 seconds.
          "port": 42, # The TCP port number for the HTTP health check request. The default value is 80.
          "healthyThreshold": 42, # A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2.
          "host": "A String", # The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.
          "requestPath": "A String", # The request path of the HTTP health check request. The default value is /.
          "unhealthyThreshold": 42, # A so-far healthy instance will be marked unhealthy after this many consecutive failures. The default value is 2.
          "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
          "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
          "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
          "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
        },
    ],
    "kind": "compute#httpHealthCheckList", # Type of resource.
    "id": "A String", # [Output Only] Unique identifier for the resource. Defined by the server.
    "selfLink": "A String", # [Output Only] Server-defined URL for this resource.
  }</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(project, httpHealthCheck, body, requestId=None)</code>
  <pre>Updates a HttpHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics.

Args:
  project: string, Project ID for this request. (required)
  httpHealthCheck: string, Name of the HttpHealthCheck resource to patch. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # An HttpHealthCheck resource. This resource defines a template for how individual instances should be checked for health, via HTTP.
    "kind": "compute#httpHealthCheck", # [Output Only] Type of the resource. Always compute#httpHealthCheck for HTTP health checks.
    "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
    "timeoutSec": 42, # How long (in seconds) to wait before claiming failure. The default value is 5 seconds. It is invalid for timeoutSec to have greater value than checkIntervalSec.
    "checkIntervalSec": 42, # How often (in seconds) to send a health check. The default value is 5 seconds.
    "port": 42, # The TCP port number for the HTTP health check request. The default value is 80.
    "healthyThreshold": 42, # A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2.
    "host": "A String", # The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.
    "requestPath": "A String", # The request path of the HTTP health check request. The default value is /.
    "unhealthyThreshold": 42, # A so-far healthy instance will be marked unhealthy after this many consecutive failures. The default value is 2.
    "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
  }

  requestId: string, begin_interface: MixerMutationRequestBuilder Request ID to support idempotency.

Returns:
  An object of the form:

    { # An Operation resource, used to manage asynchronous API requests.
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] Reserved for future use.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

<div class="method">
    <code class="details" id="testIamPermissions">testIamPermissions(project, resource, body)</code>
  <pre>Returns permissions that a caller has on the specified resource.

Args:
  project: string, Project ID for this request. (required)
  resource: string, Name of the resource for this request. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "permissions": [ # The set of permissions to check for the 'resource'. Permissions with wildcards (such as '*' or 'storage.*') are not allowed.
      "A String",
    ],
  }


Returns:
  An object of the form:

    {
    "permissions": [ # A subset of `TestPermissionsRequest.permissions` that the caller is allowed.
      "A String",
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(project, httpHealthCheck, body, requestId=None)</code>
  <pre>Updates a HttpHealthCheck resource in the specified project using the data included in the request.

Args:
  project: string, Project ID for this request. (required)
  httpHealthCheck: string, Name of the HttpHealthCheck resource to update. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # An HttpHealthCheck resource. This resource defines a template for how individual instances should be checked for health, via HTTP.
    "kind": "compute#httpHealthCheck", # [Output Only] Type of the resource. Always compute#httpHealthCheck for HTTP health checks.
    "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
    "timeoutSec": 42, # How long (in seconds) to wait before claiming failure. The default value is 5 seconds. It is invalid for timeoutSec to have greater value than checkIntervalSec.
    "checkIntervalSec": 42, # How often (in seconds) to send a health check. The default value is 5 seconds.
    "port": 42, # The TCP port number for the HTTP health check request. The default value is 80.
    "healthyThreshold": 42, # A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2.
    "host": "A String", # The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.
    "requestPath": "A String", # The request path of the HTTP health check request. The default value is /.
    "unhealthyThreshold": 42, # A so-far healthy instance will be marked unhealthy after this many consecutive failures. The default value is 2.
    "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
  }

  requestId: string, begin_interface: MixerMutationRequestBuilder Request ID to support idempotency.

Returns:
  An object of the form:

    { # An Operation resource, used to manage asynchronous API requests.
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] Reserved for future use.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

</body></html>