<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_beta.html">Compute Engine API</a> . <a href="compute_beta.networkEndpointGroups.html">networkEndpointGroups</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#aggregatedList">aggregatedList(project, filter=None, includeAllScopes=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the list of network endpoint groups and sorts them by zone.</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="#attachNetworkEndpoints">attachNetworkEndpoints(project, zone, networkEndpointGroup, body=None, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Attach a list of network endpoints to the specified network endpoint group.</p>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#delete">delete(project, zone, networkEndpointGroup, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified network endpoint group. The network endpoints in the NEG and the VM instances they belong to are not terminated when the NEG is deleted. Note that the NEG cannot be deleted if there are backend services referencing it.</p>
<p class="toc_element">
  <code><a href="#detachNetworkEndpoints">detachNetworkEndpoints(project, zone, networkEndpointGroup, body=None, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Detach a list of network endpoints from the specified network endpoint group.</p>
<p class="toc_element">
  <code><a href="#get">get(project, zone, networkEndpointGroup, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the specified network endpoint group. Gets a list of available network endpoint groups by making a list() request.</p>
<p class="toc_element">
  <code><a href="#insert">insert(project, zone, body=None, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a network endpoint group in the specified project using the parameters that are included in the request.</p>
<p class="toc_element">
  <code><a href="#list">list(project, zone, filter=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the list of network endpoint groups that are located in the specified project and zone.</p>
<p class="toc_element">
  <code><a href="#listNetworkEndpoints">listNetworkEndpoints(project, zone, networkEndpointGroup, body=None, filter=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the network endpoints in the specified network endpoint group.</p>
<p class="toc_element">
  <code><a href="#listNetworkEndpoints_next">listNetworkEndpoints_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="#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="#testIamPermissions">testIamPermissions(project, zone, resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns permissions that a caller has on the specified resource.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="aggregatedList">aggregatedList(project, filter=None, includeAllScopes=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None, x__xgafv=None)</code>
  <pre>Retrieves the list of network endpoint groups and sorts them by zone.

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, an operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The operator must be either `=`, `!=`, `&gt;`, `&lt;`, `&lt;=`, `&gt;=` or `:`. For example, if you are filtering Compute Engine instances, you can exclude instances named `example-instance` by specifying `name != example-instance`. The `:` operator can be used with string fields to match substrings. For non-string fields it is equivalent to the `=` operator. The `:*` comparison can be used to test whether a key has been defined. For example, to find all objects with `owner` label use: ``` labels.owner:* ``` 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.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] Unique identifier for the resource; defined by the server.
  &quot;items&quot;: { # A list of NetworkEndpointGroupsScopedList resources.
    &quot;a_key&quot;: { # The name of the scope that contains this set of network endpoint groups.
      &quot;networkEndpointGroups&quot;: [ # [Output Only] The list of network endpoint groups that are contained in this scope.
        { # Represents a collection of network endpoints. A network endpoint group (NEG) defines how a set of endpoints should be reached, whether they are reachable, and where they are located. For more information about using NEGs, see Setting up external HTTP(S) Load Balancing with internet NEGs, Setting up zonal NEGs, or Setting up external HTTP(S) Load Balancing with serverless NEGs.
          &quot;annotations&quot;: { # Metadata defined as annotations on the network endpoint group.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;appEngine&quot;: { # Configuration for an App Engine network endpoint group (NEG). The service is optional, may be provided explicitly or in the URL mask. The version is optional and can only be provided explicitly or in the URL mask when service is present. Note: App Engine service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
            &quot;service&quot;: &quot;A String&quot;, # Optional serving service. The service name is case-sensitive and must be 1-63 characters long. Example value: &quot;default&quot;, &quot;my-service&quot;.
            &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse service and version fields from a request URL. URL mask allows for routing to multiple App Engine services without having to create multiple Network Endpoint Groups and backend services. For example, the request URLs &quot;foo1-dot-appname.appspot.com/v1&quot; and &quot;foo1-dot-appname.appspot.com/v2&quot; can be backed by the same Serverless NEG with URL mask &quot;-dot-appname.appspot.com/&quot;. The URL mask will parse them to { service = &quot;foo1&quot;, version = &quot;v1&quot; } and { service = &quot;foo1&quot;, version = &quot;v2&quot; } respectively.
            &quot;version&quot;: &quot;A String&quot;, # Optional serving version. The version name is case-sensitive and must be 1-100 characters long. Example value: &quot;v1&quot;, &quot;v2&quot;.
          },
          &quot;cloudFunction&quot;: { # Configuration for a Cloud Function network endpoint group (NEG). The function must be provided explicitly or in the URL mask. Note: Cloud Function must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
            &quot;function&quot;: &quot;A String&quot;, # A user-defined name of the Cloud Function. The function name is case-sensitive and must be 1-63 characters long. Example value: &quot;func1&quot;.
            &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse function field from a request URL. URL mask allows for routing to multiple Cloud Functions without having to create multiple Network Endpoint Groups and backend services. For example, request URLs &quot; mydomain.com/function1&quot; and &quot;mydomain.com/function2&quot; can be backed by the same Serverless NEG with URL mask &quot;/&quot;. The URL mask will parse them to { function = &quot;function1&quot; } and { function = &quot;function2&quot; } respectively.
          },
          &quot;cloudRun&quot;: { # Configuration for a Cloud Run network endpoint group (NEG). The service must be provided explicitly or in the URL mask. The tag is optional, may be provided explicitly or in the URL mask. Note: Cloud Run service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
            &quot;service&quot;: &quot;A String&quot;, # Cloud Run service is the main resource of Cloud Run. The service must be 1-63 characters long, and comply with RFC1035. Example value: &quot;run-service&quot;.
            &quot;tag&quot;: &quot;A String&quot;, # Optional Cloud Run tag represents the &quot;named-revision&quot; to provide additional fine-grained traffic routing information. The tag must be 1-63 characters long, and comply with RFC1035. Example value: &quot;revision-0010&quot;.
            &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse service and tag fields from a request URL. URL mask allows for routing to multiple Run services without having to create multiple network endpoint groups and backend services. For example, request URLs &quot;foo1.domain.com/bar1&quot; and &quot;foo1.domain.com/bar2&quot; can be backed by the same Serverless Network Endpoint Group (NEG) with URL mask &quot;.domain.com/&quot;. The URL mask will parse them to { service=&quot;bar1&quot;, tag=&quot;foo1&quot; } and { service=&quot;bar2&quot;, tag=&quot;foo2&quot; } respectively.
          },
          &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
          &quot;defaultPort&quot;: 42, # The default port used if the port number is not specified in the network endpoint.
          &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
          &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#networkEndpointGroup&quot;, # [Output Only] Type of the resource. Always compute#networkEndpointGroup for network endpoint group.
          &quot;loadBalancer&quot;: { # Load balancing specific fields for network endpoint group. # This field is only valid when the network endpoint group is used for load balancing. [Deprecated] This field is deprecated.
            &quot;defaultPort&quot;: 42, # The default port used if the port number is not specified in the network endpoint. [Deprecated] This field is deprecated.
            &quot;network&quot;: &quot;A String&quot;, # The URL of the network to which all network endpoints in the NEG belong. Uses &quot;default&quot; project network if unspecified. [Deprecated] This field is deprecated.
            &quot;subnetwork&quot;: &quot;A String&quot;, # Optional URL of the subnetwork to which all network endpoints in the NEG belong. [Deprecated] This field is deprecated.
            &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the network endpoint group is located. [Deprecated] This field is deprecated.
          },
          &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 all network endpoints in the NEG belong. Uses &quot;default&quot; project network if unspecified.
          &quot;networkEndpointType&quot;: &quot;A String&quot;, # Type of network endpoints in this network endpoint group. Can be one of GCE_VM_IP_PORT, NON_GCP_PRIVATE_IP_PORT, INTERNET_FQDN_PORT, INTERNET_IP_PORT, SERVERLESS, PRIVATE_SERVICE_CONNECT.
          &quot;pscTargetService&quot;: &quot;A String&quot;, # The target service url used to set up private service connection to a Google API. An example value is: &quot;asia-northeast3-cloudkms.googleapis.com&quot;
          &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the network endpoint group is located.
          &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
          &quot;serverlessDeployment&quot;: { # Configuration for a serverless network endpoint group (NEG). The platform must be provided. Note: The target backend service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine, cloudFunction or serverlessDeployment may be set.
            &quot;platform&quot;: &quot;A String&quot;, # The platform of the backend target(s) of this NEG. Possible values include: 1. API Gateway: apigateway.googleapis.com 2. App Engine: appengine.googleapis.com 3. Cloud Functions: cloudfunctions.googleapis.com 4. Cloud Run: run.googleapis.com
            &quot;resource&quot;: &quot;A String&quot;, # The user-defined name of the workload/instance. This value must be provided explicitly or in the urlMask. The resource identified by this value is platform-specific and is as follows: 1. API Gateway: The gateway ID 2. App Engine: The service name 3. Cloud Functions: The function name 4. Cloud Run: The service name
            &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse platform-specific fields from a request URL. URL mask allows for routing to multiple resources on the same serverless platform without having to create multiple Network Endpoint Groups and backend resources. The fields parsed by this template are platform-specific and are as follows: 1. API Gateway: The gateway ID 2. App Engine: The service and version 3. Cloud Functions: The function name 4. Cloud Run: The service and tag
            &quot;version&quot;: &quot;A String&quot;, # The optional resource version. The version identified by this value is platform-specific and is follows: 1. API Gateway: Unused 2. App Engine: The service version 3. Cloud Functions: Unused 4. Cloud Run: The service tag
          },
          &quot;size&quot;: 42, # [Output only] Number of network endpoints in the network endpoint group.
          &quot;subnetwork&quot;: &quot;A String&quot;, # Optional URL of the subnetwork to which all network endpoints in the NEG belong.
          &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the network endpoint group is located.
        },
      ],
      &quot;warning&quot;: { # [Output Only] An informational warning that replaces the list of network endpoint groups 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#networkEndpointGroupAggregatedList&quot;, # [Output Only] The resource type, which is always compute#networkEndpointGroupAggregatedList for aggregated lists of network endpoint groups.
  &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="attachNetworkEndpoints">attachNetworkEndpoints(project, zone, networkEndpointGroup, body=None, requestId=None, x__xgafv=None)</code>
  <pre>Attach a list of network endpoints to the specified network endpoint group.

Args:
  project: string, Project ID for this request. (required)
  zone: string, The name of the zone where the network endpoint group is located. It should comply with RFC1035. (required)
  networkEndpointGroup: string, The name of the network endpoint group where you are attaching network endpoints to. It should comply with RFC1035. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;networkEndpoints&quot;: [ # The list of network endpoints to be attached.
    { # The network endpoint.
      &quot;annotations&quot;: { # Metadata defined as annotations on the network endpoint.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;fqdn&quot;: &quot;A String&quot;, # Optional fully qualified domain name of network endpoint. This can only be specified when NetworkEndpointGroup.network_endpoint_type is NON_GCP_FQDN_PORT.
      &quot;instance&quot;: &quot;A String&quot;, # The name for a specific VM instance that the IP address belongs to. This is required for network endpoints of type GCE_VM_IP_PORT. The instance must be in the same zone of network endpoint group. The name must be 1-63 characters long, and comply with RFC1035.
      &quot;ipAddress&quot;: &quot;A String&quot;, # Optional IPv4 address of network endpoint. The IP address must belong to a VM in Compute Engine (either the primary IP or as part of an aliased IP range). If the IP address is not specified, then the primary IP address for the VM instance in the network that the network endpoint group belongs to will be used.
      &quot;port&quot;: 42, # Optional port number of network endpoint. If not specified, the defaultPort for the network endpoint group will be used.
    },
  ],
}

  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).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents an Operation resource. Google Compute Engine has three Operation resources: * [Global](/compute/docs/reference/rest/beta/globalOperations) * [Regional](/compute/docs/reference/rest/beta/regionOperations) * [Zonal](/compute/docs/reference/rest/beta/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.
  &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;operationGroupId&quot;: &quot;A String&quot;, # [Output Only] An ID that represents a group of operations, such as when a group of operations results from a `bulkInsert` API request.
  &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;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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(project, zone, networkEndpointGroup, requestId=None, x__xgafv=None)</code>
  <pre>Deletes the specified network endpoint group. The network endpoints in the NEG and the VM instances they belong to are not terminated when the NEG is deleted. Note that the NEG cannot be deleted if there are backend services referencing it.

Args:
  project: string, Project ID for this request. (required)
  zone: string, The name of the zone where the network endpoint group is located. It should comply with RFC1035. (required)
  networkEndpointGroup: string, The name of the network endpoint group to delete. It should comply with RFC1035. (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).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents an Operation resource. Google Compute Engine has three Operation resources: * [Global](/compute/docs/reference/rest/beta/globalOperations) * [Regional](/compute/docs/reference/rest/beta/regionOperations) * [Zonal](/compute/docs/reference/rest/beta/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.
  &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;operationGroupId&quot;: &quot;A String&quot;, # [Output Only] An ID that represents a group of operations, such as when a group of operations results from a `bulkInsert` API request.
  &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;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="detachNetworkEndpoints">detachNetworkEndpoints(project, zone, networkEndpointGroup, body=None, requestId=None, x__xgafv=None)</code>
  <pre>Detach a list of network endpoints from the specified network endpoint group.

Args:
  project: string, Project ID for this request. (required)
  zone: string, The name of the zone where the network endpoint group is located. It should comply with RFC1035. (required)
  networkEndpointGroup: string, The name of the network endpoint group where you are removing network endpoints. It should comply with RFC1035. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;networkEndpoints&quot;: [ # The list of network endpoints to be detached.
    { # The network endpoint.
      &quot;annotations&quot;: { # Metadata defined as annotations on the network endpoint.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;fqdn&quot;: &quot;A String&quot;, # Optional fully qualified domain name of network endpoint. This can only be specified when NetworkEndpointGroup.network_endpoint_type is NON_GCP_FQDN_PORT.
      &quot;instance&quot;: &quot;A String&quot;, # The name for a specific VM instance that the IP address belongs to. This is required for network endpoints of type GCE_VM_IP_PORT. The instance must be in the same zone of network endpoint group. The name must be 1-63 characters long, and comply with RFC1035.
      &quot;ipAddress&quot;: &quot;A String&quot;, # Optional IPv4 address of network endpoint. The IP address must belong to a VM in Compute Engine (either the primary IP or as part of an aliased IP range). If the IP address is not specified, then the primary IP address for the VM instance in the network that the network endpoint group belongs to will be used.
      &quot;port&quot;: 42, # Optional port number of network endpoint. If not specified, the defaultPort for the network endpoint group will be used.
    },
  ],
}

  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).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents an Operation resource. Google Compute Engine has three Operation resources: * [Global](/compute/docs/reference/rest/beta/globalOperations) * [Regional](/compute/docs/reference/rest/beta/regionOperations) * [Zonal](/compute/docs/reference/rest/beta/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.
  &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;operationGroupId&quot;: &quot;A String&quot;, # [Output Only] An ID that represents a group of operations, such as when a group of operations results from a `bulkInsert` API request.
  &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;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, zone, networkEndpointGroup, x__xgafv=None)</code>
  <pre>Returns the specified network endpoint group. Gets a list of available network endpoint groups by making a list() request.

Args:
  project: string, Project ID for this request. (required)
  zone: string, The name of the zone where the network endpoint group is located. It should comply with RFC1035. (required)
  networkEndpointGroup: string, The name of the network endpoint group. It should comply with RFC1035. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a collection of network endpoints. A network endpoint group (NEG) defines how a set of endpoints should be reached, whether they are reachable, and where they are located. For more information about using NEGs, see Setting up external HTTP(S) Load Balancing with internet NEGs, Setting up zonal NEGs, or Setting up external HTTP(S) Load Balancing with serverless NEGs.
  &quot;annotations&quot;: { # Metadata defined as annotations on the network endpoint group.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;appEngine&quot;: { # Configuration for an App Engine network endpoint group (NEG). The service is optional, may be provided explicitly or in the URL mask. The version is optional and can only be provided explicitly or in the URL mask when service is present. Note: App Engine service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
    &quot;service&quot;: &quot;A String&quot;, # Optional serving service. The service name is case-sensitive and must be 1-63 characters long. Example value: &quot;default&quot;, &quot;my-service&quot;.
    &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse service and version fields from a request URL. URL mask allows for routing to multiple App Engine services without having to create multiple Network Endpoint Groups and backend services. For example, the request URLs &quot;foo1-dot-appname.appspot.com/v1&quot; and &quot;foo1-dot-appname.appspot.com/v2&quot; can be backed by the same Serverless NEG with URL mask &quot;-dot-appname.appspot.com/&quot;. The URL mask will parse them to { service = &quot;foo1&quot;, version = &quot;v1&quot; } and { service = &quot;foo1&quot;, version = &quot;v2&quot; } respectively.
    &quot;version&quot;: &quot;A String&quot;, # Optional serving version. The version name is case-sensitive and must be 1-100 characters long. Example value: &quot;v1&quot;, &quot;v2&quot;.
  },
  &quot;cloudFunction&quot;: { # Configuration for a Cloud Function network endpoint group (NEG). The function must be provided explicitly or in the URL mask. Note: Cloud Function must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
    &quot;function&quot;: &quot;A String&quot;, # A user-defined name of the Cloud Function. The function name is case-sensitive and must be 1-63 characters long. Example value: &quot;func1&quot;.
    &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse function field from a request URL. URL mask allows for routing to multiple Cloud Functions without having to create multiple Network Endpoint Groups and backend services. For example, request URLs &quot; mydomain.com/function1&quot; and &quot;mydomain.com/function2&quot; can be backed by the same Serverless NEG with URL mask &quot;/&quot;. The URL mask will parse them to { function = &quot;function1&quot; } and { function = &quot;function2&quot; } respectively.
  },
  &quot;cloudRun&quot;: { # Configuration for a Cloud Run network endpoint group (NEG). The service must be provided explicitly or in the URL mask. The tag is optional, may be provided explicitly or in the URL mask. Note: Cloud Run service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
    &quot;service&quot;: &quot;A String&quot;, # Cloud Run service is the main resource of Cloud Run. The service must be 1-63 characters long, and comply with RFC1035. Example value: &quot;run-service&quot;.
    &quot;tag&quot;: &quot;A String&quot;, # Optional Cloud Run tag represents the &quot;named-revision&quot; to provide additional fine-grained traffic routing information. The tag must be 1-63 characters long, and comply with RFC1035. Example value: &quot;revision-0010&quot;.
    &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse service and tag fields from a request URL. URL mask allows for routing to multiple Run services without having to create multiple network endpoint groups and backend services. For example, request URLs &quot;foo1.domain.com/bar1&quot; and &quot;foo1.domain.com/bar2&quot; can be backed by the same Serverless Network Endpoint Group (NEG) with URL mask &quot;.domain.com/&quot;. The URL mask will parse them to { service=&quot;bar1&quot;, tag=&quot;foo1&quot; } and { service=&quot;bar2&quot;, tag=&quot;foo2&quot; } respectively.
  },
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
  &quot;defaultPort&quot;: 42, # The default port used if the port number is not specified in the network endpoint.
  &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
  &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#networkEndpointGroup&quot;, # [Output Only] Type of the resource. Always compute#networkEndpointGroup for network endpoint group.
  &quot;loadBalancer&quot;: { # Load balancing specific fields for network endpoint group. # This field is only valid when the network endpoint group is used for load balancing. [Deprecated] This field is deprecated.
    &quot;defaultPort&quot;: 42, # The default port used if the port number is not specified in the network endpoint. [Deprecated] This field is deprecated.
    &quot;network&quot;: &quot;A String&quot;, # The URL of the network to which all network endpoints in the NEG belong. Uses &quot;default&quot; project network if unspecified. [Deprecated] This field is deprecated.
    &quot;subnetwork&quot;: &quot;A String&quot;, # Optional URL of the subnetwork to which all network endpoints in the NEG belong. [Deprecated] This field is deprecated.
    &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the network endpoint group is located. [Deprecated] This field is deprecated.
  },
  &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 all network endpoints in the NEG belong. Uses &quot;default&quot; project network if unspecified.
  &quot;networkEndpointType&quot;: &quot;A String&quot;, # Type of network endpoints in this network endpoint group. Can be one of GCE_VM_IP_PORT, NON_GCP_PRIVATE_IP_PORT, INTERNET_FQDN_PORT, INTERNET_IP_PORT, SERVERLESS, PRIVATE_SERVICE_CONNECT.
  &quot;pscTargetService&quot;: &quot;A String&quot;, # The target service url used to set up private service connection to a Google API. An example value is: &quot;asia-northeast3-cloudkms.googleapis.com&quot;
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the network endpoint group is located.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;serverlessDeployment&quot;: { # Configuration for a serverless network endpoint group (NEG). The platform must be provided. Note: The target backend service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine, cloudFunction or serverlessDeployment may be set.
    &quot;platform&quot;: &quot;A String&quot;, # The platform of the backend target(s) of this NEG. Possible values include: 1. API Gateway: apigateway.googleapis.com 2. App Engine: appengine.googleapis.com 3. Cloud Functions: cloudfunctions.googleapis.com 4. Cloud Run: run.googleapis.com
    &quot;resource&quot;: &quot;A String&quot;, # The user-defined name of the workload/instance. This value must be provided explicitly or in the urlMask. The resource identified by this value is platform-specific and is as follows: 1. API Gateway: The gateway ID 2. App Engine: The service name 3. Cloud Functions: The function name 4. Cloud Run: The service name
    &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse platform-specific fields from a request URL. URL mask allows for routing to multiple resources on the same serverless platform without having to create multiple Network Endpoint Groups and backend resources. The fields parsed by this template are platform-specific and are as follows: 1. API Gateway: The gateway ID 2. App Engine: The service and version 3. Cloud Functions: The function name 4. Cloud Run: The service and tag
    &quot;version&quot;: &quot;A String&quot;, # The optional resource version. The version identified by this value is platform-specific and is follows: 1. API Gateway: Unused 2. App Engine: The service version 3. Cloud Functions: Unused 4. Cloud Run: The service tag
  },
  &quot;size&quot;: 42, # [Output only] Number of network endpoints in the network endpoint group.
  &quot;subnetwork&quot;: &quot;A String&quot;, # Optional URL of the subnetwork to which all network endpoints in the NEG belong.
  &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the network endpoint group is located.
}</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(project, zone, body=None, requestId=None, x__xgafv=None)</code>
  <pre>Creates a network endpoint group in the specified project using the parameters that are included in the request.

Args:
  project: string, Project ID for this request. (required)
  zone: string, The name of the zone where you want to create the network endpoint group. It should comply with RFC1035. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a collection of network endpoints. A network endpoint group (NEG) defines how a set of endpoints should be reached, whether they are reachable, and where they are located. For more information about using NEGs, see Setting up external HTTP(S) Load Balancing with internet NEGs, Setting up zonal NEGs, or Setting up external HTTP(S) Load Balancing with serverless NEGs.
  &quot;annotations&quot;: { # Metadata defined as annotations on the network endpoint group.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;appEngine&quot;: { # Configuration for an App Engine network endpoint group (NEG). The service is optional, may be provided explicitly or in the URL mask. The version is optional and can only be provided explicitly or in the URL mask when service is present. Note: App Engine service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
    &quot;service&quot;: &quot;A String&quot;, # Optional serving service. The service name is case-sensitive and must be 1-63 characters long. Example value: &quot;default&quot;, &quot;my-service&quot;.
    &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse service and version fields from a request URL. URL mask allows for routing to multiple App Engine services without having to create multiple Network Endpoint Groups and backend services. For example, the request URLs &quot;foo1-dot-appname.appspot.com/v1&quot; and &quot;foo1-dot-appname.appspot.com/v2&quot; can be backed by the same Serverless NEG with URL mask &quot;-dot-appname.appspot.com/&quot;. The URL mask will parse them to { service = &quot;foo1&quot;, version = &quot;v1&quot; } and { service = &quot;foo1&quot;, version = &quot;v2&quot; } respectively.
    &quot;version&quot;: &quot;A String&quot;, # Optional serving version. The version name is case-sensitive and must be 1-100 characters long. Example value: &quot;v1&quot;, &quot;v2&quot;.
  },
  &quot;cloudFunction&quot;: { # Configuration for a Cloud Function network endpoint group (NEG). The function must be provided explicitly or in the URL mask. Note: Cloud Function must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
    &quot;function&quot;: &quot;A String&quot;, # A user-defined name of the Cloud Function. The function name is case-sensitive and must be 1-63 characters long. Example value: &quot;func1&quot;.
    &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse function field from a request URL. URL mask allows for routing to multiple Cloud Functions without having to create multiple Network Endpoint Groups and backend services. For example, request URLs &quot; mydomain.com/function1&quot; and &quot;mydomain.com/function2&quot; can be backed by the same Serverless NEG with URL mask &quot;/&quot;. The URL mask will parse them to { function = &quot;function1&quot; } and { function = &quot;function2&quot; } respectively.
  },
  &quot;cloudRun&quot;: { # Configuration for a Cloud Run network endpoint group (NEG). The service must be provided explicitly or in the URL mask. The tag is optional, may be provided explicitly or in the URL mask. Note: Cloud Run service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
    &quot;service&quot;: &quot;A String&quot;, # Cloud Run service is the main resource of Cloud Run. The service must be 1-63 characters long, and comply with RFC1035. Example value: &quot;run-service&quot;.
    &quot;tag&quot;: &quot;A String&quot;, # Optional Cloud Run tag represents the &quot;named-revision&quot; to provide additional fine-grained traffic routing information. The tag must be 1-63 characters long, and comply with RFC1035. Example value: &quot;revision-0010&quot;.
    &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse service and tag fields from a request URL. URL mask allows for routing to multiple Run services without having to create multiple network endpoint groups and backend services. For example, request URLs &quot;foo1.domain.com/bar1&quot; and &quot;foo1.domain.com/bar2&quot; can be backed by the same Serverless Network Endpoint Group (NEG) with URL mask &quot;.domain.com/&quot;. The URL mask will parse them to { service=&quot;bar1&quot;, tag=&quot;foo1&quot; } and { service=&quot;bar2&quot;, tag=&quot;foo2&quot; } respectively.
  },
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
  &quot;defaultPort&quot;: 42, # The default port used if the port number is not specified in the network endpoint.
  &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
  &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#networkEndpointGroup&quot;, # [Output Only] Type of the resource. Always compute#networkEndpointGroup for network endpoint group.
  &quot;loadBalancer&quot;: { # Load balancing specific fields for network endpoint group. # This field is only valid when the network endpoint group is used for load balancing. [Deprecated] This field is deprecated.
    &quot;defaultPort&quot;: 42, # The default port used if the port number is not specified in the network endpoint. [Deprecated] This field is deprecated.
    &quot;network&quot;: &quot;A String&quot;, # The URL of the network to which all network endpoints in the NEG belong. Uses &quot;default&quot; project network if unspecified. [Deprecated] This field is deprecated.
    &quot;subnetwork&quot;: &quot;A String&quot;, # Optional URL of the subnetwork to which all network endpoints in the NEG belong. [Deprecated] This field is deprecated.
    &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the network endpoint group is located. [Deprecated] This field is deprecated.
  },
  &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 all network endpoints in the NEG belong. Uses &quot;default&quot; project network if unspecified.
  &quot;networkEndpointType&quot;: &quot;A String&quot;, # Type of network endpoints in this network endpoint group. Can be one of GCE_VM_IP_PORT, NON_GCP_PRIVATE_IP_PORT, INTERNET_FQDN_PORT, INTERNET_IP_PORT, SERVERLESS, PRIVATE_SERVICE_CONNECT.
  &quot;pscTargetService&quot;: &quot;A String&quot;, # The target service url used to set up private service connection to a Google API. An example value is: &quot;asia-northeast3-cloudkms.googleapis.com&quot;
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the network endpoint group is located.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;serverlessDeployment&quot;: { # Configuration for a serverless network endpoint group (NEG). The platform must be provided. Note: The target backend service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine, cloudFunction or serverlessDeployment may be set.
    &quot;platform&quot;: &quot;A String&quot;, # The platform of the backend target(s) of this NEG. Possible values include: 1. API Gateway: apigateway.googleapis.com 2. App Engine: appengine.googleapis.com 3. Cloud Functions: cloudfunctions.googleapis.com 4. Cloud Run: run.googleapis.com
    &quot;resource&quot;: &quot;A String&quot;, # The user-defined name of the workload/instance. This value must be provided explicitly or in the urlMask. The resource identified by this value is platform-specific and is as follows: 1. API Gateway: The gateway ID 2. App Engine: The service name 3. Cloud Functions: The function name 4. Cloud Run: The service name
    &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse platform-specific fields from a request URL. URL mask allows for routing to multiple resources on the same serverless platform without having to create multiple Network Endpoint Groups and backend resources. The fields parsed by this template are platform-specific and are as follows: 1. API Gateway: The gateway ID 2. App Engine: The service and version 3. Cloud Functions: The function name 4. Cloud Run: The service and tag
    &quot;version&quot;: &quot;A String&quot;, # The optional resource version. The version identified by this value is platform-specific and is follows: 1. API Gateway: Unused 2. App Engine: The service version 3. Cloud Functions: Unused 4. Cloud Run: The service tag
  },
  &quot;size&quot;: 42, # [Output only] Number of network endpoints in the network endpoint group.
  &quot;subnetwork&quot;: &quot;A String&quot;, # Optional URL of the subnetwork to which all network endpoints in the NEG belong.
  &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the network endpoint group is located.
}

  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).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents an Operation resource. Google Compute Engine has three Operation resources: * [Global](/compute/docs/reference/rest/beta/globalOperations) * [Regional](/compute/docs/reference/rest/beta/regionOperations) * [Zonal](/compute/docs/reference/rest/beta/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.
  &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;operationGroupId&quot;: &quot;A String&quot;, # [Output Only] An ID that represents a group of operations, such as when a group of operations results from a `bulkInsert` API request.
  &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;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, zone, filter=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None, x__xgafv=None)</code>
  <pre>Retrieves the list of network endpoint groups that are located in the specified project and zone.

Args:
  project: string, Project ID for this request. (required)
  zone: string, The name of the zone where the network endpoint group is located. It should comply with RFC1035. (required)
  filter: string, A filter expression that filters resources listed in the response. The expression must specify the field name, an operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The operator must be either `=`, `!=`, `&gt;`, `&lt;`, `&lt;=`, `&gt;=` or `:`. For example, if you are filtering Compute Engine instances, you can exclude instances named `example-instance` by specifying `name != example-instance`. The `:` operator can be used with string fields to match substrings. For non-string fields it is equivalent to the `=` operator. The `:*` comparison can be used to test whether a key has been defined. For example, to find all objects with `owner` label use: ``` labels.owner:* ``` 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.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] Unique identifier for the resource; defined by the server.
  &quot;items&quot;: [ # A list of NetworkEndpointGroup resources.
    { # Represents a collection of network endpoints. A network endpoint group (NEG) defines how a set of endpoints should be reached, whether they are reachable, and where they are located. For more information about using NEGs, see Setting up external HTTP(S) Load Balancing with internet NEGs, Setting up zonal NEGs, or Setting up external HTTP(S) Load Balancing with serverless NEGs.
      &quot;annotations&quot;: { # Metadata defined as annotations on the network endpoint group.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;appEngine&quot;: { # Configuration for an App Engine network endpoint group (NEG). The service is optional, may be provided explicitly or in the URL mask. The version is optional and can only be provided explicitly or in the URL mask when service is present. Note: App Engine service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
        &quot;service&quot;: &quot;A String&quot;, # Optional serving service. The service name is case-sensitive and must be 1-63 characters long. Example value: &quot;default&quot;, &quot;my-service&quot;.
        &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse service and version fields from a request URL. URL mask allows for routing to multiple App Engine services without having to create multiple Network Endpoint Groups and backend services. For example, the request URLs &quot;foo1-dot-appname.appspot.com/v1&quot; and &quot;foo1-dot-appname.appspot.com/v2&quot; can be backed by the same Serverless NEG with URL mask &quot;-dot-appname.appspot.com/&quot;. The URL mask will parse them to { service = &quot;foo1&quot;, version = &quot;v1&quot; } and { service = &quot;foo1&quot;, version = &quot;v2&quot; } respectively.
        &quot;version&quot;: &quot;A String&quot;, # Optional serving version. The version name is case-sensitive and must be 1-100 characters long. Example value: &quot;v1&quot;, &quot;v2&quot;.
      },
      &quot;cloudFunction&quot;: { # Configuration for a Cloud Function network endpoint group (NEG). The function must be provided explicitly or in the URL mask. Note: Cloud Function must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
        &quot;function&quot;: &quot;A String&quot;, # A user-defined name of the Cloud Function. The function name is case-sensitive and must be 1-63 characters long. Example value: &quot;func1&quot;.
        &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse function field from a request URL. URL mask allows for routing to multiple Cloud Functions without having to create multiple Network Endpoint Groups and backend services. For example, request URLs &quot; mydomain.com/function1&quot; and &quot;mydomain.com/function2&quot; can be backed by the same Serverless NEG with URL mask &quot;/&quot;. The URL mask will parse them to { function = &quot;function1&quot; } and { function = &quot;function2&quot; } respectively.
      },
      &quot;cloudRun&quot;: { # Configuration for a Cloud Run network endpoint group (NEG). The service must be provided explicitly or in the URL mask. The tag is optional, may be provided explicitly or in the URL mask. Note: Cloud Run service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine or cloudFunction may be set.
        &quot;service&quot;: &quot;A String&quot;, # Cloud Run service is the main resource of Cloud Run. The service must be 1-63 characters long, and comply with RFC1035. Example value: &quot;run-service&quot;.
        &quot;tag&quot;: &quot;A String&quot;, # Optional Cloud Run tag represents the &quot;named-revision&quot; to provide additional fine-grained traffic routing information. The tag must be 1-63 characters long, and comply with RFC1035. Example value: &quot;revision-0010&quot;.
        &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse service and tag fields from a request URL. URL mask allows for routing to multiple Run services without having to create multiple network endpoint groups and backend services. For example, request URLs &quot;foo1.domain.com/bar1&quot; and &quot;foo1.domain.com/bar2&quot; can be backed by the same Serverless Network Endpoint Group (NEG) with URL mask &quot;.domain.com/&quot;. The URL mask will parse them to { service=&quot;bar1&quot;, tag=&quot;foo1&quot; } and { service=&quot;bar2&quot;, tag=&quot;foo2&quot; } respectively.
      },
      &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
      &quot;defaultPort&quot;: 42, # The default port used if the port number is not specified in the network endpoint.
      &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
      &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#networkEndpointGroup&quot;, # [Output Only] Type of the resource. Always compute#networkEndpointGroup for network endpoint group.
      &quot;loadBalancer&quot;: { # Load balancing specific fields for network endpoint group. # This field is only valid when the network endpoint group is used for load balancing. [Deprecated] This field is deprecated.
        &quot;defaultPort&quot;: 42, # The default port used if the port number is not specified in the network endpoint. [Deprecated] This field is deprecated.
        &quot;network&quot;: &quot;A String&quot;, # The URL of the network to which all network endpoints in the NEG belong. Uses &quot;default&quot; project network if unspecified. [Deprecated] This field is deprecated.
        &quot;subnetwork&quot;: &quot;A String&quot;, # Optional URL of the subnetwork to which all network endpoints in the NEG belong. [Deprecated] This field is deprecated.
        &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the network endpoint group is located. [Deprecated] This field is deprecated.
      },
      &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 all network endpoints in the NEG belong. Uses &quot;default&quot; project network if unspecified.
      &quot;networkEndpointType&quot;: &quot;A String&quot;, # Type of network endpoints in this network endpoint group. Can be one of GCE_VM_IP_PORT, NON_GCP_PRIVATE_IP_PORT, INTERNET_FQDN_PORT, INTERNET_IP_PORT, SERVERLESS, PRIVATE_SERVICE_CONNECT.
      &quot;pscTargetService&quot;: &quot;A String&quot;, # The target service url used to set up private service connection to a Google API. An example value is: &quot;asia-northeast3-cloudkms.googleapis.com&quot;
      &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the network endpoint group is located.
      &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
      &quot;serverlessDeployment&quot;: { # Configuration for a serverless network endpoint group (NEG). The platform must be provided. Note: The target backend service must be in the same project and located in the same region as the Serverless NEG. # Only valid when networkEndpointType is &quot;SERVERLESS&quot;. Only one of cloudRun, appEngine, cloudFunction or serverlessDeployment may be set.
        &quot;platform&quot;: &quot;A String&quot;, # The platform of the backend target(s) of this NEG. Possible values include: 1. API Gateway: apigateway.googleapis.com 2. App Engine: appengine.googleapis.com 3. Cloud Functions: cloudfunctions.googleapis.com 4. Cloud Run: run.googleapis.com
        &quot;resource&quot;: &quot;A String&quot;, # The user-defined name of the workload/instance. This value must be provided explicitly or in the urlMask. The resource identified by this value is platform-specific and is as follows: 1. API Gateway: The gateway ID 2. App Engine: The service name 3. Cloud Functions: The function name 4. Cloud Run: The service name
        &quot;urlMask&quot;: &quot;A String&quot;, # A template to parse platform-specific fields from a request URL. URL mask allows for routing to multiple resources on the same serverless platform without having to create multiple Network Endpoint Groups and backend resources. The fields parsed by this template are platform-specific and are as follows: 1. API Gateway: The gateway ID 2. App Engine: The service and version 3. Cloud Functions: The function name 4. Cloud Run: The service and tag
        &quot;version&quot;: &quot;A String&quot;, # The optional resource version. The version identified by this value is platform-specific and is follows: 1. API Gateway: Unused 2. App Engine: The service version 3. Cloud Functions: Unused 4. Cloud Run: The service tag
      },
      &quot;size&quot;: 42, # [Output only] Number of network endpoints in the network endpoint group.
      &quot;subnetwork&quot;: &quot;A String&quot;, # Optional URL of the subnetwork to which all network endpoints in the NEG belong.
      &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the network endpoint group is located.
    },
  ],
  &quot;kind&quot;: &quot;compute#networkEndpointGroupList&quot;, # [Output Only] The resource type, which is always compute#networkEndpointGroupList for network endpoint group lists.
  &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="listNetworkEndpoints">listNetworkEndpoints(project, zone, networkEndpointGroup, body=None, filter=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None, x__xgafv=None)</code>
  <pre>Lists the network endpoints in the specified network endpoint group.

Args:
  project: string, Project ID for this request. (required)
  zone: string, The name of the zone where the network endpoint group is located. It should comply with RFC1035. (required)
  networkEndpointGroup: string, The name of the network endpoint group from which you want to generate a list of included network endpoints. It should comply with RFC1035. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;endpointFilters&quot;: [ # Optional list of endpoints to query. This is a more efficient but also limited version of filter parameter. Endpoints in the filter must have ip_address and port fields populated, other fields are not supported.
    {
      &quot;networkEndpoint&quot;: { # The network endpoint.
        &quot;annotations&quot;: { # Metadata defined as annotations on the network endpoint.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;fqdn&quot;: &quot;A String&quot;, # Optional fully qualified domain name of network endpoint. This can only be specified when NetworkEndpointGroup.network_endpoint_type is NON_GCP_FQDN_PORT.
        &quot;instance&quot;: &quot;A String&quot;, # The name for a specific VM instance that the IP address belongs to. This is required for network endpoints of type GCE_VM_IP_PORT. The instance must be in the same zone of network endpoint group. The name must be 1-63 characters long, and comply with RFC1035.
        &quot;ipAddress&quot;: &quot;A String&quot;, # Optional IPv4 address of network endpoint. The IP address must belong to a VM in Compute Engine (either the primary IP or as part of an aliased IP range). If the IP address is not specified, then the primary IP address for the VM instance in the network that the network endpoint group belongs to will be used.
        &quot;port&quot;: 42, # Optional port number of network endpoint. If not specified, the defaultPort for the network endpoint group will be used.
      },
    },
  ],
  &quot;healthStatus&quot;: &quot;A String&quot;, # Optional query parameter for showing the health status of each network endpoint. Valid options are SKIP or SHOW. If you don&#x27;t specify this parameter, the health status of network endpoints will not be provided.
}

  filter: string, A filter expression that filters resources listed in the response. The expression must specify the field name, an operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The operator must be either `=`, `!=`, `&gt;`, `&lt;`, `&lt;=`, `&gt;=` or `:`. For example, if you are filtering Compute Engine instances, you can exclude instances named `example-instance` by specifying `name != example-instance`. The `:` operator can be used with string fields to match substrings. For non-string fields it is equivalent to the `=` operator. The `:*` comparison can be used to test whether a key has been defined. For example, to find all objects with `owner` label use: ``` labels.owner:* ``` 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.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] Unique identifier for the resource; defined by the server.
  &quot;items&quot;: [ # A list of NetworkEndpointWithHealthStatus resources.
    {
      &quot;healths&quot;: [ # [Output only] The health status of network endpoint;
        {
          &quot;backendService&quot;: { # URL of the backend service associated with the health state of the network endpoint.
            &quot;backendService&quot;: &quot;A String&quot;,
          },
          &quot;forwardingRule&quot;: { # URL of the forwarding rule associated with the health state of the network endpoint.
            &quot;forwardingRule&quot;: &quot;A String&quot;,
          },
          &quot;healthCheck&quot;: { # A full or valid partial URL to a health check. For example, the following are valid URLs: - https://www.googleapis.com/compute/beta/projects/project-id/global/httpHealthChecks/health-check - projects/project-id/global/httpHealthChecks/health-check - global/httpHealthChecks/health-check # URL of the health check associated with the health state of the network endpoint.
            &quot;healthCheck&quot;: &quot;A String&quot;,
          },
          &quot;healthCheckService&quot;: { # A full or valid partial URL to a health check service. For example, the following are valid URLs: - https://www.googleapis.com/compute/beta/projects/project-id/regions/us-west1/healthCheckServices/health-check-service - projects/project-id/regions/us-west1/healthCheckServices/health-check-service - regions/us-west1/healthCheckServices/health-check-service # URL of the health check service associated with the health state of the network endpoint.
            &quot;healthCheckService&quot;: &quot;A String&quot;,
          },
          &quot;healthState&quot;: &quot;A String&quot;, # Health state of the network endpoint determined based on the health checks configured.
        },
      ],
      &quot;networkEndpoint&quot;: { # The network endpoint. # [Output only] The network endpoint;
        &quot;annotations&quot;: { # Metadata defined as annotations on the network endpoint.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;fqdn&quot;: &quot;A String&quot;, # Optional fully qualified domain name of network endpoint. This can only be specified when NetworkEndpointGroup.network_endpoint_type is NON_GCP_FQDN_PORT.
        &quot;instance&quot;: &quot;A String&quot;, # The name for a specific VM instance that the IP address belongs to. This is required for network endpoints of type GCE_VM_IP_PORT. The instance must be in the same zone of network endpoint group. The name must be 1-63 characters long, and comply with RFC1035.
        &quot;ipAddress&quot;: &quot;A String&quot;, # Optional IPv4 address of network endpoint. The IP address must belong to a VM in Compute Engine (either the primary IP or as part of an aliased IP range). If the IP address is not specified, then the primary IP address for the VM instance in the network that the network endpoint group belongs to will be used.
        &quot;port&quot;: 42, # Optional port number of network endpoint. If not specified, the defaultPort for the network endpoint group will be used.
      },
    },
  ],
  &quot;kind&quot;: &quot;compute#networkEndpointGroupsListNetworkEndpoints&quot;, # [Output Only] The resource type, which is always compute#networkEndpointGroupsListNetworkEndpoints for the list of network endpoints in the specified network endpoint group.
  &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;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="listNetworkEndpoints_next">listNetworkEndpoints_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="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="testIamPermissions">testIamPermissions(project, zone, resource, body=None, x__xgafv=None)</code>
  <pre>Returns permissions that a caller has on the specified resource.

Args:
  project: string, Project ID for this request. (required)
  zone: string, The name of the zone 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;,
  ],
}

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

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>

</body></html>