// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Generated by the C++ microgenerator.
// If you make any local changes, they will be lost.
// file:///workspace/generator/discovery/compute_public_google_rest_v1.json
// revision: 20231110

syntax = "proto3";

package google.cloud.cpp.compute.node_groups.v1;

import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/cloud/compute/v1/internal/common_007.proto";
import "google/cloud/compute/v1/internal/common_016.proto";
import "google/cloud/compute/v1/internal/common_056.proto";
import "google/cloud/compute/v1/internal/common_131.proto";
import "google/cloud/compute/v1/internal/common_136.proto";
import "google/cloud/extended_operations.proto";

// Service for the nodeGroups resource.
// https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups
service NodeGroups {
  option (google.api.default_host) = "compute.googleapis.com";
  option (google.api.oauth_scopes) =
      "https://www.googleapis.com/auth/cloud-platform,"
      "https://www.googleapis.com/auth/compute,"
      "https://www.googleapis.com/auth/compute.readonly";

  // Adds specified number of nodes to the node group.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/addNodes
  rpc AddNodes(AddNodesRequest)
      returns (google.cloud.cpp.compute.v1.Operation) {
    option (google.api.http) = {
      post: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/addNodes"
      body: "node_groups_add_nodes_request_resource"
    };
    option (google.api.method_signature) =
        "project,zone,node_group,node_groups_add_nodes_request_resource";
    option (google.cloud.operation_service) = "ZoneOperations";
  }

  // Retrieves an aggregated list of node groups. Note: use nodeGroups.listNodes
  // for more details about each group.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/aggregatedList
  rpc AggregatedListNodeGroups(AggregatedListNodeGroupsRequest)
      returns (google.cloud.cpp.compute.v1.NodeGroupAggregatedList) {
    option (google.api.http) = {
      get: "/compute/v1/projects/{project}/aggregated/nodeGroups"
    };
    option (google.api.method_signature) = "project";
  }

  // Deletes the specified NodeGroup resource.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/delete
  rpc DeleteNodeGroup(DeleteNodeGroupRequest)
      returns (google.cloud.cpp.compute.v1.Operation) {
    option (google.api.http) = {
      delete: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}"
    };
    option (google.api.method_signature) = "project,zone,node_group";
    option (google.cloud.operation_service) = "ZoneOperations";
  }

  // Deletes specified nodes from the node group.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/deleteNodes
  rpc DeleteNodes(DeleteNodesRequest)
      returns (google.cloud.cpp.compute.v1.Operation) {
    option (google.api.http) = {
      post: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/deleteNodes"
      body: "node_groups_delete_nodes_request_resource"
    };
    option (google.api.method_signature) =
        "project,zone,node_group,node_groups_delete_nodes_request_resource";
    option (google.cloud.operation_service) = "ZoneOperations";
  }

  // Returns the specified NodeGroup. Get a list of available NodeGroups by
  // making a list() request. Note: the "nodes" field should not be used. Use
  // nodeGroups.listNodes instead.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/get
  rpc GetNodeGroup(GetNodeGroupRequest)
      returns (google.cloud.cpp.compute.v1.NodeGroup) {
    option (google.api.http) = {
      get: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}"
    };
    option (google.api.method_signature) = "project,zone,node_group";
  }

  // Gets the access control policy for a resource. May be empty if no such
  // policy or resource exists.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/getIamPolicy
  rpc GetIamPolicy(GetIamPolicyRequest)
      returns (google.cloud.cpp.compute.v1.Policy) {
    option (google.api.http) = {
      get: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{resource}/getIamPolicy"
    };
    option (google.api.method_signature) = "project,zone,resource";
  }

  // Creates a NodeGroup resource in the specified project using the data
  // included in the request.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/insert
  rpc InsertNodeGroup(InsertNodeGroupRequest)
      returns (google.cloud.cpp.compute.v1.Operation) {
    option (google.api.http) = {
      post: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups"
      body: "node_group_resource"
    };
    option (google.api.method_signature) =
        "project,zone,initial_node_count,node_group_resource";
    option (google.cloud.operation_service) = "ZoneOperations";
  }

  // Retrieves a list of node groups available to the specified project. Note:
  // use nodeGroups.listNodes for more details about each group.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/list
  rpc ListNodeGroups(ListNodeGroupsRequest)
      returns (google.cloud.cpp.compute.v1.NodeGroupList) {
    option (google.api.http) = {
      get: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups"
    };
    option (google.api.method_signature) = "project,zone";
  }

  // Lists nodes in the node group.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/listNodes
  rpc ListNodes(ListNodesRequest)
      returns (google.cloud.cpp.compute.v1.NodeGroupsListNodes) {
    option (google.api.http) = {
      post: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/listNodes"
      body: "*"
    };
    option (google.api.method_signature) = "project,zone,node_group";
  }

  // Updates the specified node group.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/patch
  rpc PatchNodeGroup(PatchNodeGroupRequest)
      returns (google.cloud.cpp.compute.v1.Operation) {
    option (google.api.http) = {
      patch: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}"
      body: "node_group_resource"
    };
    option (google.api.method_signature) =
        "project,zone,node_group,node_group_resource";
    option (google.cloud.operation_service) = "ZoneOperations";
  }

  // Sets the access control policy on the specified resource. Replaces any
  // existing policy.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/setIamPolicy
  rpc SetIamPolicy(SetIamPolicyRequest)
      returns (google.cloud.cpp.compute.v1.Policy) {
    option (google.api.http) = {
      post: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{resource}/setIamPolicy"
      body: "zone_set_policy_request_resource"
    };
    option (google.api.method_signature) =
        "project,zone,resource,zone_set_policy_request_resource";
  }

  // Updates the node template of the node group.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/setNodeTemplate
  rpc SetNodeTemplate(SetNodeTemplateRequest)
      returns (google.cloud.cpp.compute.v1.Operation) {
    option (google.api.http) = {
      post: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/setNodeTemplate"
      body: "node_groups_set_node_template_request_resource"
    };
    option (google.api.method_signature) =
        "project,zone,node_group,node_groups_set_node_template_request_resource";
    option (google.cloud.operation_service) = "ZoneOperations";
  }

  // Simulates maintenance event on specified nodes from the node group.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/simulateMaintenanceEvent
  rpc SimulateMaintenanceEvent(SimulateMaintenanceEventRequest)
      returns (google.cloud.cpp.compute.v1.Operation) {
    option (google.api.http) = {
      post: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/simulateMaintenanceEvent"
      body: "node_groups_simulate_maintenance_event_request_resource"
    };
    option (google.api.method_signature) =
        "project,zone,node_group,node_groups_simulate_maintenance_event_request_resource";
    option (google.cloud.operation_service) = "ZoneOperations";
  }

  // Returns permissions that a caller has on the specified resource.
  // https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups/testIamPermissions
  rpc TestIamPermissions(TestIamPermissionsRequest)
      returns (google.cloud.cpp.compute.v1.TestPermissionsResponse) {
    option (google.api.http) = {
      post: "/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{resource}/testIamPermissions"
      body: "test_permissions_request_resource"
    };
    option (google.api.method_signature) =
        "project,zone,resource,test_permissions_request_resource";
  }
}

