// 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.v1;

import "google/cloud/compute/v1/internal/common_001.proto";
import "google/cloud/compute/v1/internal/common_029.proto";
import "google/cloud/compute/v1/internal/common_069.proto";
import "google/cloud/compute/v1/internal/common_108.proto";

message InstanceConsumptionData {
  // Resources consumed by the instance.
  optional InstanceConsumptionInfo consumption_info = 1
      [json_name = "consumptionInfo"];

  // Server-defined URL for the instance.
  optional string instance = 2 [json_name = "instance"];
}

message InstanceConsumptionInfo {
  // The number of virtual CPUs that are available to the instance.
  optional int32 guest_cpus = 1 [json_name = "guestCpus"];

  // The amount of local SSD storage available to the instance, defined in GiB.
  optional int32 local_ssd_gb = 2 [json_name = "localSsdGb"];

  // The amount of physical memory available to the instance, defined in MiB.
  optional int32 memory_mb = 3 [json_name = "memoryMb"];

  // The minimal guaranteed number of virtual CPUs that are reserved.
  optional int32 min_node_cpus = 4 [json_name = "minNodeCpus"];
}

// Represents a sole-tenant Node Group resource. A sole-tenant node is a
// physical server that is dedicated to hosting VM instances only for your
// specific project. Use sole-tenant nodes to keep your instances physically
// separated from instances in other projects, or to group your instances
// together on the same host hardware. For more information, read Sole-tenant
// nodes.
message NodeGroup {
  // Specifies how autoscaling should behave.
  optional NodeGroupAutoscalingPolicy autoscaling_policy = 1
      [json_name = "autoscalingPolicy"];

  // [Output Only] Creation timestamp in RFC3339 text format.
  optional string creation_timestamp = 2 [json_name = "creationTimestamp"];

  // An optional description of this resource. Provide this property when you
  // create the resource.
  optional string description = 3 [json_name = "description"];

  optional string fingerprint = 4 [json_name = "fingerprint"];

  // [Output Only] The unique identifier for the resource. This identifier is
  // defined by the server.
  optional string id = 5 [json_name = "id"];

  // [Output Only] The type of the resource. Always compute#nodeGroup for node
  // group.
  optional string kind = 6 [json_name = "kind"];

  // An opaque location hint used to place the Node close to other resources.
  // This field is for use by internal tools that use the public API. The
  // location hint here on the NodeGroup overrides any location_hint present in
  // the NodeTemplate.
  optional string location_hint = 7 [json_name = "locationHint"];

  // Specifies how to handle instances when a node in the group undergoes
  // maintenance. Set to one of: DEFAULT, RESTART_IN_PLACE, or
  // MIGRATE_WITHIN_NODE_GROUP. The default value is DEFAULT. For more
  // information, see Maintenance policies.
  // DEFAULT: Allow the node and corresponding instances to retain default
  // maintenance behavior.
  // MAINTENANCE_POLICY_UNSPECIFIED:
  // MIGRATE_WITHIN_NODE_GROUP: When maintenance must be done on a node, the
  // instances on that node will be moved to other nodes in the group. Instances
  // with onHostMaintenance = MIGRATE will live migrate to their destinations
  // while instances with onHostMaintenance = TERMINATE will terminate and then
  // restart on their destination nodes if automaticRestart = true.
  // RESTART_IN_PLACE: Instances in this group will restart on the same node
  // when maintenance has completed. Instances must have onHostMaintenance =
  // TERMINATE, and they will only restart if automaticRestart = true.
  optional string maintenance_policy = 8 [json_name = "maintenancePolicy"];

  optional NodeGroupMaintenanceWindow maintenance_window = 9
      [json_name = "maintenanceWindow"];

  // The name of the resource, provided by the client when initially creating
  // the resource. The resource 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.
  optional string name = 10 [json_name = "name"];

  // URL of the node template to create the node group from.
  optional string node_template = 11 [json_name = "nodeTemplate"];

  // [Output Only] Server-defined URL for the resource.
  optional string self_link = 12 [json_name = "selfLink"];

  // Share-settings for the node group
  optional ShareSettings share_settings = 13 [json_name = "shareSettings"];

  // [Output Only] The total number of nodes in the node group.
  optional int32 size = 14 [json_name = "size"];

  // CREATING:
  // DELETING:
  // INVALID:
  // READY:
  optional string status = 15 [json_name = "status"];

  // [Output Only] The name of the zone where the node group resides, such as
  // us-central1-a.
  optional string zone = 16 [json_name = "zone"];
}

