<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.backendServices.html">backendServices</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#addSignedUrlKey">addSignedUrlKey(project, backendService, body=None, requestId=None)</a></code></p>
<p class="firstline">Adds a key for validating requests with signed URLs for this backend service.</p>
<p class="toc_element">
  <code><a href="#aggregatedList">aggregatedList(project, filter=None, includeAllScopes=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None)</a></code></p>
<p class="firstline">Retrieves the list of all BackendService resources, regional and global, available to the specified project.</p>
<p class="toc_element">
  <code><a href="#aggregatedList_next">aggregatedList_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="#delete">delete(project, backendService, requestId=None)</a></code></p>
<p class="firstline">Deletes the specified BackendService resource.</p>
<p class="toc_element">
  <code><a href="#deleteSignedUrlKey">deleteSignedUrlKey(project, backendService, keyName, requestId=None)</a></code></p>
<p class="firstline">Deletes a key for validating requests with signed URLs for this backend service.</p>
<p class="toc_element">
  <code><a href="#get">get(project, backendService)</a></code></p>
<p class="firstline">Returns the specified BackendService resource. Gets a list of available backend services.</p>
<p class="toc_element">
  <code><a href="#getHealth">getHealth(project, backendService, body=None)</a></code></p>
<p class="firstline">Gets the most recent health check results for this BackendService.</p>
<p class="toc_element">
  <code><a href="#insert">insert(project, body=None, requestId=None)</a></code></p>
<p class="firstline">Creates a BackendService resource in the specified project using the data included in the request. For more information, see  Backend services overview.</p>
<p class="toc_element">
  <code><a href="#list">list(project, filter=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None)</a></code></p>
<p class="firstline">Retrieves the list of BackendService 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, backendService, body=None, requestId=None)</a></code></p>
<p class="firstline">Patches the specified BackendService resource with the data included in the request. For more information, see  Backend services overview. This method supports PATCH semantics and uses the JSON merge patch format and processing rules.</p>
<p class="toc_element">
  <code><a href="#setSecurityPolicy">setSecurityPolicy(project, backendService, body=None, requestId=None)</a></code></p>
<p class="firstline">Sets the security policy for the specified backend service.</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(project, resource, body=None)</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, backendService, body=None, requestId=None)</a></code></p>
<p class="firstline">Updates the specified BackendService resource with the data included in the request. For more information, see Backend services overview.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="addSignedUrlKey">addSignedUrlKey(project, backendService, body=None, requestId=None)</code>
  <pre>Adds a key for validating requests with signed URLs for this backend service.

Args:
  project: string, Project ID for this request. (required)
  backendService: string, Name of the BackendService resource to which the Signed URL Key should be added. The name should conform to RFC1035. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a customer-supplied Signing Key used by Cloud CDN Signed URLs
    &quot;keyName&quot;: &quot;A String&quot;, # Name of the key. 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.
    &quot;keyValue&quot;: &quot;A String&quot;, # 128-bit key value used for signing the URL. The key value must be a valid RFC 4648 Section 5 base64url encoded string.
  }

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # Google Compute Engine has three Operation resources:
      #
      # * [Global](/compute/docs/reference/rest/{$api_version}/globalOperations) * [Regional](/compute/docs/reference/rest/{$api_version}/regionOperations) * [Zonal](/compute/docs/reference/rest/{$api_version}/zoneOperations)
      #
      # You can use an operation resource to manage asynchronous API requests. For more information, read Handling API responses.
      #
      # Operations can be global, regional or zonal.
      # - For global operations, use the `globalOperations` resource.
      # - For regional operations, use the `regionOperations` resource.
      # - For zonal operations, use the `zonalOperations` resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for {$api_version}.globalOperations ==) (== resource_for {$api_version}.regionOperations ==) (== resource_for {$api_version}.zoneOperations ==)
    &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
    &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is set when the operation is created.
    &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
        {
          &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
          &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
          &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
        },
      ],
    },
    &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as `NOT FOUND`.
    &quot;httpErrorStatusCode&quot;: 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.
    &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is defined by the server.
    &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for Operation resources.
    &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
    &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`, `update`, or `delete`, and so on.
    &quot;progress&quot;: 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.
    &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
    &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
    &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the following: `PENDING`, `RUNNING`, or `DONE`.
    &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the operation.
    &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    &quot;targetLink&quot;: &quot;A String&quot;, # [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.
    &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example: `user@example.com`.
    &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example:
            # &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
          {
            &quot;key&quot;: &quot;A String&quot;, # [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).
            &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
          },
        ],
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
      },
    ],
    &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
  }</pre>
</div>

<div class="method">
    <code class="details" id="aggregatedList">aggregatedList(project, filter=None, includeAllScopes=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None)</code>
  <pre>Retrieves the list of all BackendService resources, regional and global, available to the specified project.

Args:
  project: string, Name of the project scoping this request. (required)
  filter: string, A filter expression that filters resources listed in the response. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either `=`, `!=`, `&gt;`, or `&lt;`.

For example, if you are filtering Compute Engine instances, you can exclude instances named `example-instance` by specifying `name != example-instance`.

You can also filter nested fields. For example, you could specify `scheduling.automaticRestart = false` to include instances only if they are not scheduled for automatic restarts. You can use filtering on nested fields to filter based on resource labels.

To filter on multiple expressions, provide each separate expression within parentheses. For example: ``` (scheduling.automaticRestart = true) (cpuPlatform = &quot;Intel Skylake&quot;) ``` By default, each expression is an `AND` expression. However, you can include `AND` and `OR` expressions explicitly. For example: ``` (cpuPlatform = &quot;Intel Skylake&quot;) OR (cpuPlatform = &quot;Intel Broadwell&quot;) AND (scheduling.automaticRestart = true) ```
  includeAllScopes: boolean, Indicates whether every visible scope for each scope type (zone, region, global) should be included in the response. For new resource types added after this field, the flag has no effect as new resource types will always include every visible scope for each scope type in response. For resource types which predate this field, if this flag is omitted or false, only scopes of the scope types where the resource type is expected to be found will be included.
  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`)
  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=&quot;creationTimestamp desc&quot;`. 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.
  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.
  returnPartialSuccess: boolean, Opt-in for partial success behavior which provides partial results in case of failure. The default value is false and the logic is the same as today.

Returns:
  An object of the form:

    { # Contains a list of BackendServicesScopedList.
    &quot;id&quot;: &quot;A String&quot;, # [Output Only] Unique identifier for the resource; defined by the server.
    &quot;items&quot;: { # A list of BackendServicesScopedList resources.
      &quot;a_key&quot;: { # Name of the scope containing this set of BackendServices.
        &quot;backendServices&quot;: [ # A list of BackendServices contained in this scope.
          { # Represents a Backend Service resource.
              #
              # A backend service defines how Google Cloud load balancers distribute traffic. The backend service configuration contains a set of values, such as the protocol used to connect to backends, various distribution and session settings, health checks, and timeouts. These settings provide fine-grained control over how your load balancer behaves. Most of the settings have default values that allow for easy configuration if you need to get started quickly.
              #
              # Backend services in Google Compute Engine can be either regionally or globally scoped.
              #
              # * [Global](/compute/docs/reference/rest/{$api_version}/backendServices) * [Regional](/compute/docs/reference/rest/{$api_version}/regionBackendServices)
              #
              # For more information, see Backend Services.
              #
              # (== resource_for {$api_version}.backendService ==)
            &quot;affinityCookieTtlSec&quot;: 42, # If set to 0, the cookie is non-persistent and lasts only until the end of the browser session (or equivalent). The maximum allowed value is one day (86,400).
            &quot;backends&quot;: [ # The list of backends that serve this BackendService.
              { # Message containing information of one individual backend.
                &quot;balancingMode&quot;: &quot;A String&quot;, # Specifies the balancing mode for the backend.
                    #
                    # When choosing a balancing mode, you need to consider the loadBalancingScheme, and protocol for the backend service, as well as the type of backend (instance group or NEG).
                    #
                    #
                    # - If the load balancing mode is CONNECTION, then the load is spread based on how many concurrent connections the backend can handle.
                    # You can use the CONNECTION balancing mode if the protocol for the backend service is SSL, TCP, or UDP.
                    #
                    # If the loadBalancingScheme for the backend service is EXTERNAL (SSL Proxy and TCP Proxy load balancers), you must also specify exactly one of the following parameters: maxConnections (except for regional managed instance groups), maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
                    #
                    # If the loadBalancingScheme for the backend service is INTERNAL (internal TCP/UDP load balancers), you cannot specify any additional parameters.
                    #
                    # - If the load balancing mode is RATE, the load is spread based on the rate of HTTP requests per second (RPS).
                    # You can use the RATE balancing mode if the protocol for the backend service is HTTP or HTTPS. You must specify exactly one of the following parameters: maxRate (except for regional managed instance groups), maxRatePerInstance, or maxRatePerEndpoint.
                    #
                    # - If the load balancing mode is UTILIZATION, the load is spread based on the backend utilization of instances in an instance group.
                    # You can use the UTILIZATION balancing mode if the loadBalancingScheme of the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED and the backends are instance groups. There are no restrictions on the backend service protocol.
                &quot;capacityScaler&quot;: 3.14, # A multiplier applied to the group&#x27;s maximum servicing capacity (based on UTILIZATION, RATE or CONNECTION). Default value is 1, which means the group will serve up to 100% of its configured capacity (depending on balancingMode). A setting of 0 means the group is completely drained, offering 0% of its available capacity. Valid range is 0.0 and [0.1,1.0]. You cannot configure a setting larger than 0 and smaller than 0.1. You cannot configure a setting of 0 when there is only one backend attached to the backend service.
                    #
                    # This cannot be used for internal load balancing.
                &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
                &quot;failover&quot;: True or False, # This field designates whether this is a failover backend. More than one failover backend can be configured for a given BackendService.
                &quot;group&quot;: &quot;A String&quot;, # The fully-qualified URL of an instance group or network endpoint group (NEG) resource. The type of backend that a backend service supports depends on the backend service&#x27;s loadBalancingScheme.
                    #
                    #
                    # - When the loadBalancingScheme for the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, the backend can be either an instance group or a NEG. The backends on the backend service must be either all instance groups or all NEGs. You cannot mix instance group and NEG backends on the same backend service.
                    #
                    #
                    # - When the loadBalancingScheme for the backend service is INTERNAL, the backend must be an instance group in the same region as the backend service. NEGs are not supported.
                    #
                    # You must use the fully-qualified URL (starting with https://www.googleapis.com/) to specify the instance group or NEG. Partial URLs are not supported.
                &quot;maxConnections&quot;: 42, # Defines a target maximum number of simultaneous connections that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
                    #
                    # Not available if the backend&#x27;s balancingMode is RATE. If the loadBalancingScheme is INTERNAL, then maxConnections is not supported, even though the backend requires a balancing mode of CONNECTION.
                &quot;maxConnectionsPerEndpoint&quot;: 42, # Defines a target maximum number of simultaneous connections for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a maximum number of target maximum simultaneous connections for the NEG. If the backend&#x27;s balancingMode is CONNECTION, and the backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerInstance.
                    #
                    # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerEndpoint even though its backends require a balancing mode of CONNECTION.
                &quot;maxConnectionsPerInstance&quot;: 42, # Defines a target maximum number of simultaneous connections for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum number of simultaneous connections for the whole instance group. If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerEndpoint.
                    #
                    # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerInstance even though its backends require a balancing mode of CONNECTION.
                &quot;maxRate&quot;: 42, # Defines a maximum number of HTTP requests per second (RPS) that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). Must not be defined if the backend is a managed instance group that uses autoscaling based on load balancing.
                    #
                    # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify maxRate, maxRatePerInstance, or maxRatePerEndpoint.
                    #
                    # Not available if the backend&#x27;s balancingMode is CONNECTION.
                &quot;maxRatePerEndpoint&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a target maximum rate for the NEG.
                    #
                    # If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerInstance.
                    #
                    # Not available if the backend&#x27;s balancingMode is CONNECTION.
                &quot;maxRatePerInstance&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum rate for the whole instance group.
                    #
                    # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerEndpoint.
                    #
                    # Not available if the backend&#x27;s balancingMode is CONNECTION.
                &quot;maxUtilization&quot;: 3.14, # Defines the maximum average backend utilization of a backend VM in an instance group. The valid range is [0.0, 1.0]. This is an optional parameter if the backend&#x27;s balancingMode is UTILIZATION.
                    #
                    # This parameter can be used in conjunction with maxRate, maxRatePerInstance, maxConnections (except for regional managed instance groups), or maxConnectionsPerInstance.
              },
            ],
            &quot;cdnPolicy&quot;: { # Message containing Cloud CDN configuration for a backend service. # Cloud CDN configuration for this BackendService.
              &quot;cacheKeyPolicy&quot;: { # Message containing what to include in the cache key for a request for Cloud CDN. # The CacheKeyPolicy for this CdnPolicy.
                &quot;includeHost&quot;: True or False, # If true, requests to different hosts will be cached separately.
                &quot;includeProtocol&quot;: True or False, # If true, http and https requests will be cached separately.
                &quot;includeQueryString&quot;: True or False, # If true, include query string parameters in the cache key according to query_string_whitelist and query_string_blacklist. If neither is set, the entire query string will be included. If false, the query string will be excluded from the cache key entirely.
                &quot;queryStringBlacklist&quot;: [ # Names of query string parameters to exclude in cache keys. All other parameters will be included. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
                  &quot;A String&quot;,
                ],
                &quot;queryStringWhitelist&quot;: [ # Names of query string parameters to include in cache keys. All other parameters will be excluded. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
                  &quot;A String&quot;,
                ],
              },
              &quot;signedUrlCacheMaxAgeSec&quot;: &quot;A String&quot;, # Maximum number of seconds the response to a signed URL request will be considered fresh. After this time period, the response will be revalidated before being served. Defaults to 1hr (3600s). When serving responses to signed URL requests, Cloud CDN will internally behave as though all responses from this backend had a &quot;Cache-Control: public, max-age=[TTL]&quot; header, regardless of any existing Cache-Control header. The actual headers served in responses will not be altered.
              &quot;signedUrlKeyNames&quot;: [ # [Output Only] Names of the keys for signing request URLs.
                &quot;A String&quot;,
              ],
            },
            &quot;circuitBreakers&quot;: { # Settings controlling the volume of connections to a backend service. # Settings controlling the volume of connections to a backend service. If not set, this feature is considered disabled.
                #
                # This field is applicable to either:
                # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
                # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
              &quot;connectTimeout&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The timeout for new network connections to hosts.
                &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
                &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
              },
              &quot;maxConnections&quot;: 42, # The maximum number of connections to the backend service. If not specified, there is no limit.
              &quot;maxPendingRequests&quot;: 42, # The maximum number of pending requests allowed to the backend service. If not specified, there is no limit.
              &quot;maxRequests&quot;: 42, # The maximum number of parallel requests that allowed to the backend service. If not specified, there is no limit.
              &quot;maxRequestsPerConnection&quot;: 42, # Maximum requests for a single connection to the backend service. This parameter is respected by both the HTTP/1.1 and HTTP/2 implementations. If not specified, there is no limit. Setting this parameter to 1 will effectively disable keep alive.
              &quot;maxRetries&quot;: 42, # The maximum number of parallel retries allowed to the backend cluster. If not specified, the default is 1.
            },
            &quot;connectionDraining&quot;: { # Message containing connection draining configuration.
              &quot;drainingTimeoutSec&quot;: 42, # The amount of time in seconds to allow existing connections to persist while on unhealthy backend VMs. Only applicable if the protocol is not UDP. The valid range is [0, 3600].
            },
            &quot;consistentHash&quot;: { # This message defines settings for a consistent hash style load balancer. # Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular destination host will be lost when one or more hosts are added/removed from the destination service. This field specifies parameters that control consistent hashing. This field is only applicable when localityLbPolicy is set to MAGLEV or RING_HASH.
                #
                # This field is applicable to either:
                # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
                # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
              &quot;httpCookie&quot;: { # The information about the HTTP Cookie on which the hash function is based for load balancing policies that use a consistent hash. # Hash is based on HTTP Cookie. This field describes a HTTP cookie that will be used as the hash key for the consistent hash load balancer. If the cookie is not present, it will be generated. This field is applicable if the sessionAffinity is set to HTTP_COOKIE.
                &quot;name&quot;: &quot;A String&quot;, # Name of the cookie.
                &quot;path&quot;: &quot;A String&quot;, # Path to set for the cookie.
                &quot;ttl&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Lifetime of the cookie.
                  &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
                  &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
                },
              },
              &quot;httpHeaderName&quot;: &quot;A String&quot;, # The hash based on the value of the specified header field. This field is applicable if the sessionAffinity is set to HEADER_FIELD.
              &quot;minimumRingSize&quot;: &quot;A String&quot;, # The minimum number of virtual nodes to use for the hash ring. Defaults to 1024. Larger ring sizes result in more granular load distributions. If the number of hosts in the load balancing pool is larger than the ring size, each host will be assigned a single virtual node.
            },
            &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
            &quot;customRequestHeaders&quot;: [ # Headers that the HTTP/S load balancer should add to proxied requests.
              &quot;A String&quot;,
            ],
            &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
            &quot;enableCDN&quot;: True or False, # If true, enables Cloud CDN for the backend service. Only applicable if the loadBalancingScheme is EXTERNAL and the protocol is HTTP or HTTPS.
            &quot;failoverPolicy&quot;: { # Applicable only to Failover for Internal TCP/UDP Load Balancing. On failover or failback, this field indicates whether connection draining will be honored. GCP has a fixed connection draining timeout of 10 minutes. A setting of true terminates existing TCP connections to the active pool during failover and failback, immediately draining traffic. A setting of false allows existing TCP connections to persist, even on VMs no longer in the active pool, for up to the duration of the connection draining timeout (10 minutes). # Applicable only to Failover for Internal TCP/UDP Load Balancing. Requires at least one backend instance group to be defined as a backup (failover) backend.
              &quot;disableConnectionDrainOnFailover&quot;: True or False, # This can be set to true only if the protocol is TCP.
                  #
                  # The default is false.
              &quot;dropTrafficIfUnhealthy&quot;: True or False, # Applicable only to Failover for Internal TCP/UDP Load Balancing. If set to true, connections to the load balancer are dropped when all primary and all backup backend VMs are unhealthy. If set to false, connections are distributed among all primary VMs when all primary and all backup backend VMs are unhealthy.
                  #
                  # The default is false.
              &quot;failoverRatio&quot;: 3.14, # Applicable only to Failover for Internal TCP/UDP Load Balancing. The value of the field must be in the range [0, 1]. If the value is 0, the load balancer performs a failover when the number of healthy primary VMs equals zero. For all other values, the load balancer performs a failover when the total number of healthy primary VMs is less than this ratio.
            },
            &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a BackendService. An up-to-date fingerprint must be provided in order to update the BackendService, otherwise the request will fail with error 412 conditionNotMet.
                #
                # To see the latest fingerprint, make a get() request to retrieve a BackendService.
            &quot;healthChecks&quot;: [ # The list of URLs to the healthChecks, httpHealthChecks (legacy), or httpsHealthChecks (legacy) resource for health checking this backend service. Not all backend services support legacy health checks. See  Load balancer guide. Currently at most one health check can be specified. Backend services with instance group or zonal NEG backends must have a health check. Backend services with internet NEG backends must not have a health check. A health check must
              &quot;A String&quot;,
            ],
            &quot;iap&quot;: { # Identity-Aware Proxy # The configurations for Identity-Aware Proxy on this resource.
              &quot;enabled&quot;: True or False, # Whether the serving infrastructure will authenticate and authorize all incoming requests. If true, the oauth2ClientId and oauth2ClientSecret fields must be non-empty.
              &quot;oauth2ClientId&quot;: &quot;A String&quot;, # OAuth2 client ID to use for the authentication flow.
              &quot;oauth2ClientInfo&quot;: { # [Input Only] OAuth client info required to generate client id to be used for IAP.
                &quot;applicationName&quot;: &quot;A String&quot;, # Application name to be used in OAuth consent screen.
                &quot;clientName&quot;: &quot;A String&quot;, # Name of the client to be generated. Optional - If not provided, the name will be autogenerated by the backend.
                &quot;developerEmailAddress&quot;: &quot;A String&quot;, # Developer&#x27;s information to be used in OAuth consent screen.
              },
              &quot;oauth2ClientSecret&quot;: &quot;A String&quot;, # OAuth2 client secret to use for the authentication flow. For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2ClientSecretSha256 field.
              &quot;oauth2ClientSecretSha256&quot;: &quot;A String&quot;, # [Output Only] SHA256 hash value for the field oauth2_client_secret above.
            },
            &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
            &quot;kind&quot;: &quot;compute#backendService&quot;, # [Output Only] Type of resource. Always compute#backendService for backend services.
            &quot;loadBalancingScheme&quot;: &quot;A String&quot;, # Specifies the load balancer type. Choose EXTERNAL for load balancers that receive traffic from external clients. Choose INTERNAL for Internal TCP/UDP Load Balancing. Choose INTERNAL_MANAGED for Internal HTTP(S) Load Balancing. Choose INTERNAL_SELF_MANAGED for Traffic Director. A backend service created for one type of load balancing cannot be used with another. For more information, refer to Choosing a load balancer.
            &quot;localityLbPolicy&quot;: &quot;A String&quot;, # The load balancing algorithm used within the scope of the locality. The possible values are:
                # - ROUND_ROBIN: This is a simple policy in which each healthy backend is selected in round robin order. This is the default.
                # - LEAST_REQUEST: An O(1) algorithm which selects two random healthy hosts and picks the host which has fewer active requests.
                # - RING_HASH: The ring/modulo hash load balancer implements consistent hashing to backends. The algorithm has the property that the addition/removal of a host from a set of N hosts only affects 1/N of the requests.
                # - RANDOM: The load balancer selects a random healthy host.
                # - ORIGINAL_DESTINATION: Backend host is selected based on the client connection metadata, i.e., connections are opened to the same address as the destination address of the incoming connection before the connection was redirected to the load balancer.
                # - MAGLEV: used as a drop in replacement for the ring hash load balancer. Maglev is not as stable as ring hash but has faster table lookup build times and host selection times. For more information about Maglev, see https://ai.google/research/pubs/pub44824
                #
                # This field is applicable to either:
                # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
                # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
                #
                # If sessionAffinity is not NONE, and this field is not set to &gt;MAGLEV or RING_HASH, session affinity settings will not take effect.
            &quot;logConfig&quot;: { # The available logging options for the load balancer traffic served by this backend service. # This field denotes the logging options for the load balancer traffic served by this backend service. If logging is enabled, logs will be exported to Stackdriver.
              &quot;enable&quot;: True or False, # This field denotes whether to enable logging for the load balancer traffic served by this backend service.
              &quot;sampleRate&quot;: 3.14, # This field can only be specified if logging is enabled for this backend service. The value of the field must be in [0, 1]. This configures the sampling rate of requests to the load balancer where 1.0 means all logged requests are reported and 0.0 means no logged requests are reported. The default value is 1.0.
            },
            &quot;name&quot;: &quot;A String&quot;, # 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.
            &quot;network&quot;: &quot;A String&quot;, # The URL of the network to which this backend service belongs. This field can only be spcified when the load balancing scheme is set to INTERNAL.
            &quot;outlierDetection&quot;: { # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. If not set, this feature is considered disabled.
                #
                # This field is applicable to either:
                # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
                # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
              &quot;baseEjectionTime&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The base time that a host is ejected for. The real ejection time is equal to the base ejection time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s.
                &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
                &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
              },
              &quot;consecutiveErrors&quot;: 42, # Number of errors before a host is ejected from the connection pool. When the backend host is accessed over HTTP, a 5xx return code qualifies as an error. Defaults to 5.
              &quot;consecutiveGatewayFailure&quot;: 42, # The number of consecutive gateway failures (502, 503, 504 status or connection errors that are mapped to one of those status codes) before a consecutive gateway failure ejection occurs. Defaults to 3.
              &quot;enforcingConsecutiveErrors&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0.
              &quot;enforcingConsecutiveGatewayFailure&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
              &quot;enforcingSuccessRate&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
              &quot;interval&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Time interval between ejection analysis sweeps. This can result in both new ejections as well as hosts being returned to service. Defaults to 1 second.
                &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
                &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
              },
              &quot;maxEjectionPercent&quot;: 42, # Maximum percentage of hosts in the load balancing pool for the backend service that can be ejected. Defaults to 50%.
              &quot;successRateMinimumHosts&quot;: 42, # The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5.
              &quot;successRateRequestVolume&quot;: 42, # The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100.
              &quot;successRateStdevFactor&quot;: 42, # This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success rate, and the product of this factor and the standard deviation of the mean success rate: mean - (stdev * success_rate_stdev_factor). This factor is divided by a thousand to get a double. That is, if the desired factor is 1.9, the runtime value should be 1900. Defaults to 1900.
            },
            &quot;port&quot;: 42, # Deprecated in favor of portName. The TCP port to connect on the backend. The default value is 80.
                #
                # This cannot be used if the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
            &quot;portName&quot;: &quot;A String&quot;, # A named port on a backend instance group representing the port for communication to the backend VMs in that group. Required when the loadBalancingScheme is EXTERNAL, INTERNAL_MANAGED, or INTERNAL_SELF_MANAGED and the backends are instance groups. The named port must be defined on each backend instance group. This parameter has no meaning if the backends are NEGs.
                #
                #
                #
                # Must be omitted when the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
            &quot;protocol&quot;: &quot;A String&quot;, # The protocol this BackendService uses to communicate with backends.
                #
                # Possible values are HTTP, HTTPS, HTTP2, TCP, SSL, or UDP. depending on the chosen load balancer or Traffic Director configuration. Refer to the documentation for the load balancer or for Traffic Director for more information.
            &quot;region&quot;: &quot;A String&quot;, # [Output Only] URL of the region where the regional backend service resides. This field is not applicable to global backend services. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
            &quot;securityPolicy&quot;: &quot;A String&quot;, # [Output Only] The resource URL for the security policy associated with this backend service.
            &quot;securitySettings&quot;: { # The authentication and authorization settings for a BackendService. # This field specifies the security policy that applies to this backend service. This field is applicable to either:
                # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
                # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
              &quot;authentication&quot;: &quot;A String&quot;, # [Deprecated] Use clientTlsPolicy instead.
              &quot;authenticationPolicy&quot;: { # [Deprecated] The authentication settings for the backend service. The authentication settings for the backend service. # [Deprecated] Authentication policy defines what authentication methods can be accepted on backends, and if authenticated, which method/certificate will set the request principal. request principal.
                &quot;origins&quot;: [ # List of authentication methods that can be used for origin authentication. Similar to peers, these will be evaluated in order the first valid one will be used to set origin identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if origin authentication is not required.
                  { # [Deprecated] Configuration for the origin authentication method. Configuration for the origin authentication method.
                    &quot;jwt&quot;: { # [Deprecated] JWT configuration for origin authentication. JWT configuration for origin authentication.
                      &quot;audiences&quot;: [ # A JWT containing any of these audiences will be accepted. The service name will be accepted if audiences is empty. Examples: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com
                        &quot;A String&quot;,
                      ],
                      &quot;issuer&quot;: &quot;A String&quot;, # Identifies the issuer that issued the JWT, which is usually a URL or an email address. Examples: https://securetoken.google.com, 1234567-compute@developer.gserviceaccount.com
                      &quot;jwksPublicKeys&quot;: &quot;A String&quot;, # The provider&#x27;s public key set to validate the signature of the JWT.
                      &quot;jwtHeaders&quot;: [ # jwt_headers and jwt_params define where to extract the JWT from an HTTP request. If no explicit location is specified, the following default locations are tried in order:
                          #
                          # 1. The Authorization header using the Bearer schema. See `here `_. Example:
                          #
                          # Authorization: Bearer .
                          #
                          # 2. `access_token` query parameter. See `this `_
                          #
                          # Multiple JWTs can be verified for a request. Each JWT has to be extracted from the locations its issuer specified or from the default locations.
                          #
                          # This field is set if JWT is sent in a request header. This field specifies the header name. For example, if `header=x-goog-iap-jwt-assertion`, the header format will be x-goog-iap-jwt-assertion: .
                        { # [Deprecated] This message specifies a header location to extract JWT token. This message specifies a header location to extract JWT token.
                          &quot;name&quot;: &quot;A String&quot;, # The HTTP header name.
                          &quot;valuePrefix&quot;: &quot;A String&quot;, # The value prefix. The value format is &quot;value_prefix&quot; For example, for &quot;Authorization: Bearer &quot;, value_prefix=&quot;Bearer &quot; with a space at the end.
                        },
                      ],
                      &quot;jwtParams&quot;: [ # This field is set if JWT is sent in a query parameter. This field specifies the query parameter name. For example, if jwt_params[0] is jwt_token, the JWT format in the query parameter is /path?jwt_token=.
                        &quot;A String&quot;,
                      ],
                    },
                  },
                ],
                &quot;peers&quot;: [ # List of authentication methods that can be used for peer authentication. They will be evaluated in order the first valid one will be used to set peer identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if peer authentication is not required.
                  { # [Deprecated] Configuration for the peer authentication method. Configuration for the peer authentication method.
                    &quot;mtls&quot;: { # [Deprecated] Configuration for the mutual Tls mode for peer authentication. Configuration for the mutual Tls mode for peer authentication. # Set if mTLS is used for peer authentication.
                      &quot;mode&quot;: &quot;A String&quot;, # Specifies if the server TLS is configured to be strict or permissive. This field can be set to one of the following: STRICT: Client certificate must be presented, connection is in TLS. PERMISSIVE: Client certificate can be omitted, connection can be either plaintext or TLS.
                    },
                  },
                ],
                &quot;principalBinding&quot;: &quot;A String&quot;, # Define whether peer or origin identity should be used for principal. Default value is USE_PEER. If peer (or origin) identity is not available, either because peer/origin authentication is not defined, or failed, principal will be left unset. In other words, binding rule does not affect the decision to accept or reject request. This field can be set to one of the following: USE_PEER: Principal will be set to the identity from peer authentication. USE_ORIGIN: Principal will be set to the identity from origin authentication.
                &quot;serverTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain server-side security certificates and identity information.
                  &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
                    &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
                      &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                      &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                    },
                    &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
                    &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
                      &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                        &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                          &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                              # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                              # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                          &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                            &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                            &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                          },
                        },
                        &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                          &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                            &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                          },
                          &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                        },
                        &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
                      },
                    },
                  },
                  &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
                    &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
                    &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
                      &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                        &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                          &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                              # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                              # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                          &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                            &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                            &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                          },
                        },
                        &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                          &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                            &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                          },
                          &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                        },
                        &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
                      },
                    },
                    &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
                  },
                },
              },
              &quot;authorizationConfig&quot;: { # [Deprecated] Authorization configuration provides service-level and method-level access control for a service. control for a service. # [Deprecated] Authorization config defines the Role Based Access Control (RBAC) config. Authorization config defines the Role Based Access Control (RBAC) config.
                &quot;policies&quot;: [ # List of RbacPolicies.
                  {
                    &quot;name&quot;: &quot;A String&quot;, # Name of the RbacPolicy.
                    &quot;permissions&quot;: [ # The list of permissions.
                      { # [Deprecated] All fields defined in a permission are ANDed.
                        &quot;constraints&quot;: [ # Extra custom constraints. The constraints are ANDed together.
                          { # Custom constraint that specifies a key and a list of allowed values for Istio attributes.
                            &quot;key&quot;: &quot;A String&quot;, # Key of the constraint.
                            &quot;values&quot;: [ # A list of allowed values.
                              &quot;A String&quot;,
                            ],
                          },
                        ],
                        &quot;hosts&quot;: [ # Used in Ingress or Egress Gateway cases to specify hosts that the policy applies to. Exact match, prefix match, and suffix match are supported.
                          &quot;A String&quot;,
                        ],
                        &quot;methods&quot;: [ # HTTP method.
                          &quot;A String&quot;,
                        ],
                        &quot;notHosts&quot;: [ # Negate of hosts. Specifies exclusions.
                          &quot;A String&quot;,
                        ],
                        &quot;notMethods&quot;: [ # Negate of methods. Specifies exclusions.
                          &quot;A String&quot;,
                        ],
                        &quot;notPaths&quot;: [ # Negate of paths. Specifies exclusions.
                          &quot;A String&quot;,
                        ],
                        &quot;notPorts&quot;: [ # Negate of ports. Specifies exclusions.
                          &quot;A String&quot;,
                        ],
                        &quot;paths&quot;: [ # HTTP request paths or gRPC methods. Exact match, prefix match, and suffix match are supported.
                          &quot;A String&quot;,
                        ],
                        &quot;ports&quot;: [ # Port names or numbers.
                          &quot;A String&quot;,
                        ],
                      },
                    ],
                    &quot;principals&quot;: [ # The list of principals.
                      { # [Deprecated] All fields defined in a principal are ANDed.
                        &quot;condition&quot;: &quot;A String&quot;, # An expression to specify custom condition.
                        &quot;groups&quot;: [ # The groups the principal belongs to. Exact match, prefix match, and suffix match are supported.
                          &quot;A String&quot;,
                        ],
                        &quot;ips&quot;: [ # IPv4 or IPv6 address or range (In CIDR format)
                          &quot;A String&quot;,
                        ],
                        &quot;namespaces&quot;: [ # The namespaces. Exact match, prefix match, and suffix match are supported.
                          &quot;A String&quot;,
                        ],
                        &quot;notGroups&quot;: [ # Negate of groups. Specifies exclusions.
                          &quot;A String&quot;,
                        ],
                        &quot;notIps&quot;: [ # Negate of IPs. Specifies exclusions.
                          &quot;A String&quot;,
                        ],
                        &quot;notNamespaces&quot;: [ # Negate of namespaces. Specifies exclusions.
                          &quot;A String&quot;,
                        ],
                        &quot;notUsers&quot;: [ # Negate of users. Specifies exclusions.
                          &quot;A String&quot;,
                        ],
                        &quot;properties&quot;: { # A map of Istio attribute to expected values. Exact match, prefix match, and suffix match are supported for values. For example, `request.headers[version]: &quot;v1&quot;`. The properties are ANDed together.
                          &quot;a_key&quot;: &quot;A String&quot;,
                        },
                        &quot;users&quot;: [ # The user names/IDs or service accounts. Exact match, prefix match, and suffix match are supported.
                          &quot;A String&quot;,
                        ],
                      },
                    ],
                  },
                ],
              },
              &quot;clientTlsPolicy&quot;: &quot;A String&quot;, # Optional. A URL referring to a networksecurity.ClientTlsPolicy resource that describes how clients should authenticate with this service&#x27;s backends.
                  # clientTlsPolicy only applies to a global BackendService with the loadBalancingScheme set to INTERNAL_SELF_MANAGED.
                  # If left blank, communications are not encrypted.
              &quot;clientTlsSettings&quot;: { # [Deprecated] The client side authentication settings for connection originating from the backend service. the backend service. # [Deprecated] TLS Settings for the backend service.
                &quot;clientTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain client-side security certificates and identity information. This field is only applicable when mode is set to MUTUAL.
                  &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
                    &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
                      &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                      &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                    },
                    &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
                    &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
                      &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                        &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                          &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                              # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                              # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                          &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                            &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                            &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                          },
                        },
                        &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                          &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                            &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                          },
                          &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                        },
                        &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
                      },
                    },
                  },
                  &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
                    &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
                    &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
                      &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                        &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                          &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                              # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                              # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                          &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                            &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                            &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                          },
                        },
                        &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                          &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                            &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                          },
                          &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                        },
                        &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
                      },
                    },
                    &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
                  },
                },
                &quot;mode&quot;: &quot;A String&quot;, # Indicates whether connections to this port should be secured using TLS. The value of this field determines how TLS is enforced. This can be set to one of the following values: DISABLE: Do not setup a TLS connection to the backends. SIMPLE: Originate a TLS connection to the backends. MUTUAL: Secure connections to the backends using mutual TLS by presenting client certificates for authentication.
                &quot;sni&quot;: &quot;A String&quot;, # SNI string to present to the server during TLS handshake. This field is applicable only when mode is SIMPLE or MUTUAL.
                &quot;subjectAltNames&quot;: [ # A list of alternate names to verify the subject identity in the certificate.If specified, the proxy will verify that the server certificate&#x27;s subject alt name matches one of the specified values. This field is applicable only when mode is SIMPLE or MUTUAL.
                  &quot;A String&quot;,
                ],
              },
              &quot;subjectAltNames&quot;: [ # Optional. A list of Subject Alternative Names (SANs) that the client verifies during a mutual TLS handshake with an server/endpoint for this BackendService. When the server presents its X.509 certificate to the client, the client inspects the certificate&#x27;s subjectAltName field. If the field contains one of the specified values, the communication continues. Otherwise, it fails. This additional check enables the client to verify that the server is authorized to run the requested service.
                  # Note that the contents of the server certificate&#x27;s subjectAltName field are configured by the Public Key Infrastructure which provisions server identities.
                  # Only applies to a global BackendService with loadBalancingScheme set to INTERNAL_SELF_MANAGED. Only applies when BackendService has an attached clientTlsPolicy with clientCertificate (mTLS mode).
                &quot;A String&quot;,
              ],
            },
            &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
            &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
            &quot;sessionAffinity&quot;: &quot;A String&quot;, # Type of session affinity to use. The default is NONE. Session affinity is not applicable if the --protocol is UDP.
                #
                # When the loadBalancingScheme is EXTERNAL, possible values are NONE, CLIENT_IP, or GENERATED_COOKIE. You can use GENERATED_COOKIE if the protocol is HTTP or HTTPS.
                #
                # When the loadBalancingScheme is INTERNAL, possible values are NONE, CLIENT_IP, CLIENT_IP_PROTO, or CLIENT_IP_PORT_PROTO.
                #
                # When the loadBalancingScheme is INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, possible values are NONE, CLIENT_IP, GENERATED_COOKIE, HEADER_FIELD, or HTTP_COOKIE.
            &quot;timeoutSec&quot;: 42, # The backend service timeout has a different meaning depending on the type of load balancer. For more information see,  Backend service settings The default is 30 seconds.
          },
        ],
        &quot;warning&quot;: { # Informational warning which replaces the list of backend services when the list is empty.
          &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
          &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example:
              # &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
            {
              &quot;key&quot;: &quot;A String&quot;, # [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).
              &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
            },
          ],
          &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
        },
      },
    },
    &quot;kind&quot;: &quot;compute#backendServiceAggregatedList&quot;, # Type of resource.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # [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.
    &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource.
    &quot;unreachables&quot;: [ # [Output Only] Unreachable resources.
      &quot;A String&quot;,
    ],
    &quot;warning&quot;: { # [Output Only] Informational warning message.
      &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
      &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example:
          # &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
        {
          &quot;key&quot;: &quot;A String&quot;, # [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).
          &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="aggregatedList_next">aggregatedList_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 &#x27;execute()&#x27; 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="delete">delete(project, backendService, requestId=None)</code>
  <pre>Deletes the specified BackendService resource.

Args:
  project: string, Project ID for this request. (required)
  backendService: string, Name of the BackendService resource to delete. (required)
  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # Google Compute Engine has three Operation resources:
      #
      # * [Global](/compute/docs/reference/rest/{$api_version}/globalOperations) * [Regional](/compute/docs/reference/rest/{$api_version}/regionOperations) * [Zonal](/compute/docs/reference/rest/{$api_version}/zoneOperations)
      #
      # You can use an operation resource to manage asynchronous API requests. For more information, read Handling API responses.
      #
      # Operations can be global, regional or zonal.
      # - For global operations, use the `globalOperations` resource.
      # - For regional operations, use the `regionOperations` resource.
      # - For zonal operations, use the `zonalOperations` resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for {$api_version}.globalOperations ==) (== resource_for {$api_version}.regionOperations ==) (== resource_for {$api_version}.zoneOperations ==)
    &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
    &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is set when the operation is created.
    &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
        {
          &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
          &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
          &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
        },
      ],
    },
    &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as `NOT FOUND`.
    &quot;httpErrorStatusCode&quot;: 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.
    &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is defined by the server.
    &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for Operation resources.
    &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
    &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`, `update`, or `delete`, and so on.
    &quot;progress&quot;: 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.
    &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
    &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
    &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the following: `PENDING`, `RUNNING`, or `DONE`.
    &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the operation.
    &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    &quot;targetLink&quot;: &quot;A String&quot;, # [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.
    &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example: `user@example.com`.
    &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example:
            # &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
          {
            &quot;key&quot;: &quot;A String&quot;, # [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).
            &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
          },
        ],
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
      },
    ],
    &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
  }</pre>