// Request message for AddNodes.
message AddNodesRequest {
  // Name of the NodeGroup resource.
  string node_group = 1
      [(google.api.field_behavior) = REQUIRED, json_name = "nodeGroup"];

  // The NodeGroupsAddNodesRequest for this request.
  optional google.cloud.cpp.compute.v1.NodeGroupsAddNodesRequest
      node_groups_add_nodes_request_resource = 2
      [json_name = "__json_request_body"];

  // Project ID for this request.
  string project = 3 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "project",
    json_name = "project"
  ];

  // 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).
  optional string request_id = 4 [json_name = "requestId"];

  // The name of the zone for this request.
  string zone = 5 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "zone",
    json_name = "zone"
  ];
}

// Request message for AggregatedListNodeGroups.
message AggregatedListNodeGroupsRequest {
  // A filter expression that filters resources listed in the response. Most
  // Compute resources support two types of filter expressions: expressions that
  // support regular expressions and expressions that follow API improvement
  // proposal AIP-160. These two types of filter expressions cannot be mixed in
  // one request. If you want to use AIP-160, your 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 `=`, `!=`, `>`, `<`, `<=`, `>=` or `:`. For example, if you are
  // filtering Compute Engine instances, you can exclude instances named
  // `example-instance` by specifying `name != example-instance`. 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 = "Intel
  // Skylake") ``` By default, each expression is an `AND` expression. However,
  // you can include `AND` and `OR` expressions explicitly. For example: ```
  // (cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND
  // (scheduling.automaticRestart = true) ``` If you want to use a regular
  // expression, use the `eq` (equal) or `ne` (not equal) operator against a
  // single un-parenthesized expression with or without quotes or against
  // multiple parenthesized expressions. Examples: `fieldname eq unquoted
  // literal` `fieldname eq 'single quoted literal'` `fieldname eq "double
  // quoted literal"` `(fieldname1 eq literal) (fieldname2 ne "literal")` The
  // literal value is interpreted as a regular expression using Google RE2
  // library syntax. The literal value must match the entire field. For example,
  // to filter for instances that do not end with name "instance", you would use
  // `name ne .*instance`. You cannot combine constraints on multiple fields
  // using regular expressions.
  optional string filter = 1 [json_name = "filter"];

  // 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.
  optional bool include_all_scopes = 2 [json_name = "includeAllScopes"];

  // 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`)
  optional uint32 max_results = 3 [json_name = "maxResults"];

  // Sorts list results by a certain order. By default, results are returned in
  // alphanumerical order based on the resource name. You can also sort results
  // in descending order based on the creation timestamp using
  // `orderBy="creationTimestamp desc"`. This sorts results based on the
  // `creationTimestamp` field in reverse chronological order (newest result
  // first). Use this to sort resources like operations so that the newest
  // operation is returned first. Currently, only sorting by `name` or
  // `creationTimestamp desc` is supported.
  optional string order_by = 4 [json_name = "orderBy"];

  // Specifies a page token to use. Set `pageToken` to the `nextPageToken`
  // returned by a previous list request to get the next page of results.
  optional string page_token = 5 [json_name = "pageToken"];

  // Project ID for this request.
  string project = 6
      [(google.api.field_behavior) = REQUIRED, json_name = "project"];

  // Opt-in for partial success behavior which provides partial results in case
  // of failure. The default value is false.
  optional bool return_partial_success = 7 [json_name = "returnPartialSuccess"];

  optional string service_project_number = 8
      [json_name = "serviceProjectNumber"];
}