message NodeGroupAggregatedList {
  // [Output Only] Unique identifier for the resource; defined by the server.
  optional string id = 1 [json_name = "id"];

  // A list of NodeGroupsScopedList resources.
  map<string, NodeGroupsScopedList> items = 2 [json_name = "items"];

  // [Output Only] Type of resource.Always compute#nodeGroupAggregatedList for
  // aggregated lists of node groups.
  optional string kind = 3 [json_name = "kind"];

  // [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.
  optional string next_page_token = 4 [json_name = "nextPageToken"];

  // [Output Only] Server-defined URL for this resource.
  optional string self_link = 5 [json_name = "selfLink"];

  // [Output Only] Unreachable resources.
  repeated string unreachables = 6 [json_name = "unreachables"];

  message Warning {
    // [Output Only] A warning code, if applicable. For example, Compute Engine
    // returns NO_RESULTS_ON_PAGE if there are no results in the response.
    // CLEANUP_FAILED: Warning about failed cleanup of transient changes made by
    // a failed operation.
    // DEPRECATED_RESOURCE_USED: A link to a deprecated resource was created.
    // DEPRECATED_TYPE_USED: When deploying and at least one of the resources
    // has a type marked as deprecated
    // DISK_SIZE_LARGER_THAN_IMAGE_SIZE: The user created a boot disk that is
    // larger than image size.
    // EXPERIMENTAL_TYPE_USED: When deploying and at least one of the resources
    // has a type marked as experimental
    // EXTERNAL_API_WARNING: Warning that is present in an external api call
    // FIELD_VALUE_OVERRIDEN: Warning that value of a field has been overridden.
    // Deprecated unused field.
    // INJECTED_KERNELS_DEPRECATED: The operation involved use of an injected
    // kernel, which is deprecated.
    // INVALID_HEALTH_CHECK_FOR_DYNAMIC_WIEGHTED_LB: A WEIGHTED_MAGLEV backend
    // service is associated with a health check that is not of type
    // HTTP/HTTPS/HTTP2.
    // LARGE_DEPLOYMENT_WARNING: When deploying a deployment with a exceedingly
    // large number of resources
    // LIST_OVERHEAD_QUOTA_EXCEED: Resource can't be retrieved due to list
    // overhead quota exceed which captures the amount of resources filtered out
    // by user-defined list filter.
    // MISSING_TYPE_DEPENDENCY: A resource depends on a missing type
    // NEXT_HOP_ADDRESS_NOT_ASSIGNED: The route's nextHopIp address is not
    // assigned to an instance on the network.
    // NEXT_HOP_CANNOT_IP_FORWARD: The route's next hop instance cannot ip
    // forward.
    // NEXT_HOP_INSTANCE_HAS_NO_IPV6_INTERFACE: The route's nextHopInstance URL
    // refers to an instance that does not have an ipv6 interface on the same
    // network as the route.
    // NEXT_HOP_INSTANCE_NOT_FOUND: The route's nextHopInstance URL refers to an
    // instance that does not exist.
    // NEXT_HOP_INSTANCE_NOT_ON_NETWORK: The route's nextHopInstance URL refers
    // to an instance that is not on the same network as the route.
    // NEXT_HOP_NOT_RUNNING: The route's next hop instance does not have a
    // status of RUNNING.
    // NOT_CRITICAL_ERROR: Error which is not critical. We decided to continue
    // the process despite the mentioned error.
    // NO_RESULTS_ON_PAGE: No results are present on a particular list page.
    // PARTIAL_SUCCESS: Success is reported, but some results may be missing due
    // to errors
    // REQUIRED_TOS_AGREEMENT: The user attempted to use a resource that
    // requires a TOS they have not accepted.
    // RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING: Warning that a resource is in
    // use.
    // RESOURCE_NOT_DELETED: One or more of the resources set to auto-delete
    // could not be deleted because they were in use.
    // SCHEMA_VALIDATION_IGNORED: When a resource schema validation is ignored.
    // SINGLE_INSTANCE_PROPERTY_TEMPLATE: Instance template used in instance
    // group manager is valid as such, but its application does not make a lot
    // of sense, because it allows only single instance in instance group.
    // UNDECLARED_PROPERTIES: When undeclared properties in the schema are
    // present
    // UNREACHABLE: A given scope cannot be reached.
    optional string code = 1 [json_name = "code"];

    message DataItem {
      // [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).
      optional string key = 1 [json_name = "key"];

      // [Output Only] A warning data value corresponding to the key.
      optional string value = 2 [json_name = "value"];
    }

    // [Output Only] Metadata about this warning in key: value format. For
    // example: "data": [ { "key": "scope", "value": "zones/us-east1-d" }
    repeated DataItem data = 2 [json_name = "data"];

    // [Output Only] A human-readable description of the warning code.
    optional string message = 3 [json_name = "message"];
  }

  // [Output Only] Informational warning message.
  optional Warning warning = 7 [json_name = "warning"];
}

