// 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_028.proto";

// RegionInstanceGroupManagers.deletePerInstanceConfigs
message RegionInstanceGroupManagerDeleteInstanceConfigReq {
  // The list of instance names for which we want to delete per-instance configs
  // on this managed instance group.
  repeated string names = 1 [json_name = "names"];
}

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

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

  // [Output Only] The resource type, which is always
  // compute#instanceGroupManagerList for a list of managed instance groups that
  // exist in th regional scope.
  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"];
}

// RegionInstanceGroupManagers.patchPerInstanceConfigs
message RegionInstanceGroupManagerPatchInstanceConfigReq {
  // The list of per-instance configurations to insert or patch on this managed
  // instance group.
  repeated PerInstanceConfig per_instance_configs = 1
      [json_name = "perInstanceConfigs"];
}

// RegionInstanceGroupManagers.updatePerInstanceConfigs
message RegionInstanceGroupManagerUpdateInstanceConfigReq {
  // The list of per-instance configurations to insert or patch on this managed
  // instance group.
  repeated PerInstanceConfig per_instance_configs = 1
      [json_name = "perInstanceConfigs"];
}

message RegionInstanceGroupManagersAbandonInstancesRequest {
  // The URLs of one or more instances to abandon. This can be a full URL or a
  // partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
  repeated string instances = 1 [json_name = "instances"];
}

// RegionInstanceGroupManagers.applyUpdatesToInstances
message RegionInstanceGroupManagersApplyUpdatesRequest {
  // Flag to update all instances instead of specified list of “instances”.
  // If the flag is set to true then the instances may not be specified in the
  // request.
  optional bool all_instances = 1 [json_name = "allInstances"];

  // The list of URLs of one or more instances for which you want to apply
  // updates. Each URL can be a full URL or a partial URL, such as
  // zones/[ZONE]/instances/[INSTANCE_NAME].
  repeated string instances = 2 [json_name = "instances"];

  // The minimal action that you want to perform on each instance during the
  // update: - REPLACE: At minimum, delete the instance and create it again. -
  // RESTART: Stop the instance and start it again. - REFRESH: Do not stop the
  // instance and limit disruption as much as possible. - NONE: Do not disrupt
  // the instance at all. By default, the minimum action is NONE. If your update
  // requires a more disruptive action than you set with this flag, the
  // necessary action is performed to execute the update.
  // NONE: Do not perform any action.
  // REFRESH: Do not stop the instance.
  // REPLACE: (Default.) Replace the instance according to the replacement
  // method option.
  // RESTART: Stop the instance and start it again.
  optional string minimal_action = 3 [json_name = "minimalAction"];

  // The most disruptive action that you want to perform on each instance during
  // the update: - REPLACE: Delete the instance and create it again. - RESTART:
  // Stop the instance and start it again. - REFRESH: Do not stop the instance
  // and limit disruption as much as possible. - NONE: Do not disrupt the
  // instance at all. By default, the most disruptive allowed action is REPLACE.
  // If your update requires a more disruptive action than you set with this
  // flag, the update request will fail.
  // NONE: Do not perform any action.
  // REFRESH: Do not stop the instance.
  // REPLACE: (Default.) Replace the instance according to the replacement
  // method option.
  // RESTART: Stop the instance and start it again.
  optional string most_disruptive_allowed_action = 4
      [json_name = "mostDisruptiveAllowedAction"];
}

// RegionInstanceGroupManagers.createInstances
message RegionInstanceGroupManagersCreateInstancesRequest {
  // [Required] List of specifications of per-instance configs.
  repeated PerInstanceConfig instances = 1 [json_name = "instances"];
}

message RegionInstanceGroupManagersDeleteInstancesRequest {
  // The URLs of one or more instances to delete. This can be a full URL or a
  // partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
  repeated string instances = 1 [json_name = "instances"];

  // Specifies whether the request should proceed despite the inclusion of
  // instances that are not members of the group or that are already in the
  // process of being deleted or abandoned. If this field is set to `false` and
  // such an instance is specified in the request, the operation fails. The
  // operation always fails if the request contains a malformed instance URL or
  // a reference to an instance that exists in a zone or region other than the
  // group's zone or region.
  optional bool skip_instances_on_validation_error = 2
      [json_name = "skipInstancesOnValidationError"];
}

message RegionInstanceGroupManagersListErrorsResponse {
  // [Output Only] The list of errors of the managed instance group.
  repeated InstanceManagedByIgmError items = 1 [json_name = "items"];

  // [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 = 2 [json_name = "nextPageToken"];
}

message RegionInstanceGroupManagersListInstanceConfigsResp {
  // [Output Only] The list of PerInstanceConfig.
  repeated PerInstanceConfig items = 1 [json_name = "items"];

  // [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 = 2 [json_name = "nextPageToken"];

  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 = 3 [json_name = "warning"];
}

message RegionInstanceGroupManagersListInstancesResponse {
  // A list of managed instances.
  repeated ManagedInstance managed_instances = 1
      [json_name = "managedInstances"];

  // [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 = 2 [json_name = "nextPageToken"];
}

message RegionInstanceGroupManagersRecreateRequest {
  // The URLs of one or more instances to recreate. This can be a full URL or a
  // partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
  repeated string instances = 1 [json_name = "instances"];
}

message RegionInstanceGroupManagersSetTargetPoolsRequest {
  // Fingerprint of the target pools information, which is a hash of the
  // contents. This field is used for optimistic locking when you update the
  // target pool entries. This field is optional.
  optional string fingerprint = 1 [json_name = "fingerprint"];

  // The URL of all TargetPool resources to which instances in the instanceGroup
  // field are added. The target pools automatically apply to all of the
  // instances in the managed instance group.
  repeated string target_pools = 2 [json_name = "targetPools"];
}

message RegionInstanceGroupManagersSetTemplateRequest {
  // URL of the InstanceTemplate resource from which all new instances will be
  // created.
  optional string instance_template = 1 [json_name = "instanceTemplate"];
}