// Request message for DeleteNodeGroup.
message DeleteNodeGroupRequest {
  // Name of the NodeGroup resource to delete.
  string node_group = 1
      [(google.api.field_behavior) = REQUIRED, json_name = "nodeGroup"];

  // Project ID for this request.
  string project = 2 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "project",
    json_name = "project"
  ];

  // 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).
  optional string request_id = 3 [json_name = "requestId"];

  // The name of the zone for this request.
  string zone = 4 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "zone",
    json_name = "zone"
  ];
}

// Request message for DeleteNodes.
message DeleteNodesRequest {
  // Name of the NodeGroup resource whose nodes will be deleted.
  string node_group = 1
      [(google.api.field_behavior) = REQUIRED, json_name = "nodeGroup"];

  // The NodeGroupsDeleteNodesRequest for this request.
  optional google.cloud.cpp.compute.v1.NodeGroupsDeleteNodesRequest
      node_groups_delete_nodes_request_resource = 2
      [json_name = "__json_request_body"];

  // Project ID for this request.
  string project = 3 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "project",
    json_name = "project"
  ];

  // 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).
  optional string request_id = 4 [json_name = "requestId"];

  // The name of the zone for this request.
  string zone = 5 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "zone",
    json_name = "zone"
  ];
}

// Request message for GetIamPolicy.
message GetIamPolicyRequest {
  // Requested IAM Policy version.
  optional int32 options_requested_policy_version = 1
      [json_name = "optionsRequestedPolicyVersion"];

  // Project ID for this request.
  string project = 2
      [(google.api.field_behavior) = REQUIRED, json_name = "project"];

  // Name or id of the resource for this request.
  string resource = 3
      [(google.api.field_behavior) = REQUIRED, json_name = "resource"];

  // The name of the zone for this request.
  string zone = 4 [(google.api.field_behavior) = REQUIRED, json_name = "zone"];
}

// Request message for GetNodeGroup.
message GetNodeGroupRequest {
  // Name of the node group to return.
  string node_group = 1
      [(google.api.field_behavior) = REQUIRED, json_name = "nodeGroup"];

  // Project ID for this request.
  string project = 2
      [(google.api.field_behavior) = REQUIRED, json_name = "project"];

  // The name of the zone for this request.
  string zone = 3 [(google.api.field_behavior) = REQUIRED, json_name = "zone"];
}

// Request message for InsertNodeGroup.
message InsertNodeGroupRequest {
  // Initial count of nodes in the node group.
  int32 initial_node_count = 1
      [(google.api.field_behavior) = REQUIRED, json_name = "initialNodeCount"];

  // The NodeGroup for this request.
  optional google.cloud.cpp.compute.v1.NodeGroup node_group_resource = 2
      [json_name = "__json_request_body"];

  // Project ID for this request.
  string project = 3 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "project",
    json_name = "project"
  ];

  // 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).
  optional string request_id = 4 [json_name = "requestId"];

  // The name of the zone for this request.
  string zone = 5 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "zone",
    json_name = "zone"
  ];
}