message NodeGroupAutoscalingPolicy {
  // The maximum number of nodes that the group should have. Must be set if
  // autoscaling is enabled. Maximum value allowed is 100.
  optional int32 max_nodes = 1 [json_name = "maxNodes"];

  // The minimum number of nodes that the group should have.
  optional int32 min_nodes = 2 [json_name = "minNodes"];

  // The autoscaling mode. Set to one of: ON, OFF, or ONLY_SCALE_OUT. For more
  // information, see Autoscaler modes.
  // MODE_UNSPECIFIED:
  // OFF: Autoscaling is disabled.
  // ON: Autocaling is fully enabled.
  // ONLY_SCALE_OUT: Autoscaling will only scale out and will not remove nodes.
  optional string mode = 3 [json_name = "mode"];
}

// Contains a list of nodeGroups.
message NodeGroupList {
  // [Output Only] Unique identifier for the resource; defined by the server.
  optional string id = 1 [json_name = "id"];

  // A list of NodeGroup resources.
  repeated NodeGroup items = 2 [json_name = "items"];

  // [Output Only] Type of resource.Always compute#nodeGroupList for lists of
  // node groups.
  optional string kind = 3 [json_name = "kind"];

  // [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.
  optional string next_page_token = 4 [json_name = "nextPageToken"];

  // [Output Only] Server-defined URL for this resource.
  optional string self_link = 5 [json_name = "selfLink"];

  message Warning {
    // [Output Only] A warning code, if applicable. For example, Compute Engine
    // returns NO_RESULTS_ON_PAGE if there are no results in the response.
    // CLEANUP_FAILED: Warning about failed cleanup of transient changes made by
    // a failed operation.
    // DEPRECATED_RESOURCE_USED: A link to a deprecated resource was created.
    // DEPRECATED_TYPE_USED: When deploying and at least one of the resources
    // has a type marked as deprecated
    // DISK_SIZE_LARGER_THAN_IMAGE_SIZE: The user created a boot disk that is
    // larger than image size.
    // EXPERIMENTAL_TYPE_USED: When deploying and at least one of the resources
    // has a type marked as experimental
    // EXTERNAL_API_WARNING: Warning that is present in an external api call
    // FIELD_VALUE_OVERRIDEN: Warning that value of a field has been overridden.
    // Deprecated unused field.
    // INJECTED_KERNELS_DEPRECATED: The operation involved use of an injected
    // kernel, which is deprecated.
    // INVALID_HEALTH_CHECK_FOR_DYNAMIC_WIEGHTED_LB: A WEIGHTED_MAGLEV backend
    // service is associated with a health check that is not of type
    // HTTP/HTTPS/HTTP2.
    // LARGE_DEPLOYMENT_WARNING: When deploying a deployment with a exceedingly
    // large number of resources
    // LIST_OVERHEAD_QUOTA_EXCEED: Resource can't be retrieved due to list
    // overhead quota exceed which captures the amount of resources filtered out
    // by user-defined list filter.
    // MISSING_TYPE_DEPENDENCY: A resource depends on a missing type
    // NEXT_HOP_ADDRESS_NOT_ASSIGNED: The route's nextHopIp address is not
    // assigned to an instance on the network.
    // NEXT_HOP_CANNOT_IP_FORWARD: The route's next hop instance cannot ip
    // forward.
    // NEXT_HOP_INSTANCE_HAS_NO_IPV6_INTERFACE: The route's nextHopInstance URL
    // refers to an instance that does not have an ipv6 interface on the same
    // network as the route.
    // NEXT_HOP_INSTANCE_NOT_FOUND: The route's nextHopInstance URL refers to an
    // instance that does not exist.
    // NEXT_HOP_INSTANCE_NOT_ON_NETWORK: The route's nextHopInstance URL refers
    // to an instance that is not on the same network as the route.
    // NEXT_HOP_NOT_RUNNING: The route's next hop instance does not have a
    // status of RUNNING.
    // NOT_CRITICAL_ERROR: Error which is not critical. We decided to continue
    // the process despite the mentioned error.
    // NO_RESULTS_ON_PAGE: No results are present on a particular list page.
    // PARTIAL_SUCCESS: Success is reported, but some results may be missing due
    // to errors
    // REQUIRED_TOS_AGREEMENT: The user attempted to use a resource that
    // requires a TOS they have not accepted.
    // RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING: Warning that a resource is in
    // use.
    // RESOURCE_NOT_DELETED: One or more of the resources set to auto-delete
    // could not be deleted because they were in use.
    // SCHEMA_VALIDATION_IGNORED: When a resource schema validation is ignored.
    // SINGLE_INSTANCE_PROPERTY_TEMPLATE: Instance template used in instance
    // group manager is valid as such, but its application does not make a lot
    // of sense, because it allows only single instance in instance group.
    // UNDECLARED_PROPERTIES: When undeclared properties in the schema are
    // present
    // UNREACHABLE: A given scope cannot be reached.
    optional string code = 1 [json_name = "code"];

    message DataItem {
      // [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).
      optional string key = 1 [json_name = "key"];

      // [Output Only] A warning data value corresponding to the key.
      optional string value = 2 [json_name = "value"];
    }

    // [Output Only] Metadata about this warning in key: value format. For
    // example: "data": [ { "key": "scope", "value": "zones/us-east1-d" }
    repeated DataItem data = 2 [json_name = "data"];

    // [Output Only] A human-readable description of the warning code.
    optional string message = 3 [json_name = "message"];
  }

  // [Output Only] Informational warning message.
  optional Warning warning = 6 [json_name = "warning"];
}