</div>

<div class="method">
    <code class="details" id="deleteSignedUrlKey">deleteSignedUrlKey(project, backendService, keyName, requestId=None)</code>
  <pre>Deletes a key for validating requests with signed URLs for this backend service.

Args:
  project: string, Project ID for this request. (required)
  backendService: string, Name of the BackendService resource to which the Signed URL Key should be added. The name should conform to RFC1035. (required)
  keyName: string, The name of the Signed URL Key to delete. (required)
  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # Google Compute Engine has three Operation resources:
      #
      # * [Global](/compute/docs/reference/rest/{$api_version}/globalOperations) * [Regional](/compute/docs/reference/rest/{$api_version}/regionOperations) * [Zonal](/compute/docs/reference/rest/{$api_version}/zoneOperations)
      #
      # You can use an operation resource to manage asynchronous API requests. For more information, read Handling API responses.
      #
      # Operations can be global, regional or zonal.
      # - For global operations, use the `globalOperations` resource.
      # - For regional operations, use the `regionOperations` resource.
      # - For zonal operations, use the `zonalOperations` resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for {$api_version}.globalOperations ==) (== resource_for {$api_version}.regionOperations ==) (== resource_for {$api_version}.zoneOperations ==)
    &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
    &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is set when the operation is created.
    &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
        {
          &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
          &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
          &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
        },
      ],
    },
    &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as `NOT FOUND`.
    &quot;httpErrorStatusCode&quot;: 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.
    &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is defined by the server.
    &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for Operation resources.
    &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
    &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`, `update`, or `delete`, and so on.
    &quot;progress&quot;: 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.
    &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
    &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
    &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the following: `PENDING`, `RUNNING`, or `DONE`.
    &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the operation.
    &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    &quot;targetLink&quot;: &quot;A String&quot;, # [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.
    &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example: `user@example.com`.
    &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example:
            # &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
          {
            &quot;key&quot;: &quot;A String&quot;, # [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).
            &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
          },
        ],
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
      },
    ],
    &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(project, backendService)</code>
  <pre>Returns the specified BackendService resource. Gets a list of available backend services.

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

Returns:
  An object of the form:

    { # Represents a Backend Service resource.
      #
      # A backend service defines how Google Cloud load balancers distribute traffic. The backend service configuration contains a set of values, such as the protocol used to connect to backends, various distribution and session settings, health checks, and timeouts. These settings provide fine-grained control over how your load balancer behaves. Most of the settings have default values that allow for easy configuration if you need to get started quickly.
      #
      # Backend services in Google Compute Engine can be either regionally or globally scoped.
      #
      # * [Global](/compute/docs/reference/rest/{$api_version}/backendServices) * [Regional](/compute/docs/reference/rest/{$api_version}/regionBackendServices)
      #
      # For more information, see Backend Services.
      #
      # (== resource_for {$api_version}.backendService ==)
    &quot;affinityCookieTtlSec&quot;: 42, # If set to 0, the cookie is non-persistent and lasts only until the end of the browser session (or equivalent). The maximum allowed value is one day (86,400).
    &quot;backends&quot;: [ # The list of backends that serve this BackendService.
      { # Message containing information of one individual backend.
        &quot;balancingMode&quot;: &quot;A String&quot;, # Specifies the balancing mode for the backend.
            #
            # When choosing a balancing mode, you need to consider the loadBalancingScheme, and protocol for the backend service, as well as the type of backend (instance group or NEG).
            #
            #
            # - If the load balancing mode is CONNECTION, then the load is spread based on how many concurrent connections the backend can handle.
            # You can use the CONNECTION balancing mode if the protocol for the backend service is SSL, TCP, or UDP.
            #
            # If the loadBalancingScheme for the backend service is EXTERNAL (SSL Proxy and TCP Proxy load balancers), you must also specify exactly one of the following parameters: maxConnections (except for regional managed instance groups), maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
            #
            # If the loadBalancingScheme for the backend service is INTERNAL (internal TCP/UDP load balancers), you cannot specify any additional parameters.
            #
            # - If the load balancing mode is RATE, the load is spread based on the rate of HTTP requests per second (RPS).
            # You can use the RATE balancing mode if the protocol for the backend service is HTTP or HTTPS. You must specify exactly one of the following parameters: maxRate (except for regional managed instance groups), maxRatePerInstance, or maxRatePerEndpoint.
            #
            # - If the load balancing mode is UTILIZATION, the load is spread based on the backend utilization of instances in an instance group.
            # You can use the UTILIZATION balancing mode if the loadBalancingScheme of the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED and the backends are instance groups. There are no restrictions on the backend service protocol.
        &quot;capacityScaler&quot;: 3.14, # A multiplier applied to the group&#x27;s maximum servicing capacity (based on UTILIZATION, RATE or CONNECTION). Default value is 1, which means the group will serve up to 100% of its configured capacity (depending on balancingMode). A setting of 0 means the group is completely drained, offering 0% of its available capacity. Valid range is 0.0 and [0.1,1.0]. You cannot configure a setting larger than 0 and smaller than 0.1. You cannot configure a setting of 0 when there is only one backend attached to the backend service.
            #
            # This cannot be used for internal load balancing.
        &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
        &quot;failover&quot;: True or False, # This field designates whether this is a failover backend. More than one failover backend can be configured for a given BackendService.
        &quot;group&quot;: &quot;A String&quot;, # The fully-qualified URL of an instance group or network endpoint group (NEG) resource. The type of backend that a backend service supports depends on the backend service&#x27;s loadBalancingScheme.
            #
            #
            # - When the loadBalancingScheme for the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, the backend can be either an instance group or a NEG. The backends on the backend service must be either all instance groups or all NEGs. You cannot mix instance group and NEG backends on the same backend service.
            #
            #
            # - When the loadBalancingScheme for the backend service is INTERNAL, the backend must be an instance group in the same region as the backend service. NEGs are not supported.
            #
            # You must use the fully-qualified URL (starting with https://www.googleapis.com/) to specify the instance group or NEG. Partial URLs are not supported.
        &quot;maxConnections&quot;: 42, # Defines a target maximum number of simultaneous connections that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
            #
            # Not available if the backend&#x27;s balancingMode is RATE. If the loadBalancingScheme is INTERNAL, then maxConnections is not supported, even though the backend requires a balancing mode of CONNECTION.
        &quot;maxConnectionsPerEndpoint&quot;: 42, # Defines a target maximum number of simultaneous connections for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a maximum number of target maximum simultaneous connections for the NEG. If the backend&#x27;s balancingMode is CONNECTION, and the backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerInstance.
            #
            # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerEndpoint even though its backends require a balancing mode of CONNECTION.
        &quot;maxConnectionsPerInstance&quot;: 42, # Defines a target maximum number of simultaneous connections for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum number of simultaneous connections for the whole instance group. If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerEndpoint.
            #
            # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerInstance even though its backends require a balancing mode of CONNECTION.
        &quot;maxRate&quot;: 42, # Defines a maximum number of HTTP requests per second (RPS) that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). Must not be defined if the backend is a managed instance group that uses autoscaling based on load balancing.
            #
            # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify maxRate, maxRatePerInstance, or maxRatePerEndpoint.
            #
            # Not available if the backend&#x27;s balancingMode is CONNECTION.
        &quot;maxRatePerEndpoint&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a target maximum rate for the NEG.
            #
            # If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerInstance.
            #
            # Not available if the backend&#x27;s balancingMode is CONNECTION.
        &quot;maxRatePerInstance&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum rate for the whole instance group.
            #
            # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerEndpoint.
            #
            # Not available if the backend&#x27;s balancingMode is CONNECTION.
        &quot;maxUtilization&quot;: 3.14, # Defines the maximum average backend utilization of a backend VM in an instance group. The valid range is [0.0, 1.0]. This is an optional parameter if the backend&#x27;s balancingMode is UTILIZATION.
            #
            # This parameter can be used in conjunction with maxRate, maxRatePerInstance, maxConnections (except for regional managed instance groups), or maxConnectionsPerInstance.
      },
    ],
    &quot;cdnPolicy&quot;: { # Message containing Cloud CDN configuration for a backend service. # Cloud CDN configuration for this BackendService.
      &quot;cacheKeyPolicy&quot;: { # Message containing what to include in the cache key for a request for Cloud CDN. # The CacheKeyPolicy for this CdnPolicy.
        &quot;includeHost&quot;: True or False, # If true, requests to different hosts will be cached separately.
        &quot;includeProtocol&quot;: True or False, # If true, http and https requests will be cached separately.
        &quot;includeQueryString&quot;: True or False, # If true, include query string parameters in the cache key according to query_string_whitelist and query_string_blacklist. If neither is set, the entire query string will be included. If false, the query string will be excluded from the cache key entirely.
        &quot;queryStringBlacklist&quot;: [ # Names of query string parameters to exclude in cache keys. All other parameters will be included. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
          &quot;A String&quot;,
        ],
        &quot;queryStringWhitelist&quot;: [ # Names of query string parameters to include in cache keys. All other parameters will be excluded. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
          &quot;A String&quot;,
        ],
      },
      &quot;signedUrlCacheMaxAgeSec&quot;: &quot;A String&quot;, # Maximum number of seconds the response to a signed URL request will be considered fresh. After this time period, the response will be revalidated before being served. Defaults to 1hr (3600s). When serving responses to signed URL requests, Cloud CDN will internally behave as though all responses from this backend had a &quot;Cache-Control: public, max-age=[TTL]&quot; header, regardless of any existing Cache-Control header. The actual headers served in responses will not be altered.
      &quot;signedUrlKeyNames&quot;: [ # [Output Only] Names of the keys for signing request URLs.
        &quot;A String&quot;,
      ],
    },
    &quot;circuitBreakers&quot;: { # Settings controlling the volume of connections to a backend service. # Settings controlling the volume of connections to a backend service. If not set, this feature is considered disabled.
        #
        # This field is applicable to either:
        # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
        # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
      &quot;connectTimeout&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The timeout for new network connections to hosts.
        &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
        &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
      },
      &quot;maxConnections&quot;: 42, # The maximum number of connections to the backend service. If not specified, there is no limit.
      &quot;maxPendingRequests&quot;: 42, # The maximum number of pending requests allowed to the backend service. If not specified, there is no limit.
      &quot;maxRequests&quot;: 42, # The maximum number of parallel requests that allowed to the backend service. If not specified, there is no limit.
      &quot;maxRequestsPerConnection&quot;: 42, # Maximum requests for a single connection to the backend service. This parameter is respected by both the HTTP/1.1 and HTTP/2 implementations. If not specified, there is no limit. Setting this parameter to 1 will effectively disable keep alive.
      &quot;maxRetries&quot;: 42, # The maximum number of parallel retries allowed to the backend cluster. If not specified, the default is 1.
    },
    &quot;connectionDraining&quot;: { # Message containing connection draining configuration.
      &quot;drainingTimeoutSec&quot;: 42, # The amount of time in seconds to allow existing connections to persist while on unhealthy backend VMs. Only applicable if the protocol is not UDP. The valid range is [0, 3600].
    },
    &quot;consistentHash&quot;: { # This message defines settings for a consistent hash style load balancer. # Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular destination host will be lost when one or more hosts are added/removed from the destination service. This field specifies parameters that control consistent hashing. This field is only applicable when localityLbPolicy is set to MAGLEV or RING_HASH.
        #
        # This field is applicable to either:
        # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
        # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
      &quot;httpCookie&quot;: { # The information about the HTTP Cookie on which the hash function is based for load balancing policies that use a consistent hash. # Hash is based on HTTP Cookie. This field describes a HTTP cookie that will be used as the hash key for the consistent hash load balancer. If the cookie is not present, it will be generated. This field is applicable if the sessionAffinity is set to HTTP_COOKIE.
        &quot;name&quot;: &quot;A String&quot;, # Name of the cookie.
        &quot;path&quot;: &quot;A String&quot;, # Path to set for the cookie.
        &quot;ttl&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Lifetime of the cookie.
          &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
          &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
        },
      },
      &quot;httpHeaderName&quot;: &quot;A String&quot;, # The hash based on the value of the specified header field. This field is applicable if the sessionAffinity is set to HEADER_FIELD.
      &quot;minimumRingSize&quot;: &quot;A String&quot;, # The minimum number of virtual nodes to use for the hash ring. Defaults to 1024. Larger ring sizes result in more granular load distributions. If the number of hosts in the load balancing pool is larger than the ring size, each host will be assigned a single virtual node.
    },
    &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
    &quot;customRequestHeaders&quot;: [ # Headers that the HTTP/S load balancer should add to proxied requests.
      &quot;A String&quot;,
    ],
    &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
    &quot;enableCDN&quot;: True or False, # If true, enables Cloud CDN for the backend service. Only applicable if the loadBalancingScheme is EXTERNAL and the protocol is HTTP or HTTPS.
    &quot;failoverPolicy&quot;: { # Applicable only to Failover for Internal TCP/UDP Load Balancing. On failover or failback, this field indicates whether connection draining will be honored. GCP has a fixed connection draining timeout of 10 minutes. A setting of true terminates existing TCP connections to the active pool during failover and failback, immediately draining traffic. A setting of false allows existing TCP connections to persist, even on VMs no longer in the active pool, for up to the duration of the connection draining timeout (10 minutes). # Applicable only to Failover for Internal TCP/UDP Load Balancing. Requires at least one backend instance group to be defined as a backup (failover) backend.
      &quot;disableConnectionDrainOnFailover&quot;: True or False, # This can be set to true only if the protocol is TCP.
          #
          # The default is false.
      &quot;dropTrafficIfUnhealthy&quot;: True or False, # Applicable only to Failover for Internal TCP/UDP Load Balancing. If set to true, connections to the load balancer are dropped when all primary and all backup backend VMs are unhealthy. If set to false, connections are distributed among all primary VMs when all primary and all backup backend VMs are unhealthy.
          #
          # The default is false.
      &quot;failoverRatio&quot;: 3.14, # Applicable only to Failover for Internal TCP/UDP Load Balancing. The value of the field must be in the range [0, 1]. If the value is 0, the load balancer performs a failover when the number of healthy primary VMs equals zero. For all other values, the load balancer performs a failover when the total number of healthy primary VMs is less than this ratio.
    },
    &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a BackendService. An up-to-date fingerprint must be provided in order to update the BackendService, otherwise the request will fail with error 412 conditionNotMet.
        #
        # To see the latest fingerprint, make a get() request to retrieve a BackendService.
    &quot;healthChecks&quot;: [ # The list of URLs to the healthChecks, httpHealthChecks (legacy), or httpsHealthChecks (legacy) resource for health checking this backend service. Not all backend services support legacy health checks. See  Load balancer guide. Currently at most one health check can be specified. Backend services with instance group or zonal NEG backends must have a health check. Backend services with internet NEG backends must not have a health check. A health check must
      &quot;A String&quot;,
    ],
    &quot;iap&quot;: { # Identity-Aware Proxy # The configurations for Identity-Aware Proxy on this resource.
      &quot;enabled&quot;: True or False, # Whether the serving infrastructure will authenticate and authorize all incoming requests. If true, the oauth2ClientId and oauth2ClientSecret fields must be non-empty.
      &quot;oauth2ClientId&quot;: &quot;A String&quot;, # OAuth2 client ID to use for the authentication flow.
      &quot;oauth2ClientInfo&quot;: { # [Input Only] OAuth client info required to generate client id to be used for IAP.
        &quot;applicationName&quot;: &quot;A String&quot;, # Application name to be used in OAuth consent screen.
        &quot;clientName&quot;: &quot;A String&quot;, # Name of the client to be generated. Optional - If not provided, the name will be autogenerated by the backend.
        &quot;developerEmailAddress&quot;: &quot;A String&quot;, # Developer&#x27;s information to be used in OAuth consent screen.
      },
      &quot;oauth2ClientSecret&quot;: &quot;A String&quot;, # OAuth2 client secret to use for the authentication flow. For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2ClientSecretSha256 field.
      &quot;oauth2ClientSecretSha256&quot;: &quot;A String&quot;, # [Output Only] SHA256 hash value for the field oauth2_client_secret above.
    },
    &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    &quot;kind&quot;: &quot;compute#backendService&quot;, # [Output Only] Type of resource. Always compute#backendService for backend services.
    &quot;loadBalancingScheme&quot;: &quot;A String&quot;, # Specifies the load balancer type. Choose EXTERNAL for load balancers that receive traffic from external clients. Choose INTERNAL for Internal TCP/UDP Load Balancing. Choose INTERNAL_MANAGED for Internal HTTP(S) Load Balancing. Choose INTERNAL_SELF_MANAGED for Traffic Director. A backend service created for one type of load balancing cannot be used with another. For more information, refer to Choosing a load balancer.
    &quot;localityLbPolicy&quot;: &quot;A String&quot;, # The load balancing algorithm used within the scope of the locality. The possible values are:
        # - ROUND_ROBIN: This is a simple policy in which each healthy backend is selected in round robin order. This is the default.
        # - LEAST_REQUEST: An O(1) algorithm which selects two random healthy hosts and picks the host which has fewer active requests.
        # - RING_HASH: The ring/modulo hash load balancer implements consistent hashing to backends. The algorithm has the property that the addition/removal of a host from a set of N hosts only affects 1/N of the requests.
        # - RANDOM: The load balancer selects a random healthy host.
        # - ORIGINAL_DESTINATION: Backend host is selected based on the client connection metadata, i.e., connections are opened to the same address as the destination address of the incoming connection before the connection was redirected to the load balancer.
        # - MAGLEV: used as a drop in replacement for the ring hash load balancer. Maglev is not as stable as ring hash but has faster table lookup build times and host selection times. For more information about Maglev, see https://ai.google/research/pubs/pub44824
        #
        # This field is applicable to either:
        # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
        # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
        #
        # If sessionAffinity is not NONE, and this field is not set to &gt;MAGLEV or RING_HASH, session affinity settings will not take effect.
    &quot;logConfig&quot;: { # The available logging options for the load balancer traffic served by this backend service. # This field denotes the logging options for the load balancer traffic served by this backend service. If logging is enabled, logs will be exported to Stackdriver.
      &quot;enable&quot;: True or False, # This field denotes whether to enable logging for the load balancer traffic served by this backend service.
      &quot;sampleRate&quot;: 3.14, # This field can only be specified if logging is enabled for this backend service. The value of the field must be in [0, 1]. This configures the sampling rate of requests to the load balancer where 1.0 means all logged requests are reported and 0.0 means no logged requests are reported. The default value is 1.0.
    },
    &quot;name&quot;: &quot;A String&quot;, # 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.
    &quot;network&quot;: &quot;A String&quot;, # The URL of the network to which this backend service belongs. This field can only be spcified when the load balancing scheme is set to INTERNAL.
    &quot;outlierDetection&quot;: { # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. If not set, this feature is considered disabled.
        #
        # This field is applicable to either:
        # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
        # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
      &quot;baseEjectionTime&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The base time that a host is ejected for. The real ejection time is equal to the base ejection time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s.
        &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
        &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
      },
      &quot;consecutiveErrors&quot;: 42, # Number of errors before a host is ejected from the connection pool. When the backend host is accessed over HTTP, a 5xx return code qualifies as an error. Defaults to 5.
      &quot;consecutiveGatewayFailure&quot;: 42, # The number of consecutive gateway failures (502, 503, 504 status or connection errors that are mapped to one of those status codes) before a consecutive gateway failure ejection occurs. Defaults to 3.
      &quot;enforcingConsecutiveErrors&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0.
      &quot;enforcingConsecutiveGatewayFailure&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
      &quot;enforcingSuccessRate&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
      &quot;interval&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Time interval between ejection analysis sweeps. This can result in both new ejections as well as hosts being returned to service. Defaults to 1 second.
        &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
        &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
      },
      &quot;maxEjectionPercent&quot;: 42, # Maximum percentage of hosts in the load balancing pool for the backend service that can be ejected. Defaults to 50%.
      &quot;successRateMinimumHosts&quot;: 42, # The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5.
      &quot;successRateRequestVolume&quot;: 42, # The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100.
      &quot;successRateStdevFactor&quot;: 42, # This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success rate, and the product of this factor and the standard deviation of the mean success rate: mean - (stdev * success_rate_stdev_factor). This factor is divided by a thousand to get a double. That is, if the desired factor is 1.9, the runtime value should be 1900. Defaults to 1900.
    },
    &quot;port&quot;: 42, # Deprecated in favor of portName. The TCP port to connect on the backend. The default value is 80.
        #
        # This cannot be used if the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
    &quot;portName&quot;: &quot;A String&quot;, # A named port on a backend instance group representing the port for communication to the backend VMs in that group. Required when the loadBalancingScheme is EXTERNAL, INTERNAL_MANAGED, or INTERNAL_SELF_MANAGED and the backends are instance groups. The named port must be defined on each backend instance group. This parameter has no meaning if the backends are NEGs.
        #
        #
        #
        # Must be omitted when the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
    &quot;protocol&quot;: &quot;A String&quot;, # The protocol this BackendService uses to communicate with backends.
        #
        # Possible values are HTTP, HTTPS, HTTP2, TCP, SSL, or UDP. depending on the chosen load balancer or Traffic Director configuration. Refer to the documentation for the load balancer or for Traffic Director for more information.
    &quot;region&quot;: &quot;A String&quot;, # [Output Only] URL of the region where the regional backend service resides. This field is not applicable to global backend services. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
    &quot;securityPolicy&quot;: &quot;A String&quot;, # [Output Only] The resource URL for the security policy associated with this backend service.
    &quot;securitySettings&quot;: { # The authentication and authorization settings for a BackendService. # This field specifies the security policy that applies to this backend service. This field is applicable to either:
        # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
        # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
      &quot;authentication&quot;: &quot;A String&quot;, # [Deprecated] Use clientTlsPolicy instead.
      &quot;authenticationPolicy&quot;: { # [Deprecated] The authentication settings for the backend service. The authentication settings for the backend service. # [Deprecated] Authentication policy defines what authentication methods can be accepted on backends, and if authenticated, which method/certificate will set the request principal. request principal.
        &quot;origins&quot;: [ # List of authentication methods that can be used for origin authentication. Similar to peers, these will be evaluated in order the first valid one will be used to set origin identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if origin authentication is not required.
          { # [Deprecated] Configuration for the origin authentication method. Configuration for the origin authentication method.
            &quot;jwt&quot;: { # [Deprecated] JWT configuration for origin authentication. JWT configuration for origin authentication.
              &quot;audiences&quot;: [ # A JWT containing any of these audiences will be accepted. The service name will be accepted if audiences is empty. Examples: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com
                &quot;A String&quot;,
              ],
              &quot;issuer&quot;: &quot;A String&quot;, # Identifies the issuer that issued the JWT, which is usually a URL or an email address. Examples: https://securetoken.google.com, 1234567-compute@developer.gserviceaccount.com
              &quot;jwksPublicKeys&quot;: &quot;A String&quot;, # The provider&#x27;s public key set to validate the signature of the JWT.
              &quot;jwtHeaders&quot;: [ # jwt_headers and jwt_params define where to extract the JWT from an HTTP request. If no explicit location is specified, the following default locations are tried in order:
                  #
                  # 1. The Authorization header using the Bearer schema. See `here `_. Example:
                  #
                  # Authorization: Bearer .
                  #
                  # 2. `access_token` query parameter. See `this `_
                  #
                  # Multiple JWTs can be verified for a request. Each JWT has to be extracted from the locations its issuer specified or from the default locations.
                  #
                  # This field is set if JWT is sent in a request header. This field specifies the header name. For example, if `header=x-goog-iap-jwt-assertion`, the header format will be x-goog-iap-jwt-assertion: .
                { # [Deprecated] This message specifies a header location to extract JWT token. This message specifies a header location to extract JWT token.
                  &quot;name&quot;: &quot;A String&quot;, # The HTTP header name.
                  &quot;valuePrefix&quot;: &quot;A String&quot;, # The value prefix. The value format is &quot;value_prefix&quot; For example, for &quot;Authorization: Bearer &quot;, value_prefix=&quot;Bearer &quot; with a space at the end.
                },
              ],
              &quot;jwtParams&quot;: [ # This field is set if JWT is sent in a query parameter. This field specifies the query parameter name. For example, if jwt_params[0] is jwt_token, the JWT format in the query parameter is /path?jwt_token=.
                &quot;A String&quot;,
              ],
            },
          },
        ],
        &quot;peers&quot;: [ # List of authentication methods that can be used for peer authentication. They will be evaluated in order the first valid one will be used to set peer identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if peer authentication is not required.
          { # [Deprecated] Configuration for the peer authentication method. Configuration for the peer authentication method.
            &quot;mtls&quot;: { # [Deprecated] Configuration for the mutual Tls mode for peer authentication. Configuration for the mutual Tls mode for peer authentication. # Set if mTLS is used for peer authentication.
              &quot;mode&quot;: &quot;A String&quot;, # Specifies if the server TLS is configured to be strict or permissive. This field can be set to one of the following: STRICT: Client certificate must be presented, connection is in TLS. PERMISSIVE: Client certificate can be omitted, connection can be either plaintext or TLS.
            },
          },
        ],
        &quot;principalBinding&quot;: &quot;A String&quot;, # Define whether peer or origin identity should be used for principal. Default value is USE_PEER. If peer (or origin) identity is not available, either because peer/origin authentication is not defined, or failed, principal will be left unset. In other words, binding rule does not affect the decision to accept or reject request. This field can be set to one of the following: USE_PEER: Principal will be set to the identity from peer authentication. USE_ORIGIN: Principal will be set to the identity from origin authentication.
        &quot;serverTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain server-side security certificates and identity information.
          &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
            &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
              &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
              &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
            },
            &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
            &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
              &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                  &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                      # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                      # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                  &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                    &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                    &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                  },
                },
                &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                  &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                    &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                    &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                  },
                  &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                },
                &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
              },
            },
          },
          &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
            &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
              &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                  &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                      # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                      # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                  &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                    &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                    &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                  },
                },
                &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                  &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                    &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                    &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                  },
                  &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                },
                &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
              },
            },
            &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
          },
        },
      },
      &quot;authorizationConfig&quot;: { # [Deprecated] Authorization configuration provides service-level and method-level access control for a service. control for a service. # [Deprecated] Authorization config defines the Role Based Access Control (RBAC) config. Authorization config defines the Role Based Access Control (RBAC) config.
        &quot;policies&quot;: [ # List of RbacPolicies.
          {
            &quot;name&quot;: &quot;A String&quot;, # Name of the RbacPolicy.
            &quot;permissions&quot;: [ # The list of permissions.
              { # [Deprecated] All fields defined in a permission are ANDed.
                &quot;constraints&quot;: [ # Extra custom constraints. The constraints are ANDed together.
                  { # Custom constraint that specifies a key and a list of allowed values for Istio attributes.
                    &quot;key&quot;: &quot;A String&quot;, # Key of the constraint.
                    &quot;values&quot;: [ # A list of allowed values.
                      &quot;A String&quot;,
                    ],
                  },
                ],
                &quot;hosts&quot;: [ # Used in Ingress or Egress Gateway cases to specify hosts that the policy applies to. Exact match, prefix match, and suffix match are supported.
                  &quot;A String&quot;,
                ],
                &quot;methods&quot;: [ # HTTP method.
                  &quot;A String&quot;,
                ],
                &quot;notHosts&quot;: [ # Negate of hosts. Specifies exclusions.
                  &quot;A String&quot;,
                ],
                &quot;notMethods&quot;: [ # Negate of methods. Specifies exclusions.
                  &quot;A String&quot;,
                ],
                &quot;notPaths&quot;: [ # Negate of paths. Specifies exclusions.
                  &quot;A String&quot;,
                ],
                &quot;notPorts&quot;: [ # Negate of ports. Specifies exclusions.
                  &quot;A String&quot;,
                ],
                &quot;paths&quot;: [ # HTTP request paths or gRPC methods. Exact match, prefix match, and suffix match are supported.
                  &quot;A String&quot;,
                ],
                &quot;ports&quot;: [ # Port names or numbers.
                  &quot;A String&quot;,
                ],
              },
            ],
            &quot;principals&quot;: [ # The list of principals.
              { # [Deprecated] All fields defined in a principal are ANDed.
                &quot;condition&quot;: &quot;A String&quot;, # An expression to specify custom condition.
                &quot;groups&quot;: [ # The groups the principal belongs to. Exact match, prefix match, and suffix match are supported.
                  &quot;A String&quot;,
                ],
                &quot;ips&quot;: [ # IPv4 or IPv6 address or range (In CIDR format)
                  &quot;A String&quot;,
                ],
                &quot;namespaces&quot;: [ # The namespaces. Exact match, prefix match, and suffix match are supported.
                  &quot;A String&quot;,
                ],
                &quot;notGroups&quot;: [ # Negate of groups. Specifies exclusions.
                  &quot;A String&quot;,
                ],
                &quot;notIps&quot;: [ # Negate of IPs. Specifies exclusions.
                  &quot;A String&quot;,
                ],
                &quot;notNamespaces&quot;: [ # Negate of namespaces. Specifies exclusions.
                  &quot;A String&quot;,
                ],
                &quot;notUsers&quot;: [ # Negate of users. Specifies exclusions.
                  &quot;A String&quot;,
                ],
                &quot;properties&quot;: { # A map of Istio attribute to expected values. Exact match, prefix match, and suffix match are supported for values. For example, `request.headers[version]: &quot;v1&quot;`. The properties are ANDed together.
                  &quot;a_key&quot;: &quot;A String&quot;,
                },
                &quot;users&quot;: [ # The user names/IDs or service accounts. Exact match, prefix match, and suffix match are supported.
                  &quot;A String&quot;,
                ],
              },
            ],
          },
        ],
      },
      &quot;clientTlsPolicy&quot;: &quot;A String&quot;, # Optional. A URL referring to a networksecurity.ClientTlsPolicy resource that describes how clients should authenticate with this service&#x27;s backends.
          # clientTlsPolicy only applies to a global BackendService with the loadBalancingScheme set to INTERNAL_SELF_MANAGED.
          # If left blank, communications are not encrypted.
      &quot;clientTlsSettings&quot;: { # [Deprecated] The client side authentication settings for connection originating from the backend service. the backend service. # [Deprecated] TLS Settings for the backend service.
        &quot;clientTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain client-side security certificates and identity information. This field is only applicable when mode is set to MUTUAL.
          &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
            &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
              &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
              &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
            },
            &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
            &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
              &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                  &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                      # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                      # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                  &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                    &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                    &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                  },
                },
                &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                  &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                    &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                    &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                  },
                  &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                },
                &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
              },
            },
          },
          &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
            &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
              &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                  &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                      # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                      # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                  &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                    &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                    &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                  },
                },
                &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                  &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                    &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                    &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                  },
                  &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                },
                &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
              },
            },
            &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
          },
        },
        &quot;mode&quot;: &quot;A String&quot;, # Indicates whether connections to this port should be secured using TLS. The value of this field determines how TLS is enforced. This can be set to one of the following values: DISABLE: Do not setup a TLS connection to the backends. SIMPLE: Originate a TLS connection to the backends. MUTUAL: Secure connections to the backends using mutual TLS by presenting client certificates for authentication.
        &quot;sni&quot;: &quot;A String&quot;, # SNI string to present to the server during TLS handshake. This field is applicable only when mode is SIMPLE or MUTUAL.
        &quot;subjectAltNames&quot;: [ # A list of alternate names to verify the subject identity in the certificate.If specified, the proxy will verify that the server certificate&#x27;s subject alt name matches one of the specified values. This field is applicable only when mode is SIMPLE or MUTUAL.
          &quot;A String&quot;,
        ],
      },
      &quot;subjectAltNames&quot;: [ # Optional. A list of Subject Alternative Names (SANs) that the client verifies during a mutual TLS handshake with an server/endpoint for this BackendService. When the server presents its X.509 certificate to the client, the client inspects the certificate&#x27;s subjectAltName field. If the field contains one of the specified values, the communication continues. Otherwise, it fails. This additional check enables the client to verify that the server is authorized to run the requested service.
          # Note that the contents of the server certificate&#x27;s subjectAltName field are configured by the Public Key Infrastructure which provisions server identities.
          # Only applies to a global BackendService with loadBalancingScheme set to INTERNAL_SELF_MANAGED. Only applies when BackendService has an attached clientTlsPolicy with clientCertificate (mTLS mode).
        &quot;A String&quot;,
      ],
    },
    &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
    &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
    &quot;sessionAffinity&quot;: &quot;A String&quot;, # Type of session affinity to use. The default is NONE. Session affinity is not applicable if the --protocol is UDP.
        #
        # When the loadBalancingScheme is EXTERNAL, possible values are NONE, CLIENT_IP, or GENERATED_COOKIE. You can use GENERATED_COOKIE if the protocol is HTTP or HTTPS.
        #
        # When the loadBalancingScheme is INTERNAL, possible values are NONE, CLIENT_IP, CLIENT_IP_PROTO, or CLIENT_IP_PORT_PROTO.
        #
        # When the loadBalancingScheme is INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, possible values are NONE, CLIENT_IP, GENERATED_COOKIE, HEADER_FIELD, or HTTP_COOKIE.
    &quot;timeoutSec&quot;: 42, # The backend service timeout has a different meaning depending on the type of load balancer. For more information see,  Backend service settings The default is 30 seconds.
  }</pre>
</div>

<div class="method">
    <code class="details" id="getHealth">getHealth(project, backendService, body=None)</code>
  <pre>Gets the most recent health check results for this BackendService.

Example request body:

{ &quot;group&quot;: &quot;/zones/us-east1-b/instanceGroups/lb-backend-example&quot; }

Args:
  project: string, A parameter (required)
  backendService: string, Name of the BackendService resource to which the queried instance belongs. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;group&quot;: &quot;A String&quot;, # A URI referencing one of the instance groups or network endpoint groups listed in the backend service.
  }


Returns:
  An object of the form:

    {
    &quot;annotations&quot;: { # Metadata defined as annotations on the network endpoint group.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;healthStatus&quot;: [ # Health state of the backend instances or endpoints in requested instance or network endpoint group, determined based on configured health checks.
      {
        &quot;annotations&quot;: { # Metadata defined as annotations for network endpoint.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;healthState&quot;: &quot;A String&quot;, # Health state of the instance.
        &quot;instance&quot;: &quot;A String&quot;, # URL of the instance resource.
        &quot;ipAddress&quot;: &quot;A String&quot;, # A forwarding rule IP address assigned to this instance.
        &quot;port&quot;: 42, # The named port of the instance group, not necessarily the port that is health-checked.
      },
    ],
    &quot;kind&quot;: &quot;compute#backendServiceGroupHealth&quot;, # [Output Only] Type of resource. Always compute#backendServiceGroupHealth for the health of backend services.
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(project, body=None, requestId=None)</code>
  <pre>Creates a BackendService resource in the specified project using the data included in the request. For more information, see  Backend services overview.

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

{ # Represents a Backend Service resource.
    # 
    # A backend service defines how Google Cloud load balancers distribute traffic. The backend service configuration contains a set of values, such as the protocol used to connect to backends, various distribution and session settings, health checks, and timeouts. These settings provide fine-grained control over how your load balancer behaves. Most of the settings have default values that allow for easy configuration if you need to get started quickly.
    # 
    # Backend services in Google Compute Engine can be either regionally or globally scoped.
    # 
    # * [Global](/compute/docs/reference/rest/{$api_version}/backendServices) * [Regional](/compute/docs/reference/rest/{$api_version}/regionBackendServices)
    # 
    # For more information, see Backend Services.
    # 
    # (== resource_for {$api_version}.backendService ==)
  &quot;affinityCookieTtlSec&quot;: 42, # If set to 0, the cookie is non-persistent and lasts only until the end of the browser session (or equivalent). The maximum allowed value is one day (86,400).
  &quot;backends&quot;: [ # The list of backends that serve this BackendService.
    { # Message containing information of one individual backend.
      &quot;balancingMode&quot;: &quot;A String&quot;, # Specifies the balancing mode for the backend.
          #
          # When choosing a balancing mode, you need to consider the loadBalancingScheme, and protocol for the backend service, as well as the type of backend (instance group or NEG).
          #
          #
          # - If the load balancing mode is CONNECTION, then the load is spread based on how many concurrent connections the backend can handle.
          # You can use the CONNECTION balancing mode if the protocol for the backend service is SSL, TCP, or UDP.
          #
          # If the loadBalancingScheme for the backend service is EXTERNAL (SSL Proxy and TCP Proxy load balancers), you must also specify exactly one of the following parameters: maxConnections (except for regional managed instance groups), maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
          #
          # If the loadBalancingScheme for the backend service is INTERNAL (internal TCP/UDP load balancers), you cannot specify any additional parameters.
          #
          # - If the load balancing mode is RATE, the load is spread based on the rate of HTTP requests per second (RPS).
          # You can use the RATE balancing mode if the protocol for the backend service is HTTP or HTTPS. You must specify exactly one of the following parameters: maxRate (except for regional managed instance groups), maxRatePerInstance, or maxRatePerEndpoint.
          #
          # - If the load balancing mode is UTILIZATION, the load is spread based on the backend utilization of instances in an instance group.
          # You can use the UTILIZATION balancing mode if the loadBalancingScheme of the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED and the backends are instance groups. There are no restrictions on the backend service protocol.
      &quot;capacityScaler&quot;: 3.14, # A multiplier applied to the group&#x27;s maximum servicing capacity (based on UTILIZATION, RATE or CONNECTION). Default value is 1, which means the group will serve up to 100% of its configured capacity (depending on balancingMode). A setting of 0 means the group is completely drained, offering 0% of its available capacity. Valid range is 0.0 and [0.1,1.0]. You cannot configure a setting larger than 0 and smaller than 0.1. You cannot configure a setting of 0 when there is only one backend attached to the backend service.
          #
          # This cannot be used for internal load balancing.
      &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
      &quot;failover&quot;: True or False, # This field designates whether this is a failover backend. More than one failover backend can be configured for a given BackendService.
      &quot;group&quot;: &quot;A String&quot;, # The fully-qualified URL of an instance group or network endpoint group (NEG) resource. The type of backend that a backend service supports depends on the backend service&#x27;s loadBalancingScheme.
          #
          #
          # - When the loadBalancingScheme for the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, the backend can be either an instance group or a NEG. The backends on the backend service must be either all instance groups or all NEGs. You cannot mix instance group and NEG backends on the same backend service.
          #
          #
          # - When the loadBalancingScheme for the backend service is INTERNAL, the backend must be an instance group in the same region as the backend service. NEGs are not supported.
          #
          # You must use the fully-qualified URL (starting with https://www.googleapis.com/) to specify the instance group or NEG. Partial URLs are not supported.
      &quot;maxConnections&quot;: 42, # Defines a target maximum number of simultaneous connections that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is RATE. If the loadBalancingScheme is INTERNAL, then maxConnections is not supported, even though the backend requires a balancing mode of CONNECTION.
      &quot;maxConnectionsPerEndpoint&quot;: 42, # Defines a target maximum number of simultaneous connections for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a maximum number of target maximum simultaneous connections for the NEG. If the backend&#x27;s balancingMode is CONNECTION, and the backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerInstance.
          #
          # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerEndpoint even though its backends require a balancing mode of CONNECTION.
      &quot;maxConnectionsPerInstance&quot;: 42, # Defines a target maximum number of simultaneous connections for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum number of simultaneous connections for the whole instance group. If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerInstance even though its backends require a balancing mode of CONNECTION.
      &quot;maxRate&quot;: 42, # Defines a maximum number of HTTP requests per second (RPS) that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). Must not be defined if the backend is a managed instance group that uses autoscaling based on load balancing.
          #
          # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify maxRate, maxRatePerInstance, or maxRatePerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is CONNECTION.
      &quot;maxRatePerEndpoint&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a target maximum rate for the NEG.
          #
          # If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerInstance.
          #
          # Not available if the backend&#x27;s balancingMode is CONNECTION.
      &quot;maxRatePerInstance&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum rate for the whole instance group.
          #
          # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is CONNECTION.
      &quot;maxUtilization&quot;: 3.14, # Defines the maximum average backend utilization of a backend VM in an instance group. The valid range is [0.0, 1.0]. This is an optional parameter if the backend&#x27;s balancingMode is UTILIZATION.
          #
          # This parameter can be used in conjunction with maxRate, maxRatePerInstance, maxConnections (except for regional managed instance groups), or maxConnectionsPerInstance.
    },
  ],
  &quot;cdnPolicy&quot;: { # Message containing Cloud CDN configuration for a backend service. # Cloud CDN configuration for this BackendService.
    &quot;cacheKeyPolicy&quot;: { # Message containing what to include in the cache key for a request for Cloud CDN. # The CacheKeyPolicy for this CdnPolicy.
      &quot;includeHost&quot;: True or False, # If true, requests to different hosts will be cached separately.
      &quot;includeProtocol&quot;: True or False, # If true, http and https requests will be cached separately.
      &quot;includeQueryString&quot;: True or False, # If true, include query string parameters in the cache key according to query_string_whitelist and query_string_blacklist. If neither is set, the entire query string will be included. If false, the query string will be excluded from the cache key entirely.
      &quot;queryStringBlacklist&quot;: [ # Names of query string parameters to exclude in cache keys. All other parameters will be included. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
        &quot;A String&quot;,
      ],
      &quot;queryStringWhitelist&quot;: [ # Names of query string parameters to include in cache keys. All other parameters will be excluded. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
        &quot;A String&quot;,
      ],
    },
    &quot;signedUrlCacheMaxAgeSec&quot;: &quot;A String&quot;, # Maximum number of seconds the response to a signed URL request will be considered fresh. After this time period, the response will be revalidated before being served. Defaults to 1hr (3600s). When serving responses to signed URL requests, Cloud CDN will internally behave as though all responses from this backend had a &quot;Cache-Control: public, max-age=[TTL]&quot; header, regardless of any existing Cache-Control header. The actual headers served in responses will not be altered.
    &quot;signedUrlKeyNames&quot;: [ # [Output Only] Names of the keys for signing request URLs.
      &quot;A String&quot;,
    ],
  },
  &quot;circuitBreakers&quot;: { # Settings controlling the volume of connections to a backend service. # Settings controlling the volume of connections to a backend service. If not set, this feature is considered disabled.
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;connectTimeout&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The timeout for new network connections to hosts.
      &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
      &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
    },
    &quot;maxConnections&quot;: 42, # The maximum number of connections to the backend service. If not specified, there is no limit.
    &quot;maxPendingRequests&quot;: 42, # The maximum number of pending requests allowed to the backend service. If not specified, there is no limit.
    &quot;maxRequests&quot;: 42, # The maximum number of parallel requests that allowed to the backend service. If not specified, there is no limit.
    &quot;maxRequestsPerConnection&quot;: 42, # Maximum requests for a single connection to the backend service. This parameter is respected by both the HTTP/1.1 and HTTP/2 implementations. If not specified, there is no limit. Setting this parameter to 1 will effectively disable keep alive.
    &quot;maxRetries&quot;: 42, # The maximum number of parallel retries allowed to the backend cluster. If not specified, the default is 1.
  },
  &quot;connectionDraining&quot;: { # Message containing connection draining configuration.
    &quot;drainingTimeoutSec&quot;: 42, # The amount of time in seconds to allow existing connections to persist while on unhealthy backend VMs. Only applicable if the protocol is not UDP. The valid range is [0, 3600].
  },
  &quot;consistentHash&quot;: { # This message defines settings for a consistent hash style load balancer. # Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular destination host will be lost when one or more hosts are added/removed from the destination service. This field specifies parameters that control consistent hashing. This field is only applicable when localityLbPolicy is set to MAGLEV or RING_HASH.
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;httpCookie&quot;: { # The information about the HTTP Cookie on which the hash function is based for load balancing policies that use a consistent hash. # Hash is based on HTTP Cookie. This field describes a HTTP cookie that will be used as the hash key for the consistent hash load balancer. If the cookie is not present, it will be generated. This field is applicable if the sessionAffinity is set to HTTP_COOKIE.
      &quot;name&quot;: &quot;A String&quot;, # Name of the cookie.
      &quot;path&quot;: &quot;A String&quot;, # Path to set for the cookie.
      &quot;ttl&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Lifetime of the cookie.
        &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
        &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
      },
    },
    &quot;httpHeaderName&quot;: &quot;A String&quot;, # The hash based on the value of the specified header field. This field is applicable if the sessionAffinity is set to HEADER_FIELD.
    &quot;minimumRingSize&quot;: &quot;A String&quot;, # The minimum number of virtual nodes to use for the hash ring. Defaults to 1024. Larger ring sizes result in more granular load distributions. If the number of hosts in the load balancing pool is larger than the ring size, each host will be assigned a single virtual node.
  },
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
  &quot;customRequestHeaders&quot;: [ # Headers that the HTTP/S load balancer should add to proxied requests.
    &quot;A String&quot;,
  ],
  &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
  &quot;enableCDN&quot;: True or False, # If true, enables Cloud CDN for the backend service. Only applicable if the loadBalancingScheme is EXTERNAL and the protocol is HTTP or HTTPS.
  &quot;failoverPolicy&quot;: { # Applicable only to Failover for Internal TCP/UDP Load Balancing. On failover or failback, this field indicates whether connection draining will be honored. GCP has a fixed connection draining timeout of 10 minutes. A setting of true terminates existing TCP connections to the active pool during failover and failback, immediately draining traffic. A setting of false allows existing TCP connections to persist, even on VMs no longer in the active pool, for up to the duration of the connection draining timeout (10 minutes). # Applicable only to Failover for Internal TCP/UDP Load Balancing. Requires at least one backend instance group to be defined as a backup (failover) backend.
    &quot;disableConnectionDrainOnFailover&quot;: True or False, # This can be set to true only if the protocol is TCP.
        #
        # The default is false.
    &quot;dropTrafficIfUnhealthy&quot;: True or False, # Applicable only to Failover for Internal TCP/UDP Load Balancing. If set to true, connections to the load balancer are dropped when all primary and all backup backend VMs are unhealthy. If set to false, connections are distributed among all primary VMs when all primary and all backup backend VMs are unhealthy.
        #
        # The default is false.
    &quot;failoverRatio&quot;: 3.14, # Applicable only to Failover for Internal TCP/UDP Load Balancing. The value of the field must be in the range [0, 1]. If the value is 0, the load balancer performs a failover when the number of healthy primary VMs equals zero. For all other values, the load balancer performs a failover when the total number of healthy primary VMs is less than this ratio.
  },
  &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a BackendService. An up-to-date fingerprint must be provided in order to update the BackendService, otherwise the request will fail with error 412 conditionNotMet.
      # 
      # To see the latest fingerprint, make a get() request to retrieve a BackendService.
  &quot;healthChecks&quot;: [ # The list of URLs to the healthChecks, httpHealthChecks (legacy), or httpsHealthChecks (legacy) resource for health checking this backend service. Not all backend services support legacy health checks. See  Load balancer guide. Currently at most one health check can be specified. Backend services with instance group or zonal NEG backends must have a health check. Backend services with internet NEG backends must not have a health check. A health check must
    &quot;A String&quot;,
  ],
  &quot;iap&quot;: { # Identity-Aware Proxy # The configurations for Identity-Aware Proxy on this resource.
    &quot;enabled&quot;: True or False, # Whether the serving infrastructure will authenticate and authorize all incoming requests. If true, the oauth2ClientId and oauth2ClientSecret fields must be non-empty.
    &quot;oauth2ClientId&quot;: &quot;A String&quot;, # OAuth2 client ID to use for the authentication flow.
    &quot;oauth2ClientInfo&quot;: { # [Input Only] OAuth client info required to generate client id to be used for IAP.
      &quot;applicationName&quot;: &quot;A String&quot;, # Application name to be used in OAuth consent screen.
      &quot;clientName&quot;: &quot;A String&quot;, # Name of the client to be generated. Optional - If not provided, the name will be autogenerated by the backend.
      &quot;developerEmailAddress&quot;: &quot;A String&quot;, # Developer&#x27;s information to be used in OAuth consent screen.
    },
    &quot;oauth2ClientSecret&quot;: &quot;A String&quot;, # OAuth2 client secret to use for the authentication flow. For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2ClientSecretSha256 field.
    &quot;oauth2ClientSecretSha256&quot;: &quot;A String&quot;, # [Output Only] SHA256 hash value for the field oauth2_client_secret above.
  },
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
  &quot;kind&quot;: &quot;compute#backendService&quot;, # [Output Only] Type of resource. Always compute#backendService for backend services.
  &quot;loadBalancingScheme&quot;: &quot;A String&quot;, # Specifies the load balancer type. Choose EXTERNAL for load balancers that receive traffic from external clients. Choose INTERNAL for Internal TCP/UDP Load Balancing. Choose INTERNAL_MANAGED for Internal HTTP(S) Load Balancing. Choose INTERNAL_SELF_MANAGED for Traffic Director. A backend service created for one type of load balancing cannot be used with another. For more information, refer to Choosing a load balancer.
  &quot;localityLbPolicy&quot;: &quot;A String&quot;, # The load balancing algorithm used within the scope of the locality. The possible values are:
      # - ROUND_ROBIN: This is a simple policy in which each healthy backend is selected in round robin order. This is the default.
      # - LEAST_REQUEST: An O(1) algorithm which selects two random healthy hosts and picks the host which has fewer active requests.
      # - RING_HASH: The ring/modulo hash load balancer implements consistent hashing to backends. The algorithm has the property that the addition/removal of a host from a set of N hosts only affects 1/N of the requests.
      # - RANDOM: The load balancer selects a random healthy host.
      # - ORIGINAL_DESTINATION: Backend host is selected based on the client connection metadata, i.e., connections are opened to the same address as the destination address of the incoming connection before the connection was redirected to the load balancer.
      # - MAGLEV: used as a drop in replacement for the ring hash load balancer. Maglev is not as stable as ring hash but has faster table lookup build times and host selection times. For more information about Maglev, see https://ai.google/research/pubs/pub44824
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
      # 
      # If sessionAffinity is not NONE, and this field is not set to &gt;MAGLEV or RING_HASH, session affinity settings will not take effect.
  &quot;logConfig&quot;: { # The available logging options for the load balancer traffic served by this backend service. # This field denotes the logging options for the load balancer traffic served by this backend service. If logging is enabled, logs will be exported to Stackdriver.
    &quot;enable&quot;: True or False, # This field denotes whether to enable logging for the load balancer traffic served by this backend service.
    &quot;sampleRate&quot;: 3.14, # This field can only be specified if logging is enabled for this backend service. The value of the field must be in [0, 1]. This configures the sampling rate of requests to the load balancer where 1.0 means all logged requests are reported and 0.0 means no logged requests are reported. The default value is 1.0.
  },
  &quot;name&quot;: &quot;A String&quot;, # 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.
  &quot;network&quot;: &quot;A String&quot;, # The URL of the network to which this backend service belongs. This field can only be spcified when the load balancing scheme is set to INTERNAL.
  &quot;outlierDetection&quot;: { # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. If not set, this feature is considered disabled.
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;baseEjectionTime&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The base time that a host is ejected for. The real ejection time is equal to the base ejection time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s.
      &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
      &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
    },
    &quot;consecutiveErrors&quot;: 42, # Number of errors before a host is ejected from the connection pool. When the backend host is accessed over HTTP, a 5xx return code qualifies as an error. Defaults to 5.
    &quot;consecutiveGatewayFailure&quot;: 42, # The number of consecutive gateway failures (502, 503, 504 status or connection errors that are mapped to one of those status codes) before a consecutive gateway failure ejection occurs. Defaults to 3.
    &quot;enforcingConsecutiveErrors&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0.
    &quot;enforcingConsecutiveGatewayFailure&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
    &quot;enforcingSuccessRate&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
    &quot;interval&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Time interval between ejection analysis sweeps. This can result in both new ejections as well as hosts being returned to service. Defaults to 1 second.
      &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
      &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
    },
    &quot;maxEjectionPercent&quot;: 42, # Maximum percentage of hosts in the load balancing pool for the backend service that can be ejected. Defaults to 50%.
    &quot;successRateMinimumHosts&quot;: 42, # The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5.
    &quot;successRateRequestVolume&quot;: 42, # The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100.
    &quot;successRateStdevFactor&quot;: 42, # This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success rate, and the product of this factor and the standard deviation of the mean success rate: mean - (stdev * success_rate_stdev_factor). This factor is divided by a thousand to get a double. That is, if the desired factor is 1.9, the runtime value should be 1900. Defaults to 1900.
  },
  &quot;port&quot;: 42, # Deprecated in favor of portName. The TCP port to connect on the backend. The default value is 80.
      # 
      # This cannot be used if the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
  &quot;portName&quot;: &quot;A String&quot;, # A named port on a backend instance group representing the port for communication to the backend VMs in that group. Required when the loadBalancingScheme is EXTERNAL, INTERNAL_MANAGED, or INTERNAL_SELF_MANAGED and the backends are instance groups. The named port must be defined on each backend instance group. This parameter has no meaning if the backends are NEGs.
      # 
      # 
      # 
      # Must be omitted when the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
  &quot;protocol&quot;: &quot;A String&quot;, # The protocol this BackendService uses to communicate with backends.
      # 
      # Possible values are HTTP, HTTPS, HTTP2, TCP, SSL, or UDP. depending on the chosen load balancer or Traffic Director configuration. Refer to the documentation for the load balancer or for Traffic Director for more information.
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] URL of the region where the regional backend service resides. This field is not applicable to global backend services. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
  &quot;securityPolicy&quot;: &quot;A String&quot;, # [Output Only] The resource URL for the security policy associated with this backend service.
  &quot;securitySettings&quot;: { # The authentication and authorization settings for a BackendService. # This field specifies the security policy that applies to this backend service. This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;authentication&quot;: &quot;A String&quot;, # [Deprecated] Use clientTlsPolicy instead.
    &quot;authenticationPolicy&quot;: { # [Deprecated] The authentication settings for the backend service. The authentication settings for the backend service. # [Deprecated] Authentication policy defines what authentication methods can be accepted on backends, and if authenticated, which method/certificate will set the request principal. request principal.
      &quot;origins&quot;: [ # List of authentication methods that can be used for origin authentication. Similar to peers, these will be evaluated in order the first valid one will be used to set origin identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if origin authentication is not required.
        { # [Deprecated] Configuration for the origin authentication method. Configuration for the origin authentication method.
          &quot;jwt&quot;: { # [Deprecated] JWT configuration for origin authentication. JWT configuration for origin authentication.
            &quot;audiences&quot;: [ # A JWT containing any of these audiences will be accepted. The service name will be accepted if audiences is empty. Examples: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com
              &quot;A String&quot;,
            ],
            &quot;issuer&quot;: &quot;A String&quot;, # Identifies the issuer that issued the JWT, which is usually a URL or an email address. Examples: https://securetoken.google.com, 1234567-compute@developer.gserviceaccount.com
            &quot;jwksPublicKeys&quot;: &quot;A String&quot;, # The provider&#x27;s public key set to validate the signature of the JWT.
            &quot;jwtHeaders&quot;: [ # jwt_headers and jwt_params define where to extract the JWT from an HTTP request. If no explicit location is specified, the following default locations are tried in order:
                #
                # 1. The Authorization header using the Bearer schema. See `here `_. Example:
                #
                # Authorization: Bearer .
                #
                # 2. `access_token` query parameter. See `this `_
                #
                # Multiple JWTs can be verified for a request. Each JWT has to be extracted from the locations its issuer specified or from the default locations.
                #
                # This field is set if JWT is sent in a request header. This field specifies the header name. For example, if `header=x-goog-iap-jwt-assertion`, the header format will be x-goog-iap-jwt-assertion: .
              { # [Deprecated] This message specifies a header location to extract JWT token. This message specifies a header location to extract JWT token.
                &quot;name&quot;: &quot;A String&quot;, # The HTTP header name.
                &quot;valuePrefix&quot;: &quot;A String&quot;, # The value prefix. The value format is &quot;value_prefix&quot; For example, for &quot;Authorization: Bearer &quot;, value_prefix=&quot;Bearer &quot; with a space at the end.
              },
            ],
            &quot;jwtParams&quot;: [ # This field is set if JWT is sent in a query parameter. This field specifies the query parameter name. For example, if jwt_params[0] is jwt_token, the JWT format in the query parameter is /path?jwt_token=.
              &quot;A String&quot;,
            ],
          },
        },
      ],
      &quot;peers&quot;: [ # List of authentication methods that can be used for peer authentication. They will be evaluated in order the first valid one will be used to set peer identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if peer authentication is not required.
        { # [Deprecated] Configuration for the peer authentication method. Configuration for the peer authentication method.
          &quot;mtls&quot;: { # [Deprecated] Configuration for the mutual Tls mode for peer authentication. Configuration for the mutual Tls mode for peer authentication. # Set if mTLS is used for peer authentication.
            &quot;mode&quot;: &quot;A String&quot;, # Specifies if the server TLS is configured to be strict or permissive. This field can be set to one of the following: STRICT: Client certificate must be presented, connection is in TLS. PERMISSIVE: Client certificate can be omitted, connection can be either plaintext or TLS.
          },
        },
      ],
      &quot;principalBinding&quot;: &quot;A String&quot;, # Define whether peer or origin identity should be used for principal. Default value is USE_PEER. If peer (or origin) identity is not available, either because peer/origin authentication is not defined, or failed, principal will be left unset. In other words, binding rule does not affect the decision to accept or reject request. This field can be set to one of the following: USE_PEER: Principal will be set to the identity from peer authentication. USE_ORIGIN: Principal will be set to the identity from origin authentication.
      &quot;serverTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain server-side security certificates and identity information.
        &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
          &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
            &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
          },
          &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
        },
        &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
          &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
          &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
        },
      },
    },
    &quot;authorizationConfig&quot;: { # [Deprecated] Authorization configuration provides service-level and method-level access control for a service. control for a service. # [Deprecated] Authorization config defines the Role Based Access Control (RBAC) config. Authorization config defines the Role Based Access Control (RBAC) config.
      &quot;policies&quot;: [ # List of RbacPolicies.
        {
          &quot;name&quot;: &quot;A String&quot;, # Name of the RbacPolicy.
          &quot;permissions&quot;: [ # The list of permissions.
            { # [Deprecated] All fields defined in a permission are ANDed.
              &quot;constraints&quot;: [ # Extra custom constraints. The constraints are ANDed together.
                { # Custom constraint that specifies a key and a list of allowed values for Istio attributes.
                  &quot;key&quot;: &quot;A String&quot;, # Key of the constraint.
                  &quot;values&quot;: [ # A list of allowed values.
                    &quot;A String&quot;,
                  ],
                },
              ],
              &quot;hosts&quot;: [ # Used in Ingress or Egress Gateway cases to specify hosts that the policy applies to. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;methods&quot;: [ # HTTP method.
                &quot;A String&quot;,
              ],
              &quot;notHosts&quot;: [ # Negate of hosts. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notMethods&quot;: [ # Negate of methods. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notPaths&quot;: [ # Negate of paths. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notPorts&quot;: [ # Negate of ports. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;paths&quot;: [ # HTTP request paths or gRPC methods. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;ports&quot;: [ # Port names or numbers.
                &quot;A String&quot;,
              ],
            },
          ],
          &quot;principals&quot;: [ # The list of principals.
            { # [Deprecated] All fields defined in a principal are ANDed.
              &quot;condition&quot;: &quot;A String&quot;, # An expression to specify custom condition.
              &quot;groups&quot;: [ # The groups the principal belongs to. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;ips&quot;: [ # IPv4 or IPv6 address or range (In CIDR format)
                &quot;A String&quot;,
              ],
              &quot;namespaces&quot;: [ # The namespaces. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;notGroups&quot;: [ # Negate of groups. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notIps&quot;: [ # Negate of IPs. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notNamespaces&quot;: [ # Negate of namespaces. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notUsers&quot;: [ # Negate of users. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;properties&quot;: { # A map of Istio attribute to expected values. Exact match, prefix match, and suffix match are supported for values. For example, `request.headers[version]: &quot;v1&quot;`. The properties are ANDed together.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;users&quot;: [ # The user names/IDs or service accounts. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
            },
          ],
        },
      ],
    },
    &quot;clientTlsPolicy&quot;: &quot;A String&quot;, # Optional. A URL referring to a networksecurity.ClientTlsPolicy resource that describes how clients should authenticate with this service&#x27;s backends.
        # clientTlsPolicy only applies to a global BackendService with the loadBalancingScheme set to INTERNAL_SELF_MANAGED.
        # If left blank, communications are not encrypted.
    &quot;clientTlsSettings&quot;: { # [Deprecated] The client side authentication settings for connection originating from the backend service. the backend service. # [Deprecated] TLS Settings for the backend service.
      &quot;clientTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain client-side security certificates and identity information. This field is only applicable when mode is set to MUTUAL.
        &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
          &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
            &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
          },
          &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
        },
        &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
          &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
          &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
        },
      },
      &quot;mode&quot;: &quot;A String&quot;, # Indicates whether connections to this port should be secured using TLS. The value of this field determines how TLS is enforced. This can be set to one of the following values: DISABLE: Do not setup a TLS connection to the backends. SIMPLE: Originate a TLS connection to the backends. MUTUAL: Secure connections to the backends using mutual TLS by presenting client certificates for authentication.
      &quot;sni&quot;: &quot;A String&quot;, # SNI string to present to the server during TLS handshake. This field is applicable only when mode is SIMPLE or MUTUAL.
      &quot;subjectAltNames&quot;: [ # A list of alternate names to verify the subject identity in the certificate.If specified, the proxy will verify that the server certificate&#x27;s subject alt name matches one of the specified values. This field is applicable only when mode is SIMPLE or MUTUAL.
        &quot;A String&quot;,
      ],
    },
    &quot;subjectAltNames&quot;: [ # Optional. A list of Subject Alternative Names (SANs) that the client verifies during a mutual TLS handshake with an server/endpoint for this BackendService. When the server presents its X.509 certificate to the client, the client inspects the certificate&#x27;s subjectAltName field. If the field contains one of the specified values, the communication continues. Otherwise, it fails. This additional check enables the client to verify that the server is authorized to run the requested service.
        # Note that the contents of the server certificate&#x27;s subjectAltName field are configured by the Public Key Infrastructure which provisions server identities.
        # Only applies to a global BackendService with loadBalancingScheme set to INTERNAL_SELF_MANAGED. Only applies when BackendService has an attached clientTlsPolicy with clientCertificate (mTLS mode).
      &quot;A String&quot;,
    ],
  },
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
  &quot;sessionAffinity&quot;: &quot;A String&quot;, # Type of session affinity to use. The default is NONE. Session affinity is not applicable if the --protocol is UDP.
      # 
      # When the loadBalancingScheme is EXTERNAL, possible values are NONE, CLIENT_IP, or GENERATED_COOKIE. You can use GENERATED_COOKIE if the protocol is HTTP or HTTPS.
      # 
      # When the loadBalancingScheme is INTERNAL, possible values are NONE, CLIENT_IP, CLIENT_IP_PROTO, or CLIENT_IP_PORT_PROTO.
      # 
      # When the loadBalancingScheme is INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, possible values are NONE, CLIENT_IP, GENERATED_COOKIE, HEADER_FIELD, or HTTP_COOKIE.
  &quot;timeoutSec&quot;: 42, # The backend service timeout has a different meaning depending on the type of load balancer. For more information see,  Backend service settings The default is 30 seconds.
}

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # Google Compute Engine has three Operation resources:
      #
      # * [Global](/compute/docs/reference/rest/{$api_version}/globalOperations) * [Regional](/compute/docs/reference/rest/{$api_version}/regionOperations) * [Zonal](/compute/docs/reference/rest/{$api_version}/zoneOperations)
      #
      # You can use an operation resource to manage asynchronous API requests. For more information, read Handling API responses.
      #
      # Operations can be global, regional or zonal.
      # - For global operations, use the `globalOperations` resource.
      # - For regional operations, use the `regionOperations` resource.
      # - For zonal operations, use the `zonalOperations` resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for {$api_version}.globalOperations ==) (== resource_for {$api_version}.regionOperations ==) (== resource_for {$api_version}.zoneOperations ==)
    &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
    &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is set when the operation is created.
    &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
        {
          &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
          &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
          &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
        },
      ],
    },
    &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as `NOT FOUND`.
    &quot;httpErrorStatusCode&quot;: 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.
    &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is defined by the server.
    &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for Operation resources.
    &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
    &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`, `update`, or `delete`, and so on.
    &quot;progress&quot;: 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.
    &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
    &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
    &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the following: `PENDING`, `RUNNING`, or `DONE`.
    &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the operation.
    &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    &quot;targetLink&quot;: &quot;A String&quot;, # [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.
    &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example: `user@example.com`.
    &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example:
            # &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
          {
            &quot;key&quot;: &quot;A String&quot;, # [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).
            &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
          },
        ],
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
      },
    ],
    &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
  }</pre>