// Request message for ListNodeGroups.
message ListNodeGroupsRequest {
  // A filter expression that filters resources listed in the response. Most
  // Compute resources support two types of filter expressions: expressions that
  // support regular expressions and expressions that follow API improvement
  // proposal AIP-160. These two types of filter expressions cannot be mixed in
  // one request. If you want to use AIP-160, your 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 `=`, `!=`, `>`, `<`, `<=`, `>=` or `:`. For example, if you are
  // filtering Compute Engine instances, you can exclude instances named
  // `example-instance` by specifying `name != example-instance`. 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 = "Intel
  // Skylake") ``` By default, each expression is an `AND` expression. However,
  // you can include `AND` and `OR` expressions explicitly. For example: ```
  // (cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND
  // (scheduling.automaticRestart = true) ``` If you want to use a regular
  // expression, use the `eq` (equal) or `ne` (not equal) operator against a
  // single un-parenthesized expression with or without quotes or against
  // multiple parenthesized expressions. Examples: `fieldname eq unquoted
  // literal` `fieldname eq 'single quoted literal'` `fieldname eq "double
  // quoted literal"` `(fieldname1 eq literal) (fieldname2 ne "literal")` The
  // literal value is interpreted as a regular expression using Google RE2
  // library syntax. The literal value must match the entire field. For example,
  // to filter for instances that do not end with name "instance", you would use
  // `name ne .*instance`. You cannot combine constraints on multiple fields
  // using regular expressions.
  optional string filter = 1 [json_name = "filter"];

  // 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`)
  optional uint32 max_results = 2 [json_name = "maxResults"];

  // Sorts list results by a certain order. By default, results are returned in
  // alphanumerical order based on the resource name. You can also sort results
  // in descending order based on the creation timestamp using
  // `orderBy="creationTimestamp desc"`. This sorts results based on the
  // `creationTimestamp` field in reverse chronological order (newest result
  // first). Use this to sort resources like operations so that the newest
  // operation is returned first. Currently, only sorting by `name` or
  // `creationTimestamp desc` is supported.
  optional string order_by = 3 [json_name = "orderBy"];

  // Specifies a page token to use. Set `pageToken` to the `nextPageToken`
  // returned by a previous list request to get the next page of results.
  optional string page_token = 4 [json_name = "pageToken"];

  // Project ID for this request.
  string project = 5
      [(google.api.field_behavior) = REQUIRED, json_name = "project"];

  // Opt-in for partial success behavior which provides partial results in case
  // of failure. The default value is false.
  optional bool return_partial_success = 6 [json_name = "returnPartialSuccess"];

  // The name of the zone for this request.
  string zone = 7 [(google.api.field_behavior) = REQUIRED, json_name = "zone"];
}

// Request message for ListNodes.
message ListNodesRequest {
  // A filter expression that filters resources listed in the response. Most
  // Compute resources support two types of filter expressions: expressions that
  // support regular expressions and expressions that follow API improvement
  // proposal AIP-160. These two types of filter expressions cannot be mixed in
  // one request. If you want to use AIP-160, your 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 `=`, `!=`, `>`, `<`, `<=`, `>=` or `:`. For example, if you are
  // filtering Compute Engine instances, you can exclude instances named
  // `example-instance` by specifying `name != example-instance`. 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 = "Intel
  // Skylake") ``` By default, each expression is an `AND` expression. However,
  // you can include `AND` and `OR` expressions explicitly. For example: ```
  // (cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND
  // (scheduling.automaticRestart = true) ``` If you want to use a regular
  // expression, use the `eq` (equal) or `ne` (not equal) operator against a
  // single un-parenthesized expression with or without quotes or against
  // multiple parenthesized expressions. Examples: `fieldname eq unquoted
  // literal` `fieldname eq 'single quoted literal'` `fieldname eq "double
  // quoted literal"` `(fieldname1 eq literal) (fieldname2 ne "literal")` The
  // literal value is interpreted as a regular expression using Google RE2
  // library syntax. The literal value must match the entire field. For example,
  // to filter for instances that do not end with name "instance", you would use
  // `name ne .*instance`. You cannot combine constraints on multiple fields
  // using regular expressions.
  optional string filter = 1 [json_name = "filter"];

  // 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`)
  optional uint32 max_results = 2 [json_name = "maxResults"];

  // Name of the NodeGroup resource whose nodes you want to list.
  string node_group = 3
      [(google.api.field_behavior) = REQUIRED, json_name = "nodeGroup"];

  // Sorts list results by a certain order. By default, results are returned in
  // alphanumerical order based on the resource name. You can also sort results
  // in descending order based on the creation timestamp using
  // `orderBy="creationTimestamp desc"`. This sorts results based on the
  // `creationTimestamp` field in reverse chronological order (newest result
  // first). Use this to sort resources like operations so that the newest
  // operation is returned first. Currently, only sorting by `name` or
  // `creationTimestamp desc` is supported.
  optional string order_by = 4 [json_name = "orderBy"];

  // Specifies a page token to use. Set `pageToken` to the `nextPageToken`
  // returned by a previous list request to get the next page of results.
  optional string page_token = 5 [json_name = "pageToken"];

  // Project ID for this request.
  string project = 6
      [(google.api.field_behavior) = REQUIRED, json_name = "project"];

  // Opt-in for partial success behavior which provides partial results in case
  // of failure. The default value is false.
  optional bool return_partial_success = 7 [json_name = "returnPartialSuccess"];

  // The name of the zone for this request.
  string zone = 8 [(google.api.field_behavior) = REQUIRED, json_name = "zone"];
}