// Time window specified for daily maintenance operations. GCE's internal
// maintenance will be performed within this window.
message NodeGroupMaintenanceWindow {
  // [Output only] A predetermined duration for the window, automatically chosen
  // to be the smallest possible in the given scenario.
  optional Duration maintenance_duration = 1
      [json_name = "maintenanceDuration"];

  // Start time of the window. This must be in UTC format that resolves to one
  // of 00:00, 04:00, 08:00, 12:00, 16:00, or 20:00. For example, both 13:00-5
  // and 08:00 are valid.
  optional string start_time = 2 [json_name = "startTime"];
}

message NodeGroupNode {
  // Accelerators for this node.
  repeated AcceleratorConfig accelerators = 1 [json_name = "accelerators"];

  // Node resources that are reserved by all instances.
  optional InstanceConsumptionInfo consumed_resources = 2
      [json_name = "consumedResources"];

  // CPU overcommit.
  // CPU_OVERCOMMIT_TYPE_UNSPECIFIED:
  // ENABLED:
  // NONE:
  optional string cpu_overcommit_type = 3 [json_name = "cpuOvercommitType"];

  // Local disk configurations.
  repeated LocalDisk disks = 4 [json_name = "disks"];

  // Instance data that shows consumed resources on the node.
  repeated InstanceConsumptionData instance_consumption_data = 5
      [json_name = "instanceConsumptionData"];

  // Instances scheduled on this node.
  repeated string instances = 6 [json_name = "instances"];

  // The name of the node.
  optional string name = 7 [json_name = "name"];

  // The type of this node.
  optional string node_type = 8 [json_name = "nodeType"];

  // [Output Only] Reserved for future use.
  optional bool satisfies_pzs = 9 [json_name = "satisfiesPzs"];

  // Binding properties for the physical server.
  optional ServerBinding server_binding = 10 [json_name = "serverBinding"];

  // Server ID associated with this node.
  optional string server_id = 11 [json_name = "serverId"];

  // CREATING:
  // DELETING:
  // INVALID:
  // READY:
  // REPAIRING:
  optional string status = 12 [json_name = "status"];

  // Total amount of available resources on the node.
  optional InstanceConsumptionInfo total_resources = 13
      [json_name = "totalResources"];
}