</div>

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

Args:
  project: string, Project ID for this request. (required)
  filter: string, A filter expression that filters resources listed in the response. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either `=`, `!=`, `&gt;`, or `&lt;`.

For example, if you are filtering Compute Engine instances, you can exclude instances named `example-instance` by specifying `name != example-instance`.

You can also filter nested fields. For example, you could specify `scheduling.automaticRestart = false` to include instances only if they are not scheduled for automatic restarts. You can use filtering on nested fields to filter based on resource labels.

To filter on multiple expressions, provide each separate expression within parentheses. For example: ``` (scheduling.automaticRestart = true) (cpuPlatform = &quot;Intel Skylake&quot;) ``` By default, each expression is an `AND` expression. However, you can include `AND` and `OR` expressions explicitly. For example: ``` (cpuPlatform = &quot;Intel Skylake&quot;) OR (cpuPlatform = &quot;Intel Broadwell&quot;) AND (scheduling.automaticRestart = true) ```
  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`)
  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=&quot;creationTimestamp desc&quot;`. 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.
  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.
  returnPartialSuccess: boolean, Opt-in for partial success behavior which provides partial results in case of failure. The default value is false and the logic is the same as today.

Returns:
  An object of the form:

    { # Contains a list of BackendService resources.
    &quot;id&quot;: &quot;A String&quot;, # [Output Only] Unique identifier for the resource; defined by the server.
    &quot;items&quot;: [ # A list of BackendService resources.
      { # Represents a Backend Service resource.
          #
          # A backend service defines how Google Cloud load balancers distribute traffic. The backend service configuration contains a set of values, such as the protocol used to connect to backends, various distribution and session settings, health checks, and timeouts. These settings provide fine-grained control over how your load balancer behaves. Most of the settings have default values that allow for easy configuration if you need to get started quickly.
          #
          # Backend services in Google Compute Engine can be either regionally or globally scoped.
          #
          # * [Global](/compute/docs/reference/rest/{$api_version}/backendServices) * [Regional](/compute/docs/reference/rest/{$api_version}/regionBackendServices)
          #
          # For more information, see Backend Services.
          #
          # (== resource_for {$api_version}.backendService ==)
        &quot;affinityCookieTtlSec&quot;: 42, # If set to 0, the cookie is non-persistent and lasts only until the end of the browser session (or equivalent). The maximum allowed value is one day (86,400).
        &quot;backends&quot;: [ # The list of backends that serve this BackendService.
          { # Message containing information of one individual backend.
            &quot;balancingMode&quot;: &quot;A String&quot;, # Specifies the balancing mode for the backend.
                #
                # When choosing a balancing mode, you need to consider the loadBalancingScheme, and protocol for the backend service, as well as the type of backend (instance group or NEG).
                #
                #
                # - If the load balancing mode is CONNECTION, then the load is spread based on how many concurrent connections the backend can handle.
                # You can use the CONNECTION balancing mode if the protocol for the backend service is SSL, TCP, or UDP.
                #
                # If the loadBalancingScheme for the backend service is EXTERNAL (SSL Proxy and TCP Proxy load balancers), you must also specify exactly one of the following parameters: maxConnections (except for regional managed instance groups), maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
                #
                # If the loadBalancingScheme for the backend service is INTERNAL (internal TCP/UDP load balancers), you cannot specify any additional parameters.
                #
                # - If the load balancing mode is RATE, the load is spread based on the rate of HTTP requests per second (RPS).
                # You can use the RATE balancing mode if the protocol for the backend service is HTTP or HTTPS. You must specify exactly one of the following parameters: maxRate (except for regional managed instance groups), maxRatePerInstance, or maxRatePerEndpoint.
                #
                # - If the load balancing mode is UTILIZATION, the load is spread based on the backend utilization of instances in an instance group.
                # You can use the UTILIZATION balancing mode if the loadBalancingScheme of the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED and the backends are instance groups. There are no restrictions on the backend service protocol.
            &quot;capacityScaler&quot;: 3.14, # A multiplier applied to the group&#x27;s maximum servicing capacity (based on UTILIZATION, RATE or CONNECTION). Default value is 1, which means the group will serve up to 100% of its configured capacity (depending on balancingMode). A setting of 0 means the group is completely drained, offering 0% of its available capacity. Valid range is 0.0 and [0.1,1.0]. You cannot configure a setting larger than 0 and smaller than 0.1. You cannot configure a setting of 0 when there is only one backend attached to the backend service.
                #
                # This cannot be used for internal load balancing.
            &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
            &quot;failover&quot;: True or False, # This field designates whether this is a failover backend. More than one failover backend can be configured for a given BackendService.
            &quot;group&quot;: &quot;A String&quot;, # The fully-qualified URL of an instance group or network endpoint group (NEG) resource. The type of backend that a backend service supports depends on the backend service&#x27;s loadBalancingScheme.
                #
                #
                # - When the loadBalancingScheme for the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, the backend can be either an instance group or a NEG. The backends on the backend service must be either all instance groups or all NEGs. You cannot mix instance group and NEG backends on the same backend service.
                #
                #
                # - When the loadBalancingScheme for the backend service is INTERNAL, the backend must be an instance group in the same region as the backend service. NEGs are not supported.
                #
                # You must use the fully-qualified URL (starting with https://www.googleapis.com/) to specify the instance group or NEG. Partial URLs are not supported.
            &quot;maxConnections&quot;: 42, # Defines a target maximum number of simultaneous connections that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
                #
                # Not available if the backend&#x27;s balancingMode is RATE. If the loadBalancingScheme is INTERNAL, then maxConnections is not supported, even though the backend requires a balancing mode of CONNECTION.
            &quot;maxConnectionsPerEndpoint&quot;: 42, # Defines a target maximum number of simultaneous connections for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a maximum number of target maximum simultaneous connections for the NEG. If the backend&#x27;s balancingMode is CONNECTION, and the backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerInstance.
                #
                # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerEndpoint even though its backends require a balancing mode of CONNECTION.
            &quot;maxConnectionsPerInstance&quot;: 42, # Defines a target maximum number of simultaneous connections for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum number of simultaneous connections for the whole instance group. If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerEndpoint.
                #
                # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerInstance even though its backends require a balancing mode of CONNECTION.
            &quot;maxRate&quot;: 42, # Defines a maximum number of HTTP requests per second (RPS) that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). Must not be defined if the backend is a managed instance group that uses autoscaling based on load balancing.
                #
                # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify maxRate, maxRatePerInstance, or maxRatePerEndpoint.
                #
                # Not available if the backend&#x27;s balancingMode is CONNECTION.
            &quot;maxRatePerEndpoint&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a target maximum rate for the NEG.
                #
                # If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerInstance.
                #
                # Not available if the backend&#x27;s balancingMode is CONNECTION.
            &quot;maxRatePerInstance&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum rate for the whole instance group.
                #
                # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerEndpoint.
                #
                # Not available if the backend&#x27;s balancingMode is CONNECTION.
            &quot;maxUtilization&quot;: 3.14, # Defines the maximum average backend utilization of a backend VM in an instance group. The valid range is [0.0, 1.0]. This is an optional parameter if the backend&#x27;s balancingMode is UTILIZATION.
                #
                # This parameter can be used in conjunction with maxRate, maxRatePerInstance, maxConnections (except for regional managed instance groups), or maxConnectionsPerInstance.
          },
        ],
        &quot;cdnPolicy&quot;: { # Message containing Cloud CDN configuration for a backend service. # Cloud CDN configuration for this BackendService.
          &quot;cacheKeyPolicy&quot;: { # Message containing what to include in the cache key for a request for Cloud CDN. # The CacheKeyPolicy for this CdnPolicy.
            &quot;includeHost&quot;: True or False, # If true, requests to different hosts will be cached separately.
            &quot;includeProtocol&quot;: True or False, # If true, http and https requests will be cached separately.
            &quot;includeQueryString&quot;: True or False, # If true, include query string parameters in the cache key according to query_string_whitelist and query_string_blacklist. If neither is set, the entire query string will be included. If false, the query string will be excluded from the cache key entirely.
            &quot;queryStringBlacklist&quot;: [ # Names of query string parameters to exclude in cache keys. All other parameters will be included. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
              &quot;A String&quot;,
            ],
            &quot;queryStringWhitelist&quot;: [ # Names of query string parameters to include in cache keys. All other parameters will be excluded. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
              &quot;A String&quot;,
            ],
          },
          &quot;signedUrlCacheMaxAgeSec&quot;: &quot;A String&quot;, # Maximum number of seconds the response to a signed URL request will be considered fresh. After this time period, the response will be revalidated before being served. Defaults to 1hr (3600s). When serving responses to signed URL requests, Cloud CDN will internally behave as though all responses from this backend had a &quot;Cache-Control: public, max-age=[TTL]&quot; header, regardless of any existing Cache-Control header. The actual headers served in responses will not be altered.
          &quot;signedUrlKeyNames&quot;: [ # [Output Only] Names of the keys for signing request URLs.
            &quot;A String&quot;,
          ],
        },
        &quot;circuitBreakers&quot;: { # Settings controlling the volume of connections to a backend service. # Settings controlling the volume of connections to a backend service. If not set, this feature is considered disabled.
            #
            # This field is applicable to either:
            # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
            # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
          &quot;connectTimeout&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The timeout for new network connections to hosts.
            &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
            &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
          },
          &quot;maxConnections&quot;: 42, # The maximum number of connections to the backend service. If not specified, there is no limit.
          &quot;maxPendingRequests&quot;: 42, # The maximum number of pending requests allowed to the backend service. If not specified, there is no limit.
          &quot;maxRequests&quot;: 42, # The maximum number of parallel requests that allowed to the backend service. If not specified, there is no limit.
          &quot;maxRequestsPerConnection&quot;: 42, # Maximum requests for a single connection to the backend service. This parameter is respected by both the HTTP/1.1 and HTTP/2 implementations. If not specified, there is no limit. Setting this parameter to 1 will effectively disable keep alive.
          &quot;maxRetries&quot;: 42, # The maximum number of parallel retries allowed to the backend cluster. If not specified, the default is 1.
        },
        &quot;connectionDraining&quot;: { # Message containing connection draining configuration.
          &quot;drainingTimeoutSec&quot;: 42, # The amount of time in seconds to allow existing connections to persist while on unhealthy backend VMs. Only applicable if the protocol is not UDP. The valid range is [0, 3600].
        },
        &quot;consistentHash&quot;: { # This message defines settings for a consistent hash style load balancer. # Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular destination host will be lost when one or more hosts are added/removed from the destination service. This field specifies parameters that control consistent hashing. This field is only applicable when localityLbPolicy is set to MAGLEV or RING_HASH.
            #
            # This field is applicable to either:
            # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
            # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
          &quot;httpCookie&quot;: { # The information about the HTTP Cookie on which the hash function is based for load balancing policies that use a consistent hash. # Hash is based on HTTP Cookie. This field describes a HTTP cookie that will be used as the hash key for the consistent hash load balancer. If the cookie is not present, it will be generated. This field is applicable if the sessionAffinity is set to HTTP_COOKIE.
            &quot;name&quot;: &quot;A String&quot;, # Name of the cookie.
            &quot;path&quot;: &quot;A String&quot;, # Path to set for the cookie.
            &quot;ttl&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Lifetime of the cookie.
              &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
              &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
            },
          },
          &quot;httpHeaderName&quot;: &quot;A String&quot;, # The hash based on the value of the specified header field. This field is applicable if the sessionAffinity is set to HEADER_FIELD.
          &quot;minimumRingSize&quot;: &quot;A String&quot;, # The minimum number of virtual nodes to use for the hash ring. Defaults to 1024. Larger ring sizes result in more granular load distributions. If the number of hosts in the load balancing pool is larger than the ring size, each host will be assigned a single virtual node.
        },
        &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
        &quot;customRequestHeaders&quot;: [ # Headers that the HTTP/S load balancer should add to proxied requests.
          &quot;A String&quot;,
        ],
        &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
        &quot;enableCDN&quot;: True or False, # If true, enables Cloud CDN for the backend service. Only applicable if the loadBalancingScheme is EXTERNAL and the protocol is HTTP or HTTPS.
        &quot;failoverPolicy&quot;: { # Applicable only to Failover for Internal TCP/UDP Load Balancing. On failover or failback, this field indicates whether connection draining will be honored. GCP has a fixed connection draining timeout of 10 minutes. A setting of true terminates existing TCP connections to the active pool during failover and failback, immediately draining traffic. A setting of false allows existing TCP connections to persist, even on VMs no longer in the active pool, for up to the duration of the connection draining timeout (10 minutes). # Applicable only to Failover for Internal TCP/UDP Load Balancing. Requires at least one backend instance group to be defined as a backup (failover) backend.
          &quot;disableConnectionDrainOnFailover&quot;: True or False, # This can be set to true only if the protocol is TCP.
              #
              # The default is false.
          &quot;dropTrafficIfUnhealthy&quot;: True or False, # Applicable only to Failover for Internal TCP/UDP Load Balancing. If set to true, connections to the load balancer are dropped when all primary and all backup backend VMs are unhealthy. If set to false, connections are distributed among all primary VMs when all primary and all backup backend VMs are unhealthy.
              #
              # The default is false.
          &quot;failoverRatio&quot;: 3.14, # Applicable only to Failover for Internal TCP/UDP Load Balancing. The value of the field must be in the range [0, 1]. If the value is 0, the load balancer performs a failover when the number of healthy primary VMs equals zero. For all other values, the load balancer performs a failover when the total number of healthy primary VMs is less than this ratio.
        },
        &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a BackendService. An up-to-date fingerprint must be provided in order to update the BackendService, otherwise the request will fail with error 412 conditionNotMet.
            #
            # To see the latest fingerprint, make a get() request to retrieve a BackendService.
        &quot;healthChecks&quot;: [ # The list of URLs to the healthChecks, httpHealthChecks (legacy), or httpsHealthChecks (legacy) resource for health checking this backend service. Not all backend services support legacy health checks. See  Load balancer guide. Currently at most one health check can be specified. Backend services with instance group or zonal NEG backends must have a health check. Backend services with internet NEG backends must not have a health check. A health check must
          &quot;A String&quot;,
        ],
        &quot;iap&quot;: { # Identity-Aware Proxy # The configurations for Identity-Aware Proxy on this resource.
          &quot;enabled&quot;: True or False, # Whether the serving infrastructure will authenticate and authorize all incoming requests. If true, the oauth2ClientId and oauth2ClientSecret fields must be non-empty.
          &quot;oauth2ClientId&quot;: &quot;A String&quot;, # OAuth2 client ID to use for the authentication flow.
          &quot;oauth2ClientInfo&quot;: { # [Input Only] OAuth client info required to generate client id to be used for IAP.
            &quot;applicationName&quot;: &quot;A String&quot;, # Application name to be used in OAuth consent screen.
            &quot;clientName&quot;: &quot;A String&quot;, # Name of the client to be generated. Optional - If not provided, the name will be autogenerated by the backend.
            &quot;developerEmailAddress&quot;: &quot;A String&quot;, # Developer&#x27;s information to be used in OAuth consent screen.
          },
          &quot;oauth2ClientSecret&quot;: &quot;A String&quot;, # OAuth2 client secret to use for the authentication flow. For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2ClientSecretSha256 field.
          &quot;oauth2ClientSecretSha256&quot;: &quot;A String&quot;, # [Output Only] SHA256 hash value for the field oauth2_client_secret above.
        },
        &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
        &quot;kind&quot;: &quot;compute#backendService&quot;, # [Output Only] Type of resource. Always compute#backendService for backend services.
        &quot;loadBalancingScheme&quot;: &quot;A String&quot;, # Specifies the load balancer type. Choose EXTERNAL for load balancers that receive traffic from external clients. Choose INTERNAL for Internal TCP/UDP Load Balancing. Choose INTERNAL_MANAGED for Internal HTTP(S) Load Balancing. Choose INTERNAL_SELF_MANAGED for Traffic Director. A backend service created for one type of load balancing cannot be used with another. For more information, refer to Choosing a load balancer.
        &quot;localityLbPolicy&quot;: &quot;A String&quot;, # The load balancing algorithm used within the scope of the locality. The possible values are:
            # - ROUND_ROBIN: This is a simple policy in which each healthy backend is selected in round robin order. This is the default.
            # - LEAST_REQUEST: An O(1) algorithm which selects two random healthy hosts and picks the host which has fewer active requests.
            # - RING_HASH: The ring/modulo hash load balancer implements consistent hashing to backends. The algorithm has the property that the addition/removal of a host from a set of N hosts only affects 1/N of the requests.
            # - RANDOM: The load balancer selects a random healthy host.
            # - ORIGINAL_DESTINATION: Backend host is selected based on the client connection metadata, i.e., connections are opened to the same address as the destination address of the incoming connection before the connection was redirected to the load balancer.
            # - MAGLEV: used as a drop in replacement for the ring hash load balancer. Maglev is not as stable as ring hash but has faster table lookup build times and host selection times. For more information about Maglev, see https://ai.google/research/pubs/pub44824
            #
            # This field is applicable to either:
            # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
            # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
            #
            # If sessionAffinity is not NONE, and this field is not set to &gt;MAGLEV or RING_HASH, session affinity settings will not take effect.
        &quot;logConfig&quot;: { # The available logging options for the load balancer traffic served by this backend service. # This field denotes the logging options for the load balancer traffic served by this backend service. If logging is enabled, logs will be exported to Stackdriver.
          &quot;enable&quot;: True or False, # This field denotes whether to enable logging for the load balancer traffic served by this backend service.
          &quot;sampleRate&quot;: 3.14, # This field can only be specified if logging is enabled for this backend service. The value of the field must be in [0, 1]. This configures the sampling rate of requests to the load balancer where 1.0 means all logged requests are reported and 0.0 means no logged requests are reported. The default value is 1.0.
        },
        &quot;name&quot;: &quot;A String&quot;, # 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.
        &quot;network&quot;: &quot;A String&quot;, # The URL of the network to which this backend service belongs. This field can only be spcified when the load balancing scheme is set to INTERNAL.
        &quot;outlierDetection&quot;: { # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. If not set, this feature is considered disabled.
            #
            # This field is applicable to either:
            # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
            # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
          &quot;baseEjectionTime&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The base time that a host is ejected for. The real ejection time is equal to the base ejection time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s.
            &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
            &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
          },
          &quot;consecutiveErrors&quot;: 42, # Number of errors before a host is ejected from the connection pool. When the backend host is accessed over HTTP, a 5xx return code qualifies as an error. Defaults to 5.
          &quot;consecutiveGatewayFailure&quot;: 42, # The number of consecutive gateway failures (502, 503, 504 status or connection errors that are mapped to one of those status codes) before a consecutive gateway failure ejection occurs. Defaults to 3.
          &quot;enforcingConsecutiveErrors&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0.
          &quot;enforcingConsecutiveGatewayFailure&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
          &quot;enforcingSuccessRate&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
          &quot;interval&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Time interval between ejection analysis sweeps. This can result in both new ejections as well as hosts being returned to service. Defaults to 1 second.
            &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
            &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
          },
          &quot;maxEjectionPercent&quot;: 42, # Maximum percentage of hosts in the load balancing pool for the backend service that can be ejected. Defaults to 50%.
          &quot;successRateMinimumHosts&quot;: 42, # The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5.
          &quot;successRateRequestVolume&quot;: 42, # The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100.
          &quot;successRateStdevFactor&quot;: 42, # This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success rate, and the product of this factor and the standard deviation of the mean success rate: mean - (stdev * success_rate_stdev_factor). This factor is divided by a thousand to get a double. That is, if the desired factor is 1.9, the runtime value should be 1900. Defaults to 1900.
        },
        &quot;port&quot;: 42, # Deprecated in favor of portName. The TCP port to connect on the backend. The default value is 80.
            #
            # This cannot be used if the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
        &quot;portName&quot;: &quot;A String&quot;, # A named port on a backend instance group representing the port for communication to the backend VMs in that group. Required when the loadBalancingScheme is EXTERNAL, INTERNAL_MANAGED, or INTERNAL_SELF_MANAGED and the backends are instance groups. The named port must be defined on each backend instance group. This parameter has no meaning if the backends are NEGs.
            #
            #
            #
            # Must be omitted when the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
        &quot;protocol&quot;: &quot;A String&quot;, # The protocol this BackendService uses to communicate with backends.
            #
            # Possible values are HTTP, HTTPS, HTTP2, TCP, SSL, or UDP. depending on the chosen load balancer or Traffic Director configuration. Refer to the documentation for the load balancer or for Traffic Director for more information.
        &quot;region&quot;: &quot;A String&quot;, # [Output Only] URL of the region where the regional backend service resides. This field is not applicable to global backend services. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
        &quot;securityPolicy&quot;: &quot;A String&quot;, # [Output Only] The resource URL for the security policy associated with this backend service.
        &quot;securitySettings&quot;: { # The authentication and authorization settings for a BackendService. # This field specifies the security policy that applies to this backend service. This field is applicable to either:
            # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
            # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
          &quot;authentication&quot;: &quot;A String&quot;, # [Deprecated] Use clientTlsPolicy instead.
          &quot;authenticationPolicy&quot;: { # [Deprecated] The authentication settings for the backend service. The authentication settings for the backend service. # [Deprecated] Authentication policy defines what authentication methods can be accepted on backends, and if authenticated, which method/certificate will set the request principal. request principal.
            &quot;origins&quot;: [ # List of authentication methods that can be used for origin authentication. Similar to peers, these will be evaluated in order the first valid one will be used to set origin identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if origin authentication is not required.
              { # [Deprecated] Configuration for the origin authentication method. Configuration for the origin authentication method.
                &quot;jwt&quot;: { # [Deprecated] JWT configuration for origin authentication. JWT configuration for origin authentication.
                  &quot;audiences&quot;: [ # A JWT containing any of these audiences will be accepted. The service name will be accepted if audiences is empty. Examples: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com
                    &quot;A String&quot;,
                  ],
                  &quot;issuer&quot;: &quot;A String&quot;, # Identifies the issuer that issued the JWT, which is usually a URL or an email address. Examples: https://securetoken.google.com, 1234567-compute@developer.gserviceaccount.com
                  &quot;jwksPublicKeys&quot;: &quot;A String&quot;, # The provider&#x27;s public key set to validate the signature of the JWT.
                  &quot;jwtHeaders&quot;: [ # jwt_headers and jwt_params define where to extract the JWT from an HTTP request. If no explicit location is specified, the following default locations are tried in order:
                      #
                      # 1. The Authorization header using the Bearer schema. See `here `_. Example:
                      #
                      # Authorization: Bearer .
                      #
                      # 2. `access_token` query parameter. See `this `_
                      #
                      # Multiple JWTs can be verified for a request. Each JWT has to be extracted from the locations its issuer specified or from the default locations.
                      #
                      # This field is set if JWT is sent in a request header. This field specifies the header name. For example, if `header=x-goog-iap-jwt-assertion`, the header format will be x-goog-iap-jwt-assertion: .
                    { # [Deprecated] This message specifies a header location to extract JWT token. This message specifies a header location to extract JWT token.
                      &quot;name&quot;: &quot;A String&quot;, # The HTTP header name.
                      &quot;valuePrefix&quot;: &quot;A String&quot;, # The value prefix. The value format is &quot;value_prefix&quot; For example, for &quot;Authorization: Bearer &quot;, value_prefix=&quot;Bearer &quot; with a space at the end.
                    },
                  ],
                  &quot;jwtParams&quot;: [ # This field is set if JWT is sent in a query parameter. This field specifies the query parameter name. For example, if jwt_params[0] is jwt_token, the JWT format in the query parameter is /path?jwt_token=.
                    &quot;A String&quot;,
                  ],
                },
              },
            ],
            &quot;peers&quot;: [ # List of authentication methods that can be used for peer authentication. They will be evaluated in order the first valid one will be used to set peer identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if peer authentication is not required.
              { # [Deprecated] Configuration for the peer authentication method. Configuration for the peer authentication method.
                &quot;mtls&quot;: { # [Deprecated] Configuration for the mutual Tls mode for peer authentication. Configuration for the mutual Tls mode for peer authentication. # Set if mTLS is used for peer authentication.
                  &quot;mode&quot;: &quot;A String&quot;, # Specifies if the server TLS is configured to be strict or permissive. This field can be set to one of the following: STRICT: Client certificate must be presented, connection is in TLS. PERMISSIVE: Client certificate can be omitted, connection can be either plaintext or TLS.
                },
              },
            ],
            &quot;principalBinding&quot;: &quot;A String&quot;, # Define whether peer or origin identity should be used for principal. Default value is USE_PEER. If peer (or origin) identity is not available, either because peer/origin authentication is not defined, or failed, principal will be left unset. In other words, binding rule does not affect the decision to accept or reject request. This field can be set to one of the following: USE_PEER: Principal will be set to the identity from peer authentication. USE_ORIGIN: Principal will be set to the identity from origin authentication.
            &quot;serverTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain server-side security certificates and identity information.
              &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
                &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
                &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
                  &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                    &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                      &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                          # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                          # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                      &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                        &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                        &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                      },
                    },
                    &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                      &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                        &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                        &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                      },
                      &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                    },
                    &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
                  },
                },
              },
              &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
                &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
                &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
                  &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                    &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                      &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                          # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                          # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                      &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                        &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                        &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                      },
                    },
                    &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                      &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                        &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                        &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                      },
                      &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                    },
                    &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
                  },
                },
                &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
              },
            },
          },
          &quot;authorizationConfig&quot;: { # [Deprecated] Authorization configuration provides service-level and method-level access control for a service. control for a service. # [Deprecated] Authorization config defines the Role Based Access Control (RBAC) config. Authorization config defines the Role Based Access Control (RBAC) config.
            &quot;policies&quot;: [ # List of RbacPolicies.
              {
                &quot;name&quot;: &quot;A String&quot;, # Name of the RbacPolicy.
                &quot;permissions&quot;: [ # The list of permissions.
                  { # [Deprecated] All fields defined in a permission are ANDed.
                    &quot;constraints&quot;: [ # Extra custom constraints. The constraints are ANDed together.
                      { # Custom constraint that specifies a key and a list of allowed values for Istio attributes.
                        &quot;key&quot;: &quot;A String&quot;, # Key of the constraint.
                        &quot;values&quot;: [ # A list of allowed values.
                          &quot;A String&quot;,
                        ],
                      },
                    ],
                    &quot;hosts&quot;: [ # Used in Ingress or Egress Gateway cases to specify hosts that the policy applies to. Exact match, prefix match, and suffix match are supported.
                      &quot;A String&quot;,
                    ],
                    &quot;methods&quot;: [ # HTTP method.
                      &quot;A String&quot;,
                    ],
                    &quot;notHosts&quot;: [ # Negate of hosts. Specifies exclusions.
                      &quot;A String&quot;,
                    ],
                    &quot;notMethods&quot;: [ # Negate of methods. Specifies exclusions.
                      &quot;A String&quot;,
                    ],
                    &quot;notPaths&quot;: [ # Negate of paths. Specifies exclusions.
                      &quot;A String&quot;,
                    ],
                    &quot;notPorts&quot;: [ # Negate of ports. Specifies exclusions.
                      &quot;A String&quot;,
                    ],
                    &quot;paths&quot;: [ # HTTP request paths or gRPC methods. Exact match, prefix match, and suffix match are supported.
                      &quot;A String&quot;,
                    ],
                    &quot;ports&quot;: [ # Port names or numbers.
                      &quot;A String&quot;,
                    ],
                  },
                ],
                &quot;principals&quot;: [ # The list of principals.
                  { # [Deprecated] All fields defined in a principal are ANDed.
                    &quot;condition&quot;: &quot;A String&quot;, # An expression to specify custom condition.
                    &quot;groups&quot;: [ # The groups the principal belongs to. Exact match, prefix match, and suffix match are supported.
                      &quot;A String&quot;,
                    ],
                    &quot;ips&quot;: [ # IPv4 or IPv6 address or range (In CIDR format)
                      &quot;A String&quot;,
                    ],
                    &quot;namespaces&quot;: [ # The namespaces. Exact match, prefix match, and suffix match are supported.
                      &quot;A String&quot;,
                    ],
                    &quot;notGroups&quot;: [ # Negate of groups. Specifies exclusions.
                      &quot;A String&quot;,
                    ],
                    &quot;notIps&quot;: [ # Negate of IPs. Specifies exclusions.
                      &quot;A String&quot;,
                    ],
                    &quot;notNamespaces&quot;: [ # Negate of namespaces. Specifies exclusions.
                      &quot;A String&quot;,
                    ],
                    &quot;notUsers&quot;: [ # Negate of users. Specifies exclusions.
                      &quot;A String&quot;,
                    ],
                    &quot;properties&quot;: { # A map of Istio attribute to expected values. Exact match, prefix match, and suffix match are supported for values. For example, `request.headers[version]: &quot;v1&quot;`. The properties are ANDed together.
                      &quot;a_key&quot;: &quot;A String&quot;,
                    },
                    &quot;users&quot;: [ # The user names/IDs or service accounts. Exact match, prefix match, and suffix match are supported.
                      &quot;A String&quot;,
                    ],
                  },
                ],
              },
            ],
          },
          &quot;clientTlsPolicy&quot;: &quot;A String&quot;, # Optional. A URL referring to a networksecurity.ClientTlsPolicy resource that describes how clients should authenticate with this service&#x27;s backends.
              # clientTlsPolicy only applies to a global BackendService with the loadBalancingScheme set to INTERNAL_SELF_MANAGED.
              # If left blank, communications are not encrypted.
          &quot;clientTlsSettings&quot;: { # [Deprecated] The client side authentication settings for connection originating from the backend service. the backend service. # [Deprecated] TLS Settings for the backend service.
            &quot;clientTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain client-side security certificates and identity information. This field is only applicable when mode is set to MUTUAL.
              &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
                &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
                &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
                  &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                    &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                      &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                          # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                          # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                      &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                        &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                        &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                      },
                    },
                    &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                      &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                        &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                        &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                      },
                      &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                    },
                    &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
                  },
                },
              },
              &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
                &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
                &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
                  &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
                    &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                      &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                          # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                          # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                      &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                        &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                        &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                      },
                    },
                    &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                      &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                        &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                        &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                      },
                      &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
                    },
                    &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
                  },
                },
                &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
              },
            },
            &quot;mode&quot;: &quot;A String&quot;, # Indicates whether connections to this port should be secured using TLS. The value of this field determines how TLS is enforced. This can be set to one of the following values: DISABLE: Do not setup a TLS connection to the backends. SIMPLE: Originate a TLS connection to the backends. MUTUAL: Secure connections to the backends using mutual TLS by presenting client certificates for authentication.
            &quot;sni&quot;: &quot;A String&quot;, # SNI string to present to the server during TLS handshake. This field is applicable only when mode is SIMPLE or MUTUAL.
            &quot;subjectAltNames&quot;: [ # A list of alternate names to verify the subject identity in the certificate.If specified, the proxy will verify that the server certificate&#x27;s subject alt name matches one of the specified values. This field is applicable only when mode is SIMPLE or MUTUAL.
              &quot;A String&quot;,
            ],
          },
          &quot;subjectAltNames&quot;: [ # Optional. A list of Subject Alternative Names (SANs) that the client verifies during a mutual TLS handshake with an server/endpoint for this BackendService. When the server presents its X.509 certificate to the client, the client inspects the certificate&#x27;s subjectAltName field. If the field contains one of the specified values, the communication continues. Otherwise, it fails. This additional check enables the client to verify that the server is authorized to run the requested service.
              # Note that the contents of the server certificate&#x27;s subjectAltName field are configured by the Public Key Infrastructure which provisions server identities.
              # Only applies to a global BackendService with loadBalancingScheme set to INTERNAL_SELF_MANAGED. Only applies when BackendService has an attached clientTlsPolicy with clientCertificate (mTLS mode).
            &quot;A String&quot;,
          ],
        },
        &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
        &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
        &quot;sessionAffinity&quot;: &quot;A String&quot;, # Type of session affinity to use. The default is NONE. Session affinity is not applicable if the --protocol is UDP.
            #
            # When the loadBalancingScheme is EXTERNAL, possible values are NONE, CLIENT_IP, or GENERATED_COOKIE. You can use GENERATED_COOKIE if the protocol is HTTP or HTTPS.
            #
            # When the loadBalancingScheme is INTERNAL, possible values are NONE, CLIENT_IP, CLIENT_IP_PROTO, or CLIENT_IP_PORT_PROTO.
            #
            # When the loadBalancingScheme is INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, possible values are NONE, CLIENT_IP, GENERATED_COOKIE, HEADER_FIELD, or HTTP_COOKIE.
        &quot;timeoutSec&quot;: 42, # The backend service timeout has a different meaning depending on the type of load balancer. For more information see,  Backend service settings The default is 30 seconds.
      },
    ],
    &quot;kind&quot;: &quot;compute#backendServiceList&quot;, # [Output Only] Type of resource. Always compute#backendServiceList for lists of backend services.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # [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.
    &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource.
    &quot;warning&quot;: { # [Output Only] Informational warning message.
      &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
      &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example:
          # &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
        {
          &quot;key&quot;: &quot;A String&quot;, # [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).
          &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
    },
  }</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 &#x27;execute()&#x27; 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, backendService, body=None, requestId=None)</code>
  <pre>Patches the specified BackendService resource with the data included in the request. For more information, see  Backend services overview. This method supports PATCH semantics and uses the JSON merge patch format and processing rules.

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

