syntax = "proto3";

package controller.api.resources.hosts.v1;

option go_package = "github.com/hashicorp/boundary/internal/gen/controller/api/resources/hosts;hosts";

import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";
import "controller/api/resources/scopes/v1/scope.proto";
import "controller/custom_options/v1/options.proto";

// Host contains all fields related to a Host resource
message Host {
	// Output only. The ID of the Host.
	string id = 10;

	// The Host Catalog of which this Host is a part.
	string host_catalog_id = 20 [json_name="host_catalog_id"];

	// Output only. Scope information for this resource.
	resources.scopes.v1.ScopeInfo scope = 30;

	// Optional name for identification purposes.
	google.protobuf.StringValue name = 40 [(custom_options.v1.generate_sdk_option) = true, (custom_options.v1.mask_mapping) = {this:"name" that: "name"}];

	// Optional user-set description for identification purposes.
	google.protobuf.StringValue description = 50 [(custom_options.v1.generate_sdk_option) = true, (custom_options.v1.mask_mapping) = {this:"description" that: "description"}];

	// Output only. The time this resource was created.
	google.protobuf.Timestamp created_time = 60 [json_name="created_time"];

	// Output only. The time this resource was last updated.
	google.protobuf.Timestamp updated_time = 70 [json_name="updated_time"];

	// Version is used in mutation requests, after the initial creation, to ensure this resource has not changed.
  // The mutation will fail if the version does not match the latest known good version.
	uint32 version = 80;

	// The type of the resource.
	string type = 90;

	// Output only. A list of Host Sets containing this Host.
	repeated string host_set_ids = 100 [json_name="host_set_ids"];

	// The attributes that are applicable to the specific Host type.
	google.protobuf.Struct attributes = 110 [(custom_options.v1.generate_sdk_option) = true];
}

message StaticHostAttributes {
	// The address (DNS or IP name) used to reach the Host.
	google.protobuf.StringValue address = 10 [(custom_options.v1.generate_sdk_option) = true, (custom_options.v1.mask_mapping) = {this:"attributes.address" that: "address"}];
}