message NodeGroupsAddNodesRequest {
  // Count of additional nodes to be added to the node group.
  optional int32 additional_node_count = 1 [json_name = "additionalNodeCount"];
}

message NodeGroupsDeleteNodesRequest {
  // Names of the nodes to delete.
  repeated string nodes = 1 [json_name = "nodes"];
}

message NodeGroupsListNodes {
  // [Output Only] Unique identifier for the resource; defined by the server.
  optional string id = 1 [json_name = "id"];

  // A list of Node resources.
  repeated NodeGroupNode items = 2 [json_name = "items"];

  // [Output Only] The resource type, which is always
  // compute.nodeGroupsListNodes for the list of nodes in the specified node
  // group.
  optional string kind = 3 [json_name = "kind"];

  // [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.
  optional string next_page_token = 4 [json_name = "nextPageToken"];

  // [Output Only] Server-defined URL for this resource.
  optional string self_link = 5 [json_name = "selfLink"];

  message Warning {
    // [Output Only] A warning code, if applicable. For example, Compute Engine
    // returns NO_RESULTS_ON_PAGE if there are no results in the response.
    // CLEANUP_FAILED: Warning about failed cleanup of transient changes made by
    // a failed operation.
    // DEPRECATED_RESOURCE_USED: A link to a deprecated resource was created.
    // DEPRECATED_TYPE_USED: When deploying and at least one of the resources
    // has a type marked as deprecated
    // DISK_SIZE_LARGER_THAN_IMAGE_SIZE: The user created a boot disk that is
    // larger than image size.
    // EXPERIMENTAL_TYPE_USED: When deploying and at least one of the resources
    // has a type marked as experimental
    // EXTERNAL_API_WARNING: Warning that is present in an external api call
    // FIELD_VALUE_OVERRIDEN: Warning that value of a field has been overridden.
    // Deprecated unused field.
    // INJECTED_KERNELS_DEPRECATED: The operation involved use of an injected
    // kernel, which is deprecated.
    // INVALID_HEALTH_CHECK_FOR_DYNAMIC_WIEGHTED_LB: A WEIGHTED_MAGLEV backend
    // service is associated with a health check that is not of type
    // HTTP/HTTPS/HTTP2.
    // LARGE_DEPLOYMENT_WARNING: When deploying a deployment with a exceedingly
    // large number of resources
    // LIST_OVERHEAD_QUOTA_EXCEED: Resource can't be retrieved due to list
    // overhead quota exceed which captures the amount of resources filtered out
    // by user-defined list filter.
    // MISSING_TYPE_DEPENDENCY: A resource depends on a missing type
    // NEXT_HOP_ADDRESS_NOT_ASSIGNED: The route's nextHopIp address is not
    // assigned to an instance on the network.
    // NEXT_HOP_CANNOT_IP_FORWARD: The route's next hop instance cannot ip
    // forward.
    // NEXT_HOP_INSTANCE_HAS_NO_IPV6_INTERFACE: The route's nextHopInstance URL
    // refers to an instance that does not have an ipv6 interface on the same
    // network as the route.
    // NEXT_HOP_INSTANCE_NOT_FOUND: The route's nextHopInstance URL refers to an
    // instance that does not exist.
    // NEXT_HOP_INSTANCE_NOT_ON_NETWORK: The route's nextHopInstance URL refers
    // to an instance that is not on the same network as the route.
    // NEXT_HOP_NOT_RUNNING: The route's next hop instance does not have a
    // status of RUNNING.
    // NOT_CRITICAL_ERROR: Error which is not critical. We decided to continue
    // the process despite the mentioned error.
    // NO_RESULTS_ON_PAGE: No results are present on a particular list page.
    // PARTIAL_SUCCESS: Success is reported, but some results may be missing due
    // to errors
    // REQUIRED_TOS_AGREEMENT: The user attempted to use a resource that
    // requires a TOS they have not accepted.
    // RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING: Warning that a resource is in
    // use.
    // RESOURCE_NOT_DELETED: One or more of the resources set to auto-delete
    // could not be deleted because they were in use.
    // SCHEMA_VALIDATION_IGNORED: When a resource schema validation is ignored.
    // SINGLE_INSTANCE_PROPERTY_TEMPLATE: Instance template used in instance
    // group manager is valid as such, but its application does not make a lot
    // of sense, because it allows only single instance in instance group.
    // UNDECLARED_PROPERTIES: When undeclared properties in the schema are
    // present
    // UNREACHABLE: A given scope cannot be reached.
    optional string code = 1 [json_name = "code"];

    message DataItem {
      // [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).
      optional string key = 1 [json_name = "key"];

      // [Output Only] A warning data value corresponding to the key.
      optional string value = 2 [json_name = "value"];
    }

    // [Output Only] Metadata about this warning in key: value format. For
    // example: "data": [ { "key": "scope", "value": "zones/us-east1-d" }
    repeated DataItem data = 2 [json_name = "data"];

    // [Output Only] A human-readable description of the warning code.
    optional string message = 3 [json_name = "message"];
  }

  // [Output Only] Informational warning message.
  optional Warning warning = 6 [json_name = "warning"];
}