{ # Represents a Backend Service resource.
    # 
    # A backend service defines how Google Cloud load balancers distribute traffic. The backend service configuration contains a set of values, such as the protocol used to connect to backends, various distribution and session settings, health checks, and timeouts. These settings provide fine-grained control over how your load balancer behaves. Most of the settings have default values that allow for easy configuration if you need to get started quickly.
    # 
    # Backend services in Google Compute Engine can be either regionally or globally scoped.
    # 
    # * [Global](/compute/docs/reference/rest/{$api_version}/backendServices) * [Regional](/compute/docs/reference/rest/{$api_version}/regionBackendServices)
    # 
    # For more information, see Backend Services.
    # 
    # (== resource_for {$api_version}.backendService ==)
  &quot;affinityCookieTtlSec&quot;: 42, # If set to 0, the cookie is non-persistent and lasts only until the end of the browser session (or equivalent). The maximum allowed value is one day (86,400).
  &quot;backends&quot;: [ # The list of backends that serve this BackendService.
    { # Message containing information of one individual backend.
      &quot;balancingMode&quot;: &quot;A String&quot;, # Specifies the balancing mode for the backend.
          #
          # When choosing a balancing mode, you need to consider the loadBalancingScheme, and protocol for the backend service, as well as the type of backend (instance group or NEG).
          #
          #
          # - If the load balancing mode is CONNECTION, then the load is spread based on how many concurrent connections the backend can handle.
          # You can use the CONNECTION balancing mode if the protocol for the backend service is SSL, TCP, or UDP.
          #
          # If the loadBalancingScheme for the backend service is EXTERNAL (SSL Proxy and TCP Proxy load balancers), you must also specify exactly one of the following parameters: maxConnections (except for regional managed instance groups), maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
          #
          # If the loadBalancingScheme for the backend service is INTERNAL (internal TCP/UDP load balancers), you cannot specify any additional parameters.
          #
          # - If the load balancing mode is RATE, the load is spread based on the rate of HTTP requests per second (RPS).
          # You can use the RATE balancing mode if the protocol for the backend service is HTTP or HTTPS. You must specify exactly one of the following parameters: maxRate (except for regional managed instance groups), maxRatePerInstance, or maxRatePerEndpoint.
          #
          # - If the load balancing mode is UTILIZATION, the load is spread based on the backend utilization of instances in an instance group.
          # You can use the UTILIZATION balancing mode if the loadBalancingScheme of the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED and the backends are instance groups. There are no restrictions on the backend service protocol.
      &quot;capacityScaler&quot;: 3.14, # A multiplier applied to the group&#x27;s maximum servicing capacity (based on UTILIZATION, RATE or CONNECTION). Default value is 1, which means the group will serve up to 100% of its configured capacity (depending on balancingMode). A setting of 0 means the group is completely drained, offering 0% of its available capacity. Valid range is 0.0 and [0.1,1.0]. You cannot configure a setting larger than 0 and smaller than 0.1. You cannot configure a setting of 0 when there is only one backend attached to the backend service.
          #
          # This cannot be used for internal load balancing.
      &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
      &quot;failover&quot;: True or False, # This field designates whether this is a failover backend. More than one failover backend can be configured for a given BackendService.
      &quot;group&quot;: &quot;A String&quot;, # The fully-qualified URL of an instance group or network endpoint group (NEG) resource. The type of backend that a backend service supports depends on the backend service&#x27;s loadBalancingScheme.
          #
          #
          # - When the loadBalancingScheme for the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, the backend can be either an instance group or a NEG. The backends on the backend service must be either all instance groups or all NEGs. You cannot mix instance group and NEG backends on the same backend service.
          #
          #
          # - When the loadBalancingScheme for the backend service is INTERNAL, the backend must be an instance group in the same region as the backend service. NEGs are not supported.
          #
          # You must use the fully-qualified URL (starting with https://www.googleapis.com/) to specify the instance group or NEG. Partial URLs are not supported.
      &quot;maxConnections&quot;: 42, # Defines a target maximum number of simultaneous connections that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is RATE. If the loadBalancingScheme is INTERNAL, then maxConnections is not supported, even though the backend requires a balancing mode of CONNECTION.
      &quot;maxConnectionsPerEndpoint&quot;: 42, # Defines a target maximum number of simultaneous connections for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a maximum number of target maximum simultaneous connections for the NEG. If the backend&#x27;s balancingMode is CONNECTION, and the backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerInstance.
          #
          # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerEndpoint even though its backends require a balancing mode of CONNECTION.
      &quot;maxConnectionsPerInstance&quot;: 42, # Defines a target maximum number of simultaneous connections for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum number of simultaneous connections for the whole instance group. If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerInstance even though its backends require a balancing mode of CONNECTION.
      &quot;maxRate&quot;: 42, # Defines a maximum number of HTTP requests per second (RPS) that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). Must not be defined if the backend is a managed instance group that uses autoscaling based on load balancing.
          #
          # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify maxRate, maxRatePerInstance, or maxRatePerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is CONNECTION.
      &quot;maxRatePerEndpoint&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a target maximum rate for the NEG.
          #
          # If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerInstance.
          #
          # Not available if the backend&#x27;s balancingMode is CONNECTION.
      &quot;maxRatePerInstance&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum rate for the whole instance group.
          #
          # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is CONNECTION.
      &quot;maxUtilization&quot;: 3.14, # Defines the maximum average backend utilization of a backend VM in an instance group. The valid range is [0.0, 1.0]. This is an optional parameter if the backend&#x27;s balancingMode is UTILIZATION.
          #
          # This parameter can be used in conjunction with maxRate, maxRatePerInstance, maxConnections (except for regional managed instance groups), or maxConnectionsPerInstance.
    },
  ],
  &quot;cdnPolicy&quot;: { # Message containing Cloud CDN configuration for a backend service. # Cloud CDN configuration for this BackendService.
    &quot;cacheKeyPolicy&quot;: { # Message containing what to include in the cache key for a request for Cloud CDN. # The CacheKeyPolicy for this CdnPolicy.
      &quot;includeHost&quot;: True or False, # If true, requests to different hosts will be cached separately.
      &quot;includeProtocol&quot;: True or False, # If true, http and https requests will be cached separately.
      &quot;includeQueryString&quot;: True or False, # If true, include query string parameters in the cache key according to query_string_whitelist and query_string_blacklist. If neither is set, the entire query string will be included. If false, the query string will be excluded from the cache key entirely.
      &quot;queryStringBlacklist&quot;: [ # Names of query string parameters to exclude in cache keys. All other parameters will be included. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
        &quot;A String&quot;,
      ],
      &quot;queryStringWhitelist&quot;: [ # Names of query string parameters to include in cache keys. All other parameters will be excluded. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
        &quot;A String&quot;,
      ],
    },
    &quot;signedUrlCacheMaxAgeSec&quot;: &quot;A String&quot;, # Maximum number of seconds the response to a signed URL request will be considered fresh. After this time period, the response will be revalidated before being served. Defaults to 1hr (3600s). When serving responses to signed URL requests, Cloud CDN will internally behave as though all responses from this backend had a &quot;Cache-Control: public, max-age=[TTL]&quot; header, regardless of any existing Cache-Control header. The actual headers served in responses will not be altered.
    &quot;signedUrlKeyNames&quot;: [ # [Output Only] Names of the keys for signing request URLs.
      &quot;A String&quot;,
    ],
  },
  &quot;circuitBreakers&quot;: { # Settings controlling the volume of connections to a backend service. # Settings controlling the volume of connections to a backend service. If not set, this feature is considered disabled.
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;connectTimeout&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The timeout for new network connections to hosts.
      &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
      &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
    },
    &quot;maxConnections&quot;: 42, # The maximum number of connections to the backend service. If not specified, there is no limit.
    &quot;maxPendingRequests&quot;: 42, # The maximum number of pending requests allowed to the backend service. If not specified, there is no limit.
    &quot;maxRequests&quot;: 42, # The maximum number of parallel requests that allowed to the backend service. If not specified, there is no limit.
    &quot;maxRequestsPerConnection&quot;: 42, # Maximum requests for a single connection to the backend service. This parameter is respected by both the HTTP/1.1 and HTTP/2 implementations. If not specified, there is no limit. Setting this parameter to 1 will effectively disable keep alive.
    &quot;maxRetries&quot;: 42, # The maximum number of parallel retries allowed to the backend cluster. If not specified, the default is 1.
  },
  &quot;connectionDraining&quot;: { # Message containing connection draining configuration.
    &quot;drainingTimeoutSec&quot;: 42, # The amount of time in seconds to allow existing connections to persist while on unhealthy backend VMs. Only applicable if the protocol is not UDP. The valid range is [0, 3600].
  },
  &quot;consistentHash&quot;: { # This message defines settings for a consistent hash style load balancer. # Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular destination host will be lost when one or more hosts are added/removed from the destination service. This field specifies parameters that control consistent hashing. This field is only applicable when localityLbPolicy is set to MAGLEV or RING_HASH.
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;httpCookie&quot;: { # The information about the HTTP Cookie on which the hash function is based for load balancing policies that use a consistent hash. # Hash is based on HTTP Cookie. This field describes a HTTP cookie that will be used as the hash key for the consistent hash load balancer. If the cookie is not present, it will be generated. This field is applicable if the sessionAffinity is set to HTTP_COOKIE.
      &quot;name&quot;: &quot;A String&quot;, # Name of the cookie.
      &quot;path&quot;: &quot;A String&quot;, # Path to set for the cookie.
      &quot;ttl&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Lifetime of the cookie.
        &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
        &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
      },
    },
    &quot;httpHeaderName&quot;: &quot;A String&quot;, # The hash based on the value of the specified header field. This field is applicable if the sessionAffinity is set to HEADER_FIELD.
    &quot;minimumRingSize&quot;: &quot;A String&quot;, # The minimum number of virtual nodes to use for the hash ring. Defaults to 1024. Larger ring sizes result in more granular load distributions. If the number of hosts in the load balancing pool is larger than the ring size, each host will be assigned a single virtual node.
  },
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
  &quot;customRequestHeaders&quot;: [ # Headers that the HTTP/S load balancer should add to proxied requests.
    &quot;A String&quot;,
  ],
  &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
  &quot;enableCDN&quot;: True or False, # If true, enables Cloud CDN for the backend service. Only applicable if the loadBalancingScheme is EXTERNAL and the protocol is HTTP or HTTPS.
  &quot;failoverPolicy&quot;: { # Applicable only to Failover for Internal TCP/UDP Load Balancing. On failover or failback, this field indicates whether connection draining will be honored. GCP has a fixed connection draining timeout of 10 minutes. A setting of true terminates existing TCP connections to the active pool during failover and failback, immediately draining traffic. A setting of false allows existing TCP connections to persist, even on VMs no longer in the active pool, for up to the duration of the connection draining timeout (10 minutes). # Applicable only to Failover for Internal TCP/UDP Load Balancing. Requires at least one backend instance group to be defined as a backup (failover) backend.
    &quot;disableConnectionDrainOnFailover&quot;: True or False, # This can be set to true only if the protocol is TCP.
        #
        # The default is false.
    &quot;dropTrafficIfUnhealthy&quot;: True or False, # Applicable only to Failover for Internal TCP/UDP Load Balancing. If set to true, connections to the load balancer are dropped when all primary and all backup backend VMs are unhealthy. If set to false, connections are distributed among all primary VMs when all primary and all backup backend VMs are unhealthy.
        #
        # The default is false.
    &quot;failoverRatio&quot;: 3.14, # Applicable only to Failover for Internal TCP/UDP Load Balancing. The value of the field must be in the range [0, 1]. If the value is 0, the load balancer performs a failover when the number of healthy primary VMs equals zero. For all other values, the load balancer performs a failover when the total number of healthy primary VMs is less than this ratio.
  },
  &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a BackendService. An up-to-date fingerprint must be provided in order to update the BackendService, otherwise the request will fail with error 412 conditionNotMet.
      # 
      # To see the latest fingerprint, make a get() request to retrieve a BackendService.
  &quot;healthChecks&quot;: [ # The list of URLs to the healthChecks, httpHealthChecks (legacy), or httpsHealthChecks (legacy) resource for health checking this backend service. Not all backend services support legacy health checks. See  Load balancer guide. Currently at most one health check can be specified. Backend services with instance group or zonal NEG backends must have a health check. Backend services with internet NEG backends must not have a health check. A health check must
    &quot;A String&quot;,
  ],
  &quot;iap&quot;: { # Identity-Aware Proxy # The configurations for Identity-Aware Proxy on this resource.
    &quot;enabled&quot;: True or False, # Whether the serving infrastructure will authenticate and authorize all incoming requests. If true, the oauth2ClientId and oauth2ClientSecret fields must be non-empty.
    &quot;oauth2ClientId&quot;: &quot;A String&quot;, # OAuth2 client ID to use for the authentication flow.
    &quot;oauth2ClientInfo&quot;: { # [Input Only] OAuth client info required to generate client id to be used for IAP.
      &quot;applicationName&quot;: &quot;A String&quot;, # Application name to be used in OAuth consent screen.
      &quot;clientName&quot;: &quot;A String&quot;, # Name of the client to be generated. Optional - If not provided, the name will be autogenerated by the backend.
      &quot;developerEmailAddress&quot;: &quot;A String&quot;, # Developer&#x27;s information to be used in OAuth consent screen.
    },
    &quot;oauth2ClientSecret&quot;: &quot;A String&quot;, # OAuth2 client secret to use for the authentication flow. For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2ClientSecretSha256 field.
    &quot;oauth2ClientSecretSha256&quot;: &quot;A String&quot;, # [Output Only] SHA256 hash value for the field oauth2_client_secret above.
  },
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
  &quot;kind&quot;: &quot;compute#backendService&quot;, # [Output Only] Type of resource. Always compute#backendService for backend services.
  &quot;loadBalancingScheme&quot;: &quot;A String&quot;, # Specifies the load balancer type. Choose EXTERNAL for load balancers that receive traffic from external clients. Choose INTERNAL for Internal TCP/UDP Load Balancing. Choose INTERNAL_MANAGED for Internal HTTP(S) Load Balancing. Choose INTERNAL_SELF_MANAGED for Traffic Director. A backend service created for one type of load balancing cannot be used with another. For more information, refer to Choosing a load balancer.
  &quot;localityLbPolicy&quot;: &quot;A String&quot;, # The load balancing algorithm used within the scope of the locality. The possible values are:
      # - ROUND_ROBIN: This is a simple policy in which each healthy backend is selected in round robin order. This is the default.
      # - LEAST_REQUEST: An O(1) algorithm which selects two random healthy hosts and picks the host which has fewer active requests.
      # - RING_HASH: The ring/modulo hash load balancer implements consistent hashing to backends. The algorithm has the property that the addition/removal of a host from a set of N hosts only affects 1/N of the requests.
      # - RANDOM: The load balancer selects a random healthy host.
      # - ORIGINAL_DESTINATION: Backend host is selected based on the client connection metadata, i.e., connections are opened to the same address as the destination address of the incoming connection before the connection was redirected to the load balancer.
      # - MAGLEV: used as a drop in replacement for the ring hash load balancer. Maglev is not as stable as ring hash but has faster table lookup build times and host selection times. For more information about Maglev, see https://ai.google/research/pubs/pub44824
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
      # 
      # If sessionAffinity is not NONE, and this field is not set to &gt;MAGLEV or RING_HASH, session affinity settings will not take effect.
  &quot;logConfig&quot;: { # The available logging options for the load balancer traffic served by this backend service. # This field denotes the logging options for the load balancer traffic served by this backend service. If logging is enabled, logs will be exported to Stackdriver.
    &quot;enable&quot;: True or False, # This field denotes whether to enable logging for the load balancer traffic served by this backend service.
    &quot;sampleRate&quot;: 3.14, # This field can only be specified if logging is enabled for this backend service. The value of the field must be in [0, 1]. This configures the sampling rate of requests to the load balancer where 1.0 means all logged requests are reported and 0.0 means no logged requests are reported. The default value is 1.0.
  },
  &quot;name&quot;: &quot;A String&quot;, # 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.
  &quot;network&quot;: &quot;A String&quot;, # The URL of the network to which this backend service belongs. This field can only be spcified when the load balancing scheme is set to INTERNAL.
  &quot;outlierDetection&quot;: { # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. If not set, this feature is considered disabled.
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;baseEjectionTime&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The base time that a host is ejected for. The real ejection time is equal to the base ejection time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s.
      &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
      &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
    },
    &quot;consecutiveErrors&quot;: 42, # Number of errors before a host is ejected from the connection pool. When the backend host is accessed over HTTP, a 5xx return code qualifies as an error. Defaults to 5.
    &quot;consecutiveGatewayFailure&quot;: 42, # The number of consecutive gateway failures (502, 503, 504 status or connection errors that are mapped to one of those status codes) before a consecutive gateway failure ejection occurs. Defaults to 3.
    &quot;enforcingConsecutiveErrors&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0.
    &quot;enforcingConsecutiveGatewayFailure&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
    &quot;enforcingSuccessRate&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
    &quot;interval&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Time interval between ejection analysis sweeps. This can result in both new ejections as well as hosts being returned to service. Defaults to 1 second.
      &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
      &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
    },
    &quot;maxEjectionPercent&quot;: 42, # Maximum percentage of hosts in the load balancing pool for the backend service that can be ejected. Defaults to 50%.
    &quot;successRateMinimumHosts&quot;: 42, # The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5.
    &quot;successRateRequestVolume&quot;: 42, # The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100.
    &quot;successRateStdevFactor&quot;: 42, # This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success rate, and the product of this factor and the standard deviation of the mean success rate: mean - (stdev * success_rate_stdev_factor). This factor is divided by a thousand to get a double. That is, if the desired factor is 1.9, the runtime value should be 1900. Defaults to 1900.
  },
  &quot;port&quot;: 42, # Deprecated in favor of portName. The TCP port to connect on the backend. The default value is 80.
      # 
      # This cannot be used if the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
  &quot;portName&quot;: &quot;A String&quot;, # A named port on a backend instance group representing the port for communication to the backend VMs in that group. Required when the loadBalancingScheme is EXTERNAL, INTERNAL_MANAGED, or INTERNAL_SELF_MANAGED and the backends are instance groups. The named port must be defined on each backend instance group. This parameter has no meaning if the backends are NEGs.
      # 
      # 
      # 
      # Must be omitted when the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
  &quot;protocol&quot;: &quot;A String&quot;, # The protocol this BackendService uses to communicate with backends.
      # 
      # Possible values are HTTP, HTTPS, HTTP2, TCP, SSL, or UDP. depending on the chosen load balancer or Traffic Director configuration. Refer to the documentation for the load balancer or for Traffic Director for more information.
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] URL of the region where the regional backend service resides. This field is not applicable to global backend services. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
  &quot;securityPolicy&quot;: &quot;A String&quot;, # [Output Only] The resource URL for the security policy associated with this backend service.
  &quot;securitySettings&quot;: { # The authentication and authorization settings for a BackendService. # This field specifies the security policy that applies to this backend service. This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;authentication&quot;: &quot;A String&quot;, # [Deprecated] Use clientTlsPolicy instead.
    &quot;authenticationPolicy&quot;: { # [Deprecated] The authentication settings for the backend service. The authentication settings for the backend service. # [Deprecated] Authentication policy defines what authentication methods can be accepted on backends, and if authenticated, which method/certificate will set the request principal. request principal.
      &quot;origins&quot;: [ # List of authentication methods that can be used for origin authentication. Similar to peers, these will be evaluated in order the first valid one will be used to set origin identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if origin authentication is not required.
        { # [Deprecated] Configuration for the origin authentication method. Configuration for the origin authentication method.
          &quot;jwt&quot;: { # [Deprecated] JWT configuration for origin authentication. JWT configuration for origin authentication.
            &quot;audiences&quot;: [ # A JWT containing any of these audiences will be accepted. The service name will be accepted if audiences is empty. Examples: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com
              &quot;A String&quot;,
            ],
            &quot;issuer&quot;: &quot;A String&quot;, # Identifies the issuer that issued the JWT, which is usually a URL or an email address. Examples: https://securetoken.google.com, 1234567-compute@developer.gserviceaccount.com
            &quot;jwksPublicKeys&quot;: &quot;A String&quot;, # The provider&#x27;s public key set to validate the signature of the JWT.
            &quot;jwtHeaders&quot;: [ # jwt_headers and jwt_params define where to extract the JWT from an HTTP request. If no explicit location is specified, the following default locations are tried in order:
                #
                # 1. The Authorization header using the Bearer schema. See `here `_. Example:
                #
                # Authorization: Bearer .
                #
                # 2. `access_token` query parameter. See `this `_
                #
                # Multiple JWTs can be verified for a request. Each JWT has to be extracted from the locations its issuer specified or from the default locations.
                #
                # This field is set if JWT is sent in a request header. This field specifies the header name. For example, if `header=x-goog-iap-jwt-assertion`, the header format will be x-goog-iap-jwt-assertion: .
              { # [Deprecated] This message specifies a header location to extract JWT token. This message specifies a header location to extract JWT token.
                &quot;name&quot;: &quot;A String&quot;, # The HTTP header name.
                &quot;valuePrefix&quot;: &quot;A String&quot;, # The value prefix. The value format is &quot;value_prefix&quot; For example, for &quot;Authorization: Bearer &quot;, value_prefix=&quot;Bearer &quot; with a space at the end.
              },
            ],
            &quot;jwtParams&quot;: [ # This field is set if JWT is sent in a query parameter. This field specifies the query parameter name. For example, if jwt_params[0] is jwt_token, the JWT format in the query parameter is /path?jwt_token=.
              &quot;A String&quot;,
            ],
          },
        },
      ],
      &quot;peers&quot;: [ # List of authentication methods that can be used for peer authentication. They will be evaluated in order the first valid one will be used to set peer identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if peer authentication is not required.
        { # [Deprecated] Configuration for the peer authentication method. Configuration for the peer authentication method.
          &quot;mtls&quot;: { # [Deprecated] Configuration for the mutual Tls mode for peer authentication. Configuration for the mutual Tls mode for peer authentication. # Set if mTLS is used for peer authentication.
            &quot;mode&quot;: &quot;A String&quot;, # Specifies if the server TLS is configured to be strict or permissive. This field can be set to one of the following: STRICT: Client certificate must be presented, connection is in TLS. PERMISSIVE: Client certificate can be omitted, connection can be either plaintext or TLS.
          },
        },
      ],
      &quot;principalBinding&quot;: &quot;A String&quot;, # Define whether peer or origin identity should be used for principal. Default value is USE_PEER. If peer (or origin) identity is not available, either because peer/origin authentication is not defined, or failed, principal will be left unset. In other words, binding rule does not affect the decision to accept or reject request. This field can be set to one of the following: USE_PEER: Principal will be set to the identity from peer authentication. USE_ORIGIN: Principal will be set to the identity from origin authentication.
      &quot;serverTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain server-side security certificates and identity information.
        &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
          &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
            &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
          },
          &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
        },
        &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
          &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
          &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
        },
      },
    },
    &quot;authorizationConfig&quot;: { # [Deprecated] Authorization configuration provides service-level and method-level access control for a service. control for a service. # [Deprecated] Authorization config defines the Role Based Access Control (RBAC) config. Authorization config defines the Role Based Access Control (RBAC) config.
      &quot;policies&quot;: [ # List of RbacPolicies.
        {
          &quot;name&quot;: &quot;A String&quot;, # Name of the RbacPolicy.
          &quot;permissions&quot;: [ # The list of permissions.
            { # [Deprecated] All fields defined in a permission are ANDed.
              &quot;constraints&quot;: [ # Extra custom constraints. The constraints are ANDed together.
                { # Custom constraint that specifies a key and a list of allowed values for Istio attributes.
                  &quot;key&quot;: &quot;A String&quot;, # Key of the constraint.
                  &quot;values&quot;: [ # A list of allowed values.
                    &quot;A String&quot;,
                  ],
                },
              ],
              &quot;hosts&quot;: [ # Used in Ingress or Egress Gateway cases to specify hosts that the policy applies to. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;methods&quot;: [ # HTTP method.
                &quot;A String&quot;,
              ],
              &quot;notHosts&quot;: [ # Negate of hosts. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notMethods&quot;: [ # Negate of methods. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notPaths&quot;: [ # Negate of paths. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notPorts&quot;: [ # Negate of ports. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;paths&quot;: [ # HTTP request paths or gRPC methods. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;ports&quot;: [ # Port names or numbers.
                &quot;A String&quot;,
              ],
            },
          ],
          &quot;principals&quot;: [ # The list of principals.
            { # [Deprecated] All fields defined in a principal are ANDed.
              &quot;condition&quot;: &quot;A String&quot;, # An expression to specify custom condition.
              &quot;groups&quot;: [ # The groups the principal belongs to. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;ips&quot;: [ # IPv4 or IPv6 address or range (In CIDR format)
                &quot;A String&quot;,
              ],
              &quot;namespaces&quot;: [ # The namespaces. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;notGroups&quot;: [ # Negate of groups. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notIps&quot;: [ # Negate of IPs. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notNamespaces&quot;: [ # Negate of namespaces. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notUsers&quot;: [ # Negate of users. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;properties&quot;: { # A map of Istio attribute to expected values. Exact match, prefix match, and suffix match are supported for values. For example, `request.headers[version]: &quot;v1&quot;`. The properties are ANDed together.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;users&quot;: [ # The user names/IDs or service accounts. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
            },
          ],
        },
      ],
    },
    &quot;clientTlsPolicy&quot;: &quot;A String&quot;, # Optional. A URL referring to a networksecurity.ClientTlsPolicy resource that describes how clients should authenticate with this service&#x27;s backends.
        # clientTlsPolicy only applies to a global BackendService with the loadBalancingScheme set to INTERNAL_SELF_MANAGED.
        # If left blank, communications are not encrypted.
    &quot;clientTlsSettings&quot;: { # [Deprecated] The client side authentication settings for connection originating from the backend service. the backend service. # [Deprecated] TLS Settings for the backend service.
      &quot;clientTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain client-side security certificates and identity information. This field is only applicable when mode is set to MUTUAL.
        &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
          &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
            &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
          },
          &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
        },
        &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
          &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
          &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
        },
      },
      &quot;mode&quot;: &quot;A String&quot;, # Indicates whether connections to this port should be secured using TLS. The value of this field determines how TLS is enforced. This can be set to one of the following values: DISABLE: Do not setup a TLS connection to the backends. SIMPLE: Originate a TLS connection to the backends. MUTUAL: Secure connections to the backends using mutual TLS by presenting client certificates for authentication.
      &quot;sni&quot;: &quot;A String&quot;, # SNI string to present to the server during TLS handshake. This field is applicable only when mode is SIMPLE or MUTUAL.
      &quot;subjectAltNames&quot;: [ # A list of alternate names to verify the subject identity in the certificate.If specified, the proxy will verify that the server certificate&#x27;s subject alt name matches one of the specified values. This field is applicable only when mode is SIMPLE or MUTUAL.
        &quot;A String&quot;,
      ],
    },
    &quot;subjectAltNames&quot;: [ # Optional. A list of Subject Alternative Names (SANs) that the client verifies during a mutual TLS handshake with an server/endpoint for this BackendService. When the server presents its X.509 certificate to the client, the client inspects the certificate&#x27;s subjectAltName field. If the field contains one of the specified values, the communication continues. Otherwise, it fails. This additional check enables the client to verify that the server is authorized to run the requested service.
        # Note that the contents of the server certificate&#x27;s subjectAltName field are configured by the Public Key Infrastructure which provisions server identities.
        # Only applies to a global BackendService with loadBalancingScheme set to INTERNAL_SELF_MANAGED. Only applies when BackendService has an attached clientTlsPolicy with clientCertificate (mTLS mode).
      &quot;A String&quot;,
    ],
  },
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
  &quot;sessionAffinity&quot;: &quot;A String&quot;, # Type of session affinity to use. The default is NONE. Session affinity is not applicable if the --protocol is UDP.
      # 
      # When the loadBalancingScheme is EXTERNAL, possible values are NONE, CLIENT_IP, or GENERATED_COOKIE. You can use GENERATED_COOKIE if the protocol is HTTP or HTTPS.
      # 
      # When the loadBalancingScheme is INTERNAL, possible values are NONE, CLIENT_IP, CLIENT_IP_PROTO, or CLIENT_IP_PORT_PROTO.
      # 
      # When the loadBalancingScheme is INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, possible values are NONE, CLIENT_IP, GENERATED_COOKIE, HEADER_FIELD, or HTTP_COOKIE.
  &quot;timeoutSec&quot;: 42, # The backend service timeout has a different meaning depending on the type of load balancer. For more information see,  Backend service settings The default is 30 seconds.
}

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # Google Compute Engine has three Operation resources:
      #
      # * [Global](/compute/docs/reference/rest/{$api_version}/globalOperations) * [Regional](/compute/docs/reference/rest/{$api_version}/regionOperations) * [Zonal](/compute/docs/reference/rest/{$api_version}/zoneOperations)
      #
      # You can use an operation resource to manage asynchronous API requests. For more information, read Handling API responses.
      #
      # Operations can be global, regional or zonal.
      # - For global operations, use the `globalOperations` resource.
      # - For regional operations, use the `regionOperations` resource.
      # - For zonal operations, use the `zonalOperations` resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for {$api_version}.globalOperations ==) (== resource_for {$api_version}.regionOperations ==) (== resource_for {$api_version}.zoneOperations ==)
    &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
    &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is set when the operation is created.
    &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
        {
          &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
          &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
          &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
        },
      ],
    },
    &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as `NOT FOUND`.
    &quot;httpErrorStatusCode&quot;: 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.
    &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is defined by the server.
    &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for Operation resources.
    &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
    &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`, `update`, or `delete`, and so on.
    &quot;progress&quot;: 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.
    &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
    &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
    &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the following: `PENDING`, `RUNNING`, or `DONE`.
    &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the operation.
    &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    &quot;targetLink&quot;: &quot;A String&quot;, # [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.
    &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example: `user@example.com`.
    &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example:
            # &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
          {
            &quot;key&quot;: &quot;A String&quot;, # [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).
            &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
          },
        ],
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
      },
    ],
    &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
  }</pre>
</div>

<div class="method">
    <code class="details" id="setSecurityPolicy">setSecurityPolicy(project, backendService, body=None, requestId=None)</code>
  <pre>Sets the security policy for the specified backend service.

Args:
  project: string, Project ID for this request. (required)
  backendService: string, Name of the BackendService resource to which the security policy should be set. The name should conform to RFC1035. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;securityPolicy&quot;: &quot;A String&quot;,
  }

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # Google Compute Engine has three Operation resources:
      #
      # * [Global](/compute/docs/reference/rest/{$api_version}/globalOperations) * [Regional](/compute/docs/reference/rest/{$api_version}/regionOperations) * [Zonal](/compute/docs/reference/rest/{$api_version}/zoneOperations)
      #
      # You can use an operation resource to manage asynchronous API requests. For more information, read Handling API responses.
      #
      # Operations can be global, regional or zonal.
      # - For global operations, use the `globalOperations` resource.
      # - For regional operations, use the `regionOperations` resource.
      # - For zonal operations, use the `zonalOperations` resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for {$api_version}.globalOperations ==) (== resource_for {$api_version}.regionOperations ==) (== resource_for {$api_version}.zoneOperations ==)
    &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
    &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is set when the operation is created.
    &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
        {
          &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
          &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
          &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
        },
      ],
    },
    &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as `NOT FOUND`.
    &quot;httpErrorStatusCode&quot;: 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.
    &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is defined by the server.
    &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for Operation resources.
    &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
    &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`, `update`, or `delete`, and so on.
    &quot;progress&quot;: 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.
    &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
    &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
    &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the following: `PENDING`, `RUNNING`, or `DONE`.
    &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the operation.
    &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    &quot;targetLink&quot;: &quot;A String&quot;, # [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.
    &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example: `user@example.com`.
    &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example:
            # &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
          {
            &quot;key&quot;: &quot;A String&quot;, # [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).
            &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
          },
        ],
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
      },
    ],
    &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
  }</pre>
