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

// Represents an Instance Group resource. Instance Groups can be used to
// configure a target for load balancing. Instance groups can either be managed
// or unmanaged. To create managed instance groups, use the instanceGroupManager
// or regionInstanceGroupManager resource instead. Use zonal unmanaged instance
// groups if you need to apply load balancing to groups of heterogeneous
// instances or if you need to manage the instances yourself. You cannot create
// regional unmanaged instance groups. For more information, read Instance
// groups.
message InstanceGroup {
  // [Output Only] The creation timestamp for this instance group in RFC3339
  // text format.
  optional string creation_timestamp = 1 [json_name = "creationTimestamp"];

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

  // [Output Only] The fingerprint of the named ports. The system uses this
  // fingerprint to detect conflicts when multiple users change the named ports
  // concurrently.
  optional string fingerprint = 3 [json_name = "fingerprint"];

  // [Output Only] A unique identifier for this instance group, generated by the
  // server.
  optional string id = 4 [json_name = "id"];

  // [Output Only] The resource type, which is always compute#instanceGroup for
  // instance groups.
  optional string kind = 5 [json_name = "kind"];

  // The name of the instance group. The name must be 1-63 characters long, and
  // comply with RFC1035.
  optional string name = 6 [json_name = "name"];

  //  Assigns a name to a port number. For example: {name: "http", port: 80}
  // This allows the system to reference ports by the assigned name instead of a
  // port number. Named ports can also contain multiple ports. For example:
  // [{name: "app1", port: 8080}, {name: "app1", port: 8081}, {name: "app2",
  // port: 8082}] Named ports apply to all instances in this instance group.
  repeated NamedPort named_ports = 7 [json_name = "namedPorts"];

  // [Output Only] The URL of the network to which all instances in the instance
  // group belong. If your instance has multiple network interfaces, then the
  // network and subnetwork fields only refer to the network and subnet used by
  // your primary interface (nic0).
  optional string network = 8 [json_name = "network"];

  // [Output Only] The URL of the region where the instance group is located
  // (for regional resources).
  optional string region = 9 [json_name = "region"];

  // [Output Only] The URL for this instance group. The server generates this
  // URL.
  optional string self_link = 10 [json_name = "selfLink"];

  // [Output Only] The total number of instances in the instance group.
  optional int32 size = 11 [json_name = "size"];

  // [Output Only] The URL of the subnetwork to which all instances in the
  // instance group belong. If your instance has multiple network interfaces,
  // then the network and subnetwork fields only refer to the network and subnet
  // used by your primary interface (nic0).
  optional string subnetwork = 12 [json_name = "subnetwork"];

  // [Output Only] The URL of the zone where the instance group is located (for
  // zonal resources).
  optional string zone = 13 [json_name = "zone"];
}

message InstanceWithNamedPorts {
  // [Output Only] The URL of the instance.
  optional string instance = 1 [json_name = "instance"];

  // [Output Only] The named ports that belong to this instance group.
  repeated NamedPort named_ports = 2 [json_name = "namedPorts"];

  // [Output Only] The status of the instance.
  // DEPROVISIONING: The instance is halted and we are performing tear down
  // tasks like network deprogramming, releasing quota, IP, tearing down disks
  // etc.
  // PROVISIONING: Resources are being allocated for the instance.
  // REPAIRING: The instance is in repair.
  // RUNNING: The instance is running.
  // STAGING: All required resources have been allocated and the instance is
  // being started.
  // STOPPED: The instance has stopped successfully.
  // STOPPING: The instance is currently stopping (either being deleted or
  // killed).
  // SUSPENDED: The instance has suspended.
  // SUSPENDING: The instance is suspending.
  // TERMINATED: The instance has stopped (either by explicit action or
  // underlying failure).
  optional string status = 3 [json_name = "status"];
}