message NodeGroupsScopedList {
  // [Output Only] A list of node groups contained in this scope.
  repeated NodeGroup node_groups = 1 [json_name = "nodeGroups"];

  message Warning {
    // [Output Only] A warning code, if applicable. For example, Compute Engine
    // returns NO_RESULTS_ON_PAGE if there are no results in the response.
    // CLEANUP_FAILED: Warning about failed cleanup of transient changes made by
    // a failed operation.
    // DEPRECATED_RESOURCE_USED: A link to a deprecated resource was created.
    // DEPRECATED_TYPE_USED: When deploying and at least one of the resources
    // has a type marked as deprecated
    // DISK_SIZE_LARGER_THAN_IMAGE_SIZE: The user created a boot disk that is
    // larger than image size.
    // EXPERIMENTAL_TYPE_USED: When deploying and at least one of the resources
    // has a type marked as experimental
    // EXTERNAL_API_WARNING: Warning that is present in an external api call
    // FIELD_VALUE_OVERRIDEN: Warning that value of a field has been overridden.
    // Deprecated unused field.
    // INJECTED_KERNELS_DEPRECATED: The operation involved use of an injected
    // kernel, which is deprecated.
    // INVALID_HEALTH_CHECK_FOR_DYNAMIC_WIEGHTED_LB: A WEIGHTED_MAGLEV backend
    // service is associated with a health check that is not of type
    // HTTP/HTTPS/HTTP2.
    // LARGE_DEPLOYMENT_WARNING: When deploying a deployment with a exceedingly
    // large number of resources
    // LIST_OVERHEAD_QUOTA_EXCEED: Resource can't be retrieved due to list
    // overhead quota exceed which captures the amount of resources filtered out
    // by user-defined list filter.
    // MISSING_TYPE_DEPENDENCY: A resource depends on a missing type
    // NEXT_HOP_ADDRESS_NOT_ASSIGNED: The route's nextHopIp address is not
    // assigned to an instance on the network.
    // NEXT_HOP_CANNOT_IP_FORWARD: The route's next hop instance cannot ip
    // forward.
    // NEXT_HOP_INSTANCE_HAS_NO_IPV6_INTERFACE: The route's nextHopInstance URL
    // refers to an instance that does not have an ipv6 interface on the same
    // network as the route.
    // NEXT_HOP_INSTANCE_NOT_FOUND: The route's nextHopInstance URL refers to an
    // instance that does not exist.
    // NEXT_HOP_INSTANCE_NOT_ON_NETWORK: The route's nextHopInstance URL refers
    // to an instance that is not on the same network as the route.
    // NEXT_HOP_NOT_RUNNING: The route's next hop instance does not have a
    // status of RUNNING.
    // NOT_CRITICAL_ERROR: Error which is not critical. We decided to continue
    // the process despite the mentioned error.
    // NO_RESULTS_ON_PAGE: No results are present on a particular list page.
    // PARTIAL_SUCCESS: Success is reported, but some results may be missing due
    // to errors
    // REQUIRED_TOS_AGREEMENT: The user attempted to use a resource that
    // requires a TOS they have not accepted.
    // RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING: Warning that a resource is in
    // use.
    // RESOURCE_NOT_DELETED: One or more of the resources set to auto-delete
    // could not be deleted because they were in use.
    // SCHEMA_VALIDATION_IGNORED: When a resource schema validation is ignored.
    // SINGLE_INSTANCE_PROPERTY_TEMPLATE: Instance template used in instance
    // group manager is valid as such, but its application does not make a lot
    // of sense, because it allows only single instance in instance group.
    // UNDECLARED_PROPERTIES: When undeclared properties in the schema are
    // present
    // UNREACHABLE: A given scope cannot be reached.
    optional string code = 1 [json_name = "code"];

    message DataItem {
      // [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).
      optional string key = 1 [json_name = "key"];

      // [Output Only] A warning data value corresponding to the key.
      optional string value = 2 [json_name = "value"];
    }

    // [Output Only] Metadata about this warning in key: value format. For
    // example: "data": [ { "key": "scope", "value": "zones/us-east1-d" }
    repeated DataItem data = 2 [json_name = "data"];

    // [Output Only] A human-readable description of the warning code.
    optional string message = 3 [json_name = "message"];
  }

  // [Output Only] An informational warning that appears when the nodeGroup list
  // is empty.
  optional Warning warning = 2 [json_name = "warning"];
}

message NodeGroupsSetNodeTemplateRequest {
  // Full or partial URL of the node template resource to be updated for this
  // node group.
  optional string node_template = 1 [json_name = "nodeTemplate"];
}

message NodeGroupsSimulateMaintenanceEventRequest {
  // Names of the nodes to go under maintenance simulation.
  repeated string nodes = 1 [json_name = "nodes"];
}