</div>

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

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

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


Returns:
  An object of the form:

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

<div class="method">
    <code class="details" id="update">update(project, backendService, body=None, requestId=None)</code>
  <pre>Updates the specified BackendService resource with the data included in the request. For more information, see Backend services overview.

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

{ # Represents a Backend Service resource.
    # 
    # A backend service defines how Google Cloud load balancers distribute traffic. The backend service configuration contains a set of values, such as the protocol used to connect to backends, various distribution and session settings, health checks, and timeouts. These settings provide fine-grained control over how your load balancer behaves. Most of the settings have default values that allow for easy configuration if you need to get started quickly.
    # 
    # Backend services in Google Compute Engine can be either regionally or globally scoped.
    # 
    # * [Global](/compute/docs/reference/rest/{$api_version}/backendServices) * [Regional](/compute/docs/reference/rest/{$api_version}/regionBackendServices)
    # 
    # For more information, see Backend Services.
    # 
    # (== resource_for {$api_version}.backendService ==)
  &quot;affinityCookieTtlSec&quot;: 42, # If set to 0, the cookie is non-persistent and lasts only until the end of the browser session (or equivalent). The maximum allowed value is one day (86,400).
  &quot;backends&quot;: [ # The list of backends that serve this BackendService.
    { # Message containing information of one individual backend.
      &quot;balancingMode&quot;: &quot;A String&quot;, # Specifies the balancing mode for the backend.
          #
          # When choosing a balancing mode, you need to consider the loadBalancingScheme, and protocol for the backend service, as well as the type of backend (instance group or NEG).
          #
          #
          # - If the load balancing mode is CONNECTION, then the load is spread based on how many concurrent connections the backend can handle.
          # You can use the CONNECTION balancing mode if the protocol for the backend service is SSL, TCP, or UDP.
          #
          # If the loadBalancingScheme for the backend service is EXTERNAL (SSL Proxy and TCP Proxy load balancers), you must also specify exactly one of the following parameters: maxConnections (except for regional managed instance groups), maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
          #
          # If the loadBalancingScheme for the backend service is INTERNAL (internal TCP/UDP load balancers), you cannot specify any additional parameters.
          #
          # - If the load balancing mode is RATE, the load is spread based on the rate of HTTP requests per second (RPS).
          # You can use the RATE balancing mode if the protocol for the backend service is HTTP or HTTPS. You must specify exactly one of the following parameters: maxRate (except for regional managed instance groups), maxRatePerInstance, or maxRatePerEndpoint.
          #
          # - If the load balancing mode is UTILIZATION, the load is spread based on the backend utilization of instances in an instance group.
          # You can use the UTILIZATION balancing mode if the loadBalancingScheme of the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED and the backends are instance groups. There are no restrictions on the backend service protocol.
      &quot;capacityScaler&quot;: 3.14, # A multiplier applied to the group&#x27;s maximum servicing capacity (based on UTILIZATION, RATE or CONNECTION). Default value is 1, which means the group will serve up to 100% of its configured capacity (depending on balancingMode). A setting of 0 means the group is completely drained, offering 0% of its available capacity. Valid range is 0.0 and [0.1,1.0]. You cannot configure a setting larger than 0 and smaller than 0.1. You cannot configure a setting of 0 when there is only one backend attached to the backend service.
          #
          # This cannot be used for internal load balancing.
      &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
      &quot;failover&quot;: True or False, # This field designates whether this is a failover backend. More than one failover backend can be configured for a given BackendService.
      &quot;group&quot;: &quot;A String&quot;, # The fully-qualified URL of an instance group or network endpoint group (NEG) resource. The type of backend that a backend service supports depends on the backend service&#x27;s loadBalancingScheme.
          #
          #
          # - When the loadBalancingScheme for the backend service is EXTERNAL, INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, the backend can be either an instance group or a NEG. The backends on the backend service must be either all instance groups or all NEGs. You cannot mix instance group and NEG backends on the same backend service.
          #
          #
          # - When the loadBalancingScheme for the backend service is INTERNAL, the backend must be an instance group in the same region as the backend service. NEGs are not supported.
          #
          # You must use the fully-qualified URL (starting with https://www.googleapis.com/) to specify the instance group or NEG. Partial URLs are not supported.
      &quot;maxConnections&quot;: 42, # Defines a target maximum number of simultaneous connections that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnectionsPerInstance, or maxConnectionsPerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is RATE. If the loadBalancingScheme is INTERNAL, then maxConnections is not supported, even though the backend requires a balancing mode of CONNECTION.
      &quot;maxConnectionsPerEndpoint&quot;: 42, # Defines a target maximum number of simultaneous connections for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a maximum number of target maximum simultaneous connections for the NEG. If the backend&#x27;s balancingMode is CONNECTION, and the backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerInstance.
          #
          # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerEndpoint even though its backends require a balancing mode of CONNECTION.
      &quot;maxConnectionsPerInstance&quot;: 42, # Defines a target maximum number of simultaneous connections for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum number of simultaneous connections for the whole instance group. If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is CONNECTION, and backend is attached to a backend service whose loadBalancingScheme is EXTERNAL, you must specify either this parameter, maxConnections, or maxConnectionsPerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is RATE. Internal TCP/UDP load balancing does not support setting maxConnectionsPerInstance even though its backends require a balancing mode of CONNECTION.
      &quot;maxRate&quot;: 42, # Defines a maximum number of HTTP requests per second (RPS) that the backend can handle. Valid for network endpoint group and instance group backends (except for regional managed instance groups). Must not be defined if the backend is a managed instance group that uses autoscaling based on load balancing.
          #
          # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify maxRate, maxRatePerInstance, or maxRatePerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is CONNECTION.
      &quot;maxRatePerEndpoint&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for an endpoint of a NEG. This is multiplied by the number of endpoints in the NEG to implicitly calculate a target maximum rate for the NEG.
          #
          # If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerInstance.
          #
          # Not available if the backend&#x27;s balancingMode is CONNECTION.
      &quot;maxRatePerInstance&quot;: 3.14, # Defines a maximum target for requests per second (RPS) for a single VM in a backend instance group. This is multiplied by the number of instances in the instance group to implicitly calculate a target maximum rate for the whole instance group.
          #
          # If the backend&#x27;s balancingMode is UTILIZATION, this is an optional parameter. If the backend&#x27;s balancingMode is RATE, you must specify either this parameter, maxRate (except for regional managed instance groups), or maxRatePerEndpoint.
          #
          # Not available if the backend&#x27;s balancingMode is CONNECTION.
      &quot;maxUtilization&quot;: 3.14, # Defines the maximum average backend utilization of a backend VM in an instance group. The valid range is [0.0, 1.0]. This is an optional parameter if the backend&#x27;s balancingMode is UTILIZATION.
          #
          # This parameter can be used in conjunction with maxRate, maxRatePerInstance, maxConnections (except for regional managed instance groups), or maxConnectionsPerInstance.
    },
  ],
  &quot;cdnPolicy&quot;: { # Message containing Cloud CDN configuration for a backend service. # Cloud CDN configuration for this BackendService.
    &quot;cacheKeyPolicy&quot;: { # Message containing what to include in the cache key for a request for Cloud CDN. # The CacheKeyPolicy for this CdnPolicy.
      &quot;includeHost&quot;: True or False, # If true, requests to different hosts will be cached separately.
      &quot;includeProtocol&quot;: True or False, # If true, http and https requests will be cached separately.
      &quot;includeQueryString&quot;: True or False, # If true, include query string parameters in the cache key according to query_string_whitelist and query_string_blacklist. If neither is set, the entire query string will be included. If false, the query string will be excluded from the cache key entirely.
      &quot;queryStringBlacklist&quot;: [ # Names of query string parameters to exclude in cache keys. All other parameters will be included. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
        &quot;A String&quot;,
      ],
      &quot;queryStringWhitelist&quot;: [ # Names of query string parameters to include in cache keys. All other parameters will be excluded. Either specify query_string_whitelist or query_string_blacklist, not both. &#x27;&amp;&#x27; and &#x27;=&#x27; will be percent encoded and not treated as delimiters.
        &quot;A String&quot;,
      ],
    },
    &quot;signedUrlCacheMaxAgeSec&quot;: &quot;A String&quot;, # Maximum number of seconds the response to a signed URL request will be considered fresh. After this time period, the response will be revalidated before being served. Defaults to 1hr (3600s). When serving responses to signed URL requests, Cloud CDN will internally behave as though all responses from this backend had a &quot;Cache-Control: public, max-age=[TTL]&quot; header, regardless of any existing Cache-Control header. The actual headers served in responses will not be altered.
    &quot;signedUrlKeyNames&quot;: [ # [Output Only] Names of the keys for signing request URLs.
      &quot;A String&quot;,
    ],
  },
  &quot;circuitBreakers&quot;: { # Settings controlling the volume of connections to a backend service. # Settings controlling the volume of connections to a backend service. If not set, this feature is considered disabled.
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;connectTimeout&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The timeout for new network connections to hosts.
      &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
      &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
    },
    &quot;maxConnections&quot;: 42, # The maximum number of connections to the backend service. If not specified, there is no limit.
    &quot;maxPendingRequests&quot;: 42, # The maximum number of pending requests allowed to the backend service. If not specified, there is no limit.
    &quot;maxRequests&quot;: 42, # The maximum number of parallel requests that allowed to the backend service. If not specified, there is no limit.
    &quot;maxRequestsPerConnection&quot;: 42, # Maximum requests for a single connection to the backend service. This parameter is respected by both the HTTP/1.1 and HTTP/2 implementations. If not specified, there is no limit. Setting this parameter to 1 will effectively disable keep alive.
    &quot;maxRetries&quot;: 42, # The maximum number of parallel retries allowed to the backend cluster. If not specified, the default is 1.
  },
  &quot;connectionDraining&quot;: { # Message containing connection draining configuration.
    &quot;drainingTimeoutSec&quot;: 42, # The amount of time in seconds to allow existing connections to persist while on unhealthy backend VMs. Only applicable if the protocol is not UDP. The valid range is [0, 3600].
  },
  &quot;consistentHash&quot;: { # This message defines settings for a consistent hash style load balancer. # Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular destination host will be lost when one or more hosts are added/removed from the destination service. This field specifies parameters that control consistent hashing. This field is only applicable when localityLbPolicy is set to MAGLEV or RING_HASH.
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;httpCookie&quot;: { # The information about the HTTP Cookie on which the hash function is based for load balancing policies that use a consistent hash. # Hash is based on HTTP Cookie. This field describes a HTTP cookie that will be used as the hash key for the consistent hash load balancer. If the cookie is not present, it will be generated. This field is applicable if the sessionAffinity is set to HTTP_COOKIE.
      &quot;name&quot;: &quot;A String&quot;, # Name of the cookie.
      &quot;path&quot;: &quot;A String&quot;, # Path to set for the cookie.
      &quot;ttl&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Lifetime of the cookie.
        &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
        &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
      },
    },
    &quot;httpHeaderName&quot;: &quot;A String&quot;, # The hash based on the value of the specified header field. This field is applicable if the sessionAffinity is set to HEADER_FIELD.
    &quot;minimumRingSize&quot;: &quot;A String&quot;, # The minimum number of virtual nodes to use for the hash ring. Defaults to 1024. Larger ring sizes result in more granular load distributions. If the number of hosts in the load balancing pool is larger than the ring size, each host will be assigned a single virtual node.
  },
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
  &quot;customRequestHeaders&quot;: [ # Headers that the HTTP/S load balancer should add to proxied requests.
    &quot;A String&quot;,
  ],
  &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
  &quot;enableCDN&quot;: True or False, # If true, enables Cloud CDN for the backend service. Only applicable if the loadBalancingScheme is EXTERNAL and the protocol is HTTP or HTTPS.
  &quot;failoverPolicy&quot;: { # Applicable only to Failover for Internal TCP/UDP Load Balancing. On failover or failback, this field indicates whether connection draining will be honored. GCP has a fixed connection draining timeout of 10 minutes. A setting of true terminates existing TCP connections to the active pool during failover and failback, immediately draining traffic. A setting of false allows existing TCP connections to persist, even on VMs no longer in the active pool, for up to the duration of the connection draining timeout (10 minutes). # Applicable only to Failover for Internal TCP/UDP Load Balancing. Requires at least one backend instance group to be defined as a backup (failover) backend.
    &quot;disableConnectionDrainOnFailover&quot;: True or False, # This can be set to true only if the protocol is TCP.
        #
        # The default is false.
    &quot;dropTrafficIfUnhealthy&quot;: True or False, # Applicable only to Failover for Internal TCP/UDP Load Balancing. If set to true, connections to the load balancer are dropped when all primary and all backup backend VMs are unhealthy. If set to false, connections are distributed among all primary VMs when all primary and all backup backend VMs are unhealthy.
        #
        # The default is false.
    &quot;failoverRatio&quot;: 3.14, # Applicable only to Failover for Internal TCP/UDP Load Balancing. The value of the field must be in the range [0, 1]. If the value is 0, the load balancer performs a failover when the number of healthy primary VMs equals zero. For all other values, the load balancer performs a failover when the total number of healthy primary VMs is less than this ratio.
  },
  &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a BackendService. An up-to-date fingerprint must be provided in order to update the BackendService, otherwise the request will fail with error 412 conditionNotMet.
      # 
      # To see the latest fingerprint, make a get() request to retrieve a BackendService.
  &quot;healthChecks&quot;: [ # The list of URLs to the healthChecks, httpHealthChecks (legacy), or httpsHealthChecks (legacy) resource for health checking this backend service. Not all backend services support legacy health checks. See  Load balancer guide. Currently at most one health check can be specified. Backend services with instance group or zonal NEG backends must have a health check. Backend services with internet NEG backends must not have a health check. A health check must
    &quot;A String&quot;,
  ],
  &quot;iap&quot;: { # Identity-Aware Proxy # The configurations for Identity-Aware Proxy on this resource.
    &quot;enabled&quot;: True or False, # Whether the serving infrastructure will authenticate and authorize all incoming requests. If true, the oauth2ClientId and oauth2ClientSecret fields must be non-empty.
    &quot;oauth2ClientId&quot;: &quot;A String&quot;, # OAuth2 client ID to use for the authentication flow.
    &quot;oauth2ClientInfo&quot;: { # [Input Only] OAuth client info required to generate client id to be used for IAP.
      &quot;applicationName&quot;: &quot;A String&quot;, # Application name to be used in OAuth consent screen.
      &quot;clientName&quot;: &quot;A String&quot;, # Name of the client to be generated. Optional - If not provided, the name will be autogenerated by the backend.
      &quot;developerEmailAddress&quot;: &quot;A String&quot;, # Developer&#x27;s information to be used in OAuth consent screen.
    },
    &quot;oauth2ClientSecret&quot;: &quot;A String&quot;, # OAuth2 client secret to use for the authentication flow. For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2ClientSecretSha256 field.
    &quot;oauth2ClientSecretSha256&quot;: &quot;A String&quot;, # [Output Only] SHA256 hash value for the field oauth2_client_secret above.
  },
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
  &quot;kind&quot;: &quot;compute#backendService&quot;, # [Output Only] Type of resource. Always compute#backendService for backend services.
  &quot;loadBalancingScheme&quot;: &quot;A String&quot;, # Specifies the load balancer type. Choose EXTERNAL for load balancers that receive traffic from external clients. Choose INTERNAL for Internal TCP/UDP Load Balancing. Choose INTERNAL_MANAGED for Internal HTTP(S) Load Balancing. Choose INTERNAL_SELF_MANAGED for Traffic Director. A backend service created for one type of load balancing cannot be used with another. For more information, refer to Choosing a load balancer.
  &quot;localityLbPolicy&quot;: &quot;A String&quot;, # The load balancing algorithm used within the scope of the locality. The possible values are:
      # - ROUND_ROBIN: This is a simple policy in which each healthy backend is selected in round robin order. This is the default.
      # - LEAST_REQUEST: An O(1) algorithm which selects two random healthy hosts and picks the host which has fewer active requests.
      # - RING_HASH: The ring/modulo hash load balancer implements consistent hashing to backends. The algorithm has the property that the addition/removal of a host from a set of N hosts only affects 1/N of the requests.
      # - RANDOM: The load balancer selects a random healthy host.
      # - ORIGINAL_DESTINATION: Backend host is selected based on the client connection metadata, i.e., connections are opened to the same address as the destination address of the incoming connection before the connection was redirected to the load balancer.
      # - MAGLEV: used as a drop in replacement for the ring hash load balancer. Maglev is not as stable as ring hash but has faster table lookup build times and host selection times. For more information about Maglev, see https://ai.google/research/pubs/pub44824
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
      # 
      # If sessionAffinity is not NONE, and this field is not set to &gt;MAGLEV or RING_HASH, session affinity settings will not take effect.
  &quot;logConfig&quot;: { # The available logging options for the load balancer traffic served by this backend service. # This field denotes the logging options for the load balancer traffic served by this backend service. If logging is enabled, logs will be exported to Stackdriver.
    &quot;enable&quot;: True or False, # This field denotes whether to enable logging for the load balancer traffic served by this backend service.
    &quot;sampleRate&quot;: 3.14, # This field can only be specified if logging is enabled for this backend service. The value of the field must be in [0, 1]. This configures the sampling rate of requests to the load balancer where 1.0 means all logged requests are reported and 0.0 means no logged requests are reported. The default value is 1.0.
  },
  &quot;name&quot;: &quot;A String&quot;, # 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.
  &quot;network&quot;: &quot;A String&quot;, # The URL of the network to which this backend service belongs. This field can only be spcified when the load balancing scheme is set to INTERNAL.
  &quot;outlierDetection&quot;: { # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. # Settings controlling the eviction of unhealthy hosts from the load balancing pool for the backend service. If not set, this feature is considered disabled.
      # 
      # This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;baseEjectionTime&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # The base time that a host is ejected for. The real ejection time is equal to the base ejection time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s.
      &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
      &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
    },
    &quot;consecutiveErrors&quot;: 42, # Number of errors before a host is ejected from the connection pool. When the backend host is accessed over HTTP, a 5xx return code qualifies as an error. Defaults to 5.
    &quot;consecutiveGatewayFailure&quot;: 42, # The number of consecutive gateway failures (502, 503, 504 status or connection errors that are mapped to one of those status codes) before a consecutive gateway failure ejection occurs. Defaults to 3.
    &quot;enforcingConsecutiveErrors&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0.
    &quot;enforcingConsecutiveGatewayFailure&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
    &quot;enforcingSuccessRate&quot;: 42, # The percentage chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
    &quot;interval&quot;: { # A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like &quot;day&quot; or &quot;month&quot;. Range is approximately 10,000 years. # Time interval between ejection analysis sweeps. This can result in both new ejections as well as hosts being returned to service. Defaults to 1 second.
      &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.
      &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
    },
    &quot;maxEjectionPercent&quot;: 42, # Maximum percentage of hosts in the load balancing pool for the backend service that can be ejected. Defaults to 50%.
    &quot;successRateMinimumHosts&quot;: 42, # The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5.
    &quot;successRateRequestVolume&quot;: 42, # The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100.
    &quot;successRateStdevFactor&quot;: 42, # This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success rate, and the product of this factor and the standard deviation of the mean success rate: mean - (stdev * success_rate_stdev_factor). This factor is divided by a thousand to get a double. That is, if the desired factor is 1.9, the runtime value should be 1900. Defaults to 1900.
  },
  &quot;port&quot;: 42, # Deprecated in favor of portName. The TCP port to connect on the backend. The default value is 80.
      # 
      # This cannot be used if the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
  &quot;portName&quot;: &quot;A String&quot;, # A named port on a backend instance group representing the port for communication to the backend VMs in that group. Required when the loadBalancingScheme is EXTERNAL, INTERNAL_MANAGED, or INTERNAL_SELF_MANAGED and the backends are instance groups. The named port must be defined on each backend instance group. This parameter has no meaning if the backends are NEGs.
      # 
      # 
      # 
      # Must be omitted when the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).
  &quot;protocol&quot;: &quot;A String&quot;, # The protocol this BackendService uses to communicate with backends.
      # 
      # Possible values are HTTP, HTTPS, HTTP2, TCP, SSL, or UDP. depending on the chosen load balancer or Traffic Director configuration. Refer to the documentation for the load balancer or for Traffic Director for more information.
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] URL of the region where the regional backend service resides. This field is not applicable to global backend services. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
  &quot;securityPolicy&quot;: &quot;A String&quot;, # [Output Only] The resource URL for the security policy associated with this backend service.
  &quot;securitySettings&quot;: { # The authentication and authorization settings for a BackendService. # This field specifies the security policy that applies to this backend service. This field is applicable to either:
      # - A regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and load_balancing_scheme set to INTERNAL_MANAGED.
      # - A global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED.
    &quot;authentication&quot;: &quot;A String&quot;, # [Deprecated] Use clientTlsPolicy instead.
    &quot;authenticationPolicy&quot;: { # [Deprecated] The authentication settings for the backend service. The authentication settings for the backend service. # [Deprecated] Authentication policy defines what authentication methods can be accepted on backends, and if authenticated, which method/certificate will set the request principal. request principal.
      &quot;origins&quot;: [ # List of authentication methods that can be used for origin authentication. Similar to peers, these will be evaluated in order the first valid one will be used to set origin identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if origin authentication is not required.
        { # [Deprecated] Configuration for the origin authentication method. Configuration for the origin authentication method.
          &quot;jwt&quot;: { # [Deprecated] JWT configuration for origin authentication. JWT configuration for origin authentication.
            &quot;audiences&quot;: [ # A JWT containing any of these audiences will be accepted. The service name will be accepted if audiences is empty. Examples: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com
              &quot;A String&quot;,
            ],
            &quot;issuer&quot;: &quot;A String&quot;, # Identifies the issuer that issued the JWT, which is usually a URL or an email address. Examples: https://securetoken.google.com, 1234567-compute@developer.gserviceaccount.com
            &quot;jwksPublicKeys&quot;: &quot;A String&quot;, # The provider&#x27;s public key set to validate the signature of the JWT.
            &quot;jwtHeaders&quot;: [ # jwt_headers and jwt_params define where to extract the JWT from an HTTP request. If no explicit location is specified, the following default locations are tried in order:
                #
                # 1. The Authorization header using the Bearer schema. See `here `_. Example:
                #
                # Authorization: Bearer .
                #
                # 2. `access_token` query parameter. See `this `_
                #
                # Multiple JWTs can be verified for a request. Each JWT has to be extracted from the locations its issuer specified or from the default locations.
                #
                # This field is set if JWT is sent in a request header. This field specifies the header name. For example, if `header=x-goog-iap-jwt-assertion`, the header format will be x-goog-iap-jwt-assertion: .
              { # [Deprecated] This message specifies a header location to extract JWT token. This message specifies a header location to extract JWT token.
                &quot;name&quot;: &quot;A String&quot;, # The HTTP header name.
                &quot;valuePrefix&quot;: &quot;A String&quot;, # The value prefix. The value format is &quot;value_prefix&quot; For example, for &quot;Authorization: Bearer &quot;, value_prefix=&quot;Bearer &quot; with a space at the end.
              },
            ],
            &quot;jwtParams&quot;: [ # This field is set if JWT is sent in a query parameter. This field specifies the query parameter name. For example, if jwt_params[0] is jwt_token, the JWT format in the query parameter is /path?jwt_token=.
              &quot;A String&quot;,
            ],
          },
        },
      ],
      &quot;peers&quot;: [ # List of authentication methods that can be used for peer authentication. They will be evaluated in order the first valid one will be used to set peer identity. If none of these methods pass, the request will be rejected with authentication failed error (401). Leave the list empty if peer authentication is not required.
        { # [Deprecated] Configuration for the peer authentication method. Configuration for the peer authentication method.
          &quot;mtls&quot;: { # [Deprecated] Configuration for the mutual Tls mode for peer authentication. Configuration for the mutual Tls mode for peer authentication. # Set if mTLS is used for peer authentication.
            &quot;mode&quot;: &quot;A String&quot;, # Specifies if the server TLS is configured to be strict or permissive. This field can be set to one of the following: STRICT: Client certificate must be presented, connection is in TLS. PERMISSIVE: Client certificate can be omitted, connection can be either plaintext or TLS.
          },
        },
      ],
      &quot;principalBinding&quot;: &quot;A String&quot;, # Define whether peer or origin identity should be used for principal. Default value is USE_PEER. If peer (or origin) identity is not available, either because peer/origin authentication is not defined, or failed, principal will be left unset. In other words, binding rule does not affect the decision to accept or reject request. This field can be set to one of the following: USE_PEER: Principal will be set to the identity from peer authentication. USE_ORIGIN: Principal will be set to the identity from origin authentication.
      &quot;serverTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain server-side security certificates and identity information.
        &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
          &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
            &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
          },
          &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
        },
        &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
          &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
          &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
        },
      },
    },
    &quot;authorizationConfig&quot;: { # [Deprecated] Authorization configuration provides service-level and method-level access control for a service. control for a service. # [Deprecated] Authorization config defines the Role Based Access Control (RBAC) config. Authorization config defines the Role Based Access Control (RBAC) config.
      &quot;policies&quot;: [ # List of RbacPolicies.
        {
          &quot;name&quot;: &quot;A String&quot;, # Name of the RbacPolicy.
          &quot;permissions&quot;: [ # The list of permissions.
            { # [Deprecated] All fields defined in a permission are ANDed.
              &quot;constraints&quot;: [ # Extra custom constraints. The constraints are ANDed together.
                { # Custom constraint that specifies a key and a list of allowed values for Istio attributes.
                  &quot;key&quot;: &quot;A String&quot;, # Key of the constraint.
                  &quot;values&quot;: [ # A list of allowed values.
                    &quot;A String&quot;,
                  ],
                },
              ],
              &quot;hosts&quot;: [ # Used in Ingress or Egress Gateway cases to specify hosts that the policy applies to. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;methods&quot;: [ # HTTP method.
                &quot;A String&quot;,
              ],
              &quot;notHosts&quot;: [ # Negate of hosts. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notMethods&quot;: [ # Negate of methods. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notPaths&quot;: [ # Negate of paths. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notPorts&quot;: [ # Negate of ports. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;paths&quot;: [ # HTTP request paths or gRPC methods. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;ports&quot;: [ # Port names or numbers.
                &quot;A String&quot;,
              ],
            },
          ],
          &quot;principals&quot;: [ # The list of principals.
            { # [Deprecated] All fields defined in a principal are ANDed.
              &quot;condition&quot;: &quot;A String&quot;, # An expression to specify custom condition.
              &quot;groups&quot;: [ # The groups the principal belongs to. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;ips&quot;: [ # IPv4 or IPv6 address or range (In CIDR format)
                &quot;A String&quot;,
              ],
              &quot;namespaces&quot;: [ # The namespaces. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
              &quot;notGroups&quot;: [ # Negate of groups. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notIps&quot;: [ # Negate of IPs. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notNamespaces&quot;: [ # Negate of namespaces. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;notUsers&quot;: [ # Negate of users. Specifies exclusions.
                &quot;A String&quot;,
              ],
              &quot;properties&quot;: { # A map of Istio attribute to expected values. Exact match, prefix match, and suffix match are supported for values. For example, `request.headers[version]: &quot;v1&quot;`. The properties are ANDed together.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;users&quot;: [ # The user names/IDs or service accounts. Exact match, prefix match, and suffix match are supported.
                &quot;A String&quot;,
              ],
            },
          ],
        },
      ],
    },
    &quot;clientTlsPolicy&quot;: &quot;A String&quot;, # Optional. A URL referring to a networksecurity.ClientTlsPolicy resource that describes how clients should authenticate with this service&#x27;s backends.
        # clientTlsPolicy only applies to a global BackendService with the loadBalancingScheme set to INTERNAL_SELF_MANAGED.
        # If left blank, communications are not encrypted.
    &quot;clientTlsSettings&quot;: { # [Deprecated] The client side authentication settings for connection originating from the backend service. the backend service. # [Deprecated] TLS Settings for the backend service.
      &quot;clientTlsContext&quot;: { # [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server. # Configures the mechanism to obtain client-side security certificates and identity information. This field is only applicable when mode is set to MUTUAL.
        &quot;certificateContext&quot;: { # [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate. # Defines the mechanism to obtain the client or server certificate.
          &quot;certificatePaths&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # Specifies the certificate and private key paths. This field is applicable only if tlsCertificateSource is set to USE_PATH.
            &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
            &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
          },
          &quot;certificateSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
        },
        &quot;validationContext&quot;: { # [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate. # Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. If omitted, the proxy will not validate the server or client certificate.
          &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the CA certificate to validate the client or server certificate.
          &quot;sdsConfig&quot;: { # [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server. # Specifies the config to retrieve certificates through SDS. This field is applicable only if tlsCertificateSource is set to USE_SDS.
            &quot;grpcServiceConfig&quot;: { # [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server. # The configuration to access the SDS server over GRPC.
              &quot;callCredentials&quot;: { # [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server. # The call credentials to access the SDS server.
                &quot;callCredentialType&quot;: &quot;A String&quot;, # The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following:
                    # - GCE_VM: The local GCE VM service account credentials are used to access the SDS server.
                    # - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.
                &quot;fromPlugin&quot;: { # [Deprecated] Custom authenticator credentials. Custom authenticator credentials. # Custom authenticator credentials. Valid if callCredentialType is FROM_PLUGIN.
                  &quot;name&quot;: &quot;A String&quot;, # Plugin name.
                  &quot;structConfig&quot;: &quot;A String&quot;, # A text proto that conforms to a Struct type definition interpreted by the plugin.
                },
              },
              &quot;channelCredentials&quot;: { # [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server. # The channel credentials to access the SDS server.
                &quot;certificates&quot;: { # [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key. # The call credentials to access the SDS server.
                  &quot;certificatePath&quot;: &quot;A String&quot;, # The path to the file holding the client or server TLS certificate to use.
                  &quot;privateKeyPath&quot;: &quot;A String&quot;, # The path to the file holding the client or server private key.
                },
                &quot;channelCredentialType&quot;: &quot;A String&quot;, # The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.
              },
              &quot;targetUri&quot;: &quot;A String&quot;, # The target URI of the SDS server.
            },
          },
          &quot;validationSource&quot;: &quot;A String&quot;, # Defines how TLS certificates are obtained.
        },
      },
      &quot;mode&quot;: &quot;A String&quot;, # Indicates whether connections to this port should be secured using TLS. The value of this field determines how TLS is enforced. This can be set to one of the following values: DISABLE: Do not setup a TLS connection to the backends. SIMPLE: Originate a TLS connection to the backends. MUTUAL: Secure connections to the backends using mutual TLS by presenting client certificates for authentication.
      &quot;sni&quot;: &quot;A String&quot;, # SNI string to present to the server during TLS handshake. This field is applicable only when mode is SIMPLE or MUTUAL.
      &quot;subjectAltNames&quot;: [ # A list of alternate names to verify the subject identity in the certificate.If specified, the proxy will verify that the server certificate&#x27;s subject alt name matches one of the specified values. This field is applicable only when mode is SIMPLE or MUTUAL.
        &quot;A String&quot;,
      ],
    },
    &quot;subjectAltNames&quot;: [ # Optional. A list of Subject Alternative Names (SANs) that the client verifies during a mutual TLS handshake with an server/endpoint for this BackendService. When the server presents its X.509 certificate to the client, the client inspects the certificate&#x27;s subjectAltName field. If the field contains one of the specified values, the communication continues. Otherwise, it fails. This additional check enables the client to verify that the server is authorized to run the requested service.
        # Note that the contents of the server certificate&#x27;s subjectAltName field are configured by the Public Key Infrastructure which provisions server identities.
        # Only applies to a global BackendService with loadBalancingScheme set to INTERNAL_SELF_MANAGED. Only applies when BackendService has an attached clientTlsPolicy with clientCertificate (mTLS mode).
      &quot;A String&quot;,
    ],
  },
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
  &quot;sessionAffinity&quot;: &quot;A String&quot;, # Type of session affinity to use. The default is NONE. Session affinity is not applicable if the --protocol is UDP.
      # 
      # When the loadBalancingScheme is EXTERNAL, possible values are NONE, CLIENT_IP, or GENERATED_COOKIE. You can use GENERATED_COOKIE if the protocol is HTTP or HTTPS.
      # 
      # When the loadBalancingScheme is INTERNAL, possible values are NONE, CLIENT_IP, CLIENT_IP_PROTO, or CLIENT_IP_PORT_PROTO.
      # 
      # When the loadBalancingScheme is INTERNAL_SELF_MANAGED, or INTERNAL_MANAGED, possible values are NONE, CLIENT_IP, GENERATED_COOKIE, HEADER_FIELD, or HTTP_COOKIE.
  &quot;timeoutSec&quot;: 42, # The backend service timeout has a different meaning depending on the type of load balancer. For more information see,  Backend service settings The default is 30 seconds.
}

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # Google Compute Engine has three Operation resources:
      #
      # * [Global](/compute/docs/reference/rest/{$api_version}/globalOperations) * [Regional](/compute/docs/reference/rest/{$api_version}/regionOperations) * [Zonal](/compute/docs/reference/rest/{$api_version}/zoneOperations)
      #
      # You can use an operation resource to manage asynchronous API requests. For more information, read Handling API responses.
      #
      # Operations can be global, regional or zonal.
      # - For global operations, use the `globalOperations` resource.
      # - For regional operations, use the `regionOperations` resource.
      # - For zonal operations, use the `zonalOperations` resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for {$api_version}.globalOperations ==) (== resource_for {$api_version}.regionOperations ==) (== resource_for {$api_version}.zoneOperations ==)
    &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
    &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is set when the operation is created.
    &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
        {
          &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
          &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
          &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
        },
      ],
    },
    &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as `NOT FOUND`.
    &quot;httpErrorStatusCode&quot;: 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.
    &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is defined by the server.
    &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for Operation resources.
    &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
    &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`, `update`, or `delete`, and so on.
    &quot;progress&quot;: 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.
    &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
    &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
    &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the following: `PENDING`, `RUNNING`, or `DONE`.
    &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the operation.
    &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    &quot;targetLink&quot;: &quot;A String&quot;, # [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.
    &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example: `user@example.com`.
    &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example:
            # &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
          {
            &quot;key&quot;: &quot;A String&quot;, # [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).
            &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
          },
        ],
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
      },
    ],
    &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
  }</pre>
</div>

</body></html>