internal/pb/sync.pb.go
Ref: Size: 66.8 KiB History
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
// protoc v7.35.1
// source: proto/eitri/v1/sync.proto
package pb
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
unsafe "unsafe"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type AgentMessage struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Types that are valid to be assigned to Msg:
//
// *AgentMessage_Hello
// *AgentMessage_Report
// *AgentMessage_ConsoleOpened
// *AgentMessage_TcpOpened
Msg isAgentMessage_Msg `protobuf_oneof:"msg"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AgentMessage) Reset() {
*x = AgentMessage{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AgentMessage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AgentMessage) ProtoMessage() {}
func (x *AgentMessage) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[0]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AgentMessage.ProtoReflect.Descriptor instead.
func (*AgentMessage) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{0}
}
func (x *AgentMessage) GetMsg() isAgentMessage_Msg {
if x != nil {
return x.Msg
}
return nil
}
func (x *AgentMessage) GetHello() *Hello {
if x != nil {
if x, ok := x.Msg.(*AgentMessage_Hello); ok {
return x.Hello
}
}
return nil
}
func (x *AgentMessage) GetReport() *Report {
if x != nil {
if x, ok := x.Msg.(*AgentMessage_Report); ok {
return x.Report
}
}
return nil
}
func (x *AgentMessage) GetConsoleOpened() *ConsoleOpened {
if x != nil {
if x, ok := x.Msg.(*AgentMessage_ConsoleOpened); ok {
return x.ConsoleOpened
}
}
return nil
}
func (x *AgentMessage) GetTcpOpened() *TCPOpened {
if x != nil {
if x, ok := x.Msg.(*AgentMessage_TcpOpened); ok {
return x.TcpOpened
}
}
return nil
}
type isAgentMessage_Msg interface {
isAgentMessage_Msg()
}
type AgentMessage_Hello struct {
Hello *Hello `protobuf:"bytes,1,opt,name=hello,proto3,oneof"`
}
type AgentMessage_Report struct {
Report *Report `protobuf:"bytes,2,opt,name=report,proto3,oneof"`
}
type AgentMessage_ConsoleOpened struct {
ConsoleOpened *ConsoleOpened `protobuf:"bytes,3,opt,name=console_opened,json=consoleOpened,proto3,oneof"`
}
type AgentMessage_TcpOpened struct {
TcpOpened *TCPOpened `protobuf:"bytes,4,opt,name=tcp_opened,json=tcpOpened,proto3,oneof"`
}
func (*AgentMessage_Hello) isAgentMessage_Msg() {}
func (*AgentMessage_Report) isAgentMessage_Msg() {}
func (*AgentMessage_ConsoleOpened) isAgentMessage_Msg() {}
func (*AgentMessage_TcpOpened) isAgentMessage_Msg() {}
type ServerMessage struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Types that are valid to be assigned to Msg:
//
// *ServerMessage_Snapshot
// *ServerMessage_ConsoleOpen
// *ServerMessage_TcpOpen
Msg isServerMessage_Msg `protobuf_oneof:"msg"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ServerMessage) Reset() {
*x = ServerMessage{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ServerMessage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ServerMessage) ProtoMessage() {}
func (x *ServerMessage) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ServerMessage.ProtoReflect.Descriptor instead.
func (*ServerMessage) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{1}
}
func (x *ServerMessage) GetMsg() isServerMessage_Msg {
if x != nil {
return x.Msg
}
return nil
}
func (x *ServerMessage) GetSnapshot() *Snapshot {
if x != nil {
if x, ok := x.Msg.(*ServerMessage_Snapshot); ok {
return x.Snapshot
}
}
return nil
}
func (x *ServerMessage) GetConsoleOpen() *ConsoleOpen {
if x != nil {
if x, ok := x.Msg.(*ServerMessage_ConsoleOpen); ok {
return x.ConsoleOpen
}
}
return nil
}
func (x *ServerMessage) GetTcpOpen() *TCPOpen {
if x != nil {
if x, ok := x.Msg.(*ServerMessage_TcpOpen); ok {
return x.TcpOpen
}
}
return nil
}
type isServerMessage_Msg interface {
isServerMessage_Msg()
}
type ServerMessage_Snapshot struct {
Snapshot *Snapshot `protobuf:"bytes,1,opt,name=snapshot,proto3,oneof"`
}
type ServerMessage_ConsoleOpen struct {
ConsoleOpen *ConsoleOpen `protobuf:"bytes,2,opt,name=console_open,json=consoleOpen,proto3,oneof"`
}
type ServerMessage_TcpOpen struct {
TcpOpen *TCPOpen `protobuf:"bytes,3,opt,name=tcp_open,json=tcpOpen,proto3,oneof"`
}
func (*ServerMessage_Snapshot) isServerMessage_Msg() {}
func (*ServerMessage_ConsoleOpen) isServerMessage_Msg() {}
func (*ServerMessage_TcpOpen) isServerMessage_Msg() {}
type Hello struct {
state protoimpl.MessageState `protogen:"open.v1"`
HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"`
Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3" json:"hostname,omitempty"`
Os string `protobuf:"bytes,3,opt,name=os,proto3" json:"os,omitempty"`
Arch string `protobuf:"bytes,4,opt,name=arch,proto3" json:"arch,omitempty"`
Provisioner string `protobuf:"bytes,5,opt,name=provisioner,proto3" json:"provisioner,omitempty"` // "cloudhv"
// Report.guest_cidr.
LastSeenEpoch uint64 `protobuf:"varint,7,opt,name=last_seen_epoch,json=lastSeenEpoch,proto3" json:"last_seen_epoch,omitempty"` // for the restore runbook
Capacity *Capacity `protobuf:"bytes,8,opt,name=capacity,proto3" json:"capacity,omitempty"`
Credential string `protobuf:"bytes,9,opt,name=credential,proto3" json:"credential,omitempty"` // Bearer host credential, verified in first frame
Facts *HostFacts `protobuf:"bytes,10,opt,name=facts,proto3" json:"facts,omitempty"` // best-effort static host identity; refreshed each Hello
// The named guest networks this host is configured to serve
// (--host-network name=bridge), names only. In Hello rather than the
// report because the set changes only with agent configuration, i.e. a
// restart. Empty for a Mac, and for a Linux host with none configured.
HostNetworks []string `protobuf:"bytes,11,rep,name=host_networks,json=hostNetworks,proto3" json:"host_networks,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *Hello) Reset() {
*x = Hello{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *Hello) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Hello) ProtoMessage() {}
func (x *Hello) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Hello.ProtoReflect.Descriptor instead.
func (*Hello) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{2}
}
func (x *Hello) GetHostId() string {
if x != nil {
return x.HostId
}
return ""
}
func (x *Hello) GetHostname() string {
if x != nil {
return x.Hostname
}
return ""
}
func (x *Hello) GetOs() string {
if x != nil {
return x.Os
}
return ""
}
func (x *Hello) GetArch() string {
if x != nil {
return x.Arch
}
return ""
}
func (x *Hello) GetProvisioner() string {
if x != nil {
return x.Provisioner
}
return ""
}
func (x *Hello) GetLastSeenEpoch() uint64 {
if x != nil {
return x.LastSeenEpoch
}
return 0
}
func (x *Hello) GetCapacity() *Capacity {
if x != nil {
return x.Capacity
}
return nil
}
func (x *Hello) GetCredential() string {
if x != nil {
return x.Credential
}
return ""
}
func (x *Hello) GetFacts() *HostFacts {
if x != nil {
return x.Facts
}
return nil
}
func (x *Hello) GetHostNetworks() []string {
if x != nil {
return x.HostNetworks
}
return nil
}
type Capacity struct {
state protoimpl.MessageState `protogen:"open.v1"`
Vcpus int64 `protobuf:"varint,1,opt,name=vcpus,proto3" json:"vcpus,omitempty"`
MemMb int64 `protobuf:"varint,2,opt,name=mem_mb,json=memMb,proto3" json:"mem_mb,omitempty"`
DiskGb int64 `protobuf:"varint,3,opt,name=disk_gb,json=diskGb,proto3" json:"disk_gb,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *Capacity) Reset() {
*x = Capacity{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *Capacity) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Capacity) ProtoMessage() {}
func (x *Capacity) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Capacity.ProtoReflect.Descriptor instead.
func (*Capacity) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{3}
}
func (x *Capacity) GetVcpus() int64 {
if x != nil {
return x.Vcpus
}
return 0
}
func (x *Capacity) GetMemMb() int64 {
if x != nil {
return x.MemMb
}
return 0
}
func (x *Capacity) GetDiskGb() int64 {
if x != nil {
return x.DiskGb
}
return 0
}
// HostFacts is slow-changing host identity, gathered best-effort by the agent.
// Every field is empty when its source can't be read.
type HostFacts struct {
state protoimpl.MessageState `protogen:"open.v1"`
OsId string `protobuf:"bytes,1,opt,name=os_id,json=osId,proto3" json:"os_id,omitempty"` // /etc/os-release ID, e.g. "debian"
OsPretty string `protobuf:"bytes,2,opt,name=os_pretty,json=osPretty,proto3" json:"os_pretty,omitempty"` // PRETTY_NAME, e.g. "Debian GNU/Linux 12 (bookworm)"
OsVersion string `protobuf:"bytes,3,opt,name=os_version,json=osVersion,proto3" json:"os_version,omitempty"` // VERSION_ID, e.g. "12"
Kernel string `protobuf:"bytes,4,opt,name=kernel,proto3" json:"kernel,omitempty"` // kernel release, e.g. "6.1.0-18-amd64"
CpuModel string `protobuf:"bytes,5,opt,name=cpu_model,json=cpuModel,proto3" json:"cpu_model,omitempty"` // /proc/cpuinfo model name
Virt string `protobuf:"bytes,6,opt,name=virt,proto3" json:"virt,omitempty"` // systemd-detect-virt: "kvm" | "none" | "" (unknown)
AgentVersion string `protobuf:"bytes,7,opt,name=agent_version,json=agentVersion,proto3" json:"agent_version,omitempty"` // the agent binary's stamped version ("dev" unstamped)
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *HostFacts) Reset() {
*x = HostFacts{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *HostFacts) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*HostFacts) ProtoMessage() {}
func (x *HostFacts) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[4]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use HostFacts.ProtoReflect.Descriptor instead.
func (*HostFacts) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{4}
}
func (x *HostFacts) GetOsId() string {
if x != nil {
return x.OsId
}
return ""
}
func (x *HostFacts) GetOsPretty() string {
if x != nil {
return x.OsPretty
}
return ""
}
func (x *HostFacts) GetOsVersion() string {
if x != nil {
return x.OsVersion
}
return ""
}
func (x *HostFacts) GetKernel() string {
if x != nil {
return x.Kernel
}
return ""
}
func (x *HostFacts) GetCpuModel() string {
if x != nil {
return x.CpuModel
}
return ""
}
func (x *HostFacts) GetVirt() string {
if x != nil {
return x.Virt
}
return ""
}
func (x *HostFacts) GetAgentVersion() string {
if x != nil {
return x.AgentVersion
}
return ""
}
// HostMetrics is live measured host utilization, refreshed each report. It is
// NOT persisted — it lives only in the registry while the host is online.
type HostMetrics struct {
state protoimpl.MessageState `protogen:"open.v1"`
UptimeS int64 `protobuf:"varint,1,opt,name=uptime_s,json=uptimeS,proto3" json:"uptime_s,omitempty"`
MemUsedMb int64 `protobuf:"varint,2,opt,name=mem_used_mb,json=memUsedMb,proto3" json:"mem_used_mb,omitempty"`
MemAvailableMb int64 `protobuf:"varint,3,opt,name=mem_available_mb,json=memAvailableMb,proto3" json:"mem_available_mb,omitempty"`
Load1 float64 `protobuf:"fixed64,4,opt,name=load1,proto3" json:"load1,omitempty"` // 1-min load average (whole machine)
Load5 float64 `protobuf:"fixed64,5,opt,name=load5,proto3" json:"load5,omitempty"`
Load15 float64 `protobuf:"fixed64,6,opt,name=load15,proto3" json:"load15,omitempty"`
DiskUsedGb int64 `protobuf:"varint,7,opt,name=disk_used_gb,json=diskUsedGb,proto3" json:"disk_used_gb,omitempty"`
DiskFreeGb int64 `protobuf:"varint,8,opt,name=disk_free_gb,json=diskFreeGb,proto3" json:"disk_free_gb,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *HostMetrics) Reset() {
*x = HostMetrics{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *HostMetrics) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*HostMetrics) ProtoMessage() {}
func (x *HostMetrics) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use HostMetrics.ProtoReflect.Descriptor instead.
func (*HostMetrics) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{5}
}
func (x *HostMetrics) GetUptimeS() int64 {
if x != nil {
return x.UptimeS
}
return 0
}
func (x *HostMetrics) GetMemUsedMb() int64 {
if x != nil {
return x.MemUsedMb
}
return 0
}
func (x *HostMetrics) GetMemAvailableMb() int64 {
if x != nil {
return x.MemAvailableMb
}
return 0
}
func (x *HostMetrics) GetLoad1() float64 {
if x != nil {
return x.Load1
}
return 0
}
func (x *HostMetrics) GetLoad5() float64 {
if x != nil {
return x.Load5
}
return 0
}
func (x *HostMetrics) GetLoad15() float64 {
if x != nil {
return x.Load15
}
return 0
}
func (x *HostMetrics) GetDiskUsedGb() int64 {
if x != nil {
return x.DiskUsedGb
}
return 0
}
func (x *HostMetrics) GetDiskFreeGb() int64 {
if x != nil {
return x.DiskFreeGb
}
return 0
}
// VMStatus is the half of a VM its host owns: what it observed, never what it
// was told. One VM, two halves — VMSpec travels down in a Snapshot, VMStatus
// travels back in a Report, and the control plane holds both on one row.
type VMStatus struct {
state protoimpl.MessageState `protogen:"open.v1"`
VmId string `protobuf:"bytes,1,opt,name=vm_id,json=vmId,proto3" json:"vm_id,omitempty"`
// As observed on the host, never as asked for: VMSpec.power_state carries
// the request, and the two disagreeing is what converge exists to fix.
PowerState string `protobuf:"bytes,2,opt,name=power_state,json=powerState,proto3" json:"power_state,omitempty"` // "running"|"stopped"
Phase string `protobuf:"bytes,3,opt,name=phase,proto3" json:"phase,omitempty"` // "creating"|"ready"|"failed"|"quarantined"
Ip string `protobuf:"bytes,4,opt,name=ip,proto3" json:"ip,omitempty"` // the guest's address on its host's NAT underlay — every guest has one, from boot
LastError string `protobuf:"bytes,5,opt,name=last_error,json=lastError,proto3" json:"last_error,omitempty"`
// The guest's ed25519 HOST public key. It is generated on the host, and the
// private half never leaves it — this is the only half that travels. Sent on
// every report for as long as the VM exists (level-triggered), so a lost
// snapshot or a control-plane restart re-certifies without operator action.
SshHostPubkey string `protobuf:"bytes,6,opt,name=ssh_host_pubkey,json=sshHostPubkey,proto3" json:"ssh_host_pubkey,omitempty"`
// What this VM's host is doing about it right now, in the host's own words:
// "downloading image 1.2/3.7 GiB", "preparing root disk", "booting". A create
// is minutes of work behind one word, and the host is the only thing that can
// see inside it — the control plane knows the VM is creating and nothing more.
//
// Free text for display, never parsed. Empty is the normal state of a settled
// VM and means only "nothing to add": an agent that predates this field sends
// it never, and a console reading it reads exactly what it read before.
StatusDetail string `protobuf:"bytes,7,opt,name=status_detail,json=statusDetail,proto3" json:"status_detail,omitempty"`
// The address the site's DHCP server granted this guest on its SECOND NIC,
// the one attached to the named host network its spec asked for (see
// VMSpec.network). Empty for the guests that have no such NIC — the
// majority — and for one DHCP round-trip after a networked guest boots,
// because the host learns it by watching the exchange rather than granting
// it. Never a substitute for ip: that one is known before the guest is even
// running, which is why the gate path uses it and this field never appears
// there.
NetworkIp string `protobuf:"bytes,8,opt,name=network_ip,json=networkIp,proto3" json:"network_ip,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *VMStatus) Reset() {
*x = VMStatus{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *VMStatus) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*VMStatus) ProtoMessage() {}
func (x *VMStatus) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[6]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use VMStatus.ProtoReflect.Descriptor instead.
func (*VMStatus) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{6}
}
func (x *VMStatus) GetVmId() string {
if x != nil {
return x.VmId
}
return ""
}
func (x *VMStatus) GetPowerState() string {
if x != nil {
return x.PowerState
}
return ""
}
func (x *VMStatus) GetPhase() string {
if x != nil {
return x.Phase
}
return ""
}
func (x *VMStatus) GetIp() string {
if x != nil {
return x.Ip
}
return ""
}
func (x *VMStatus) GetLastError() string {
if x != nil {
return x.LastError
}
return ""
}
func (x *VMStatus) GetSshHostPubkey() string {
if x != nil {
return x.SshHostPubkey
}
return ""
}
func (x *VMStatus) GetStatusDetail() string {
if x != nil {
return x.StatusDetail
}
return ""
}
func (x *VMStatus) GetNetworkIp() string {
if x != nil {
return x.NetworkIp
}
return ""
}
type QuarantinedVM struct {
state protoimpl.MessageState `protogen:"open.v1"`
VmId string `protobuf:"bytes,1,opt,name=vm_id,json=vmId,proto3" json:"vm_id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
VmspecJson []byte `protobuf:"bytes,3,opt,name=vmspec_json,json=vmspecJson,proto3" json:"vmspec_json,omitempty"` // full VMSpec — only surviving copy after a DB restore
DestroyAtUnix int64 `protobuf:"varint,4,opt,name=destroy_at_unix,json=destroyAtUnix,proto3" json:"destroy_at_unix,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *QuarantinedVM) Reset() {
*x = QuarantinedVM{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *QuarantinedVM) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*QuarantinedVM) ProtoMessage() {}
func (x *QuarantinedVM) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[7]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use QuarantinedVM.ProtoReflect.Descriptor instead.
func (*QuarantinedVM) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{7}
}
func (x *QuarantinedVM) GetVmId() string {
if x != nil {
return x.VmId
}
return ""
}
func (x *QuarantinedVM) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *QuarantinedVM) GetVmspecJson() []byte {
if x != nil {
return x.VmspecJson
}
return nil
}
func (x *QuarantinedVM) GetDestroyAtUnix() int64 {
if x != nil {
return x.DestroyAtUnix
}
return 0
}
// Report is what one host observes, level-triggered: the status of every VM
// and exposure it holds, and the host's own numbers.
type Report struct {
state protoimpl.MessageState `protogen:"open.v1"`
Vms []*VMStatus `protobuf:"bytes,1,rep,name=vms,proto3" json:"vms,omitempty"`
// LEVEL-TRIGGERED destroy ack: ALL tombstoned vm_ids with no local
// record/disk/process, repeated every report until hard-deleted server-side.
Destroyed []string `protobuf:"bytes,2,rep,name=destroyed,proto3" json:"destroyed,omitempty"`
Quarantined []*QuarantinedVM `protobuf:"bytes,3,rep,name=quarantined,proto3" json:"quarantined,omitempty"`
Capacity *Capacity `protobuf:"bytes,4,opt,name=capacity,proto3" json:"capacity,omitempty"`
FenceViolation bool `protobuf:"varint,5,opt,name=fence_violation,json=fenceViolation,proto3" json:"fence_violation,omitempty"`
LastSeenEpoch uint64 `protobuf:"varint,6,opt,name=last_seen_epoch,json=lastSeenEpoch,proto3" json:"last_seen_epoch,omitempty"`
Metrics *HostMetrics `protobuf:"bytes,7,opt,name=metrics,proto3" json:"metrics,omitempty"` // live measured host utilization (heartbeat)
// The subnet this host's guests are on, as the HOST observes it. Empty means
// "not yet known", never "no network" — a host that cannot answer leaves the
// fleet's record alone rather than erasing it.
//
// In the report rather than Hello because it can change while an agent stays
// connected (an admin edits the host's network), and on some platforms is not
// knowable at connect time at all. Capacity is in both messages for the same
// reason: an opening value, then the ongoing truth.
GuestCidr string `protobuf:"bytes,8,opt,name=guest_cidr,json=guestCidr,proto3" json:"guest_cidr,omitempty"`
Exposures []*ExposureStatus `protobuf:"bytes,9,rep,name=exposures,proto3" json:"exposures,omitempty"`
// The address this host presents on the network it reaches the control
// plane over — the address an operator dials to reach a published guest
// port. Empty means "not yet known", never "no address": a host that cannot
// answer leaves the fleet's record alone rather than erasing it. In the
// report rather than Hello for the same reason guest_cidr is: it can change
// while an agent stays connected.
HostUplinkAddr string `protobuf:"bytes,10,opt,name=host_uplink_addr,json=hostUplinkAddr,proto3" json:"host_uplink_addr,omitempty"`
Volumes []*VolumeStatus `protobuf:"bytes,11,rep,name=volumes,proto3" json:"volumes,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *Report) Reset() {
*x = Report{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *Report) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Report) ProtoMessage() {}
func (x *Report) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[8]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Report.ProtoReflect.Descriptor instead.
func (*Report) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{8}
}
func (x *Report) GetVms() []*VMStatus {
if x != nil {
return x.Vms
}
return nil
}
func (x *Report) GetDestroyed() []string {
if x != nil {
return x.Destroyed
}
return nil
}
func (x *Report) GetQuarantined() []*QuarantinedVM {
if x != nil {
return x.Quarantined
}
return nil
}
func (x *Report) GetCapacity() *Capacity {
if x != nil {
return x.Capacity
}
return nil
}
func (x *Report) GetFenceViolation() bool {
if x != nil {
return x.FenceViolation
}
return false
}
func (x *Report) GetLastSeenEpoch() uint64 {
if x != nil {
return x.LastSeenEpoch
}
return 0
}
func (x *Report) GetMetrics() *HostMetrics {
if x != nil {
return x.Metrics
}
return nil
}
func (x *Report) GetGuestCidr() string {
if x != nil {
return x.GuestCidr
}
return ""
}
func (x *Report) GetExposures() []*ExposureStatus {
if x != nil {
return x.Exposures
}
return nil
}
func (x *Report) GetHostUplinkAddr() string {
if x != nil {
return x.HostUplinkAddr
}
return ""
}
func (x *Report) GetVolumes() []*VolumeStatus {
if x != nil {
return x.Volumes
}
return nil
}
// VMSpec is the half of a VM the control plane owns. See VMStatus.
type VMSpec struct {
state protoimpl.MessageState `protogen:"open.v1"`
VmId string `protobuf:"bytes,1,opt,name=vm_id,json=vmId,proto3" json:"vm_id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
ImageUrl string `protobuf:"bytes,3,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"`
ImageSha256 string `protobuf:"bytes,4,opt,name=image_sha256,json=imageSha256,proto3" json:"image_sha256,omitempty"`
CloudInit string `protobuf:"bytes,5,opt,name=cloud_init,json=cloudInit,proto3" json:"cloud_init,omitempty"` // user-data YAML, may be empty
Vcpus int64 `protobuf:"varint,6,opt,name=vcpus,proto3" json:"vcpus,omitempty"`
MemMb int64 `protobuf:"varint,7,opt,name=mem_mb,json=memMb,proto3" json:"mem_mb,omitempty"`
DiskGb int64 `protobuf:"varint,8,opt,name=disk_gb,json=diskGb,proto3" json:"disk_gb,omitempty"`
// Always true, and read by nobody in this tree — the control plane sets it
// unconditionally and the agent no longer branches on it, because every VM is
// persistent. It cannot be reserved yet: this is a restart policy whose
// absence means "ephemeral", and an agent at or below v0.0.5 reads the proto3
// default as exactly that, marking a guest failed forever the first time its
// host reboots. It comes out in the first release that cannot meet a v0.0.5
// agent — the same fielded-version reasoning internal/server/release applies
// to the pre-CSR floor — and its number is reserved when it goes.
Persistent bool `protobuf:"varint,9,opt,name=persistent,proto3" json:"persistent,omitempty"`
PowerState string `protobuf:"bytes,10,opt,name=power_state,json=powerState,proto3" json:"power_state,omitempty"` // "running"|"stopped"
Tombstoned bool `protobuf:"varint,11,opt,name=tombstoned,proto3" json:"tombstoned,omitempty"` // present-but-tombstoned (drives quarantine + destroyed[])
SshAuthorizedKey string `protobuf:"bytes,12,opt,name=ssh_authorized_key,json=sshAuthorizedKey,proto3" json:"ssh_authorized_key,omitempty"`
// The certificate the control plane signed for the public key the host
// reported in VMStatus.ssh_host_pubkey (authorized_keys form); seed installs
// it as /etc/ssh/ssh_host_ed25519_key-cert.pub. Empty until the round trip
// completes, and forever when the jump gate is off.
SshHostCert string `protobuf:"bytes,17,opt,name=ssh_host_cert,json=sshHostCert,proto3" json:"ssh_host_cert,omitempty"`
SshUserCaAuthorizedKeys []string `protobuf:"bytes,18,rep,name=ssh_user_ca_authorized_keys,json=sshUserCaAuthorizedKeys,proto3" json:"ssh_user_ca_authorized_keys,omitempty"` // the VM's tenant user-CA set (canonical authorized_keys lines); seed writes them all into TrustedUserCAKeys. Empty when the gate is off / tenant has none.
// The fleet has an SSH CA, so this guest must present a certified host key.
// A host that has reported its public key waits here until the certificate
// arrives rather than booting a guest that clients would refuse. Without it
// the agent could not tell "the gate is off, boot uncertified" from "your
// certificate has not come back yet" — both are an empty ssh_host_cert.
HostCertRequired bool `protobuf:"varint,19,opt,name=host_cert_required,json=hostCertRequired,proto3" json:"host_cert_required,omitempty"`
// The named host network this guest attaches to, or "" for the host's
// NAT'd private bridge (the default, and the only behavior agents before
// this field know). A name is only ever placed on a host that advertised
// it (see Hello.host_networks); an agent that has the name but no longer
// the configuration fails the VM legibly rather than silently NAT-ing it.
Network string `protobuf:"bytes,20,opt,name=network,proto3" json:"network,omitempty"`
// volume_ids are the bound volumes to attach after root and seed, in this
// order — the first is /dev/vdc. Every id names a VolumeSpec in the same
// snapshot.
VolumeIds []string `protobuf:"bytes,21,rep,name=volume_ids,json=volumeIds,proto3" json:"volume_ids,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *VMSpec) Reset() {
*x = VMSpec{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *VMSpec) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*VMSpec) ProtoMessage() {}
func (x *VMSpec) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[9]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use VMSpec.ProtoReflect.Descriptor instead.
func (*VMSpec) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{9}
}
func (x *VMSpec) GetVmId() string {
if x != nil {
return x.VmId
}
return ""
}
func (x *VMSpec) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *VMSpec) GetImageUrl() string {
if x != nil {
return x.ImageUrl
}
return ""
}
func (x *VMSpec) GetImageSha256() string {
if x != nil {
return x.ImageSha256
}
return ""
}
func (x *VMSpec) GetCloudInit() string {
if x != nil {
return x.CloudInit
}
return ""
}
func (x *VMSpec) GetVcpus() int64 {
if x != nil {
return x.Vcpus
}
return 0
}
func (x *VMSpec) GetMemMb() int64 {
if x != nil {
return x.MemMb
}
return 0
}
func (x *VMSpec) GetDiskGb() int64 {
if x != nil {
return x.DiskGb
}
return 0
}
func (x *VMSpec) GetPersistent() bool {
if x != nil {
return x.Persistent
}
return false
}
func (x *VMSpec) GetPowerState() string {
if x != nil {
return x.PowerState
}
return ""
}
func (x *VMSpec) GetTombstoned() bool {
if x != nil {
return x.Tombstoned
}
return false
}
func (x *VMSpec) GetSshAuthorizedKey() string {
if x != nil {
return x.SshAuthorizedKey
}
return ""
}
func (x *VMSpec) GetSshHostCert() string {
if x != nil {
return x.SshHostCert
}
return ""
}
func (x *VMSpec) GetSshUserCaAuthorizedKeys() []string {
if x != nil {
return x.SshUserCaAuthorizedKeys
}
return nil
}
func (x *VMSpec) GetHostCertRequired() bool {
if x != nil {
return x.HostCertRequired
}
return false
}
func (x *VMSpec) GetNetwork() string {
if x != nil {
return x.Network
}
return ""
}
func (x *VMSpec) GetVolumeIds() []string {
if x != nil {
return x.VolumeIds
}
return nil
}
// Snapshot is the FULL spec for one host; the agent converges toward it.
type Snapshot struct {
state protoimpl.MessageState `protogen:"open.v1"`
Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // agents refuse epoch < highest seen
Vms []*VMSpec `protobuf:"bytes,2,rep,name=vms,proto3" json:"vms,omitempty"` // FULL set for this host, including tombstoned
AgentUpgrade *AgentUpgrade `protobuf:"bytes,3,opt,name=agent_upgrade,json=agentUpgrade,proto3" json:"agent_upgrade,omitempty"` // optional operator-initiated agent self-upgrade
Exposures []*ExposureSpec `protobuf:"bytes,4,rep,name=exposures,proto3" json:"exposures,omitempty"` // FULL set for this host
Volumes []*VolumeSpec `protobuf:"bytes,5,rep,name=volumes,proto3" json:"volumes,omitempty"` // FULL set for this host
// min_agent_version is the lowest agent release that understands every
// field in this snapshot. An agent below it fails every VM here with a
// legible reason rather than materialising a spec it only half-reads.
// Empty means no floor. Agents from before this field ignore it.
MinAgentVersion string `protobuf:"bytes,6,opt,name=min_agent_version,json=minAgentVersion,proto3" json:"min_agent_version,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *Snapshot) Reset() {
*x = Snapshot{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *Snapshot) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Snapshot) ProtoMessage() {}
func (x *Snapshot) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[10]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Snapshot.ProtoReflect.Descriptor instead.
func (*Snapshot) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{10}
}
func (x *Snapshot) GetEpoch() uint64 {
if x != nil {
return x.Epoch
}
return 0
}
func (x *Snapshot) GetVms() []*VMSpec {
if x != nil {
return x.Vms
}
return nil
}
func (x *Snapshot) GetAgentUpgrade() *AgentUpgrade {
if x != nil {
return x.AgentUpgrade
}
return nil
}
func (x *Snapshot) GetExposures() []*ExposureSpec {
if x != nil {
return x.Exposures
}
return nil
}
func (x *Snapshot) GetVolumes() []*VolumeSpec {
if x != nil {
return x.Volumes
}
return nil
}
func (x *Snapshot) GetMinAgentVersion() string {
if x != nil {
return x.MinAgentVersion
}
return ""
}
// AgentUpgrade asks the agent to replace its own binary: download url, verify
// sha256, swap atomically (keeping .prev), re-exec. Present only on hosts an
// operator explicitly clicked; absent otherwise. An agent already running
// version treats it as a no-op.
type AgentUpgrade struct {
state protoimpl.MessageState `protogen:"open.v1"`
Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` // target version (matches Hello facts.agent_version when done)
Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` // artifact URL (https, from the release manifest)
Sha256 string `protobuf:"bytes,3,opt,name=sha256,proto3" json:"sha256,omitempty"` // artifact sha256 (hex)
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AgentUpgrade) Reset() {
*x = AgentUpgrade{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AgentUpgrade) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AgentUpgrade) ProtoMessage() {}
func (x *AgentUpgrade) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[11]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AgentUpgrade.ProtoReflect.Descriptor instead.
func (*AgentUpgrade) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{11}
}
func (x *AgentUpgrade) GetVersion() string {
if x != nil {
return x.Version
}
return ""
}
func (x *AgentUpgrade) GetUrl() string {
if x != nil {
return x.Url
}
return ""
}
func (x *AgentUpgrade) GetSha256() string {
if x != nil {
return x.Sha256
}
return ""
}
// ConsoleOpen is the first frame on a server-initiated console stream: it names
// the VM whose serial console the stream should bridge. After the agent's
// ConsoleOpened reply, the stream carries RAW serial bytes (no framing).
type ConsoleOpen struct {
state protoimpl.MessageState `protogen:"open.v1"`
VmId string `protobuf:"bytes,1,opt,name=vm_id,json=vmId,proto3" json:"vm_id,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ConsoleOpen) Reset() {
*x = ConsoleOpen{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ConsoleOpen) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConsoleOpen) ProtoMessage() {}
func (x *ConsoleOpen) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[12]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ConsoleOpen.ProtoReflect.Descriptor instead.
func (*ConsoleOpen) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{12}
}
func (x *ConsoleOpen) GetVmId() string {
if x != nil {
return x.VmId
}
return ""
}
// ConsoleOpened is the agent's reply on the console stream. ok=false carries a
// human-readable error (unknown VM, VM not running, console unsupported) and
// the stream is then closed by the agent.
type ConsoleOpened struct {
state protoimpl.MessageState `protogen:"open.v1"`
Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"`
Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ConsoleOpened) Reset() {
*x = ConsoleOpened{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ConsoleOpened) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConsoleOpened) ProtoMessage() {}
func (x *ConsoleOpened) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[13]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ConsoleOpened.ProtoReflect.Descriptor instead.
func (*ConsoleOpened) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{13}
}
func (x *ConsoleOpened) GetOk() bool {
if x != nil {
return x.Ok
}
return false
}
func (x *ConsoleOpened) GetError() string {
if x != nil {
return x.Error
}
return ""
}
// TCPOpen is the first frame on a server-initiated tunnel stream: it names the
// VM and the guest TCP port the stream should bridge to. After the agent's
// TCPOpened reply, the stream carries RAW TCP bytes (no framing).
type TCPOpen struct {
state protoimpl.MessageState `protogen:"open.v1"`
VmId string `protobuf:"bytes,1,opt,name=vm_id,json=vmId,proto3" json:"vm_id,omitempty"`
Port uint32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *TCPOpen) Reset() {
*x = TCPOpen{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *TCPOpen) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TCPOpen) ProtoMessage() {}
func (x *TCPOpen) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[14]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TCPOpen.ProtoReflect.Descriptor instead.
func (*TCPOpen) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{14}
}
func (x *TCPOpen) GetVmId() string {
if x != nil {
return x.VmId
}
return ""
}
func (x *TCPOpen) GetPort() uint32 {
if x != nil {
return x.Port
}
return 0
}
// TCPOpened is the agent's reply on the tunnel stream. ok=false carries a
// human-readable error (unknown VM, VM not running, dial refused) and the
// stream is then closed by the agent.
type TCPOpened struct {
state protoimpl.MessageState `protogen:"open.v1"`
Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"`
Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *TCPOpened) Reset() {
*x = TCPOpened{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *TCPOpened) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TCPOpened) ProtoMessage() {}
func (x *TCPOpened) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[15]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TCPOpened.ProtoReflect.Descriptor instead.
func (*TCPOpened) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{15}
}
func (x *TCPOpened) GetOk() bool {
if x != nil {
return x.Ok
}
return false
}
func (x *TCPOpened) GetError() string {
if x != nil {
return x.Error
}
return ""
}
// ExposureSpec is one published guest port a host should be serving: bind
// host_port on the host, pipe every accepted connection (or every datagram)
// to guest_port inside the guest. It rides the snapshot at TOP LEVEL rather
// than nested in VMSpec, because exposures are their own objects converging
// on their own cadence — an exposure can be created while its VM is still
// imaging, and it binds immediately.
type ExposureSpec struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
VmId string `protobuf:"bytes,2,opt,name=vm_id,json=vmId,proto3" json:"vm_id,omitempty"`
GuestPort uint32 `protobuf:"varint,3,opt,name=guest_port,json=guestPort,proto3" json:"guest_port,omitempty"`
HostPort uint32 `protobuf:"varint,4,opt,name=host_port,json=hostPort,proto3" json:"host_port,omitempty"`
Protocol string `protobuf:"bytes,5,opt,name=protocol,proto3" json:"protocol,omitempty"` // "tcp"|"udp"
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ExposureSpec) Reset() {
*x = ExposureSpec{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ExposureSpec) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ExposureSpec) ProtoMessage() {}
func (x *ExposureSpec) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[16]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ExposureSpec.ProtoReflect.Descriptor instead.
func (*ExposureSpec) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{16}
}
func (x *ExposureSpec) GetId() string {
if x != nil {
return x.Id
}
return ""
}
func (x *ExposureSpec) GetVmId() string {
if x != nil {
return x.VmId
}
return ""
}
func (x *ExposureSpec) GetGuestPort() uint32 {
if x != nil {
return x.GuestPort
}
return 0
}
func (x *ExposureSpec) GetHostPort() uint32 {
if x != nil {
return x.HostPort
}
return 0
}
func (x *ExposureSpec) GetProtocol() string {
if x != nil {
return x.Protocol
}
return ""
}
// ExposureStatus is one exposure's state as its host observes it: "active"
// once the host socket is bound, "failed" with the OS error otherwise.
// "active" means the HOST half of the pipe exists — whether anything answers
// inside the guest is the guest's half, and this does not pretend otherwise.
type ExposureStatus struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` // "active"|"failed"
Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // the OS error, when failed; a bound port's ongoing trouble otherwise
Sessions *ExposureSessions `protobuf:"bytes,4,opt,name=sessions,proto3" json:"sessions,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ExposureStatus) Reset() {
*x = ExposureStatus{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ExposureStatus) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ExposureStatus) ProtoMessage() {}
func (x *ExposureStatus) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[17]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ExposureStatus.ProtoReflect.Descriptor instead.
func (*ExposureStatus) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{17}
}
func (x *ExposureStatus) GetId() string {
if x != nil {
return x.Id
}
return ""
}
func (x *ExposureStatus) GetState() string {
if x != nil {
return x.State
}
return ""
}
func (x *ExposureStatus) GetReason() string {
if x != nil {
return x.Reason
}
return ""
}
func (x *ExposureStatus) GetSessions() *ExposureSessions {
if x != nil {
return x.Sessions
}
return nil
}
// ExposureSessions is what one published port has carried since the agent
// serving it started: what it holds this instant, and what it has turned away
// or could not carry along the way.
//
// The two totals only ever go up, deliberately. Loss on a published port is
// intermittent — a burst at the cap, a guest that went away for a second — and
// a gauge sampled once per report would show a clean zero for every one of
// those bursts, which reads as a port with nothing wrong. A running total
// cannot hide a burst it has already counted.
//
// A MESSAGE rather than three scalars beside the state, so that its absence is
// readable. An agent that predates these counters reports none, which is not
// the same fact as an exposure that has counted zero; the console says nothing
// rather than presenting a zero it was never told.
type ExposureSessions struct {
state protoimpl.MessageState `protogen:"open.v1"`
// active is what the port holds right now — spliced TCP connections, or live
// UDP client sessions. The one gauge here, and the only number that goes down.
Active int64 `protobuf:"varint,1,opt,name=active,proto3" json:"active,omitempty"`
// refused counts callers turned away because the port was already at its cap:
// a TCP connection accepted and closed, a UDP datagram dropped without
// starting a session.
Refused int64 `protobuf:"varint,2,opt,name=refused,proto3" json:"refused,omitempty"`
// dropped counts conversations this host could not carry to the guest — no
// guest address yet, a dial the guest refused, a datagram that would not send
// — as opposed to ones the cap refused.
Dropped int64 `protobuf:"varint,3,opt,name=dropped,proto3" json:"dropped,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ExposureSessions) Reset() {
*x = ExposureSessions{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ExposureSessions) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ExposureSessions) ProtoMessage() {}
func (x *ExposureSessions) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[18]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ExposureSessions.ProtoReflect.Descriptor instead.
func (*ExposureSessions) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{18}
}
func (x *ExposureSessions) GetActive() int64 {
if x != nil {
return x.Active
}
return 0
}
func (x *ExposureSessions) GetRefused() int64 {
if x != nil {
return x.Refused
}
return 0
}
func (x *ExposureSessions) GetDropped() int64 {
if x != nil {
return x.Dropped
}
return 0
}
// VolumeSpec is one volume the control plane has placed on this host. The
// agent keeps a sparse raw file for it at volumes/<volume_id>/disk.raw, beside
// vms/ and never inside a VM's directory: a VM's directory dies with the VM,
// a volume's does not. Snapshot.volumes is the FULL set for the host.
type VolumeSpec struct {
state protoimpl.MessageState `protogen:"open.v1"`
VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
SizeGb int64 `protobuf:"varint,2,opt,name=size_gb,json=sizeGb,proto3" json:"size_gb,omitempty"`
Tombstoned bool `protobuf:"varint,3,opt,name=tombstoned,proto3" json:"tombstoned,omitempty"` // delete the file after grace; set only once no VM references it
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *VolumeSpec) Reset() {
*x = VolumeSpec{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *VolumeSpec) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*VolumeSpec) ProtoMessage() {}
func (x *VolumeSpec) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[19]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use VolumeSpec.ProtoReflect.Descriptor instead.
func (*VolumeSpec) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{19}
}
func (x *VolumeSpec) GetVolumeId() string {
if x != nil {
return x.VolumeId
}
return ""
}
func (x *VolumeSpec) GetSizeGb() int64 {
if x != nil {
return x.SizeGb
}
return 0
}
func (x *VolumeSpec) GetTombstoned() bool {
if x != nil {
return x.Tombstoned
}
return false
}
// VolumeStatus is what the host found on its disk for one volume id —
// including ids the snapshot did not name, which are reported and kept.
type VolumeStatus struct {
state protoimpl.MessageState `protogen:"open.v1"`
VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"`
Present bool `protobuf:"varint,2,opt,name=present,proto3" json:"present,omitempty"`
SizeGb int64 `protobuf:"varint,3,opt,name=size_gb,json=sizeGb,proto3" json:"size_gb,omitempty"` // as found, not as asked: a guest filesystem sits on it, so it is never resized
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *VolumeStatus) Reset() {
*x = VolumeStatus{}
mi := &file_proto_eitri_v1_sync_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *VolumeStatus) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*VolumeStatus) ProtoMessage() {}
func (x *VolumeStatus) ProtoReflect() protoreflect.Message {
mi := &file_proto_eitri_v1_sync_proto_msgTypes[20]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use VolumeStatus.ProtoReflect.Descriptor instead.
func (*VolumeStatus) Descriptor() ([]byte, []int) {
return file_proto_eitri_v1_sync_proto_rawDescGZIP(), []int{20}
}
func (x *VolumeStatus) GetVolumeId() string {
if x != nil {
return x.VolumeId
}
return ""
}
func (x *VolumeStatus) GetPresent() bool {
if x != nil {
return x.Present
}
return false
}
func (x *VolumeStatus) GetSizeGb() int64 {
if x != nil {
return x.SizeGb
}
return 0
}
var File_proto_eitri_v1_sync_proto protoreflect.FileDescriptor
const file_proto_eitri_v1_sync_proto_rawDesc = "" +
"\n" +
"\x19proto/eitri/v1/sync.proto\x12\beitri.v1\"\xe2\x01\n" +
"\fAgentMessage\x12'\n" +
"\x05hello\x18\x01 \x01(\v2\x0f.eitri.v1.HelloH\x00R\x05hello\x12*\n" +
"\x06report\x18\x02 \x01(\v2\x10.eitri.v1.ReportH\x00R\x06report\x12@\n" +
"\x0econsole_opened\x18\x03 \x01(\v2\x17.eitri.v1.ConsoleOpenedH\x00R\rconsoleOpened\x124\n" +
"\n" +
"tcp_opened\x18\x04 \x01(\v2\x13.eitri.v1.TCPOpenedH\x00R\ttcpOpenedB\x05\n" +
"\x03msg\"\xb4\x01\n" +
"\rServerMessage\x120\n" +
"\bsnapshot\x18\x01 \x01(\v2\x12.eitri.v1.SnapshotH\x00R\bsnapshot\x12:\n" +
"\fconsole_open\x18\x02 \x01(\v2\x15.eitri.v1.ConsoleOpenH\x00R\vconsoleOpen\x12.\n" +
"\btcp_open\x18\x03 \x01(\v2\x11.eitri.v1.TCPOpenH\x00R\atcpOpenB\x05\n" +
"\x03msg\"\xdd\x02\n" +
"\x05Hello\x12\x17\n" +
"\ahost_id\x18\x01 \x01(\tR\x06hostId\x12\x1a\n" +
"\bhostname\x18\x02 \x01(\tR\bhostname\x12\x0e\n" +
"\x02os\x18\x03 \x01(\tR\x02os\x12\x12\n" +
"\x04arch\x18\x04 \x01(\tR\x04arch\x12 \n" +
"\vprovisioner\x18\x05 \x01(\tR\vprovisioner\x12&\n" +
"\x0flast_seen_epoch\x18\a \x01(\x04R\rlastSeenEpoch\x12.\n" +
"\bcapacity\x18\b \x01(\v2\x12.eitri.v1.CapacityR\bcapacity\x12\x1e\n" +
"\n" +
"credential\x18\t \x01(\tR\n" +
"credential\x12)\n" +
"\x05facts\x18\n" +
" \x01(\v2\x13.eitri.v1.HostFactsR\x05facts\x12#\n" +
"\rhost_networks\x18\v \x03(\tR\fhostNetworksJ\x04\b\x06\x10\aR\vbridge_cidr\"P\n" +
"\bCapacity\x12\x14\n" +
"\x05vcpus\x18\x01 \x01(\x03R\x05vcpus\x12\x15\n" +
"\x06mem_mb\x18\x02 \x01(\x03R\x05memMb\x12\x17\n" +
"\adisk_gb\x18\x03 \x01(\x03R\x06diskGb\"\xca\x01\n" +
"\tHostFacts\x12\x13\n" +
"\x05os_id\x18\x01 \x01(\tR\x04osId\x12\x1b\n" +
"\tos_pretty\x18\x02 \x01(\tR\bosPretty\x12\x1d\n" +
"\n" +
"os_version\x18\x03 \x01(\tR\tosVersion\x12\x16\n" +
"\x06kernel\x18\x04 \x01(\tR\x06kernel\x12\x1b\n" +
"\tcpu_model\x18\x05 \x01(\tR\bcpuModel\x12\x12\n" +
"\x04virt\x18\x06 \x01(\tR\x04virt\x12#\n" +
"\ragent_version\x18\a \x01(\tR\fagentVersion\"\xfa\x01\n" +
"\vHostMetrics\x12\x19\n" +
"\buptime_s\x18\x01 \x01(\x03R\auptimeS\x12\x1e\n" +
"\vmem_used_mb\x18\x02 \x01(\x03R\tmemUsedMb\x12(\n" +
"\x10mem_available_mb\x18\x03 \x01(\x03R\x0ememAvailableMb\x12\x14\n" +
"\x05load1\x18\x04 \x01(\x01R\x05load1\x12\x14\n" +
"\x05load5\x18\x05 \x01(\x01R\x05load5\x12\x16\n" +
"\x06load15\x18\x06 \x01(\x01R\x06load15\x12 \n" +
"\fdisk_used_gb\x18\a \x01(\x03R\n" +
"diskUsedGb\x12 \n" +
"\fdisk_free_gb\x18\b \x01(\x03R\n" +
"diskFreeGb\"\xf1\x01\n" +
"\bVMStatus\x12\x13\n" +
"\x05vm_id\x18\x01 \x01(\tR\x04vmId\x12\x1f\n" +
"\vpower_state\x18\x02 \x01(\tR\n" +
"powerState\x12\x14\n" +
"\x05phase\x18\x03 \x01(\tR\x05phase\x12\x0e\n" +
"\x02ip\x18\x04 \x01(\tR\x02ip\x12\x1d\n" +
"\n" +
"last_error\x18\x05 \x01(\tR\tlastError\x12&\n" +
"\x0fssh_host_pubkey\x18\x06 \x01(\tR\rsshHostPubkey\x12#\n" +
"\rstatus_detail\x18\a \x01(\tR\fstatusDetail\x12\x1d\n" +
"\n" +
"network_ip\x18\b \x01(\tR\tnetworkIp\"\x81\x01\n" +
"\rQuarantinedVM\x12\x13\n" +
"\x05vm_id\x18\x01 \x01(\tR\x04vmId\x12\x12\n" +
"\x04name\x18\x02 \x01(\tR\x04name\x12\x1f\n" +
"\vvmspec_json\x18\x03 \x01(\fR\n" +
"vmspecJson\x12&\n" +
"\x0fdestroy_at_unix\x18\x04 \x01(\x03R\rdestroyAtUnix\"\xec\x03\n" +
"\x06Report\x12$\n" +
"\x03vms\x18\x01 \x03(\v2\x12.eitri.v1.VMStatusR\x03vms\x12\x1c\n" +
"\tdestroyed\x18\x02 \x03(\tR\tdestroyed\x129\n" +
"\vquarantined\x18\x03 \x03(\v2\x17.eitri.v1.QuarantinedVMR\vquarantined\x12.\n" +
"\bcapacity\x18\x04 \x01(\v2\x12.eitri.v1.CapacityR\bcapacity\x12'\n" +
"\x0ffence_violation\x18\x05 \x01(\bR\x0efenceViolation\x12&\n" +
"\x0flast_seen_epoch\x18\x06 \x01(\x04R\rlastSeenEpoch\x12/\n" +
"\ametrics\x18\a \x01(\v2\x15.eitri.v1.HostMetricsR\ametrics\x12\x1d\n" +
"\n" +
"guest_cidr\x18\b \x01(\tR\tguestCidr\x126\n" +
"\texposures\x18\t \x03(\v2\x18.eitri.v1.ExposureStatusR\texposures\x12(\n" +
"\x10host_uplink_addr\x18\n" +
" \x01(\tR\x0ehostUplinkAddr\x120\n" +
"\avolumes\x18\v \x03(\v2\x16.eitri.v1.VolumeStatusR\avolumes\"\xd8\x04\n" +
"\x06VMSpec\x12\x13\n" +
"\x05vm_id\x18\x01 \x01(\tR\x04vmId\x12\x12\n" +
"\x04name\x18\x02 \x01(\tR\x04name\x12\x1b\n" +
"\timage_url\x18\x03 \x01(\tR\bimageUrl\x12!\n" +
"\fimage_sha256\x18\x04 \x01(\tR\vimageSha256\x12\x1d\n" +
"\n" +
"cloud_init\x18\x05 \x01(\tR\tcloudInit\x12\x14\n" +
"\x05vcpus\x18\x06 \x01(\x03R\x05vcpus\x12\x15\n" +
"\x06mem_mb\x18\a \x01(\x03R\x05memMb\x12\x17\n" +
"\adisk_gb\x18\b \x01(\x03R\x06diskGb\x12\x1e\n" +
"\n" +
"persistent\x18\t \x01(\bR\n" +
"persistent\x12\x1f\n" +
"\vpower_state\x18\n" +
" \x01(\tR\n" +
"powerState\x12\x1e\n" +
"\n" +
"tombstoned\x18\v \x01(\bR\n" +
"tombstoned\x12,\n" +
"\x12ssh_authorized_key\x18\f \x01(\tR\x10sshAuthorizedKey\x12\"\n" +
"\rssh_host_cert\x18\x11 \x01(\tR\vsshHostCert\x12<\n" +
"\x1bssh_user_ca_authorized_keys\x18\x12 \x03(\tR\x17sshUserCaAuthorizedKeys\x12,\n" +
"\x12host_cert_required\x18\x13 \x01(\bR\x10hostCertRequired\x12\x18\n" +
"\anetwork\x18\x14 \x01(\tR\anetwork\x12\x1d\n" +
"\n" +
"volume_ids\x18\x15 \x03(\tR\tvolumeIdsJ\x04\b\r\x10\x0eJ\x04\b\x0e\x10\x0fJ\x04\b\x0f\x10\x10J\x04\b\x10\x10\x11R\x10ssh_host_key_pem\"\x93\x02\n" +
"\bSnapshot\x12\x14\n" +
"\x05epoch\x18\x01 \x01(\x04R\x05epoch\x12\"\n" +
"\x03vms\x18\x02 \x03(\v2\x10.eitri.v1.VMSpecR\x03vms\x12;\n" +
"\ragent_upgrade\x18\x03 \x01(\v2\x16.eitri.v1.AgentUpgradeR\fagentUpgrade\x124\n" +
"\texposures\x18\x04 \x03(\v2\x16.eitri.v1.ExposureSpecR\texposures\x12.\n" +
"\avolumes\x18\x05 \x03(\v2\x14.eitri.v1.VolumeSpecR\avolumes\x12*\n" +
"\x11min_agent_version\x18\x06 \x01(\tR\x0fminAgentVersion\"R\n" +
"\fAgentUpgrade\x12\x18\n" +
"\aversion\x18\x01 \x01(\tR\aversion\x12\x10\n" +
"\x03url\x18\x02 \x01(\tR\x03url\x12\x16\n" +
"\x06sha256\x18\x03 \x01(\tR\x06sha256\"\"\n" +
"\vConsoleOpen\x12\x13\n" +
"\x05vm_id\x18\x01 \x01(\tR\x04vmId\"5\n" +
"\rConsoleOpened\x12\x0e\n" +
"\x02ok\x18\x01 \x01(\bR\x02ok\x12\x14\n" +
"\x05error\x18\x02 \x01(\tR\x05error\"2\n" +
"\aTCPOpen\x12\x13\n" +
"\x05vm_id\x18\x01 \x01(\tR\x04vmId\x12\x12\n" +
"\x04port\x18\x02 \x01(\rR\x04port\"1\n" +
"\tTCPOpened\x12\x0e\n" +
"\x02ok\x18\x01 \x01(\bR\x02ok\x12\x14\n" +
"\x05error\x18\x02 \x01(\tR\x05error\"\x8b\x01\n" +
"\fExposureSpec\x12\x0e\n" +
"\x02id\x18\x01 \x01(\tR\x02id\x12\x13\n" +
"\x05vm_id\x18\x02 \x01(\tR\x04vmId\x12\x1d\n" +
"\n" +
"guest_port\x18\x03 \x01(\rR\tguestPort\x12\x1b\n" +
"\thost_port\x18\x04 \x01(\rR\bhostPort\x12\x1a\n" +
"\bprotocol\x18\x05 \x01(\tR\bprotocol\"\x86\x01\n" +
"\x0eExposureStatus\x12\x0e\n" +
"\x02id\x18\x01 \x01(\tR\x02id\x12\x14\n" +
"\x05state\x18\x02 \x01(\tR\x05state\x12\x16\n" +
"\x06reason\x18\x03 \x01(\tR\x06reason\x126\n" +
"\bsessions\x18\x04 \x01(\v2\x1a.eitri.v1.ExposureSessionsR\bsessions\"^\n" +
"\x10ExposureSessions\x12\x16\n" +
"\x06active\x18\x01 \x01(\x03R\x06active\x12\x18\n" +
"\arefused\x18\x02 \x01(\x03R\arefused\x12\x18\n" +
"\adropped\x18\x03 \x01(\x03R\adropped\"b\n" +
"\n" +
"VolumeSpec\x12\x1b\n" +
"\tvolume_id\x18\x01 \x01(\tR\bvolumeId\x12\x17\n" +
"\asize_gb\x18\x02 \x01(\x03R\x06sizeGb\x12\x1e\n" +
"\n" +
"tombstoned\x18\x03 \x01(\bR\n" +
"tombstoned\"^\n" +
"\fVolumeStatus\x12\x1b\n" +
"\tvolume_id\x18\x01 \x01(\tR\bvolumeId\x12\x18\n" +
"\apresent\x18\x02 \x01(\bR\apresent\x12\x17\n" +
"\asize_gb\x18\x03 \x01(\x03R\x06sizeGbB&Z$github.com/a73x/eitri/internal/pb;pbb\x06proto3"
var (
file_proto_eitri_v1_sync_proto_rawDescOnce sync.Once
file_proto_eitri_v1_sync_proto_rawDescData []byte
)
func file_proto_eitri_v1_sync_proto_rawDescGZIP() []byte {
file_proto_eitri_v1_sync_proto_rawDescOnce.Do(func() {
file_proto_eitri_v1_sync_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_eitri_v1_sync_proto_rawDesc), len(file_proto_eitri_v1_sync_proto_rawDesc)))
})
return file_proto_eitri_v1_sync_proto_rawDescData
}
var file_proto_eitri_v1_sync_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
var file_proto_eitri_v1_sync_proto_goTypes = []any{
(*AgentMessage)(nil), // 0: eitri.v1.AgentMessage
(*ServerMessage)(nil), // 1: eitri.v1.ServerMessage
(*Hello)(nil), // 2: eitri.v1.Hello
(*Capacity)(nil), // 3: eitri.v1.Capacity
(*HostFacts)(nil), // 4: eitri.v1.HostFacts
(*HostMetrics)(nil), // 5: eitri.v1.HostMetrics
(*VMStatus)(nil), // 6: eitri.v1.VMStatus
(*QuarantinedVM)(nil), // 7: eitri.v1.QuarantinedVM
(*Report)(nil), // 8: eitri.v1.Report
(*VMSpec)(nil), // 9: eitri.v1.VMSpec
(*Snapshot)(nil), // 10: eitri.v1.Snapshot
(*AgentUpgrade)(nil), // 11: eitri.v1.AgentUpgrade
(*ConsoleOpen)(nil), // 12: eitri.v1.ConsoleOpen
(*ConsoleOpened)(nil), // 13: eitri.v1.ConsoleOpened
(*TCPOpen)(nil), // 14: eitri.v1.TCPOpen
(*TCPOpened)(nil), // 15: eitri.v1.TCPOpened
(*ExposureSpec)(nil), // 16: eitri.v1.ExposureSpec
(*ExposureStatus)(nil), // 17: eitri.v1.ExposureStatus
(*ExposureSessions)(nil), // 18: eitri.v1.ExposureSessions
(*VolumeSpec)(nil), // 19: eitri.v1.VolumeSpec
(*VolumeStatus)(nil), // 20: eitri.v1.VolumeStatus
}
var file_proto_eitri_v1_sync_proto_depIdxs = []int32{
2, // 0: eitri.v1.AgentMessage.hello:type_name -> eitri.v1.Hello
8, // 1: eitri.v1.AgentMessage.report:type_name -> eitri.v1.Report
13, // 2: eitri.v1.AgentMessage.console_opened:type_name -> eitri.v1.ConsoleOpened
15, // 3: eitri.v1.AgentMessage.tcp_opened:type_name -> eitri.v1.TCPOpened
10, // 4: eitri.v1.ServerMessage.snapshot:type_name -> eitri.v1.Snapshot
12, // 5: eitri.v1.ServerMessage.console_open:type_name -> eitri.v1.ConsoleOpen
14, // 6: eitri.v1.ServerMessage.tcp_open:type_name -> eitri.v1.TCPOpen
3, // 7: eitri.v1.Hello.capacity:type_name -> eitri.v1.Capacity
4, // 8: eitri.v1.Hello.facts:type_name -> eitri.v1.HostFacts
6, // 9: eitri.v1.Report.vms:type_name -> eitri.v1.VMStatus
7, // 10: eitri.v1.Report.quarantined:type_name -> eitri.v1.QuarantinedVM
3, // 11: eitri.v1.Report.capacity:type_name -> eitri.v1.Capacity
5, // 12: eitri.v1.Report.metrics:type_name -> eitri.v1.HostMetrics
17, // 13: eitri.v1.Report.exposures:type_name -> eitri.v1.ExposureStatus
20, // 14: eitri.v1.Report.volumes:type_name -> eitri.v1.VolumeStatus
9, // 15: eitri.v1.Snapshot.vms:type_name -> eitri.v1.VMSpec
11, // 16: eitri.v1.Snapshot.agent_upgrade:type_name -> eitri.v1.AgentUpgrade
16, // 17: eitri.v1.Snapshot.exposures:type_name -> eitri.v1.ExposureSpec
19, // 18: eitri.v1.Snapshot.volumes:type_name -> eitri.v1.VolumeSpec
18, // 19: eitri.v1.ExposureStatus.sessions:type_name -> eitri.v1.ExposureSessions
20, // [20:20] is the sub-list for method output_type
20, // [20:20] is the sub-list for method input_type
20, // [20:20] is the sub-list for extension type_name
20, // [20:20] is the sub-list for extension extendee
0, // [0:20] is the sub-list for field type_name
}
func init() { file_proto_eitri_v1_sync_proto_init() }
func file_proto_eitri_v1_sync_proto_init() {
if File_proto_eitri_v1_sync_proto != nil {
return
}
file_proto_eitri_v1_sync_proto_msgTypes[0].OneofWrappers = []any{
(*AgentMessage_Hello)(nil),
(*AgentMessage_Report)(nil),
(*AgentMessage_ConsoleOpened)(nil),
(*AgentMessage_TcpOpened)(nil),
}
file_proto_eitri_v1_sync_proto_msgTypes[1].OneofWrappers = []any{
(*ServerMessage_Snapshot)(nil),
(*ServerMessage_ConsoleOpen)(nil),
(*ServerMessage_TcpOpen)(nil),
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_eitri_v1_sync_proto_rawDesc), len(file_proto_eitri_v1_sync_proto_rawDesc)),
NumEnums: 0,
NumMessages: 21,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_proto_eitri_v1_sync_proto_goTypes,
DependencyIndexes: file_proto_eitri_v1_sync_proto_depIdxs,
MessageInfos: file_proto_eitri_v1_sync_proto_msgTypes,
}.Build()
File_proto_eitri_v1_sync_proto = out.File
file_proto_eitri_v1_sync_proto_goTypes = nil
file_proto_eitri_v1_sync_proto_depIdxs = nil
}