// Request message for PatchNodeGroup.
message PatchNodeGroupRequest {
  // Name of the NodeGroup resource to update.
  string node_group = 1
      [(google.api.field_behavior) = REQUIRED, json_name = "nodeGroup"];

  // The NodeGroup for this request.
  optional google.cloud.cpp.compute.v1.NodeGroup node_group_resource = 2
      [json_name = "__json_request_body"];

  // Project ID for this request.
  string project = 3 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "project",
    json_name = "project"
  ];

  // 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).
  optional string request_id = 4 [json_name = "requestId"];

  // The name of the zone for this request.
  string zone = 5 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "zone",
    json_name = "zone"
  ];
}

// Request message for SetIamPolicy.
message SetIamPolicyRequest {
  // Project ID for this request.
  string project = 1
      [(google.api.field_behavior) = REQUIRED, json_name = "project"];

  // Name or id of the resource for this request.
  string resource = 2
      [(google.api.field_behavior) = REQUIRED, json_name = "resource"];

  // The name of the zone for this request.
  string zone = 3 [(google.api.field_behavior) = REQUIRED, json_name = "zone"];

  // The ZoneSetPolicyRequest for this request.
  optional google.cloud.cpp.compute.v1.ZoneSetPolicyRequest
      zone_set_policy_request_resource = 4 [json_name = "__json_request_body"];
}

// Request message for SetNodeTemplate.
message SetNodeTemplateRequest {
  // Name of the NodeGroup resource to update.
  string node_group = 1
      [(google.api.field_behavior) = REQUIRED, json_name = "nodeGroup"];

  // The NodeGroupsSetNodeTemplateRequest for this request.
  optional google.cloud.cpp.compute.v1.NodeGroupsSetNodeTemplateRequest
      node_groups_set_node_template_request_resource = 2
      [json_name = "__json_request_body"];

  // Project ID for this request.
  string project = 3 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "project",
    json_name = "project"
  ];

  // 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).
  optional string request_id = 4 [json_name = "requestId"];

  // The name of the zone for this request.
  string zone = 5 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "zone",
    json_name = "zone"
  ];
}

// Request message for SimulateMaintenanceEvent.
message SimulateMaintenanceEventRequest {
  // Name of the NodeGroup resource whose nodes will go under maintenance
  // simulation.
  string node_group = 1
      [(google.api.field_behavior) = REQUIRED, json_name = "nodeGroup"];

  // The NodeGroupsSimulateMaintenanceEventRequest for this request.
  optional google.cloud.cpp.compute.v1.NodeGroupsSimulateMaintenanceEventRequest
      node_groups_simulate_maintenance_event_request_resource = 2
      [json_name = "__json_request_body"];

  // Project ID for this request.
  string project = 3 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "project",
    json_name = "project"
  ];

  // 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).
  optional string request_id = 4 [json_name = "requestId"];

  // The name of the zone for this request.
  string zone = 5 [
    (google.api.field_behavior) = REQUIRED,
    (google.cloud.operation_request_field) = "zone",
    json_name = "zone"
  ];
}

// Request message for TestIamPermissions.
message TestIamPermissionsRequest {
  // Project ID for this request.
  string project = 1
      [(google.api.field_behavior) = REQUIRED, json_name = "project"];

  // Name or id of the resource for this request.
  string resource = 2
      [(google.api.field_behavior) = REQUIRED, json_name = "resource"];

  // The TestPermissionsRequest for this request.
  optional google.cloud.cpp.compute.v1.TestPermissionsRequest
      test_permissions_request_resource = 3 [json_name = "__json_request_body"];

  // The name of the zone for this request.
  string zone = 4 [(google.api.field_behavior) = REQUIRED, json_name = "zone"];
}
