diff --git a/doc/index.html b/doc/index.html
index 9ab2327b..c5b12900 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -9928,6 +9928,13 @@
Rack where this machine is located |
+
+ | room |
+ string |
+ |
+ Room where this machine is located |
+
+
| size |
Size |
@@ -11356,6 +11363,13 @@
Rack of the machine to get |
+
+ | room |
+ string |
+ optional |
+ Room of the machine to get |
+
+
| labels |
Labels |
@@ -16873,6 +16887,13 @@
Rack ID if the switch resides in a rack. |
+
+ | room |
+ string |
+ optional |
+ Room ID if the switch resides in a room. |
+
+
| partition |
string |
@@ -17220,6 +17241,13 @@
Rack of the switches to list. |
+
+ | room |
+ string |
+ optional |
+ Room ID if the switch resides in a room. |
+
+
| os |
SwitchOSQuery |
diff --git a/go/metalstack/api/v2/machine.pb.go b/go/metalstack/api/v2/machine.pb.go
index 7ef921c3..174ee722 100644
--- a/go/metalstack/api/v2/machine.pb.go
+++ b/go/metalstack/api/v2/machine.pb.go
@@ -1594,16 +1594,18 @@ type Machine struct {
Partition *Partition `protobuf:"bytes,3,opt,name=partition,proto3" json:"partition,omitempty"`
// Rack where this machine is located
Rack string `protobuf:"bytes,4,opt,name=rack,proto3" json:"rack,omitempty"`
+ // Room where this machine is located
+ Room string `protobuf:"bytes,5,opt,name=room,proto3" json:"room,omitempty"`
// Size of this machine
- Size *Size `protobuf:"bytes,5,opt,name=size,proto3" json:"size,omitempty"`
+ Size *Size `protobuf:"bytes,6,opt,name=size,proto3" json:"size,omitempty"`
// Hardware specs of this machine
- Hardware *MachineHardware `protobuf:"bytes,6,opt,name=hardware,proto3" json:"hardware,omitempty"`
+ Hardware *MachineHardware `protobuf:"bytes,7,opt,name=hardware,proto3" json:"hardware,omitempty"`
// Allocation details
- Allocation *MachineAllocation `protobuf:"bytes,7,opt,name=allocation,proto3" json:"allocation,omitempty"`
+ Allocation *MachineAllocation `protobuf:"bytes,8,opt,name=allocation,proto3" json:"allocation,omitempty"`
// Status contains several status details related to this machine
- Status *MachineStatus `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"`
+ Status *MachineStatus `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"`
// MachineRecentProvisioningEvents contains the recent provisioning events
- RecentProvisioningEvents *MachineRecentProvisioningEvents `protobuf:"bytes,9,opt,name=recent_provisioning_events,json=recentProvisioningEvents,proto3" json:"recent_provisioning_events,omitempty"`
+ RecentProvisioningEvents *MachineRecentProvisioningEvents `protobuf:"bytes,10,opt,name=recent_provisioning_events,json=recentProvisioningEvents,proto3" json:"recent_provisioning_events,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@@ -1666,6 +1668,13 @@ func (x *Machine) GetRack() string {
return ""
}
+func (x *Machine) GetRoom() string {
+ if x != nil {
+ return x.Room
+ }
+ return ""
+}
+
func (x *Machine) GetSize() *Size {
if x != nil {
return x.Size
@@ -3577,33 +3586,35 @@ type MachineQuery struct {
Size *string `protobuf:"bytes,4,opt,name=size,proto3,oneof" json:"size,omitempty"`
// Rack of the machine to get
Rack *string `protobuf:"bytes,5,opt,name=rack,proto3,oneof" json:"rack,omitempty"`
+ // Room of the machine to get
+ Room *string `protobuf:"bytes,6,opt,name=room,proto3,oneof" json:"room,omitempty"`
// Labels for which this machine should get filtered
- Labels *Labels `protobuf:"bytes,6,opt,name=labels,proto3,oneof" json:"labels,omitempty"`
+ Labels *Labels `protobuf:"bytes,7,opt,name=labels,proto3,oneof" json:"labels,omitempty"`
// Allocation specific machine queries
- Allocation *MachineAllocationQuery `protobuf:"bytes,7,opt,name=allocation,proto3,oneof" json:"allocation,omitempty"`
+ Allocation *MachineAllocationQuery `protobuf:"bytes,8,opt,name=allocation,proto3,oneof" json:"allocation,omitempty"`
// Network specific machine queries
- Network *MachineNetworkQuery `protobuf:"bytes,8,opt,name=network,proto3,oneof" json:"network,omitempty"`
+ Network *MachineNetworkQuery `protobuf:"bytes,9,opt,name=network,proto3,oneof" json:"network,omitempty"`
// Nic specific machine queries
- Nic *MachineNicQuery `protobuf:"bytes,9,opt,name=nic,proto3,oneof" json:"nic,omitempty"`
+ Nic *MachineNicQuery `protobuf:"bytes,10,opt,name=nic,proto3,oneof" json:"nic,omitempty"`
// Disk specific machine queries
- Disk *MachineDiskQuery `protobuf:"bytes,10,opt,name=disk,proto3,oneof" json:"disk,omitempty"`
+ Disk *MachineDiskQuery `protobuf:"bytes,11,opt,name=disk,proto3,oneof" json:"disk,omitempty"`
// Bmc specific machine queries
- Bmc *MachineBMCQuery `protobuf:"bytes,11,opt,name=bmc,proto3,oneof" json:"bmc,omitempty"`
+ Bmc *MachineBMCQuery `protobuf:"bytes,12,opt,name=bmc,proto3,oneof" json:"bmc,omitempty"`
// Fru specific machine queries
- Fru *MachineFRUQuery `protobuf:"bytes,12,opt,name=fru,proto3,oneof" json:"fru,omitempty"`
+ Fru *MachineFRUQuery `protobuf:"bytes,13,opt,name=fru,proto3,oneof" json:"fru,omitempty"`
// Hardware specific machine query
- Hardware *MachineHardwareQuery `protobuf:"bytes,13,opt,name=hardware,proto3,oneof" json:"hardware,omitempty"`
+ Hardware *MachineHardwareQuery `protobuf:"bytes,14,opt,name=hardware,proto3,oneof" json:"hardware,omitempty"`
// State this machine has
- State *MachineState `protobuf:"varint,14,opt,name=state,proto3,enum=metalstack.api.v2.MachineState,oneof" json:"state,omitempty"`
+ State *MachineState `protobuf:"varint,15,opt,name=state,proto3,enum=metalstack.api.v2.MachineState,oneof" json:"state,omitempty"`
// Waiting if set to true, only waiting machines are returned.
// Only useful for admins.
- Waiting *bool `protobuf:"varint,15,opt,name=waiting,proto3,oneof" json:"waiting,omitempty"`
+ Waiting *bool `protobuf:"varint,16,opt,name=waiting,proto3,oneof" json:"waiting,omitempty"`
// Preallocated if set to true, only machines which are preallocated are returned.
// Only useful for admins.
- Preallocated *bool `protobuf:"varint,16,opt,name=preallocated,proto3,oneof" json:"preallocated,omitempty"`
+ Preallocated *bool `protobuf:"varint,17,opt,name=preallocated,proto3,oneof" json:"preallocated,omitempty"`
// NotAllocated if set to true, only machines which are not allocated are returned.
// Only useful for admins.
- NotAllocated *bool `protobuf:"varint,17,opt,name=not_allocated,json=notAllocated,proto3,oneof" json:"not_allocated,omitempty"`
+ NotAllocated *bool `protobuf:"varint,18,opt,name=not_allocated,json=notAllocated,proto3,oneof" json:"not_allocated,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@@ -3673,6 +3684,13 @@ func (x *MachineQuery) GetRack() string {
return ""
}
+func (x *MachineQuery) GetRoom() string {
+ if x != nil && x.Room != nil {
+ return *x.Room
+ }
+ return ""
+}
+
func (x *MachineQuery) GetLabels() *Labels {
if x != nil {
return x.Labels
@@ -4628,19 +4646,21 @@ const file_metalstack_api_v2_machine_proto_rawDesc = "" +
"\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"s\n" +
"\x1cMachineServiceGetBMCResponse\x12\x1c\n" +
"\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x125\n" +
- "\x03bmc\x18\x02 \x01(\v2#.metalstack.api.v2.MachineBMCReportR\x03bmc\"\x8d\x04\n" +
+ "\x03bmc\x18\x02 \x01(\v2#.metalstack.api.v2.MachineBMCReportR\x03bmc\"\xab\x04\n" +
"\aMachine\x12\x1c\n" +
"\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12+\n" +
"\x04meta\x18\x02 \x01(\v2\x17.metalstack.api.v2.MetaR\x04meta\x12:\n" +
"\tpartition\x18\x03 \x01(\v2\x1c.metalstack.api.v2.PartitionR\tpartition\x12\x1c\n" +
- "\x04rack\x18\x04 \x01(\tB\b\xbaH\x05r\x03\x18\x80\x01R\x04rack\x12+\n" +
- "\x04size\x18\x05 \x01(\v2\x17.metalstack.api.v2.SizeR\x04size\x12>\n" +
- "\bhardware\x18\x06 \x01(\v2\".metalstack.api.v2.MachineHardwareR\bhardware\x12D\n" +
+ "\x04rack\x18\x04 \x01(\tB\b\xbaH\x05r\x03\x18\x80\x01R\x04rack\x12\x1c\n" +
+ "\x04room\x18\x05 \x01(\tB\b\xbaH\x05r\x03\x18\x80\x01R\x04room\x12+\n" +
+ "\x04size\x18\x06 \x01(\v2\x17.metalstack.api.v2.SizeR\x04size\x12>\n" +
+ "\bhardware\x18\a \x01(\v2\".metalstack.api.v2.MachineHardwareR\bhardware\x12D\n" +
"\n" +
- "allocation\x18\a \x01(\v2$.metalstack.api.v2.MachineAllocationR\n" +
+ "allocation\x18\b \x01(\v2$.metalstack.api.v2.MachineAllocationR\n" +
"allocation\x128\n" +
- "\x06status\x18\b \x01(\v2 .metalstack.api.v2.MachineStatusR\x06status\x12p\n" +
- "\x1arecent_provisioning_events\x18\t \x01(\v22.metalstack.api.v2.MachineRecentProvisioningEventsR\x18recentProvisioningEvents\"\xa4\x02\n" +
+ "\x06status\x18\t \x01(\v2 .metalstack.api.v2.MachineStatusR\x06status\x12p\n" +
+ "\x1arecent_provisioning_events\x18\n" +
+ " \x01(\v22.metalstack.api.v2.MachineRecentProvisioningEventsR\x18recentProvisioningEvents\"\xa4\x02\n" +
"\rMachineStatus\x12A\n" +
"\tcondition\x18\x01 \x01(\v2#.metalstack.api.v2.MachineConditionR\tcondition\x12N\n" +
"\tled_state\x18\x02 \x01(\v21.metalstack.api.v2.MachineChassisIdentifyLEDStateR\bledState\x12N\n" +
@@ -4801,36 +4821,37 @@ const file_metalstack_api_v2_machine_proto_rawDesc = "" +
"\x15control_plane_address\x18\x01 \x01(\tR\x13controlPlaneAddress\x12\x19\n" +
"\bauth_key\x18\x02 \x01(\tR\aauthKey\x12\x1c\n" +
"\tconnected\x18\x03 \x01(\bR\tconnected\x12\x1e\n" +
- "\x03ips\x18\x04 \x03(\tB\f\xbaH\t\x92\x01\x06\xc0\xa4\xb3\xb1\x02\x01R\x03ips\"\xc7\b\n" +
+ "\x03ips\x18\x04 \x03(\tB\f\xbaH\t\x92\x01\x06\xc0\xa4\xb3\xb1\x02\x01R\x03ips\"\xf7\b\n" +
"\fMachineQuery\x12!\n" +
"\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12$\n" +
"\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12.\n" +
"\tpartition\x18\x03 \x01(\tB\v\xbaH\br\x06г\xae\xb1\x02\x01H\x02R\tpartition\x88\x01\x01\x12$\n" +
- "\x04size\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04size\x88\x01\x01\x12#\n" +
- "\x04rack\x18\x05 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x04R\x04rack\x88\x01\x01\x126\n" +
- "\x06labels\x18\x06 \x01(\v2\x19.metalstack.api.v2.LabelsH\x05R\x06labels\x88\x01\x01\x12N\n" +
+ "\x04size\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04size\x88\x01\x01\x12$\n" +
+ "\x04rack\x18\x05 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x04R\x04rack\x88\x01\x01\x12$\n" +
+ "\x04room\x18\x06 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x05R\x04room\x88\x01\x01\x126\n" +
+ "\x06labels\x18\a \x01(\v2\x19.metalstack.api.v2.LabelsH\x06R\x06labels\x88\x01\x01\x12N\n" +
"\n" +
- "allocation\x18\a \x01(\v2).metalstack.api.v2.MachineAllocationQueryH\x06R\n" +
+ "allocation\x18\b \x01(\v2).metalstack.api.v2.MachineAllocationQueryH\aR\n" +
"allocation\x88\x01\x01\x12E\n" +
- "\anetwork\x18\b \x01(\v2&.metalstack.api.v2.MachineNetworkQueryH\aR\anetwork\x88\x01\x01\x129\n" +
- "\x03nic\x18\t \x01(\v2\".metalstack.api.v2.MachineNicQueryH\bR\x03nic\x88\x01\x01\x12<\n" +
- "\x04disk\x18\n" +
- " \x01(\v2#.metalstack.api.v2.MachineDiskQueryH\tR\x04disk\x88\x01\x01\x129\n" +
- "\x03bmc\x18\v \x01(\v2\".metalstack.api.v2.MachineBMCQueryH\n" +
- "R\x03bmc\x88\x01\x01\x129\n" +
- "\x03fru\x18\f \x01(\v2\".metalstack.api.v2.MachineFRUQueryH\vR\x03fru\x88\x01\x01\x12H\n" +
- "\bhardware\x18\r \x01(\v2'.metalstack.api.v2.MachineHardwareQueryH\fR\bhardware\x88\x01\x01\x12:\n" +
- "\x05state\x18\x0e \x01(\x0e2\x1f.metalstack.api.v2.MachineStateH\rR\x05state\x88\x01\x01\x12\x1d\n" +
- "\awaiting\x18\x0f \x01(\bH\x0eR\awaiting\x88\x01\x01\x12'\n" +
- "\fpreallocated\x18\x10 \x01(\bH\x0fR\fpreallocated\x88\x01\x01\x12(\n" +
- "\rnot_allocated\x18\x11 \x01(\bH\x10R\fnotAllocated\x88\x01\x01B\a\n" +
+ "\anetwork\x18\t \x01(\v2&.metalstack.api.v2.MachineNetworkQueryH\bR\anetwork\x88\x01\x01\x129\n" +
+ "\x03nic\x18\n" +
+ " \x01(\v2\".metalstack.api.v2.MachineNicQueryH\tR\x03nic\x88\x01\x01\x12<\n" +
+ "\x04disk\x18\v \x01(\v2#.metalstack.api.v2.MachineDiskQueryH\n" +
+ "R\x04disk\x88\x01\x01\x129\n" +
+ "\x03bmc\x18\f \x01(\v2\".metalstack.api.v2.MachineBMCQueryH\vR\x03bmc\x88\x01\x01\x129\n" +
+ "\x03fru\x18\r \x01(\v2\".metalstack.api.v2.MachineFRUQueryH\fR\x03fru\x88\x01\x01\x12H\n" +
+ "\bhardware\x18\x0e \x01(\v2'.metalstack.api.v2.MachineHardwareQueryH\rR\bhardware\x88\x01\x01\x12:\n" +
+ "\x05state\x18\x0f \x01(\x0e2\x1f.metalstack.api.v2.MachineStateH\x0eR\x05state\x88\x01\x01\x12\x1d\n" +
+ "\awaiting\x18\x10 \x01(\bH\x0fR\awaiting\x88\x01\x01\x12'\n" +
+ "\fpreallocated\x18\x11 \x01(\bH\x10R\fpreallocated\x88\x01\x01\x12(\n" +
+ "\rnot_allocated\x18\x12 \x01(\bH\x11R\fnotAllocated\x88\x01\x01B\a\n" +
"\x05_uuidB\a\n" +
"\x05_nameB\f\n" +
"\n" +
"_partitionB\a\n" +
"\x05_sizeB\a\n" +
- "\x05_rackB\t\n" +
+ "\x05_rackB\a\n" +
+ "\x05_roomB\t\n" +
"\a_labelsB\r\n" +
"\v_allocationB\n" +
"\n" +
diff --git a/go/metalstack/api/v2/switch.pb.go b/go/metalstack/api/v2/switch.pb.go
index 430bbdc6..6587aebe 100644
--- a/go/metalstack/api/v2/switch.pb.go
+++ b/go/metalstack/api/v2/switch.pb.go
@@ -267,26 +267,28 @@ type Switch struct {
Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
// Rack ID if the switch resides in a rack.
Rack *string `protobuf:"bytes,4,opt,name=rack,proto3,oneof" json:"rack,omitempty"`
+ // Room ID if the switch resides in a room.
+ Room *string `protobuf:"bytes,5,opt,name=room,proto3,oneof" json:"room,omitempty"`
// Partition the switch belongs to.
- Partition string `protobuf:"bytes,5,opt,name=partition,proto3" json:"partition,omitempty"`
+ Partition string `protobuf:"bytes,6,opt,name=partition,proto3" json:"partition,omitempty"`
// ReplaceMode is used to mark a switch ready for replacement.
- ReplaceMode SwitchReplaceMode `protobuf:"varint,6,opt,name=replace_mode,json=replaceMode,proto3,enum=metalstack.api.v2.SwitchReplaceMode" json:"replace_mode,omitempty"`
+ ReplaceMode SwitchReplaceMode `protobuf:"varint,7,opt,name=replace_mode,json=replaceMode,proto3,enum=metalstack.api.v2.SwitchReplaceMode" json:"replace_mode,omitempty"`
// ManagementIp is the switch's IP for management access.
- ManagementIp string `protobuf:"bytes,7,opt,name=management_ip,json=managementIp,proto3" json:"management_ip,omitempty"`
+ ManagementIp string `protobuf:"bytes,8,opt,name=management_ip,json=managementIp,proto3" json:"management_ip,omitempty"`
// ManagementUser is the user name to use for management access.
- ManagementUser *string `protobuf:"bytes,8,opt,name=management_user,json=managementUser,proto3,oneof" json:"management_user,omitempty"`
+ ManagementUser *string `protobuf:"bytes,9,opt,name=management_user,json=managementUser,proto3,oneof" json:"management_user,omitempty"`
// ConsoleCommand is the command for accessing the switch's console.
- ConsoleCommand *string `protobuf:"bytes,9,opt,name=console_command,json=consoleCommand,proto3,oneof" json:"console_command,omitempty"`
+ ConsoleCommand *string `protobuf:"bytes,10,opt,name=console_command,json=consoleCommand,proto3,oneof" json:"console_command,omitempty"`
// Nics are the front panel ports of the switch.
- Nics []*SwitchNic `protobuf:"bytes,10,rep,name=nics,proto3" json:"nics,omitempty"`
+ Nics []*SwitchNic `protobuf:"bytes,11,rep,name=nics,proto3" json:"nics,omitempty"`
// SwitchOs is the OS running on the switch.
- Os *SwitchOS `protobuf:"bytes,11,opt,name=os,proto3" json:"os,omitempty"`
+ Os *SwitchOS `protobuf:"bytes,12,opt,name=os,proto3" json:"os,omitempty"`
// MachineConnections map machines to the nics they are connected to.
- MachineConnections []*MachineConnection `protobuf:"bytes,12,rep,name=machine_connections,json=machineConnections,proto3" json:"machine_connections,omitempty"`
+ MachineConnections []*MachineConnection `protobuf:"bytes,13,rep,name=machine_connections,json=machineConnections,proto3" json:"machine_connections,omitempty"`
// LastSync contains information about the last heartbeat of the switch.
- LastSync *SwitchSync `protobuf:"bytes,13,opt,name=last_sync,json=lastSync,proto3" json:"last_sync,omitempty"`
+ LastSync *SwitchSync `protobuf:"bytes,14,opt,name=last_sync,json=lastSync,proto3" json:"last_sync,omitempty"`
// LastSyncError contains information about the last unsuccessful heartbeat of the switch.
- LastSyncError *SwitchSync `protobuf:"bytes,14,opt,name=last_sync_error,json=lastSyncError,proto3" json:"last_sync_error,omitempty"`
+ LastSyncError *SwitchSync `protobuf:"bytes,15,opt,name=last_sync_error,json=lastSyncError,proto3" json:"last_sync_error,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@@ -349,6 +351,13 @@ func (x *Switch) GetRack() string {
return ""
}
+func (x *Switch) GetRoom() string {
+ if x != nil && x.Room != nil {
+ return *x.Room
+ }
+ return ""
+}
+
func (x *Switch) GetPartition() string {
if x != nil {
return x.Partition
@@ -857,10 +866,12 @@ type SwitchQuery struct {
Partition *string `protobuf:"bytes,2,opt,name=partition,proto3,oneof" json:"partition,omitempty"`
// Rack of the switches to list.
Rack *string `protobuf:"bytes,3,opt,name=rack,proto3,oneof" json:"rack,omitempty"`
+ // Room ID if the switch resides in a room.
+ Room *string `protobuf:"bytes,4,opt,name=room,proto3,oneof" json:"room,omitempty"`
// Switch OS specific queries.
- Os *SwitchOSQuery `protobuf:"bytes,4,opt,name=os,proto3,oneof" json:"os,omitempty"`
+ Os *SwitchOSQuery `protobuf:"bytes,5,opt,name=os,proto3,oneof" json:"os,omitempty"`
// ConnectedMachineID lists the switches which have the given machine id in the connected machines map.
- ConnectedMachineId *string `protobuf:"bytes,5,opt,name=connected_machine_id,json=connectedMachineId,proto3,oneof" json:"connected_machine_id,omitempty"`
+ ConnectedMachineId *string `protobuf:"bytes,6,opt,name=connected_machine_id,json=connectedMachineId,proto3,oneof" json:"connected_machine_id,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@@ -916,6 +927,13 @@ func (x *SwitchQuery) GetRack() string {
return ""
}
+func (x *SwitchQuery) GetRoom() string {
+ if x != nil && x.Room != nil {
+ return *x.Room
+ }
+ return ""
+}
+
func (x *SwitchQuery) GetOs() *SwitchOSQuery {
if x != nil {
return x.Os
@@ -1190,27 +1208,29 @@ var File_metalstack_api_v2_switch_proto protoreflect.FileDescriptor
const file_metalstack_api_v2_switch_proto_rawDesc = "" +
"\n" +
- "\x1emetalstack/api/v2/switch.proto\x12\x11metalstack.api.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/machine.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xb3\x06\n" +
+ "\x1emetalstack/api/v2/switch.proto\x12\x11metalstack.api.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/machine.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xe2\x06\n" +
"\x06Switch\x12\x1d\n" +
"\x02id\x18\x01 \x01(\tB\r\xbaH\n" +
"r\b\xc0\xb3\xae\xb1\x02\x01h\x01R\x02id\x12+\n" +
"\x04meta\x18\x02 \x01(\v2\x17.metalstack.api.v2.MetaR\x04meta\x12-\n" +
"\vdescription\x18\x03 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01R\vdescription\x12$\n" +
- "\x04rack\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04rack\x88\x01\x01\x12)\n" +
- "\tpartition\x18\x05 \x01(\tB\v\xbaH\br\x06г\xae\xb1\x02\x01R\tpartition\x12Q\n" +
- "\freplace_mode\x18\x06 \x01(\x0e2$.metalstack.api.v2.SwitchReplaceModeB\b\xbaH\x05\x82\x01\x02\x10\x01R\vreplaceMode\x12,\n" +
- "\rmanagement_ip\x18\a \x01(\tB\a\xbaH\x04r\x02p\x01R\fmanagementIp\x128\n" +
- "\x0fmanagement_user\x18\b \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x01R\x0emanagementUser\x88\x01\x01\x128\n" +
- "\x0fconsole_command\x18\t \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x02R\x0econsoleCommand\x88\x01\x01\x120\n" +
- "\x04nics\x18\n" +
- " \x03(\v2\x1c.metalstack.api.v2.SwitchNicR\x04nics\x12+\n" +
- "\x02os\x18\v \x01(\v2\x1b.metalstack.api.v2.SwitchOSR\x02os\x12U\n" +
- "\x13machine_connections\x18\f \x03(\v2$.metalstack.api.v2.MachineConnectionR\x12machineConnections\x12:\n" +
- "\tlast_sync\x18\r \x01(\v2\x1d.metalstack.api.v2.SwitchSyncR\blastSync\x12E\n" +
- "\x0flast_sync_error\x18\x0e \x01(\v2\x1d.metalstack.api.v2.SwitchSyncR\rlastSyncErrorB\a\n" +
- "\x05_rackB\x12\n" +
+ "\x04rack\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04rack\x88\x01\x01\x12$\n" +
+ "\x04room\x18\x05 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04room\x88\x01\x01\x12)\n" +
+ "\tpartition\x18\x06 \x01(\tB\v\xbaH\br\x06г\xae\xb1\x02\x01R\tpartition\x12Q\n" +
+ "\freplace_mode\x18\a \x01(\x0e2$.metalstack.api.v2.SwitchReplaceModeB\b\xbaH\x05\x82\x01\x02\x10\x01R\vreplaceMode\x12,\n" +
+ "\rmanagement_ip\x18\b \x01(\tB\a\xbaH\x04r\x02p\x01R\fmanagementIp\x128\n" +
+ "\x0fmanagement_user\x18\t \x01(\tB\n" +
+ "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x02R\x0emanagementUser\x88\x01\x01\x128\n" +
+ "\x0fconsole_command\x18\n" +
+ " \x01(\tB\n" +
+ "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x03R\x0econsoleCommand\x88\x01\x01\x120\n" +
+ "\x04nics\x18\v \x03(\v2\x1c.metalstack.api.v2.SwitchNicR\x04nics\x12+\n" +
+ "\x02os\x18\f \x01(\v2\x1b.metalstack.api.v2.SwitchOSR\x02os\x12U\n" +
+ "\x13machine_connections\x18\r \x03(\v2$.metalstack.api.v2.MachineConnectionR\x12machineConnections\x12:\n" +
+ "\tlast_sync\x18\x0e \x01(\v2\x1d.metalstack.api.v2.SwitchSyncR\blastSync\x12E\n" +
+ "\x0flast_sync_error\x18\x0f \x01(\v2\x1d.metalstack.api.v2.SwitchSyncR\rlastSyncErrorB\a\n" +
+ "\x05_rackB\a\n" +
+ "\x05_roomB\x12\n" +
"\x10_management_userB\x12\n" +
"\x10_console_command\"\xb1\x01\n" +
"\bSwitchOS\x12C\n" +
@@ -1252,18 +1272,20 @@ const file_metalstack_api_v2_switch_proto_rawDesc = "" +
"\x11MachineConnection\x12\x1d\n" +
"\n" +
"machine_id\x18\x01 \x01(\tR\tmachineId\x12.\n" +
- "\x03nic\x18\x02 \x01(\v2\x1c.metalstack.api.v2.SwitchNicR\x03nic\"\xbd\x02\n" +
+ "\x03nic\x18\x02 \x01(\v2\x1c.metalstack.api.v2.SwitchNicR\x03nic\"\xec\x02\n" +
"\vSwitchQuery\x12\"\n" +
"\x02id\x18\x01 \x01(\tB\r\xbaH\n" +
"r\b\xc0\xb3\xae\xb1\x02\x01h\x01H\x00R\x02id\x88\x01\x01\x12.\n" +
"\tpartition\x18\x02 \x01(\tB\v\xbaH\br\x06г\xae\xb1\x02\x01H\x01R\tpartition\x88\x01\x01\x12$\n" +
- "\x04rack\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x02R\x04rack\x88\x01\x01\x125\n" +
- "\x02os\x18\x04 \x01(\v2 .metalstack.api.v2.SwitchOSQueryH\x03R\x02os\x88\x01\x01\x12?\n" +
- "\x14connected_machine_id\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x04R\x12connectedMachineId\x88\x01\x01B\x05\n" +
+ "\x04rack\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x02R\x04rack\x88\x01\x01\x12$\n" +
+ "\x04room\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04room\x88\x01\x01\x125\n" +
+ "\x02os\x18\x05 \x01(\v2 .metalstack.api.v2.SwitchOSQueryH\x04R\x02os\x88\x01\x01\x12?\n" +
+ "\x14connected_machine_id\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x05R\x12connectedMachineId\x88\x01\x01B\x05\n" +
"\x03_idB\f\n" +
"\n" +
"_partitionB\a\n" +
- "\x05_rackB\x05\n" +
+ "\x05_rackB\a\n" +
+ "\x05_roomB\x05\n" +
"\x03_osB\x17\n" +
"\x15_connected_machine_id\"\x9c\x01\n" +
"\rSwitchOSQuery\x12H\n" +
diff --git a/js/metalstack/api/v2/machine_pb.d.ts b/js/metalstack/api/v2/machine_pb.d.ts
index 1ca05c22..273ffc3d 100644
--- a/js/metalstack/api/v2/machine_pb.d.ts
+++ b/js/metalstack/api/v2/machine_pb.d.ts
@@ -490,34 +490,40 @@ export type Machine = Message<"metalstack.api.v2.Machine"> & {
* @generated from field: string rack = 4;
*/
rack: string;
+ /**
+ * Room where this machine is located
+ *
+ * @generated from field: string room = 5;
+ */
+ room: string;
/**
* Size of this machine
*
- * @generated from field: metalstack.api.v2.Size size = 5;
+ * @generated from field: metalstack.api.v2.Size size = 6;
*/
size?: Size | undefined;
/**
* Hardware specs of this machine
*
- * @generated from field: metalstack.api.v2.MachineHardware hardware = 6;
+ * @generated from field: metalstack.api.v2.MachineHardware hardware = 7;
*/
hardware?: MachineHardware | undefined;
/**
* Allocation details
*
- * @generated from field: metalstack.api.v2.MachineAllocation allocation = 7;
+ * @generated from field: metalstack.api.v2.MachineAllocation allocation = 8;
*/
allocation?: MachineAllocation | undefined;
/**
* Status contains several status details related to this machine
*
- * @generated from field: metalstack.api.v2.MachineStatus status = 8;
+ * @generated from field: metalstack.api.v2.MachineStatus status = 9;
*/
status?: MachineStatus | undefined;
/**
* MachineRecentProvisioningEvents contains the recent provisioning events
*
- * @generated from field: metalstack.api.v2.MachineRecentProvisioningEvents recent_provisioning_events = 9;
+ * @generated from field: metalstack.api.v2.MachineRecentProvisioningEvents recent_provisioning_events = 10;
*/
recentProvisioningEvents?: MachineRecentProvisioningEvents | undefined;
};
@@ -1517,79 +1523,85 @@ export type MachineQuery = Message<"metalstack.api.v2.MachineQuery"> & {
* @generated from field: optional string rack = 5;
*/
rack?: string | undefined;
+ /**
+ * Room of the machine to get
+ *
+ * @generated from field: optional string room = 6;
+ */
+ room?: string | undefined;
/**
* Labels for which this machine should get filtered
*
- * @generated from field: optional metalstack.api.v2.Labels labels = 6;
+ * @generated from field: optional metalstack.api.v2.Labels labels = 7;
*/
labels?: Labels | undefined;
/**
* Allocation specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineAllocationQuery allocation = 7;
+ * @generated from field: optional metalstack.api.v2.MachineAllocationQuery allocation = 8;
*/
allocation?: MachineAllocationQuery | undefined;
/**
* Network specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineNetworkQuery network = 8;
+ * @generated from field: optional metalstack.api.v2.MachineNetworkQuery network = 9;
*/
network?: MachineNetworkQuery | undefined;
/**
* Nic specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineNicQuery nic = 9;
+ * @generated from field: optional metalstack.api.v2.MachineNicQuery nic = 10;
*/
nic?: MachineNicQuery | undefined;
/**
* Disk specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineDiskQuery disk = 10;
+ * @generated from field: optional metalstack.api.v2.MachineDiskQuery disk = 11;
*/
disk?: MachineDiskQuery | undefined;
/**
* Bmc specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineBMCQuery bmc = 11;
+ * @generated from field: optional metalstack.api.v2.MachineBMCQuery bmc = 12;
*/
bmc?: MachineBMCQuery | undefined;
/**
* Fru specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineFRUQuery fru = 12;
+ * @generated from field: optional metalstack.api.v2.MachineFRUQuery fru = 13;
*/
fru?: MachineFRUQuery | undefined;
/**
* Hardware specific machine query
*
- * @generated from field: optional metalstack.api.v2.MachineHardwareQuery hardware = 13;
+ * @generated from field: optional metalstack.api.v2.MachineHardwareQuery hardware = 14;
*/
hardware?: MachineHardwareQuery | undefined;
/**
* State this machine has
*
- * @generated from field: optional metalstack.api.v2.MachineState state = 14;
+ * @generated from field: optional metalstack.api.v2.MachineState state = 15;
*/
state?: MachineState | undefined;
/**
* Waiting if set to true, only waiting machines are returned.
* Only useful for admins.
*
- * @generated from field: optional bool waiting = 15;
+ * @generated from field: optional bool waiting = 16;
*/
waiting?: boolean | undefined;
/**
* Preallocated if set to true, only machines which are preallocated are returned.
* Only useful for admins.
*
- * @generated from field: optional bool preallocated = 16;
+ * @generated from field: optional bool preallocated = 17;
*/
preallocated?: boolean | undefined;
/**
* NotAllocated if set to true, only machines which are not allocated are returned.
* Only useful for admins.
*
- * @generated from field: optional bool not_allocated = 17;
+ * @generated from field: optional bool not_allocated = 18;
*/
notAllocated?: boolean | undefined;
};
diff --git a/js/metalstack/api/v2/machine_pb.js b/js/metalstack/api/v2/machine_pb.js
index 53bf9249..4d5e8d8c 100644
--- a/js/metalstack/api/v2/machine_pb.js
+++ b/js/metalstack/api/v2/machine_pb.js
@@ -14,7 +14,7 @@ import { file_metalstack_api_v2_size } from "./size_pb";
/**
* Describes the file metalstack/api/v2/machine.proto.
*/
-export const file_metalstack_api_v2_machine = /*@__PURE__*/ fileDesc("Ch9tZXRhbHN0YWNrL2FwaS92Mi9tYWNoaW5lLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiJNChhNYWNoaW5lU2VydmljZUdldFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiSAoZTWFjaGluZVNlcnZpY2VHZXRSZXNwb25zZRIrCgdtYWNoaW5lGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZSKVBwobTWFjaGluZVNlcnZpY2VDcmVhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEhsKBHV1aWQYAiABKAlCCLpIBXIDsAEBSACIAQESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESHgoIaG9zdG5hbWUYBSABKAlCB7pIBHICaAFIAogBARIjCglwYXJ0aXRpb24YBiABKAlCC7pICHIG0LOusQIBSAOIAQESHgoEc2l6ZRgHIAEoCUILukgIcgbAs66xAgFIBIgBARIaCgVpbWFnZRgIIAEoCUILukgIcgbAs66xAgESKwoRZmlsZXN5c3RlbV9sYXlvdXQYCSABKAlCC7pICHIGwLOusQIBSAWIAQESMQoPc3NoX3B1YmxpY19rZXlzGAogAygJQhi6SBWSARLQpLOxAgEQMiIIcgaItK6xAgESJgoIdXNlcmRhdGEYCyABKAlCD7pIDHIK8LOusQIBGICAAkgGiAEBEikKBmxhYmVscxgMIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVscxJHCghuZXR3b3JrcxgNIAMoCzIrLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVBbGxvY2F0aW9uTmV0d29ya0IIukgFkgECCAESIAoOcGxhY2VtZW50X3RhZ3MYDiADKAlCCLpIBZIBAhBAEjsKC2Ruc19zZXJ2ZXJzGA8gAygLMhwubWV0YWxzdGFjay5hcGkudjIuRE5TU2VydmVyQgi6SAWSAQIQAxI7CgtudHBfc2VydmVycxgQIAMoCzIcLm1ldGFsc3RhY2suYXBpLnYyLk5UUFNlcnZlckIIukgFkgECEAoSSwoPYWxsb2NhdGlvbl90eXBlGBEgASgOMigubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb25UeXBlQgi6SAWCAQIQARI2Cg1maXJld2FsbF9zcGVjGBIgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuRmlyZXdhbGxTcGVjQgcKBV91dWlkQg4KDF9kZXNjcmlwdGlvbkILCglfaG9zdG5hbWVCDAoKX3BhcnRpdGlvbkIHCgVfc2l6ZUIUChJfZmlsZXN5c3RlbV9sYXlvdXRCCwoJX3VzZXJkYXRhIkgKDEZpcmV3YWxsU3BlYxI4Cg5maXJld2FsbF9ydWxlcxgBIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsUnVsZXMiSwocTWFjaGluZVNlcnZpY2VDcmVhdGVSZXNwb25zZRIrCgdtYWNoaW5lGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZSK3AgobTWFjaGluZVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEjoKC3VwZGF0ZV9tZXRhGAIgASgLMh0ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTWV0YUIGukgDyAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgAiAEBEjQKBmxhYmVscxgFIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZUxhYmVsc0gBiAEBEjEKD3NzaF9wdWJsaWNfa2V5cxgGIAMoCUIYukgVkgES0KSzsQIBEDIiCHIGiLSusQIBQg4KDF9kZXNjcmlwdGlvbkIJCgdfbGFiZWxzIksKHE1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVzcG9uc2USKwoHbWFjaGluZRgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUiZgoZTWFjaGluZVNlcnZpY2VMaXN0UmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIuCgVxdWVyeRgCIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVRdWVyeSJKChpNYWNoaW5lU2VydmljZUxpc3RSZXNwb25zZRIsCghtYWNoaW5lcxgBIAMoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUiUAobTWFjaGluZVNlcnZpY2VEZWxldGVSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIksKHE1hY2hpbmVTZXJ2aWNlRGVsZXRlUmVzcG9uc2USKwoHbWFjaGluZRgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUilQEKH01hY2hpbmVTZXJ2aWNlQk1DQ29tbWFuZFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESPwoHY29tbWFuZBgDIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUNDb21tYW5kQgi6SAWCAQIQASIiCiBNYWNoaW5lU2VydmljZUJNQ0NvbW1hbmRSZXNwb25zZSJQChtNYWNoaW5lU2VydmljZUdldEJNQ1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiaAocTWFjaGluZVNlcnZpY2VHZXRCTUNSZXNwb25zZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIwCgNibWMYAiABKAsyIy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQk1DUmVwb3J0IrIDCgdNYWNoaW5lEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEi8KCXBhcnRpdGlvbhgDIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlBhcnRpdGlvbhIWCgRyYWNrGAQgASgJQgi6SAVyAxiAARIlCgRzaXplGAUgASgLMhcubWV0YWxzdGFjay5hcGkudjIuU2l6ZRI0CghoYXJkd2FyZRgGIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVIYXJkd2FyZRI4CgphbGxvY2F0aW9uGAcgASgLMiQubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb24SMAoGc3RhdHVzGAggASgLMiAubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVN0YXR1cxJWChpyZWNlbnRfcHJvdmlzaW9uaW5nX2V2ZW50cxgJIAEoCzIyLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVSZWNlbnRQcm92aXNpb25pbmdFdmVudHMi7wEKDU1hY2hpbmVTdGF0dXMSNgoJY29uZGl0aW9uGAEgASgLMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUNvbmRpdGlvbhJECglsZWRfc3RhdGUYAiABKAsyMS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQ2hhc3Npc0lkZW50aWZ5TEVEU3RhdGUSQgoKbGl2ZWxpbmVzcxgDIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVMaXZlbGluZXNzQgi6SAWCAQIQARIcChRtZXRhbF9oYW1tZXJfdmVyc2lvbhgEIAEoCSKIAQoQTWFjaGluZUNvbmRpdGlvbhI4CgVzdGF0ZRgBIAEoDjIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTdGF0ZUIIukgFggECEAESIAoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBEhgKBmlzc3VlchgDIAEoCUIIukgFcgMYgAIihAYKEU1hY2hpbmVBbGxvY2F0aW9uEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIcCgpjcmVhdGVkX2J5GAUgASgJQgi6SAVyAxiAARIZCgdwcm9qZWN0GAYgASgJQgi6SAVyA7ABARInCgVpbWFnZRgHIAEoCzIYLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlEj4KEWZpbGVzeXN0ZW1fbGF5b3V0GAggASgLMiMubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dBIzCghuZXR3b3JrcxgJIAMoCzIhLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVOZXR3b3JrEhkKCGhvc3RuYW1lGAogASgJQge6SARyAmgBEjEKD3NzaF9wdWJsaWNfa2V5cxgLIAMoCUIYukgVkgES0KSzsQIBEDIiCHIGiLSusQIBEiEKCHVzZXJkYXRhGAwgASgJQg+6SAxyCvCzrrECARiAgAISSwoPYWxsb2NhdGlvbl90eXBlGA0gASgOMigubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb25UeXBlQgi6SAWCAQIQARI4Cg5maXJld2FsbF9ydWxlcxgOIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsUnVsZXMSOwoLZG5zX3NlcnZlcnMYDyADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5ETlNTZXJ2ZXJCCLpIBZIBAhADEjsKC250cF9zZXJ2ZXJzGBAgAygLMhwubWV0YWxzdGFjay5hcGkudjIuTlRQU2VydmVyQgi6SAWSAQIQChIqCgN2cG4YESABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lVlBOIlMKGE1hY2hpbmVBbGxvY2F0aW9uTmV0d29yaxIcCgduZXR3b3JrGAEgASgJQgu6SAhyBsCzrrECARIZCgNpcHMYAiADKAlCDLpICZIBBsCks7ECASJ/Cg1GaXJld2FsbFJ1bGVzEjUKBmVncmVzcxgBIAMoCzIlLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsRWdyZXNzUnVsZRI3CgdpbmdyZXNzGAIgAygLMiYubWV0YWxzdGFjay5hcGkudjIuRmlyZXdhbGxJbmdyZXNzUnVsZSKyAQoSRmlyZXdhbGxFZ3Jlc3NSdWxlEjkKCHByb3RvY29sGAEgASgOMh0ubWV0YWxzdGFjay5hcGkudjIuSVBQcm90b2NvbEIIukgFggECEAESHQoFcG9ydHMYAiADKA1CDrpIC5IBCCIGKgQY/P8DEhgKAnRvGAMgAygJQgy6SAmSAQa4pLOxAgESKAoHY29tbWVudBgEIAEoCUIXukgU2AEBcg8YZDILXlthLXpfIC1dKiQizwEKE0ZpcmV3YWxsSW5ncmVzc1J1bGUSOQoIcHJvdG9jb2wYASABKA4yHS5tZXRhbHN0YWNrLmFwaS52Mi5JUFByb3RvY29sQgi6SAWCAQIQARIdCgVwb3J0cxgCIAMoDUIOukgLkgEIIgYqBBj8/wMSGAoCdG8YAyADKAlCDLpICZIBBriks7ECARIaCgRmcm9tGAQgAygJQgy6SAmSAQa4pLOxAgESKAoHY29tbWVudBgFIAEoCUIXukgU2AEBcg8YZDILXlthLXpfIC1dKiQixgIKDk1hY2hpbmVOZXR3b3JrEg8KB25ldHdvcmsYASABKAkSHgoIcHJlZml4ZXMYAiADKAlCDLpICZIBBriks7ECARIqChRkZXN0aW5hdGlvbl9wcmVmaXhlcxgDIAMoCUIMukgJkgEGuKSzsQIBEhkKA2lwcxgEIAMoCUIMukgJkgEGwKSzsQIBEj4KDG5ldHdvcmtfdHlwZRgFIAEoDjIeLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtUeXBlQgi6SAWCAQIQARI2CghuYXRfdHlwZRgGIAEoDjIaLm1ldGFsc3RhY2suYXBpLnYyLk5BVFR5cGVCCLpIBYIBAhABEgsKA3ZyZhgHIAEoBBILCgNhc24YCCABKA0SHgoHcHJvamVjdBgJIAEoCUIIukgFcgOwAQFIAIgBAUIKCghfcHJvamVjdCLaAQoPTWFjaGluZUhhcmR3YXJlEg4KBm1lbW9yeRgBIAEoBBI0CgVkaXNrcxgCIAMoCzIlLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCbG9ja0RldmljZRIpCgRjcHVzGAMgAygLMhsubWV0YWxzdGFjay5hcGkudjIuTWV0YWxDUFUSKQoEZ3B1cxgEIAMoCzIbLm1ldGFsc3RhY2suYXBpLnYyLk1ldGFsR1BVEisKBG5pY3MYBSADKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljIl0KCE1ldGFsQ1BVEhgKBnZlbmRvchgBIAEoCUIIukgFcgMYgAISFwoFbW9kZWwYAiABKAlCCLpIBXIDGIACEg0KBWNvcmVzGAMgASgNEg8KB3RocmVhZHMYBCABKA0iPQoITWV0YWxHUFUSGAoGdmVuZG9yGAEgASgJQgi6SAVyAxiAAhIXCgVtb2RlbBgCIAEoCUIIukgFcgMYgAIi5QEKCk1hY2hpbmVOaWMSGAoDbWFjGAEgASgJQgu6SAhyBrizrrECARIZCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECARIcCgppZGVudGlmaWVyGAMgASgJQgi6SAVyAxiAARIYCgZ2ZW5kb3IYBCABKAlCCLpIBXIDGIABEhcKBW1vZGVsGAUgASgJQgi6SAVyAxiAARINCgVzcGVlZBgGIAEoBBIwCgluZWlnaGJvcnMYByADKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljEhAKCGhvc3RuYW1lGAggASgJIj0KEk1hY2hpbmVCbG9ja0RldmljZRIZCgRuYW1lGAEgASgJQgu6SAhyBsCzrrECARIMCgRzaXplGAIgASgEIlsKHk1hY2hpbmVDaGFzc2lzSWRlbnRpZnlMRURTdGF0ZRIXCgV2YWx1ZRgBIAEoCUIIukgFcgMYgAESIAoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBIooDChBNYWNoaW5lQk1DUmVwb3J0EioKA2JtYxgBIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUMSLAoEYmlvcxgCIAEoCzIeLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCaW9zEioKA2ZydRgDIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlUSOwoMcG93ZXJfbWV0cmljGAQgASgLMiUubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVBvd2VyTWV0cmljEj0KDnBvd2VyX3N1cHBsaWVzGAUgAygLMiUubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVBvd2VyU3VwcGx5EkQKCWxlZF9zdGF0ZRgGIAEoCzIxLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVDaGFzc2lzSWRlbnRpZnlMRURTdGF0ZRIuCgp1cGRhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJjCgtNYWNoaW5lQmlvcxIcCgd2ZXJzaW9uGAEgASgJQgu6SAhyBsizrrECARIbCgZ2ZW5kb3IYAiABKAlCC7pICHIGyLOusQIBEhkKBGRhdGUYAyABKAlCC7pICHIGyLOusQIBItsBCgpNYWNoaW5lQk1DEhkKB2FkZHJlc3MYASABKAlCCLpIBXIDgAIBEhgKA21hYxgCIAEoCUILukgIcga4s66xAgESGQoEdXNlchgDIAEoCUILukgIcgbIs66xAgESHQoIcGFzc3dvcmQYBCABKAlCC7pICHIGyLOusQIBEh4KCWludGVyZmFjZRgFIAEoCUILukgIcgbIs66xAgESHAoHdmVyc2lvbhgGIAEoCUILukgIcgbIs66xAgESIAoLcG93ZXJfc3RhdGUYByABKAlCC7pICHIGyLOusQIBIp4ECgpNYWNoaW5lRlJVEi0KE2NoYXNzaXNfcGFydF9udW1iZXIYASABKAlCC7pICHIGyLOusQIBSACIAQESLQoTY2hhc3Npc19wYXJ0X3NlcmlhbBgCIAEoCUILukgIcgbIs66xAgFIAYgBARIjCglib2FyZF9tZmcYAyABKAlCC7pICHIGyLOusQIBSAKIAQESKgoQYm9hcmRfbWZnX3NlcmlhbBgEIAEoCUILukgIcgbIs66xAgFIA4gBARIrChFib2FyZF9wYXJ0X251bWJlchgFIAEoCUILukgIcgbIs66xAgFIBIgBARIuChRwcm9kdWN0X21hbnVmYWN0dXJlchgGIAEoCUILukgIcgbIs66xAgFIBYgBARItChNwcm9kdWN0X3BhcnRfbnVtYmVyGAcgASgJQgu6SAhyBsizrrECAUgGiAEBEigKDnByb2R1Y3Rfc2VyaWFsGAggASgJQgu6SAhyBsizrrECAUgHiAEBQhYKFF9jaGFzc2lzX3BhcnRfbnVtYmVyQhYKFF9jaGFzc2lzX3BhcnRfc2VyaWFsQgwKCl9ib2FyZF9tZmdCEwoRX2JvYXJkX21mZ19zZXJpYWxCFAoSX2JvYXJkX3BhcnRfbnVtYmVyQhcKFV9wcm9kdWN0X21hbnVmYWN0dXJlckIWChRfcHJvZHVjdF9wYXJ0X251bWJlckIRCg9fcHJvZHVjdF9zZXJpYWwihQEKEk1hY2hpbmVQb3dlck1ldHJpYxIeChZhdmVyYWdlX2NvbnN1bWVkX3dhdHRzGAEgASgCEhcKD2ludGVydmFsX2luX21pbhgCIAEoAhIaChJtYXhfY29uc3VtZWRfd2F0dHMYAyABKAISGgoSbWluX2NvbnN1bWVkX3dhdHRzGAQgASgCIjMKEk1hY2hpbmVQb3dlclN1cHBseRIOCgZoZWFsdGgYASABKAkSDQoFc3RhdGUYAiABKAkipQIKH01hY2hpbmVSZWNlbnRQcm92aXNpb25pbmdFdmVudHMSOwoGZXZlbnRzGAEgAygLMisubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50EjMKD2xhc3RfZXZlbnRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASRQoQbGFzdF9lcnJvcl9ldmVudBgDIAEoCzIrLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVQcm92aXNpb25pbmdFdmVudBJJCgVzdGF0ZRgEIAEoDjIwLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVQcm92aXNpb25pbmdFdmVudFN0YXRlQgi6SAWCAQIQASKfAQoYTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50EigKBHRpbWUYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkgKBWV2ZW50GAIgASgOMi8ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50VHlwZUIIukgFggECEAESDwoHbWVzc2FnZRgDIAEoCSJrCgpNYWNoaW5lVlBOEh0KFWNvbnRyb2xfcGxhbmVfYWRkcmVzcxgBIAEoCRIQCghhdXRoX2tleRgCIAEoCRIRCgljb25uZWN0ZWQYAyABKAgSGQoDaXBzGAQgAygJQgy6SAmSAQbApLOxAgEivAcKDE1hY2hpbmVRdWVyeRIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESIwoJcGFydGl0aW9uGAMgASgJQgu6SAhyBtCzrrECAUgCiAEBEh4KBHNpemUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESHQoEcmFjaxgFIAEoCUIKukgHcgUQAhiAAUgEiAEBEi4KBmxhYmVscxgGIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gFiAEBEkIKCmFsbG9jYXRpb24YByABKAsyKS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQWxsb2NhdGlvblF1ZXJ5SAaIAQESPAoHbmV0d29yaxgIIAEoCzImLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVOZXR3b3JrUXVlcnlIB4gBARI0CgNuaWMYCSABKAsyIi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljUXVlcnlICIgBARI2CgRkaXNrGAogASgLMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZURpc2tRdWVyeUgJiAEBEjQKA2JtYxgLIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUNRdWVyeUgKiAEBEjQKA2ZydRgMIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlVRdWVyeUgLiAEBEj4KCGhhcmR3YXJlGA0gASgLMicubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUhhcmR3YXJlUXVlcnlIDIgBARIzCgVzdGF0ZRgOIAEoDjIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTdGF0ZUgNiAEBEhQKB3dhaXRpbmcYDyABKAhIDogBARIZCgxwcmVhbGxvY2F0ZWQYECABKAhID4gBARIaCg1ub3RfYWxsb2NhdGVkGBEgASgISBCIAQFCBwoFX3V1aWRCBwoFX25hbWVCDAoKX3BhcnRpdGlvbkIHCgVfc2l6ZUIHCgVfcmFja0IJCgdfbGFiZWxzQg0KC19hbGxvY2F0aW9uQgoKCF9uZXR3b3JrQgYKBF9uaWNCBwoFX2Rpc2tCBgoEX2JtY0IGCgRfZnJ1QgsKCV9oYXJkd2FyZUIICgZfc3RhdGVCCgoIX3dhaXRpbmdCDwoNX3ByZWFsbG9jYXRlZEIQCg5fbm90X2FsbG9jYXRlZCKIBAoWTWFjaGluZUFsbG9jYXRpb25RdWVyeRIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESHgoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQFIAogBARIfCgVpbWFnZRgEIAEoCUILukgIcgbAs66xAgFIA4gBARIrChFmaWxlc3lzdGVtX2xheW91dBgFIAEoCUILukgIcgbAs66xAgFIBIgBARIeCghob3N0bmFtZRgGIAEoCUIHukgEcgJoAUgFiAEBElAKD2FsbG9jYXRpb25fdHlwZRgHIAEoDjIoLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVBbGxvY2F0aW9uVHlwZUIIukgFggECEAFIBogBARIuCgZsYWJlbHMYCCABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNIB4gBARIvCgN2cG4YCSABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lVlBOSAiIAQFCBwoFX3V1aWRCBwoFX25hbWVCCgoIX3Byb2plY3RCCAoGX2ltYWdlQhQKEl9maWxlc3lzdGVtX2xheW91dEILCglfaG9zdG5hbWVCEgoQX2FsbG9jYXRpb25fdHlwZUIJCgdfbGFiZWxzQgYKBF92cG4iqgEKE01hY2hpbmVOZXR3b3JrUXVlcnkSEAoIbmV0d29ya3MYASADKAkSHgoIcHJlZml4ZXMYAiADKAlCDLpICZIBBriks7ECARIqChRkZXN0aW5hdGlvbl9wcmVmaXhlcxgDIAMoCUIMukgJkgEGuKSzsQIBEhkKA2lwcxgEIAMoCUIMukgJkgEGwKSzsQIBEgwKBHZyZnMYBSADKAQSDAoEYXNucxgGIAMoDSKvAQoPTWFjaGluZU5pY1F1ZXJ5EiIKBG1hY3MYASADKAlCFLpIEZIBDhBkGAEiCHIGuLOusQIBEiAKBW5hbWVzGAIgAygJQhG6SA6SAQsQZBgBIgVyAxiAARIrCg1uZWlnaGJvcl9tYWNzGAMgAygJQhS6SBGSAQ4QZBgBIghyBrizrrECARIpCg5uZWlnaGJvcl9uYW1lcxgEIAMoCUIRukgOkgELEGQYASIFcgMYgAEiSwoQTWFjaGluZURpc2tRdWVyeRIeCgVuYW1lcxgBIAMoCUIPukgMkgEJEGQiBXIDGIABEhcKBXNpemVzGAIgAygEQgi6SAWSAQIQZCK5AQoPTWFjaGluZUJNQ1F1ZXJ5Eh0KB2FkZHJlc3MYASABKAlCB7pIBHICcAFIAIgBARIdCgNtYWMYAiABKAlCC7pICHIGuLOusQIBSAGIAQESGwoEdXNlchgDIAEoCUIIukgFcgMYgAFIAogBARIgCglpbnRlcmZhY2UYBCABKAlCCLpIBXIDGIABSAOIAQFCCgoIX2FkZHJlc3NCBgoEX21hY0IHCgVfdXNlckIMCgpfaW50ZXJmYWNlIoMECg9NYWNoaW5lRlJVUXVlcnkSKgoTY2hhc3Npc19wYXJ0X251bWJlchgBIAEoCUIIukgFcgMYgAFIAIgBARIqChNjaGFzc2lzX3BhcnRfc2VyaWFsGAIgASgJQgi6SAVyAxiAAUgBiAEBEiAKCWJvYXJkX21mZxgDIAEoCUIIukgFcgMYgAFIAogBARIjCgxib2FyZF9zZXJpYWwYBCABKAlCCLpIBXIDGIABSAOIAQESKAoRYm9hcmRfcGFydF9udW1iZXIYBSABKAlCCLpIBXIDGIABSASIAQESKwoUcHJvZHVjdF9tYW51ZmFjdHVyZXIYBiABKAlCCLpIBXIDGIABSAWIAQESKgoTcHJvZHVjdF9wYXJ0X251bWJlchgHIAEoCUIIukgFcgMYgAFIBogBARIlCg5wcm9kdWN0X3NlcmlhbBgIIAEoCUIIukgFcgMYgAFIB4gBAUIWChRfY2hhc3Npc19wYXJ0X251bWJlckIWChRfY2hhc3Npc19wYXJ0X3NlcmlhbEIMCgpfYm9hcmRfbWZnQg8KDV9ib2FyZF9zZXJpYWxCFAoSX2JvYXJkX3BhcnRfbnVtYmVyQhcKFV9wcm9kdWN0X21hbnVmYWN0dXJlckIWChRfcHJvZHVjdF9wYXJ0X251bWJlckIRCg9fcHJvZHVjdF9zZXJpYWwiXAoUTWFjaGluZUhhcmR3YXJlUXVlcnkSEwoGbWVtb3J5GAEgASgESACIAQESFgoJY3B1X2NvcmVzGAIgASgNSAGIAQFCCQoHX21lbW9yeUIMCgpfY3B1X2NvcmVzIuACChJNYWNoaW5lSXNzdWVzUXVlcnkSNgoNbWFjaGluZV9xdWVyeRgBIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVRdWVyeRJACgRvbmx5GAIgAygOMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUlzc3VlVHlwZUINukgKkgEHIgWCAQIQARJACgRvbWl0GAMgAygOMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUlzc3VlVHlwZUINukgKkgEHIgWCAQIQARJICghzZXZlcml0eRgEIAEoDjInLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZVNldmVyaXR5Qgi6SAWCAQIQAUgAiAEBEjcKFGxhc3RfZXJyb3JfdGhyZXNob2xkGAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQgsKCV9zZXZlcml0eSJYCg1NYWNoaW5lSXNzdWVzEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEi8KBmlzc3VlcxgCIAMoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZSLnAQoMTWFjaGluZUlzc3VlEjsKBHR5cGUYASABKA4yIy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lSXNzdWVUeXBlQgi6SAWCAQIQARJDCghzZXZlcml0eRgCIAEoDjInLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZVNldmVyaXR5Qgi6SAWCAQIQARIgCgtkZXNjcmlwdGlvbhgDIAEoCUILukgIcgbIs66xAgESIgoNcmVmZXJlbmNlX3VybBgEIAEoCUILukgIcgbgs66xAgESDwoHZGV0YWlscxgFIAEoCSplCgpJUFByb3RvY29sEhsKF0lQX1BST1RPQ09MX1VOU1BFQ0lGSUVEEAASHAoPSVBfUFJPVE9DT0xfVENQEAEaB4KyGQN0Y3ASHAoPSVBfUFJPVE9DT0xfVURQEAIaB4KyGQN1ZHAqrQEKDE1hY2hpbmVTdGF0ZRIjChlNQUNISU5FX1NUQVRFX1VOU1BFQ0lGSUVEEAAaBIKyGQASJgoVTUFDSElORV9TVEFURV9UQUlOVEVEEAEaC4KyGQd0YWludGVkEiQKFE1BQ0hJTkVfU1RBVEVfTE9DS0VEEAIaCoKyGQZsb2NrZWQSKgoXTUFDSElORV9TVEFURV9BVkFJTEFCTEUQAxoNgrIZCWF2YWlsYWJsZSrfAQodTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50U3RhdGUSNgosTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfU1RBVEVfVU5TUEVDSUZJRUQQABoEgrIZABI9CipNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9TVEFURV9DUkFTSExPT1AQARoNgrIZCWNyYXNobG9vcBJHCi9NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9TVEFURV9GQUlMRURfUkVDTEFJTRACGhKCshkOZmFpbGVkLXJlY2xhaW0qnwYKHE1hY2hpbmVQcm92aXNpb25pbmdFdmVudFR5cGUSLworTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfVFlQRV9VTlNQRUNJRklFRBAAEjQKJU1BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfQUxJVkUQARoJgrIZBUFsaXZlEjgKJ01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfQ1JBU0hFRBACGguCshkHQ3Jhc2hlZBJACitNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BYRV9CT09USU5HEAMaD4KyGQtQWEUgQm9vdGluZxJGCi5NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BMQU5ORURfUkVCT09UEAQaEoKyGQ5QbGFubmVkIFJlYm9vdBI8CilNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BSRVBBUklORxAFGg2CshkJUHJlcGFyaW5nEkAKK01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfUkVHSVNURVJJTkcQBhoPgrIZC1JlZ2lzdGVyaW5nEjgKJ01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfV0FJVElORxAHGguCshkHV2FpdGluZxI+CipNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX0lOU1RBTExJTkcQCBoOgrIZCkluc3RhbGxpbmcSTgoyTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfVFlQRV9CT09USU5HX05FV19LRVJORUwQCRoWgrIZEkJvb3RpbmcgTmV3IEtlcm5lbBJACitNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BIT05FRF9IT01FEAoaD4KyGQtQaG9uZWQgSG9tZRJICi9NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX01BQ0hJTkVfUkVDTEFJTRALGhOCshkPTWFjaGluZSBSZWNsYWltKroBChFNYWNoaW5lTGl2ZWxpbmVzcxIoCh5NQUNISU5FX0xJVkVMSU5FU1NfVU5TUEVDSUZJRUQQABoEgrIZABInChhNQUNISU5FX0xJVkVMSU5FU1NfQUxJVkUQARoJgrIZBWFsaXZlEiUKF01BQ0hJTkVfTElWRUxJTkVTU19ERUFEEAIaCIKyGQRkZWFkEisKGk1BQ0hJTkVfTElWRUxJTkVTU19VTktOT1dOEAMaC4KyGQd1bmtub3duKqwBChVNYWNoaW5lQWxsb2NhdGlvblR5cGUSLQojTUFDSElORV9BTExPQ0FUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABoEgrIZABIwCh9NQUNISU5FX0FMTE9DQVRJT05fVFlQRV9NQUNISU5FEAEaC4KyGQdtYWNoaW5lEjIKIE1BQ0hJTkVfQUxMT0NBVElPTl9UWVBFX0ZJUkVXQUxMEAIaDIKyGQhmaXJld2FsbCr+BAoRTWFjaGluZUJNQ0NvbW1hbmQSIwofTUFDSElORV9CTUNfQ09NTUFORF9VTlNQRUNJRklFRBAAEiIKFk1BQ0hJTkVfQk1DX0NPTU1BTkRfT04QARoGgrIZAm9uEiQKF01BQ0hJTkVfQk1DX0NPTU1BTkRfT0ZGEAIaB4KyGQNvZmYSKAoZTUFDSElORV9CTUNfQ09NTUFORF9SRVNFVBADGgmCshkFcmVzZXQSKAoZTUFDSElORV9CTUNfQ09NTUFORF9DWUNMRRAEGgmCshkFY3ljbGUSNgogTUFDSElORV9CTUNfQ09NTUFORF9CT09UX1RPX0JJT1MQBRoQgrIZDGJvb3QtdG8tYmlvcxI6CiJNQUNISU5FX0JNQ19DT01NQU5EX0JPT1RfRlJPTV9ESVNLEAYaEoKyGQ5ib290LWZyb20tZGlzaxI4CiFNQUNISU5FX0JNQ19DT01NQU5EX0JPT1RfRlJPTV9QWEUQBxoRgrIZDWJvb3QtZnJvbS1weGUSPAojTUFDSElORV9CTUNfQ09NTUFORF9JREVOVElGWV9MRURfT04QCBoTgrIZD2lkZW50aWZ5LWxlZC1vbhI+CiRNQUNISU5FX0JNQ19DT01NQU5EX0lERU5USUZZX0xFRF9PRkYQCRoUgrIZEGlkZW50aWZ5LWxlZC1vZmYSPAojTUFDSElORV9CTUNfQ09NTUFORF9NQUNISU5FX0RFTEVURUQQChoTgrIZD21hY2hpbmUtZGVsZXRlZBI8CiNNQUNISU5FX0JNQ19DT01NQU5EX01BQ0hJTkVfQ1JFQVRFRBALGhOCshkPbWFjaGluZS1jcmVhdGVkKvMGChBNYWNoaW5lSXNzdWVUeXBlEiIKHk1BQ0hJTkVfSVNTVUVfVFlQRV9VTlNQRUNJRklFRBAAEjkKIU1BQ0hJTkVfSVNTVUVfVFlQRV9BU05fVU5JUVVFTkVTUxABGhKCshkOYXNuLW5vdC11bmlxdWUSPwokTUFDSElORV9JU1NVRV9UWVBFX0JNQ19JTkZPX09VVERBVEVEEAIaFYKyGRFibWMtaW5mby1vdXRkYXRlZBJCCiZNQUNISU5FX0lTU1VFX1RZUEVfQk1DX05PTl9ESVNUSU5DVF9JUBADGhaCshkSYm1jLW5vLWRpc3RpbmN0LWlwEjkKIU1BQ0hJTkVfSVNTVUVfVFlQRV9CTUNfV0lUSE9VVF9JUBAEGhKCshkOYm1jLXdpdGhvdXQtaXASOwoiTUFDSElORV9JU1NVRV9UWVBFX0JNQ19XSVRIT1VUX01BQxAFGhOCshkPYm1jLXdpdGhvdXQtbWFjEjAKHU1BQ0hJTkVfSVNTVUVfVFlQRV9DUkFTSF9MT09QEAYaDYKyGQljcmFzaGxvb3ASSQopTUFDSElORV9JU1NVRV9UWVBFX0ZBSUxFRF9NQUNISU5FX1JFQ0xBSU0QBxoagrIZFmZhaWxlZC1tYWNoaW5lLXJlY2xhaW0SPQojTUFDSElORV9JU1NVRV9UWVBFX0xBU1RfRVZFTlRfRVJST1IQCBoUgrIZEGxhc3QtZXZlbnQtZXJyb3ISOwoiTUFDSElORV9JU1NVRV9UWVBFX0xJVkVMSU5FU1NfREVBRBAJGhOCshkPbGl2ZWxpbmVzcy1kZWFkEk0KK01BQ0hJTkVfSVNTVUVfVFlQRV9MSVZFTElORVNTX05PVF9BVkFJTEFCTEUQChocgrIZGGxpdmVsaW5lc3Mtbm90LWF2YWlsYWJsZRJBCiVNQUNISU5FX0lTU1VFX1RZUEVfTElWRUxJTkVTU19VTktOT1dOEAsaFoKyGRJsaXZlbGluZXNzLXVua25vd24SQQolTUFDSElORV9JU1NVRV9UWVBFX05PX0VWRU5UX0NPTlRBSU5FUhAMGhaCshkSbm8tZXZlbnQtY29udGFpbmVyEjUKH01BQ0hJTkVfSVNTVUVfVFlQRV9OT19QQVJUSVRJT04QDRoQgrIZDG5vLXBhcnRpdGlvbirLAQoUTWFjaGluZUlzc3VlU2V2ZXJpdHkSJgoiTUFDSElORV9JU1NVRV9TRVZFUklUWV9VTlNQRUNJRklFRBAAEisKHE1BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfTUlOT1IQARoJgrIZBW1pbm9yEisKHE1BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfTUFKT1IQAhoJgrIZBW1ham9yEjEKH01BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfQ1JJVElDQUwQAxoMgrIZCGNyaXRpY2FsMtEGCg5NYWNoaW5lU2VydmljZRJtCgNHZXQSKy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldFJlcXVlc3QaLC5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJ1CgZDcmVhdGUSLi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUNyZWF0ZVJlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEnUKBlVwZGF0ZRIuLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAEScAoETGlzdBIsLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlTGlzdFJlcXVlc3QaLS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISdQoGRGVsZXRlEi4ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVNlcnZpY2VEZWxldGVSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVNlcnZpY2VEZWxldGVSZXNwb25zZSIKyvMYAgEC4PMYARKBAQoKQk1DQ29tbWFuZBIyLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlQk1DQ29tbWFuZFJlcXVlc3QaMy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUJNQ0NvbW1hbmRSZXNwb25zZSIKyvMYAgEC4PMYARJ1CgZHZXRCTUMSLi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldEJNQ1JlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldEJNQ1Jlc3BvbnNlIgrK8xgCAQLg8xgBQsIBChVjb20ubWV0YWxzdGFjay5hcGkudjJCDE1hY2hpbmVQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_filesystem, file_metalstack_api_v2_image, file_metalstack_api_v2_network, file_metalstack_api_v2_partition, file_metalstack_api_v2_predefined_rules, file_metalstack_api_v2_size]);
+export const file_metalstack_api_v2_machine = /*@__PURE__*/ fileDesc("Ch9tZXRhbHN0YWNrL2FwaS92Mi9tYWNoaW5lLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiJNChhNYWNoaW5lU2VydmljZUdldFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiSAoZTWFjaGluZVNlcnZpY2VHZXRSZXNwb25zZRIrCgdtYWNoaW5lGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZSKVBwobTWFjaGluZVNlcnZpY2VDcmVhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEhsKBHV1aWQYAiABKAlCCLpIBXIDsAEBSACIAQESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESHgoIaG9zdG5hbWUYBSABKAlCB7pIBHICaAFIAogBARIjCglwYXJ0aXRpb24YBiABKAlCC7pICHIG0LOusQIBSAOIAQESHgoEc2l6ZRgHIAEoCUILukgIcgbAs66xAgFIBIgBARIaCgVpbWFnZRgIIAEoCUILukgIcgbAs66xAgESKwoRZmlsZXN5c3RlbV9sYXlvdXQYCSABKAlCC7pICHIGwLOusQIBSAWIAQESMQoPc3NoX3B1YmxpY19rZXlzGAogAygJQhi6SBWSARLQpLOxAgEQMiIIcgaItK6xAgESJgoIdXNlcmRhdGEYCyABKAlCD7pIDHIK8LOusQIBGICAAkgGiAEBEikKBmxhYmVscxgMIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVscxJHCghuZXR3b3JrcxgNIAMoCzIrLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVBbGxvY2F0aW9uTmV0d29ya0IIukgFkgECCAESIAoOcGxhY2VtZW50X3RhZ3MYDiADKAlCCLpIBZIBAhBAEjsKC2Ruc19zZXJ2ZXJzGA8gAygLMhwubWV0YWxzdGFjay5hcGkudjIuRE5TU2VydmVyQgi6SAWSAQIQAxI7CgtudHBfc2VydmVycxgQIAMoCzIcLm1ldGFsc3RhY2suYXBpLnYyLk5UUFNlcnZlckIIukgFkgECEAoSSwoPYWxsb2NhdGlvbl90eXBlGBEgASgOMigubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb25UeXBlQgi6SAWCAQIQARI2Cg1maXJld2FsbF9zcGVjGBIgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuRmlyZXdhbGxTcGVjQgcKBV91dWlkQg4KDF9kZXNjcmlwdGlvbkILCglfaG9zdG5hbWVCDAoKX3BhcnRpdGlvbkIHCgVfc2l6ZUIUChJfZmlsZXN5c3RlbV9sYXlvdXRCCwoJX3VzZXJkYXRhIkgKDEZpcmV3YWxsU3BlYxI4Cg5maXJld2FsbF9ydWxlcxgBIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsUnVsZXMiSwocTWFjaGluZVNlcnZpY2VDcmVhdGVSZXNwb25zZRIrCgdtYWNoaW5lGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZSK3AgobTWFjaGluZVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEjoKC3VwZGF0ZV9tZXRhGAIgASgLMh0ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTWV0YUIGukgDyAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgAiAEBEjQKBmxhYmVscxgFIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZUxhYmVsc0gBiAEBEjEKD3NzaF9wdWJsaWNfa2V5cxgGIAMoCUIYukgVkgES0KSzsQIBEDIiCHIGiLSusQIBQg4KDF9kZXNjcmlwdGlvbkIJCgdfbGFiZWxzIksKHE1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVzcG9uc2USKwoHbWFjaGluZRgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUiZgoZTWFjaGluZVNlcnZpY2VMaXN0UmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIuCgVxdWVyeRgCIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVRdWVyeSJKChpNYWNoaW5lU2VydmljZUxpc3RSZXNwb25zZRIsCghtYWNoaW5lcxgBIAMoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUiUAobTWFjaGluZVNlcnZpY2VEZWxldGVSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIksKHE1hY2hpbmVTZXJ2aWNlRGVsZXRlUmVzcG9uc2USKwoHbWFjaGluZRgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUilQEKH01hY2hpbmVTZXJ2aWNlQk1DQ29tbWFuZFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESPwoHY29tbWFuZBgDIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUNDb21tYW5kQgi6SAWCAQIQASIiCiBNYWNoaW5lU2VydmljZUJNQ0NvbW1hbmRSZXNwb25zZSJQChtNYWNoaW5lU2VydmljZUdldEJNQ1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiaAocTWFjaGluZVNlcnZpY2VHZXRCTUNSZXNwb25zZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIwCgNibWMYAiABKAsyIy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQk1DUmVwb3J0IsoDCgdNYWNoaW5lEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEi8KCXBhcnRpdGlvbhgDIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlBhcnRpdGlvbhIWCgRyYWNrGAQgASgJQgi6SAVyAxiAARIWCgRyb29tGAUgASgJQgi6SAVyAxiAARIlCgRzaXplGAYgASgLMhcubWV0YWxzdGFjay5hcGkudjIuU2l6ZRI0CghoYXJkd2FyZRgHIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVIYXJkd2FyZRI4CgphbGxvY2F0aW9uGAggASgLMiQubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb24SMAoGc3RhdHVzGAkgASgLMiAubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVN0YXR1cxJWChpyZWNlbnRfcHJvdmlzaW9uaW5nX2V2ZW50cxgKIAEoCzIyLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVSZWNlbnRQcm92aXNpb25pbmdFdmVudHMi7wEKDU1hY2hpbmVTdGF0dXMSNgoJY29uZGl0aW9uGAEgASgLMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUNvbmRpdGlvbhJECglsZWRfc3RhdGUYAiABKAsyMS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQ2hhc3Npc0lkZW50aWZ5TEVEU3RhdGUSQgoKbGl2ZWxpbmVzcxgDIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVMaXZlbGluZXNzQgi6SAWCAQIQARIcChRtZXRhbF9oYW1tZXJfdmVyc2lvbhgEIAEoCSKIAQoQTWFjaGluZUNvbmRpdGlvbhI4CgVzdGF0ZRgBIAEoDjIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTdGF0ZUIIukgFggECEAESIAoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBEhgKBmlzc3VlchgDIAEoCUIIukgFcgMYgAIihAYKEU1hY2hpbmVBbGxvY2F0aW9uEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIcCgpjcmVhdGVkX2J5GAUgASgJQgi6SAVyAxiAARIZCgdwcm9qZWN0GAYgASgJQgi6SAVyA7ABARInCgVpbWFnZRgHIAEoCzIYLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlEj4KEWZpbGVzeXN0ZW1fbGF5b3V0GAggASgLMiMubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dBIzCghuZXR3b3JrcxgJIAMoCzIhLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVOZXR3b3JrEhkKCGhvc3RuYW1lGAogASgJQge6SARyAmgBEjEKD3NzaF9wdWJsaWNfa2V5cxgLIAMoCUIYukgVkgES0KSzsQIBEDIiCHIGiLSusQIBEiEKCHVzZXJkYXRhGAwgASgJQg+6SAxyCvCzrrECARiAgAISSwoPYWxsb2NhdGlvbl90eXBlGA0gASgOMigubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb25UeXBlQgi6SAWCAQIQARI4Cg5maXJld2FsbF9ydWxlcxgOIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsUnVsZXMSOwoLZG5zX3NlcnZlcnMYDyADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5ETlNTZXJ2ZXJCCLpIBZIBAhADEjsKC250cF9zZXJ2ZXJzGBAgAygLMhwubWV0YWxzdGFjay5hcGkudjIuTlRQU2VydmVyQgi6SAWSAQIQChIqCgN2cG4YESABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lVlBOIlMKGE1hY2hpbmVBbGxvY2F0aW9uTmV0d29yaxIcCgduZXR3b3JrGAEgASgJQgu6SAhyBsCzrrECARIZCgNpcHMYAiADKAlCDLpICZIBBsCks7ECASJ/Cg1GaXJld2FsbFJ1bGVzEjUKBmVncmVzcxgBIAMoCzIlLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsRWdyZXNzUnVsZRI3CgdpbmdyZXNzGAIgAygLMiYubWV0YWxzdGFjay5hcGkudjIuRmlyZXdhbGxJbmdyZXNzUnVsZSKyAQoSRmlyZXdhbGxFZ3Jlc3NSdWxlEjkKCHByb3RvY29sGAEgASgOMh0ubWV0YWxzdGFjay5hcGkudjIuSVBQcm90b2NvbEIIukgFggECEAESHQoFcG9ydHMYAiADKA1CDrpIC5IBCCIGKgQY/P8DEhgKAnRvGAMgAygJQgy6SAmSAQa4pLOxAgESKAoHY29tbWVudBgEIAEoCUIXukgU2AEBcg8YZDILXlthLXpfIC1dKiQizwEKE0ZpcmV3YWxsSW5ncmVzc1J1bGUSOQoIcHJvdG9jb2wYASABKA4yHS5tZXRhbHN0YWNrLmFwaS52Mi5JUFByb3RvY29sQgi6SAWCAQIQARIdCgVwb3J0cxgCIAMoDUIOukgLkgEIIgYqBBj8/wMSGAoCdG8YAyADKAlCDLpICZIBBriks7ECARIaCgRmcm9tGAQgAygJQgy6SAmSAQa4pLOxAgESKAoHY29tbWVudBgFIAEoCUIXukgU2AEBcg8YZDILXlthLXpfIC1dKiQixgIKDk1hY2hpbmVOZXR3b3JrEg8KB25ldHdvcmsYASABKAkSHgoIcHJlZml4ZXMYAiADKAlCDLpICZIBBriks7ECARIqChRkZXN0aW5hdGlvbl9wcmVmaXhlcxgDIAMoCUIMukgJkgEGuKSzsQIBEhkKA2lwcxgEIAMoCUIMukgJkgEGwKSzsQIBEj4KDG5ldHdvcmtfdHlwZRgFIAEoDjIeLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtUeXBlQgi6SAWCAQIQARI2CghuYXRfdHlwZRgGIAEoDjIaLm1ldGFsc3RhY2suYXBpLnYyLk5BVFR5cGVCCLpIBYIBAhABEgsKA3ZyZhgHIAEoBBILCgNhc24YCCABKA0SHgoHcHJvamVjdBgJIAEoCUIIukgFcgOwAQFIAIgBAUIKCghfcHJvamVjdCLaAQoPTWFjaGluZUhhcmR3YXJlEg4KBm1lbW9yeRgBIAEoBBI0CgVkaXNrcxgCIAMoCzIlLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCbG9ja0RldmljZRIpCgRjcHVzGAMgAygLMhsubWV0YWxzdGFjay5hcGkudjIuTWV0YWxDUFUSKQoEZ3B1cxgEIAMoCzIbLm1ldGFsc3RhY2suYXBpLnYyLk1ldGFsR1BVEisKBG5pY3MYBSADKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljIl0KCE1ldGFsQ1BVEhgKBnZlbmRvchgBIAEoCUIIukgFcgMYgAISFwoFbW9kZWwYAiABKAlCCLpIBXIDGIACEg0KBWNvcmVzGAMgASgNEg8KB3RocmVhZHMYBCABKA0iPQoITWV0YWxHUFUSGAoGdmVuZG9yGAEgASgJQgi6SAVyAxiAAhIXCgVtb2RlbBgCIAEoCUIIukgFcgMYgAIi5QEKCk1hY2hpbmVOaWMSGAoDbWFjGAEgASgJQgu6SAhyBrizrrECARIZCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECARIcCgppZGVudGlmaWVyGAMgASgJQgi6SAVyAxiAARIYCgZ2ZW5kb3IYBCABKAlCCLpIBXIDGIABEhcKBW1vZGVsGAUgASgJQgi6SAVyAxiAARINCgVzcGVlZBgGIAEoBBIwCgluZWlnaGJvcnMYByADKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljEhAKCGhvc3RuYW1lGAggASgJIj0KEk1hY2hpbmVCbG9ja0RldmljZRIZCgRuYW1lGAEgASgJQgu6SAhyBsCzrrECARIMCgRzaXplGAIgASgEIlsKHk1hY2hpbmVDaGFzc2lzSWRlbnRpZnlMRURTdGF0ZRIXCgV2YWx1ZRgBIAEoCUIIukgFcgMYgAESIAoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBIooDChBNYWNoaW5lQk1DUmVwb3J0EioKA2JtYxgBIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUMSLAoEYmlvcxgCIAEoCzIeLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCaW9zEioKA2ZydRgDIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlUSOwoMcG93ZXJfbWV0cmljGAQgASgLMiUubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVBvd2VyTWV0cmljEj0KDnBvd2VyX3N1cHBsaWVzGAUgAygLMiUubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVBvd2VyU3VwcGx5EkQKCWxlZF9zdGF0ZRgGIAEoCzIxLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVDaGFzc2lzSWRlbnRpZnlMRURTdGF0ZRIuCgp1cGRhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJjCgtNYWNoaW5lQmlvcxIcCgd2ZXJzaW9uGAEgASgJQgu6SAhyBsizrrECARIbCgZ2ZW5kb3IYAiABKAlCC7pICHIGyLOusQIBEhkKBGRhdGUYAyABKAlCC7pICHIGyLOusQIBItsBCgpNYWNoaW5lQk1DEhkKB2FkZHJlc3MYASABKAlCCLpIBXIDgAIBEhgKA21hYxgCIAEoCUILukgIcga4s66xAgESGQoEdXNlchgDIAEoCUILukgIcgbIs66xAgESHQoIcGFzc3dvcmQYBCABKAlCC7pICHIGyLOusQIBEh4KCWludGVyZmFjZRgFIAEoCUILukgIcgbIs66xAgESHAoHdmVyc2lvbhgGIAEoCUILukgIcgbIs66xAgESIAoLcG93ZXJfc3RhdGUYByABKAlCC7pICHIGyLOusQIBIp4ECgpNYWNoaW5lRlJVEi0KE2NoYXNzaXNfcGFydF9udW1iZXIYASABKAlCC7pICHIGyLOusQIBSACIAQESLQoTY2hhc3Npc19wYXJ0X3NlcmlhbBgCIAEoCUILukgIcgbIs66xAgFIAYgBARIjCglib2FyZF9tZmcYAyABKAlCC7pICHIGyLOusQIBSAKIAQESKgoQYm9hcmRfbWZnX3NlcmlhbBgEIAEoCUILukgIcgbIs66xAgFIA4gBARIrChFib2FyZF9wYXJ0X251bWJlchgFIAEoCUILukgIcgbIs66xAgFIBIgBARIuChRwcm9kdWN0X21hbnVmYWN0dXJlchgGIAEoCUILukgIcgbIs66xAgFIBYgBARItChNwcm9kdWN0X3BhcnRfbnVtYmVyGAcgASgJQgu6SAhyBsizrrECAUgGiAEBEigKDnByb2R1Y3Rfc2VyaWFsGAggASgJQgu6SAhyBsizrrECAUgHiAEBQhYKFF9jaGFzc2lzX3BhcnRfbnVtYmVyQhYKFF9jaGFzc2lzX3BhcnRfc2VyaWFsQgwKCl9ib2FyZF9tZmdCEwoRX2JvYXJkX21mZ19zZXJpYWxCFAoSX2JvYXJkX3BhcnRfbnVtYmVyQhcKFV9wcm9kdWN0X21hbnVmYWN0dXJlckIWChRfcHJvZHVjdF9wYXJ0X251bWJlckIRCg9fcHJvZHVjdF9zZXJpYWwihQEKEk1hY2hpbmVQb3dlck1ldHJpYxIeChZhdmVyYWdlX2NvbnN1bWVkX3dhdHRzGAEgASgCEhcKD2ludGVydmFsX2luX21pbhgCIAEoAhIaChJtYXhfY29uc3VtZWRfd2F0dHMYAyABKAISGgoSbWluX2NvbnN1bWVkX3dhdHRzGAQgASgCIjMKEk1hY2hpbmVQb3dlclN1cHBseRIOCgZoZWFsdGgYASABKAkSDQoFc3RhdGUYAiABKAkipQIKH01hY2hpbmVSZWNlbnRQcm92aXNpb25pbmdFdmVudHMSOwoGZXZlbnRzGAEgAygLMisubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50EjMKD2xhc3RfZXZlbnRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASRQoQbGFzdF9lcnJvcl9ldmVudBgDIAEoCzIrLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVQcm92aXNpb25pbmdFdmVudBJJCgVzdGF0ZRgEIAEoDjIwLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVQcm92aXNpb25pbmdFdmVudFN0YXRlQgi6SAWCAQIQASKfAQoYTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50EigKBHRpbWUYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkgKBWV2ZW50GAIgASgOMi8ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50VHlwZUIIukgFggECEAESDwoHbWVzc2FnZRgDIAEoCSJrCgpNYWNoaW5lVlBOEh0KFWNvbnRyb2xfcGxhbmVfYWRkcmVzcxgBIAEoCRIQCghhdXRoX2tleRgCIAEoCRIRCgljb25uZWN0ZWQYAyABKAgSGQoDaXBzGAQgAygJQgy6SAmSAQbApLOxAgEi5gcKDE1hY2hpbmVRdWVyeRIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESIwoJcGFydGl0aW9uGAMgASgJQgu6SAhyBtCzrrECAUgCiAEBEh4KBHNpemUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESHgoEcmFjaxgFIAEoCUILukgIcgbAs66xAgFIBIgBARIeCgRyb29tGAYgASgJQgu6SAhyBsCzrrECAUgFiAEBEi4KBmxhYmVscxgHIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gGiAEBEkIKCmFsbG9jYXRpb24YCCABKAsyKS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQWxsb2NhdGlvblF1ZXJ5SAeIAQESPAoHbmV0d29yaxgJIAEoCzImLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVOZXR3b3JrUXVlcnlICIgBARI0CgNuaWMYCiABKAsyIi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljUXVlcnlICYgBARI2CgRkaXNrGAsgASgLMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZURpc2tRdWVyeUgKiAEBEjQKA2JtYxgMIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUNRdWVyeUgLiAEBEjQKA2ZydRgNIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlVRdWVyeUgMiAEBEj4KCGhhcmR3YXJlGA4gASgLMicubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUhhcmR3YXJlUXVlcnlIDYgBARIzCgVzdGF0ZRgPIAEoDjIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTdGF0ZUgOiAEBEhQKB3dhaXRpbmcYECABKAhID4gBARIZCgxwcmVhbGxvY2F0ZWQYESABKAhIEIgBARIaCg1ub3RfYWxsb2NhdGVkGBIgASgISBGIAQFCBwoFX3V1aWRCBwoFX25hbWVCDAoKX3BhcnRpdGlvbkIHCgVfc2l6ZUIHCgVfcmFja0IHCgVfcm9vbUIJCgdfbGFiZWxzQg0KC19hbGxvY2F0aW9uQgoKCF9uZXR3b3JrQgYKBF9uaWNCBwoFX2Rpc2tCBgoEX2JtY0IGCgRfZnJ1QgsKCV9oYXJkd2FyZUIICgZfc3RhdGVCCgoIX3dhaXRpbmdCDwoNX3ByZWFsbG9jYXRlZEIQCg5fbm90X2FsbG9jYXRlZCKIBAoWTWFjaGluZUFsbG9jYXRpb25RdWVyeRIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESHgoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQFIAogBARIfCgVpbWFnZRgEIAEoCUILukgIcgbAs66xAgFIA4gBARIrChFmaWxlc3lzdGVtX2xheW91dBgFIAEoCUILukgIcgbAs66xAgFIBIgBARIeCghob3N0bmFtZRgGIAEoCUIHukgEcgJoAUgFiAEBElAKD2FsbG9jYXRpb25fdHlwZRgHIAEoDjIoLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVBbGxvY2F0aW9uVHlwZUIIukgFggECEAFIBogBARIuCgZsYWJlbHMYCCABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNIB4gBARIvCgN2cG4YCSABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lVlBOSAiIAQFCBwoFX3V1aWRCBwoFX25hbWVCCgoIX3Byb2plY3RCCAoGX2ltYWdlQhQKEl9maWxlc3lzdGVtX2xheW91dEILCglfaG9zdG5hbWVCEgoQX2FsbG9jYXRpb25fdHlwZUIJCgdfbGFiZWxzQgYKBF92cG4iqgEKE01hY2hpbmVOZXR3b3JrUXVlcnkSEAoIbmV0d29ya3MYASADKAkSHgoIcHJlZml4ZXMYAiADKAlCDLpICZIBBriks7ECARIqChRkZXN0aW5hdGlvbl9wcmVmaXhlcxgDIAMoCUIMukgJkgEGuKSzsQIBEhkKA2lwcxgEIAMoCUIMukgJkgEGwKSzsQIBEgwKBHZyZnMYBSADKAQSDAoEYXNucxgGIAMoDSKvAQoPTWFjaGluZU5pY1F1ZXJ5EiIKBG1hY3MYASADKAlCFLpIEZIBDhBkGAEiCHIGuLOusQIBEiAKBW5hbWVzGAIgAygJQhG6SA6SAQsQZBgBIgVyAxiAARIrCg1uZWlnaGJvcl9tYWNzGAMgAygJQhS6SBGSAQ4QZBgBIghyBrizrrECARIpCg5uZWlnaGJvcl9uYW1lcxgEIAMoCUIRukgOkgELEGQYASIFcgMYgAEiSwoQTWFjaGluZURpc2tRdWVyeRIeCgVuYW1lcxgBIAMoCUIPukgMkgEJEGQiBXIDGIABEhcKBXNpemVzGAIgAygEQgi6SAWSAQIQZCK5AQoPTWFjaGluZUJNQ1F1ZXJ5Eh0KB2FkZHJlc3MYASABKAlCB7pIBHICcAFIAIgBARIdCgNtYWMYAiABKAlCC7pICHIGuLOusQIBSAGIAQESGwoEdXNlchgDIAEoCUIIukgFcgMYgAFIAogBARIgCglpbnRlcmZhY2UYBCABKAlCCLpIBXIDGIABSAOIAQFCCgoIX2FkZHJlc3NCBgoEX21hY0IHCgVfdXNlckIMCgpfaW50ZXJmYWNlIoMECg9NYWNoaW5lRlJVUXVlcnkSKgoTY2hhc3Npc19wYXJ0X251bWJlchgBIAEoCUIIukgFcgMYgAFIAIgBARIqChNjaGFzc2lzX3BhcnRfc2VyaWFsGAIgASgJQgi6SAVyAxiAAUgBiAEBEiAKCWJvYXJkX21mZxgDIAEoCUIIukgFcgMYgAFIAogBARIjCgxib2FyZF9zZXJpYWwYBCABKAlCCLpIBXIDGIABSAOIAQESKAoRYm9hcmRfcGFydF9udW1iZXIYBSABKAlCCLpIBXIDGIABSASIAQESKwoUcHJvZHVjdF9tYW51ZmFjdHVyZXIYBiABKAlCCLpIBXIDGIABSAWIAQESKgoTcHJvZHVjdF9wYXJ0X251bWJlchgHIAEoCUIIukgFcgMYgAFIBogBARIlCg5wcm9kdWN0X3NlcmlhbBgIIAEoCUIIukgFcgMYgAFIB4gBAUIWChRfY2hhc3Npc19wYXJ0X251bWJlckIWChRfY2hhc3Npc19wYXJ0X3NlcmlhbEIMCgpfYm9hcmRfbWZnQg8KDV9ib2FyZF9zZXJpYWxCFAoSX2JvYXJkX3BhcnRfbnVtYmVyQhcKFV9wcm9kdWN0X21hbnVmYWN0dXJlckIWChRfcHJvZHVjdF9wYXJ0X251bWJlckIRCg9fcHJvZHVjdF9zZXJpYWwiXAoUTWFjaGluZUhhcmR3YXJlUXVlcnkSEwoGbWVtb3J5GAEgASgESACIAQESFgoJY3B1X2NvcmVzGAIgASgNSAGIAQFCCQoHX21lbW9yeUIMCgpfY3B1X2NvcmVzIuACChJNYWNoaW5lSXNzdWVzUXVlcnkSNgoNbWFjaGluZV9xdWVyeRgBIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVRdWVyeRJACgRvbmx5GAIgAygOMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUlzc3VlVHlwZUINukgKkgEHIgWCAQIQARJACgRvbWl0GAMgAygOMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUlzc3VlVHlwZUINukgKkgEHIgWCAQIQARJICghzZXZlcml0eRgEIAEoDjInLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZVNldmVyaXR5Qgi6SAWCAQIQAUgAiAEBEjcKFGxhc3RfZXJyb3JfdGhyZXNob2xkGAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQgsKCV9zZXZlcml0eSJYCg1NYWNoaW5lSXNzdWVzEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEi8KBmlzc3VlcxgCIAMoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZSLnAQoMTWFjaGluZUlzc3VlEjsKBHR5cGUYASABKA4yIy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lSXNzdWVUeXBlQgi6SAWCAQIQARJDCghzZXZlcml0eRgCIAEoDjInLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZVNldmVyaXR5Qgi6SAWCAQIQARIgCgtkZXNjcmlwdGlvbhgDIAEoCUILukgIcgbIs66xAgESIgoNcmVmZXJlbmNlX3VybBgEIAEoCUILukgIcgbgs66xAgESDwoHZGV0YWlscxgFIAEoCSplCgpJUFByb3RvY29sEhsKF0lQX1BST1RPQ09MX1VOU1BFQ0lGSUVEEAASHAoPSVBfUFJPVE9DT0xfVENQEAEaB4KyGQN0Y3ASHAoPSVBfUFJPVE9DT0xfVURQEAIaB4KyGQN1ZHAqrQEKDE1hY2hpbmVTdGF0ZRIjChlNQUNISU5FX1NUQVRFX1VOU1BFQ0lGSUVEEAAaBIKyGQASJgoVTUFDSElORV9TVEFURV9UQUlOVEVEEAEaC4KyGQd0YWludGVkEiQKFE1BQ0hJTkVfU1RBVEVfTE9DS0VEEAIaCoKyGQZsb2NrZWQSKgoXTUFDSElORV9TVEFURV9BVkFJTEFCTEUQAxoNgrIZCWF2YWlsYWJsZSrfAQodTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50U3RhdGUSNgosTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfU1RBVEVfVU5TUEVDSUZJRUQQABoEgrIZABI9CipNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9TVEFURV9DUkFTSExPT1AQARoNgrIZCWNyYXNobG9vcBJHCi9NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9TVEFURV9GQUlMRURfUkVDTEFJTRACGhKCshkOZmFpbGVkLXJlY2xhaW0qnwYKHE1hY2hpbmVQcm92aXNpb25pbmdFdmVudFR5cGUSLworTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfVFlQRV9VTlNQRUNJRklFRBAAEjQKJU1BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfQUxJVkUQARoJgrIZBUFsaXZlEjgKJ01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfQ1JBU0hFRBACGguCshkHQ3Jhc2hlZBJACitNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BYRV9CT09USU5HEAMaD4KyGQtQWEUgQm9vdGluZxJGCi5NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BMQU5ORURfUkVCT09UEAQaEoKyGQ5QbGFubmVkIFJlYm9vdBI8CilNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BSRVBBUklORxAFGg2CshkJUHJlcGFyaW5nEkAKK01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfUkVHSVNURVJJTkcQBhoPgrIZC1JlZ2lzdGVyaW5nEjgKJ01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfV0FJVElORxAHGguCshkHV2FpdGluZxI+CipNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX0lOU1RBTExJTkcQCBoOgrIZCkluc3RhbGxpbmcSTgoyTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfVFlQRV9CT09USU5HX05FV19LRVJORUwQCRoWgrIZEkJvb3RpbmcgTmV3IEtlcm5lbBJACitNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BIT05FRF9IT01FEAoaD4KyGQtQaG9uZWQgSG9tZRJICi9NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX01BQ0hJTkVfUkVDTEFJTRALGhOCshkPTWFjaGluZSBSZWNsYWltKroBChFNYWNoaW5lTGl2ZWxpbmVzcxIoCh5NQUNISU5FX0xJVkVMSU5FU1NfVU5TUEVDSUZJRUQQABoEgrIZABInChhNQUNISU5FX0xJVkVMSU5FU1NfQUxJVkUQARoJgrIZBWFsaXZlEiUKF01BQ0hJTkVfTElWRUxJTkVTU19ERUFEEAIaCIKyGQRkZWFkEisKGk1BQ0hJTkVfTElWRUxJTkVTU19VTktOT1dOEAMaC4KyGQd1bmtub3duKqwBChVNYWNoaW5lQWxsb2NhdGlvblR5cGUSLQojTUFDSElORV9BTExPQ0FUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABoEgrIZABIwCh9NQUNISU5FX0FMTE9DQVRJT05fVFlQRV9NQUNISU5FEAEaC4KyGQdtYWNoaW5lEjIKIE1BQ0hJTkVfQUxMT0NBVElPTl9UWVBFX0ZJUkVXQUxMEAIaDIKyGQhmaXJld2FsbCr+BAoRTWFjaGluZUJNQ0NvbW1hbmQSIwofTUFDSElORV9CTUNfQ09NTUFORF9VTlNQRUNJRklFRBAAEiIKFk1BQ0hJTkVfQk1DX0NPTU1BTkRfT04QARoGgrIZAm9uEiQKF01BQ0hJTkVfQk1DX0NPTU1BTkRfT0ZGEAIaB4KyGQNvZmYSKAoZTUFDSElORV9CTUNfQ09NTUFORF9SRVNFVBADGgmCshkFcmVzZXQSKAoZTUFDSElORV9CTUNfQ09NTUFORF9DWUNMRRAEGgmCshkFY3ljbGUSNgogTUFDSElORV9CTUNfQ09NTUFORF9CT09UX1RPX0JJT1MQBRoQgrIZDGJvb3QtdG8tYmlvcxI6CiJNQUNISU5FX0JNQ19DT01NQU5EX0JPT1RfRlJPTV9ESVNLEAYaEoKyGQ5ib290LWZyb20tZGlzaxI4CiFNQUNISU5FX0JNQ19DT01NQU5EX0JPT1RfRlJPTV9QWEUQBxoRgrIZDWJvb3QtZnJvbS1weGUSPAojTUFDSElORV9CTUNfQ09NTUFORF9JREVOVElGWV9MRURfT04QCBoTgrIZD2lkZW50aWZ5LWxlZC1vbhI+CiRNQUNISU5FX0JNQ19DT01NQU5EX0lERU5USUZZX0xFRF9PRkYQCRoUgrIZEGlkZW50aWZ5LWxlZC1vZmYSPAojTUFDSElORV9CTUNfQ09NTUFORF9NQUNISU5FX0RFTEVURUQQChoTgrIZD21hY2hpbmUtZGVsZXRlZBI8CiNNQUNISU5FX0JNQ19DT01NQU5EX01BQ0hJTkVfQ1JFQVRFRBALGhOCshkPbWFjaGluZS1jcmVhdGVkKvMGChBNYWNoaW5lSXNzdWVUeXBlEiIKHk1BQ0hJTkVfSVNTVUVfVFlQRV9VTlNQRUNJRklFRBAAEjkKIU1BQ0hJTkVfSVNTVUVfVFlQRV9BU05fVU5JUVVFTkVTUxABGhKCshkOYXNuLW5vdC11bmlxdWUSPwokTUFDSElORV9JU1NVRV9UWVBFX0JNQ19JTkZPX09VVERBVEVEEAIaFYKyGRFibWMtaW5mby1vdXRkYXRlZBJCCiZNQUNISU5FX0lTU1VFX1RZUEVfQk1DX05PTl9ESVNUSU5DVF9JUBADGhaCshkSYm1jLW5vLWRpc3RpbmN0LWlwEjkKIU1BQ0hJTkVfSVNTVUVfVFlQRV9CTUNfV0lUSE9VVF9JUBAEGhKCshkOYm1jLXdpdGhvdXQtaXASOwoiTUFDSElORV9JU1NVRV9UWVBFX0JNQ19XSVRIT1VUX01BQxAFGhOCshkPYm1jLXdpdGhvdXQtbWFjEjAKHU1BQ0hJTkVfSVNTVUVfVFlQRV9DUkFTSF9MT09QEAYaDYKyGQljcmFzaGxvb3ASSQopTUFDSElORV9JU1NVRV9UWVBFX0ZBSUxFRF9NQUNISU5FX1JFQ0xBSU0QBxoagrIZFmZhaWxlZC1tYWNoaW5lLXJlY2xhaW0SPQojTUFDSElORV9JU1NVRV9UWVBFX0xBU1RfRVZFTlRfRVJST1IQCBoUgrIZEGxhc3QtZXZlbnQtZXJyb3ISOwoiTUFDSElORV9JU1NVRV9UWVBFX0xJVkVMSU5FU1NfREVBRBAJGhOCshkPbGl2ZWxpbmVzcy1kZWFkEk0KK01BQ0hJTkVfSVNTVUVfVFlQRV9MSVZFTElORVNTX05PVF9BVkFJTEFCTEUQChocgrIZGGxpdmVsaW5lc3Mtbm90LWF2YWlsYWJsZRJBCiVNQUNISU5FX0lTU1VFX1RZUEVfTElWRUxJTkVTU19VTktOT1dOEAsaFoKyGRJsaXZlbGluZXNzLXVua25vd24SQQolTUFDSElORV9JU1NVRV9UWVBFX05PX0VWRU5UX0NPTlRBSU5FUhAMGhaCshkSbm8tZXZlbnQtY29udGFpbmVyEjUKH01BQ0hJTkVfSVNTVUVfVFlQRV9OT19QQVJUSVRJT04QDRoQgrIZDG5vLXBhcnRpdGlvbirLAQoUTWFjaGluZUlzc3VlU2V2ZXJpdHkSJgoiTUFDSElORV9JU1NVRV9TRVZFUklUWV9VTlNQRUNJRklFRBAAEisKHE1BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfTUlOT1IQARoJgrIZBW1pbm9yEisKHE1BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfTUFKT1IQAhoJgrIZBW1ham9yEjEKH01BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfQ1JJVElDQUwQAxoMgrIZCGNyaXRpY2FsMtEGCg5NYWNoaW5lU2VydmljZRJtCgNHZXQSKy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldFJlcXVlc3QaLC5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJ1CgZDcmVhdGUSLi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUNyZWF0ZVJlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEnUKBlVwZGF0ZRIuLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAEScAoETGlzdBIsLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlTGlzdFJlcXVlc3QaLS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISdQoGRGVsZXRlEi4ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVNlcnZpY2VEZWxldGVSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVNlcnZpY2VEZWxldGVSZXNwb25zZSIKyvMYAgEC4PMYARKBAQoKQk1DQ29tbWFuZBIyLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlQk1DQ29tbWFuZFJlcXVlc3QaMy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUJNQ0NvbW1hbmRSZXNwb25zZSIKyvMYAgEC4PMYARJ1CgZHZXRCTUMSLi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldEJNQ1JlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldEJNQ1Jlc3BvbnNlIgrK8xgCAQLg8xgBQsIBChVjb20ubWV0YWxzdGFjay5hcGkudjJCDE1hY2hpbmVQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_filesystem, file_metalstack_api_v2_image, file_metalstack_api_v2_network, file_metalstack_api_v2_partition, file_metalstack_api_v2_predefined_rules, file_metalstack_api_v2_size]);
/**
* Describes the message metalstack.api.v2.MachineServiceGetRequest.
* Use `create(MachineServiceGetRequestSchema)` to create a new message.
diff --git a/js/metalstack/api/v2/machine_pb.ts b/js/metalstack/api/v2/machine_pb.ts
index fd33e1b0..4377e695 100644
--- a/js/metalstack/api/v2/machine_pb.ts
+++ b/js/metalstack/api/v2/machine_pb.ts
@@ -26,7 +26,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/api/v2/machine.proto.
*/
export const file_metalstack_api_v2_machine: GenFile = /*@__PURE__*/
- fileDesc("Ch9tZXRhbHN0YWNrL2FwaS92Mi9tYWNoaW5lLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiJNChhNYWNoaW5lU2VydmljZUdldFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiSAoZTWFjaGluZVNlcnZpY2VHZXRSZXNwb25zZRIrCgdtYWNoaW5lGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZSKVBwobTWFjaGluZVNlcnZpY2VDcmVhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEhsKBHV1aWQYAiABKAlCCLpIBXIDsAEBSACIAQESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESHgoIaG9zdG5hbWUYBSABKAlCB7pIBHICaAFIAogBARIjCglwYXJ0aXRpb24YBiABKAlCC7pICHIG0LOusQIBSAOIAQESHgoEc2l6ZRgHIAEoCUILukgIcgbAs66xAgFIBIgBARIaCgVpbWFnZRgIIAEoCUILukgIcgbAs66xAgESKwoRZmlsZXN5c3RlbV9sYXlvdXQYCSABKAlCC7pICHIGwLOusQIBSAWIAQESMQoPc3NoX3B1YmxpY19rZXlzGAogAygJQhi6SBWSARLQpLOxAgEQMiIIcgaItK6xAgESJgoIdXNlcmRhdGEYCyABKAlCD7pIDHIK8LOusQIBGICAAkgGiAEBEikKBmxhYmVscxgMIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVscxJHCghuZXR3b3JrcxgNIAMoCzIrLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVBbGxvY2F0aW9uTmV0d29ya0IIukgFkgECCAESIAoOcGxhY2VtZW50X3RhZ3MYDiADKAlCCLpIBZIBAhBAEjsKC2Ruc19zZXJ2ZXJzGA8gAygLMhwubWV0YWxzdGFjay5hcGkudjIuRE5TU2VydmVyQgi6SAWSAQIQAxI7CgtudHBfc2VydmVycxgQIAMoCzIcLm1ldGFsc3RhY2suYXBpLnYyLk5UUFNlcnZlckIIukgFkgECEAoSSwoPYWxsb2NhdGlvbl90eXBlGBEgASgOMigubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb25UeXBlQgi6SAWCAQIQARI2Cg1maXJld2FsbF9zcGVjGBIgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuRmlyZXdhbGxTcGVjQgcKBV91dWlkQg4KDF9kZXNjcmlwdGlvbkILCglfaG9zdG5hbWVCDAoKX3BhcnRpdGlvbkIHCgVfc2l6ZUIUChJfZmlsZXN5c3RlbV9sYXlvdXRCCwoJX3VzZXJkYXRhIkgKDEZpcmV3YWxsU3BlYxI4Cg5maXJld2FsbF9ydWxlcxgBIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsUnVsZXMiSwocTWFjaGluZVNlcnZpY2VDcmVhdGVSZXNwb25zZRIrCgdtYWNoaW5lGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZSK3AgobTWFjaGluZVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEjoKC3VwZGF0ZV9tZXRhGAIgASgLMh0ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTWV0YUIGukgDyAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgAiAEBEjQKBmxhYmVscxgFIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZUxhYmVsc0gBiAEBEjEKD3NzaF9wdWJsaWNfa2V5cxgGIAMoCUIYukgVkgES0KSzsQIBEDIiCHIGiLSusQIBQg4KDF9kZXNjcmlwdGlvbkIJCgdfbGFiZWxzIksKHE1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVzcG9uc2USKwoHbWFjaGluZRgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUiZgoZTWFjaGluZVNlcnZpY2VMaXN0UmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIuCgVxdWVyeRgCIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVRdWVyeSJKChpNYWNoaW5lU2VydmljZUxpc3RSZXNwb25zZRIsCghtYWNoaW5lcxgBIAMoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUiUAobTWFjaGluZVNlcnZpY2VEZWxldGVSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIksKHE1hY2hpbmVTZXJ2aWNlRGVsZXRlUmVzcG9uc2USKwoHbWFjaGluZRgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUilQEKH01hY2hpbmVTZXJ2aWNlQk1DQ29tbWFuZFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESPwoHY29tbWFuZBgDIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUNDb21tYW5kQgi6SAWCAQIQASIiCiBNYWNoaW5lU2VydmljZUJNQ0NvbW1hbmRSZXNwb25zZSJQChtNYWNoaW5lU2VydmljZUdldEJNQ1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiaAocTWFjaGluZVNlcnZpY2VHZXRCTUNSZXNwb25zZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIwCgNibWMYAiABKAsyIy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQk1DUmVwb3J0IrIDCgdNYWNoaW5lEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEi8KCXBhcnRpdGlvbhgDIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlBhcnRpdGlvbhIWCgRyYWNrGAQgASgJQgi6SAVyAxiAARIlCgRzaXplGAUgASgLMhcubWV0YWxzdGFjay5hcGkudjIuU2l6ZRI0CghoYXJkd2FyZRgGIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVIYXJkd2FyZRI4CgphbGxvY2F0aW9uGAcgASgLMiQubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb24SMAoGc3RhdHVzGAggASgLMiAubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVN0YXR1cxJWChpyZWNlbnRfcHJvdmlzaW9uaW5nX2V2ZW50cxgJIAEoCzIyLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVSZWNlbnRQcm92aXNpb25pbmdFdmVudHMi7wEKDU1hY2hpbmVTdGF0dXMSNgoJY29uZGl0aW9uGAEgASgLMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUNvbmRpdGlvbhJECglsZWRfc3RhdGUYAiABKAsyMS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQ2hhc3Npc0lkZW50aWZ5TEVEU3RhdGUSQgoKbGl2ZWxpbmVzcxgDIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVMaXZlbGluZXNzQgi6SAWCAQIQARIcChRtZXRhbF9oYW1tZXJfdmVyc2lvbhgEIAEoCSKIAQoQTWFjaGluZUNvbmRpdGlvbhI4CgVzdGF0ZRgBIAEoDjIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTdGF0ZUIIukgFggECEAESIAoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBEhgKBmlzc3VlchgDIAEoCUIIukgFcgMYgAIihAYKEU1hY2hpbmVBbGxvY2F0aW9uEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIcCgpjcmVhdGVkX2J5GAUgASgJQgi6SAVyAxiAARIZCgdwcm9qZWN0GAYgASgJQgi6SAVyA7ABARInCgVpbWFnZRgHIAEoCzIYLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlEj4KEWZpbGVzeXN0ZW1fbGF5b3V0GAggASgLMiMubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dBIzCghuZXR3b3JrcxgJIAMoCzIhLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVOZXR3b3JrEhkKCGhvc3RuYW1lGAogASgJQge6SARyAmgBEjEKD3NzaF9wdWJsaWNfa2V5cxgLIAMoCUIYukgVkgES0KSzsQIBEDIiCHIGiLSusQIBEiEKCHVzZXJkYXRhGAwgASgJQg+6SAxyCvCzrrECARiAgAISSwoPYWxsb2NhdGlvbl90eXBlGA0gASgOMigubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb25UeXBlQgi6SAWCAQIQARI4Cg5maXJld2FsbF9ydWxlcxgOIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsUnVsZXMSOwoLZG5zX3NlcnZlcnMYDyADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5ETlNTZXJ2ZXJCCLpIBZIBAhADEjsKC250cF9zZXJ2ZXJzGBAgAygLMhwubWV0YWxzdGFjay5hcGkudjIuTlRQU2VydmVyQgi6SAWSAQIQChIqCgN2cG4YESABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lVlBOIlMKGE1hY2hpbmVBbGxvY2F0aW9uTmV0d29yaxIcCgduZXR3b3JrGAEgASgJQgu6SAhyBsCzrrECARIZCgNpcHMYAiADKAlCDLpICZIBBsCks7ECASJ/Cg1GaXJld2FsbFJ1bGVzEjUKBmVncmVzcxgBIAMoCzIlLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsRWdyZXNzUnVsZRI3CgdpbmdyZXNzGAIgAygLMiYubWV0YWxzdGFjay5hcGkudjIuRmlyZXdhbGxJbmdyZXNzUnVsZSKyAQoSRmlyZXdhbGxFZ3Jlc3NSdWxlEjkKCHByb3RvY29sGAEgASgOMh0ubWV0YWxzdGFjay5hcGkudjIuSVBQcm90b2NvbEIIukgFggECEAESHQoFcG9ydHMYAiADKA1CDrpIC5IBCCIGKgQY/P8DEhgKAnRvGAMgAygJQgy6SAmSAQa4pLOxAgESKAoHY29tbWVudBgEIAEoCUIXukgU2AEBcg8YZDILXlthLXpfIC1dKiQizwEKE0ZpcmV3YWxsSW5ncmVzc1J1bGUSOQoIcHJvdG9jb2wYASABKA4yHS5tZXRhbHN0YWNrLmFwaS52Mi5JUFByb3RvY29sQgi6SAWCAQIQARIdCgVwb3J0cxgCIAMoDUIOukgLkgEIIgYqBBj8/wMSGAoCdG8YAyADKAlCDLpICZIBBriks7ECARIaCgRmcm9tGAQgAygJQgy6SAmSAQa4pLOxAgESKAoHY29tbWVudBgFIAEoCUIXukgU2AEBcg8YZDILXlthLXpfIC1dKiQixgIKDk1hY2hpbmVOZXR3b3JrEg8KB25ldHdvcmsYASABKAkSHgoIcHJlZml4ZXMYAiADKAlCDLpICZIBBriks7ECARIqChRkZXN0aW5hdGlvbl9wcmVmaXhlcxgDIAMoCUIMukgJkgEGuKSzsQIBEhkKA2lwcxgEIAMoCUIMukgJkgEGwKSzsQIBEj4KDG5ldHdvcmtfdHlwZRgFIAEoDjIeLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtUeXBlQgi6SAWCAQIQARI2CghuYXRfdHlwZRgGIAEoDjIaLm1ldGFsc3RhY2suYXBpLnYyLk5BVFR5cGVCCLpIBYIBAhABEgsKA3ZyZhgHIAEoBBILCgNhc24YCCABKA0SHgoHcHJvamVjdBgJIAEoCUIIukgFcgOwAQFIAIgBAUIKCghfcHJvamVjdCLaAQoPTWFjaGluZUhhcmR3YXJlEg4KBm1lbW9yeRgBIAEoBBI0CgVkaXNrcxgCIAMoCzIlLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCbG9ja0RldmljZRIpCgRjcHVzGAMgAygLMhsubWV0YWxzdGFjay5hcGkudjIuTWV0YWxDUFUSKQoEZ3B1cxgEIAMoCzIbLm1ldGFsc3RhY2suYXBpLnYyLk1ldGFsR1BVEisKBG5pY3MYBSADKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljIl0KCE1ldGFsQ1BVEhgKBnZlbmRvchgBIAEoCUIIukgFcgMYgAISFwoFbW9kZWwYAiABKAlCCLpIBXIDGIACEg0KBWNvcmVzGAMgASgNEg8KB3RocmVhZHMYBCABKA0iPQoITWV0YWxHUFUSGAoGdmVuZG9yGAEgASgJQgi6SAVyAxiAAhIXCgVtb2RlbBgCIAEoCUIIukgFcgMYgAIi5QEKCk1hY2hpbmVOaWMSGAoDbWFjGAEgASgJQgu6SAhyBrizrrECARIZCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECARIcCgppZGVudGlmaWVyGAMgASgJQgi6SAVyAxiAARIYCgZ2ZW5kb3IYBCABKAlCCLpIBXIDGIABEhcKBW1vZGVsGAUgASgJQgi6SAVyAxiAARINCgVzcGVlZBgGIAEoBBIwCgluZWlnaGJvcnMYByADKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljEhAKCGhvc3RuYW1lGAggASgJIj0KEk1hY2hpbmVCbG9ja0RldmljZRIZCgRuYW1lGAEgASgJQgu6SAhyBsCzrrECARIMCgRzaXplGAIgASgEIlsKHk1hY2hpbmVDaGFzc2lzSWRlbnRpZnlMRURTdGF0ZRIXCgV2YWx1ZRgBIAEoCUIIukgFcgMYgAESIAoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBIooDChBNYWNoaW5lQk1DUmVwb3J0EioKA2JtYxgBIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUMSLAoEYmlvcxgCIAEoCzIeLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCaW9zEioKA2ZydRgDIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlUSOwoMcG93ZXJfbWV0cmljGAQgASgLMiUubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVBvd2VyTWV0cmljEj0KDnBvd2VyX3N1cHBsaWVzGAUgAygLMiUubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVBvd2VyU3VwcGx5EkQKCWxlZF9zdGF0ZRgGIAEoCzIxLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVDaGFzc2lzSWRlbnRpZnlMRURTdGF0ZRIuCgp1cGRhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJjCgtNYWNoaW5lQmlvcxIcCgd2ZXJzaW9uGAEgASgJQgu6SAhyBsizrrECARIbCgZ2ZW5kb3IYAiABKAlCC7pICHIGyLOusQIBEhkKBGRhdGUYAyABKAlCC7pICHIGyLOusQIBItsBCgpNYWNoaW5lQk1DEhkKB2FkZHJlc3MYASABKAlCCLpIBXIDgAIBEhgKA21hYxgCIAEoCUILukgIcga4s66xAgESGQoEdXNlchgDIAEoCUILukgIcgbIs66xAgESHQoIcGFzc3dvcmQYBCABKAlCC7pICHIGyLOusQIBEh4KCWludGVyZmFjZRgFIAEoCUILukgIcgbIs66xAgESHAoHdmVyc2lvbhgGIAEoCUILukgIcgbIs66xAgESIAoLcG93ZXJfc3RhdGUYByABKAlCC7pICHIGyLOusQIBIp4ECgpNYWNoaW5lRlJVEi0KE2NoYXNzaXNfcGFydF9udW1iZXIYASABKAlCC7pICHIGyLOusQIBSACIAQESLQoTY2hhc3Npc19wYXJ0X3NlcmlhbBgCIAEoCUILukgIcgbIs66xAgFIAYgBARIjCglib2FyZF9tZmcYAyABKAlCC7pICHIGyLOusQIBSAKIAQESKgoQYm9hcmRfbWZnX3NlcmlhbBgEIAEoCUILukgIcgbIs66xAgFIA4gBARIrChFib2FyZF9wYXJ0X251bWJlchgFIAEoCUILukgIcgbIs66xAgFIBIgBARIuChRwcm9kdWN0X21hbnVmYWN0dXJlchgGIAEoCUILukgIcgbIs66xAgFIBYgBARItChNwcm9kdWN0X3BhcnRfbnVtYmVyGAcgASgJQgu6SAhyBsizrrECAUgGiAEBEigKDnByb2R1Y3Rfc2VyaWFsGAggASgJQgu6SAhyBsizrrECAUgHiAEBQhYKFF9jaGFzc2lzX3BhcnRfbnVtYmVyQhYKFF9jaGFzc2lzX3BhcnRfc2VyaWFsQgwKCl9ib2FyZF9tZmdCEwoRX2JvYXJkX21mZ19zZXJpYWxCFAoSX2JvYXJkX3BhcnRfbnVtYmVyQhcKFV9wcm9kdWN0X21hbnVmYWN0dXJlckIWChRfcHJvZHVjdF9wYXJ0X251bWJlckIRCg9fcHJvZHVjdF9zZXJpYWwihQEKEk1hY2hpbmVQb3dlck1ldHJpYxIeChZhdmVyYWdlX2NvbnN1bWVkX3dhdHRzGAEgASgCEhcKD2ludGVydmFsX2luX21pbhgCIAEoAhIaChJtYXhfY29uc3VtZWRfd2F0dHMYAyABKAISGgoSbWluX2NvbnN1bWVkX3dhdHRzGAQgASgCIjMKEk1hY2hpbmVQb3dlclN1cHBseRIOCgZoZWFsdGgYASABKAkSDQoFc3RhdGUYAiABKAkipQIKH01hY2hpbmVSZWNlbnRQcm92aXNpb25pbmdFdmVudHMSOwoGZXZlbnRzGAEgAygLMisubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50EjMKD2xhc3RfZXZlbnRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASRQoQbGFzdF9lcnJvcl9ldmVudBgDIAEoCzIrLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVQcm92aXNpb25pbmdFdmVudBJJCgVzdGF0ZRgEIAEoDjIwLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVQcm92aXNpb25pbmdFdmVudFN0YXRlQgi6SAWCAQIQASKfAQoYTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50EigKBHRpbWUYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkgKBWV2ZW50GAIgASgOMi8ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50VHlwZUIIukgFggECEAESDwoHbWVzc2FnZRgDIAEoCSJrCgpNYWNoaW5lVlBOEh0KFWNvbnRyb2xfcGxhbmVfYWRkcmVzcxgBIAEoCRIQCghhdXRoX2tleRgCIAEoCRIRCgljb25uZWN0ZWQYAyABKAgSGQoDaXBzGAQgAygJQgy6SAmSAQbApLOxAgEivAcKDE1hY2hpbmVRdWVyeRIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESIwoJcGFydGl0aW9uGAMgASgJQgu6SAhyBtCzrrECAUgCiAEBEh4KBHNpemUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESHQoEcmFjaxgFIAEoCUIKukgHcgUQAhiAAUgEiAEBEi4KBmxhYmVscxgGIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gFiAEBEkIKCmFsbG9jYXRpb24YByABKAsyKS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQWxsb2NhdGlvblF1ZXJ5SAaIAQESPAoHbmV0d29yaxgIIAEoCzImLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVOZXR3b3JrUXVlcnlIB4gBARI0CgNuaWMYCSABKAsyIi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljUXVlcnlICIgBARI2CgRkaXNrGAogASgLMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZURpc2tRdWVyeUgJiAEBEjQKA2JtYxgLIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUNRdWVyeUgKiAEBEjQKA2ZydRgMIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlVRdWVyeUgLiAEBEj4KCGhhcmR3YXJlGA0gASgLMicubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUhhcmR3YXJlUXVlcnlIDIgBARIzCgVzdGF0ZRgOIAEoDjIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTdGF0ZUgNiAEBEhQKB3dhaXRpbmcYDyABKAhIDogBARIZCgxwcmVhbGxvY2F0ZWQYECABKAhID4gBARIaCg1ub3RfYWxsb2NhdGVkGBEgASgISBCIAQFCBwoFX3V1aWRCBwoFX25hbWVCDAoKX3BhcnRpdGlvbkIHCgVfc2l6ZUIHCgVfcmFja0IJCgdfbGFiZWxzQg0KC19hbGxvY2F0aW9uQgoKCF9uZXR3b3JrQgYKBF9uaWNCBwoFX2Rpc2tCBgoEX2JtY0IGCgRfZnJ1QgsKCV9oYXJkd2FyZUIICgZfc3RhdGVCCgoIX3dhaXRpbmdCDwoNX3ByZWFsbG9jYXRlZEIQCg5fbm90X2FsbG9jYXRlZCKIBAoWTWFjaGluZUFsbG9jYXRpb25RdWVyeRIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESHgoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQFIAogBARIfCgVpbWFnZRgEIAEoCUILukgIcgbAs66xAgFIA4gBARIrChFmaWxlc3lzdGVtX2xheW91dBgFIAEoCUILukgIcgbAs66xAgFIBIgBARIeCghob3N0bmFtZRgGIAEoCUIHukgEcgJoAUgFiAEBElAKD2FsbG9jYXRpb25fdHlwZRgHIAEoDjIoLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVBbGxvY2F0aW9uVHlwZUIIukgFggECEAFIBogBARIuCgZsYWJlbHMYCCABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNIB4gBARIvCgN2cG4YCSABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lVlBOSAiIAQFCBwoFX3V1aWRCBwoFX25hbWVCCgoIX3Byb2plY3RCCAoGX2ltYWdlQhQKEl9maWxlc3lzdGVtX2xheW91dEILCglfaG9zdG5hbWVCEgoQX2FsbG9jYXRpb25fdHlwZUIJCgdfbGFiZWxzQgYKBF92cG4iqgEKE01hY2hpbmVOZXR3b3JrUXVlcnkSEAoIbmV0d29ya3MYASADKAkSHgoIcHJlZml4ZXMYAiADKAlCDLpICZIBBriks7ECARIqChRkZXN0aW5hdGlvbl9wcmVmaXhlcxgDIAMoCUIMukgJkgEGuKSzsQIBEhkKA2lwcxgEIAMoCUIMukgJkgEGwKSzsQIBEgwKBHZyZnMYBSADKAQSDAoEYXNucxgGIAMoDSKvAQoPTWFjaGluZU5pY1F1ZXJ5EiIKBG1hY3MYASADKAlCFLpIEZIBDhBkGAEiCHIGuLOusQIBEiAKBW5hbWVzGAIgAygJQhG6SA6SAQsQZBgBIgVyAxiAARIrCg1uZWlnaGJvcl9tYWNzGAMgAygJQhS6SBGSAQ4QZBgBIghyBrizrrECARIpCg5uZWlnaGJvcl9uYW1lcxgEIAMoCUIRukgOkgELEGQYASIFcgMYgAEiSwoQTWFjaGluZURpc2tRdWVyeRIeCgVuYW1lcxgBIAMoCUIPukgMkgEJEGQiBXIDGIABEhcKBXNpemVzGAIgAygEQgi6SAWSAQIQZCK5AQoPTWFjaGluZUJNQ1F1ZXJ5Eh0KB2FkZHJlc3MYASABKAlCB7pIBHICcAFIAIgBARIdCgNtYWMYAiABKAlCC7pICHIGuLOusQIBSAGIAQESGwoEdXNlchgDIAEoCUIIukgFcgMYgAFIAogBARIgCglpbnRlcmZhY2UYBCABKAlCCLpIBXIDGIABSAOIAQFCCgoIX2FkZHJlc3NCBgoEX21hY0IHCgVfdXNlckIMCgpfaW50ZXJmYWNlIoMECg9NYWNoaW5lRlJVUXVlcnkSKgoTY2hhc3Npc19wYXJ0X251bWJlchgBIAEoCUIIukgFcgMYgAFIAIgBARIqChNjaGFzc2lzX3BhcnRfc2VyaWFsGAIgASgJQgi6SAVyAxiAAUgBiAEBEiAKCWJvYXJkX21mZxgDIAEoCUIIukgFcgMYgAFIAogBARIjCgxib2FyZF9zZXJpYWwYBCABKAlCCLpIBXIDGIABSAOIAQESKAoRYm9hcmRfcGFydF9udW1iZXIYBSABKAlCCLpIBXIDGIABSASIAQESKwoUcHJvZHVjdF9tYW51ZmFjdHVyZXIYBiABKAlCCLpIBXIDGIABSAWIAQESKgoTcHJvZHVjdF9wYXJ0X251bWJlchgHIAEoCUIIukgFcgMYgAFIBogBARIlCg5wcm9kdWN0X3NlcmlhbBgIIAEoCUIIukgFcgMYgAFIB4gBAUIWChRfY2hhc3Npc19wYXJ0X251bWJlckIWChRfY2hhc3Npc19wYXJ0X3NlcmlhbEIMCgpfYm9hcmRfbWZnQg8KDV9ib2FyZF9zZXJpYWxCFAoSX2JvYXJkX3BhcnRfbnVtYmVyQhcKFV9wcm9kdWN0X21hbnVmYWN0dXJlckIWChRfcHJvZHVjdF9wYXJ0X251bWJlckIRCg9fcHJvZHVjdF9zZXJpYWwiXAoUTWFjaGluZUhhcmR3YXJlUXVlcnkSEwoGbWVtb3J5GAEgASgESACIAQESFgoJY3B1X2NvcmVzGAIgASgNSAGIAQFCCQoHX21lbW9yeUIMCgpfY3B1X2NvcmVzIuACChJNYWNoaW5lSXNzdWVzUXVlcnkSNgoNbWFjaGluZV9xdWVyeRgBIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVRdWVyeRJACgRvbmx5GAIgAygOMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUlzc3VlVHlwZUINukgKkgEHIgWCAQIQARJACgRvbWl0GAMgAygOMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUlzc3VlVHlwZUINukgKkgEHIgWCAQIQARJICghzZXZlcml0eRgEIAEoDjInLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZVNldmVyaXR5Qgi6SAWCAQIQAUgAiAEBEjcKFGxhc3RfZXJyb3JfdGhyZXNob2xkGAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQgsKCV9zZXZlcml0eSJYCg1NYWNoaW5lSXNzdWVzEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEi8KBmlzc3VlcxgCIAMoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZSLnAQoMTWFjaGluZUlzc3VlEjsKBHR5cGUYASABKA4yIy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lSXNzdWVUeXBlQgi6SAWCAQIQARJDCghzZXZlcml0eRgCIAEoDjInLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZVNldmVyaXR5Qgi6SAWCAQIQARIgCgtkZXNjcmlwdGlvbhgDIAEoCUILukgIcgbIs66xAgESIgoNcmVmZXJlbmNlX3VybBgEIAEoCUILukgIcgbgs66xAgESDwoHZGV0YWlscxgFIAEoCSplCgpJUFByb3RvY29sEhsKF0lQX1BST1RPQ09MX1VOU1BFQ0lGSUVEEAASHAoPSVBfUFJPVE9DT0xfVENQEAEaB4KyGQN0Y3ASHAoPSVBfUFJPVE9DT0xfVURQEAIaB4KyGQN1ZHAqrQEKDE1hY2hpbmVTdGF0ZRIjChlNQUNISU5FX1NUQVRFX1VOU1BFQ0lGSUVEEAAaBIKyGQASJgoVTUFDSElORV9TVEFURV9UQUlOVEVEEAEaC4KyGQd0YWludGVkEiQKFE1BQ0hJTkVfU1RBVEVfTE9DS0VEEAIaCoKyGQZsb2NrZWQSKgoXTUFDSElORV9TVEFURV9BVkFJTEFCTEUQAxoNgrIZCWF2YWlsYWJsZSrfAQodTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50U3RhdGUSNgosTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfU1RBVEVfVU5TUEVDSUZJRUQQABoEgrIZABI9CipNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9TVEFURV9DUkFTSExPT1AQARoNgrIZCWNyYXNobG9vcBJHCi9NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9TVEFURV9GQUlMRURfUkVDTEFJTRACGhKCshkOZmFpbGVkLXJlY2xhaW0qnwYKHE1hY2hpbmVQcm92aXNpb25pbmdFdmVudFR5cGUSLworTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfVFlQRV9VTlNQRUNJRklFRBAAEjQKJU1BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfQUxJVkUQARoJgrIZBUFsaXZlEjgKJ01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfQ1JBU0hFRBACGguCshkHQ3Jhc2hlZBJACitNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BYRV9CT09USU5HEAMaD4KyGQtQWEUgQm9vdGluZxJGCi5NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BMQU5ORURfUkVCT09UEAQaEoKyGQ5QbGFubmVkIFJlYm9vdBI8CilNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BSRVBBUklORxAFGg2CshkJUHJlcGFyaW5nEkAKK01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfUkVHSVNURVJJTkcQBhoPgrIZC1JlZ2lzdGVyaW5nEjgKJ01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfV0FJVElORxAHGguCshkHV2FpdGluZxI+CipNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX0lOU1RBTExJTkcQCBoOgrIZCkluc3RhbGxpbmcSTgoyTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfVFlQRV9CT09USU5HX05FV19LRVJORUwQCRoWgrIZEkJvb3RpbmcgTmV3IEtlcm5lbBJACitNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BIT05FRF9IT01FEAoaD4KyGQtQaG9uZWQgSG9tZRJICi9NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX01BQ0hJTkVfUkVDTEFJTRALGhOCshkPTWFjaGluZSBSZWNsYWltKroBChFNYWNoaW5lTGl2ZWxpbmVzcxIoCh5NQUNISU5FX0xJVkVMSU5FU1NfVU5TUEVDSUZJRUQQABoEgrIZABInChhNQUNISU5FX0xJVkVMSU5FU1NfQUxJVkUQARoJgrIZBWFsaXZlEiUKF01BQ0hJTkVfTElWRUxJTkVTU19ERUFEEAIaCIKyGQRkZWFkEisKGk1BQ0hJTkVfTElWRUxJTkVTU19VTktOT1dOEAMaC4KyGQd1bmtub3duKqwBChVNYWNoaW5lQWxsb2NhdGlvblR5cGUSLQojTUFDSElORV9BTExPQ0FUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABoEgrIZABIwCh9NQUNISU5FX0FMTE9DQVRJT05fVFlQRV9NQUNISU5FEAEaC4KyGQdtYWNoaW5lEjIKIE1BQ0hJTkVfQUxMT0NBVElPTl9UWVBFX0ZJUkVXQUxMEAIaDIKyGQhmaXJld2FsbCr+BAoRTWFjaGluZUJNQ0NvbW1hbmQSIwofTUFDSElORV9CTUNfQ09NTUFORF9VTlNQRUNJRklFRBAAEiIKFk1BQ0hJTkVfQk1DX0NPTU1BTkRfT04QARoGgrIZAm9uEiQKF01BQ0hJTkVfQk1DX0NPTU1BTkRfT0ZGEAIaB4KyGQNvZmYSKAoZTUFDSElORV9CTUNfQ09NTUFORF9SRVNFVBADGgmCshkFcmVzZXQSKAoZTUFDSElORV9CTUNfQ09NTUFORF9DWUNMRRAEGgmCshkFY3ljbGUSNgogTUFDSElORV9CTUNfQ09NTUFORF9CT09UX1RPX0JJT1MQBRoQgrIZDGJvb3QtdG8tYmlvcxI6CiJNQUNISU5FX0JNQ19DT01NQU5EX0JPT1RfRlJPTV9ESVNLEAYaEoKyGQ5ib290LWZyb20tZGlzaxI4CiFNQUNISU5FX0JNQ19DT01NQU5EX0JPT1RfRlJPTV9QWEUQBxoRgrIZDWJvb3QtZnJvbS1weGUSPAojTUFDSElORV9CTUNfQ09NTUFORF9JREVOVElGWV9MRURfT04QCBoTgrIZD2lkZW50aWZ5LWxlZC1vbhI+CiRNQUNISU5FX0JNQ19DT01NQU5EX0lERU5USUZZX0xFRF9PRkYQCRoUgrIZEGlkZW50aWZ5LWxlZC1vZmYSPAojTUFDSElORV9CTUNfQ09NTUFORF9NQUNISU5FX0RFTEVURUQQChoTgrIZD21hY2hpbmUtZGVsZXRlZBI8CiNNQUNISU5FX0JNQ19DT01NQU5EX01BQ0hJTkVfQ1JFQVRFRBALGhOCshkPbWFjaGluZS1jcmVhdGVkKvMGChBNYWNoaW5lSXNzdWVUeXBlEiIKHk1BQ0hJTkVfSVNTVUVfVFlQRV9VTlNQRUNJRklFRBAAEjkKIU1BQ0hJTkVfSVNTVUVfVFlQRV9BU05fVU5JUVVFTkVTUxABGhKCshkOYXNuLW5vdC11bmlxdWUSPwokTUFDSElORV9JU1NVRV9UWVBFX0JNQ19JTkZPX09VVERBVEVEEAIaFYKyGRFibWMtaW5mby1vdXRkYXRlZBJCCiZNQUNISU5FX0lTU1VFX1RZUEVfQk1DX05PTl9ESVNUSU5DVF9JUBADGhaCshkSYm1jLW5vLWRpc3RpbmN0LWlwEjkKIU1BQ0hJTkVfSVNTVUVfVFlQRV9CTUNfV0lUSE9VVF9JUBAEGhKCshkOYm1jLXdpdGhvdXQtaXASOwoiTUFDSElORV9JU1NVRV9UWVBFX0JNQ19XSVRIT1VUX01BQxAFGhOCshkPYm1jLXdpdGhvdXQtbWFjEjAKHU1BQ0hJTkVfSVNTVUVfVFlQRV9DUkFTSF9MT09QEAYaDYKyGQljcmFzaGxvb3ASSQopTUFDSElORV9JU1NVRV9UWVBFX0ZBSUxFRF9NQUNISU5FX1JFQ0xBSU0QBxoagrIZFmZhaWxlZC1tYWNoaW5lLXJlY2xhaW0SPQojTUFDSElORV9JU1NVRV9UWVBFX0xBU1RfRVZFTlRfRVJST1IQCBoUgrIZEGxhc3QtZXZlbnQtZXJyb3ISOwoiTUFDSElORV9JU1NVRV9UWVBFX0xJVkVMSU5FU1NfREVBRBAJGhOCshkPbGl2ZWxpbmVzcy1kZWFkEk0KK01BQ0hJTkVfSVNTVUVfVFlQRV9MSVZFTElORVNTX05PVF9BVkFJTEFCTEUQChocgrIZGGxpdmVsaW5lc3Mtbm90LWF2YWlsYWJsZRJBCiVNQUNISU5FX0lTU1VFX1RZUEVfTElWRUxJTkVTU19VTktOT1dOEAsaFoKyGRJsaXZlbGluZXNzLXVua25vd24SQQolTUFDSElORV9JU1NVRV9UWVBFX05PX0VWRU5UX0NPTlRBSU5FUhAMGhaCshkSbm8tZXZlbnQtY29udGFpbmVyEjUKH01BQ0hJTkVfSVNTVUVfVFlQRV9OT19QQVJUSVRJT04QDRoQgrIZDG5vLXBhcnRpdGlvbirLAQoUTWFjaGluZUlzc3VlU2V2ZXJpdHkSJgoiTUFDSElORV9JU1NVRV9TRVZFUklUWV9VTlNQRUNJRklFRBAAEisKHE1BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfTUlOT1IQARoJgrIZBW1pbm9yEisKHE1BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfTUFKT1IQAhoJgrIZBW1ham9yEjEKH01BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfQ1JJVElDQUwQAxoMgrIZCGNyaXRpY2FsMtEGCg5NYWNoaW5lU2VydmljZRJtCgNHZXQSKy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldFJlcXVlc3QaLC5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJ1CgZDcmVhdGUSLi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUNyZWF0ZVJlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEnUKBlVwZGF0ZRIuLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAEScAoETGlzdBIsLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlTGlzdFJlcXVlc3QaLS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISdQoGRGVsZXRlEi4ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVNlcnZpY2VEZWxldGVSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVNlcnZpY2VEZWxldGVSZXNwb25zZSIKyvMYAgEC4PMYARKBAQoKQk1DQ29tbWFuZBIyLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlQk1DQ29tbWFuZFJlcXVlc3QaMy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUJNQ0NvbW1hbmRSZXNwb25zZSIKyvMYAgEC4PMYARJ1CgZHZXRCTUMSLi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldEJNQ1JlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldEJNQ1Jlc3BvbnNlIgrK8xgCAQLg8xgBQsIBChVjb20ubWV0YWxzdGFjay5hcGkudjJCDE1hY2hpbmVQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_filesystem, file_metalstack_api_v2_image, file_metalstack_api_v2_network, file_metalstack_api_v2_partition, file_metalstack_api_v2_predefined_rules, file_metalstack_api_v2_size]);
+ fileDesc("Ch9tZXRhbHN0YWNrL2FwaS92Mi9tYWNoaW5lLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiJNChhNYWNoaW5lU2VydmljZUdldFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiSAoZTWFjaGluZVNlcnZpY2VHZXRSZXNwb25zZRIrCgdtYWNoaW5lGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZSKVBwobTWFjaGluZVNlcnZpY2VDcmVhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEhsKBHV1aWQYAiABKAlCCLpIBXIDsAEBSACIAQESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESHgoIaG9zdG5hbWUYBSABKAlCB7pIBHICaAFIAogBARIjCglwYXJ0aXRpb24YBiABKAlCC7pICHIG0LOusQIBSAOIAQESHgoEc2l6ZRgHIAEoCUILukgIcgbAs66xAgFIBIgBARIaCgVpbWFnZRgIIAEoCUILukgIcgbAs66xAgESKwoRZmlsZXN5c3RlbV9sYXlvdXQYCSABKAlCC7pICHIGwLOusQIBSAWIAQESMQoPc3NoX3B1YmxpY19rZXlzGAogAygJQhi6SBWSARLQpLOxAgEQMiIIcgaItK6xAgESJgoIdXNlcmRhdGEYCyABKAlCD7pIDHIK8LOusQIBGICAAkgGiAEBEikKBmxhYmVscxgMIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVscxJHCghuZXR3b3JrcxgNIAMoCzIrLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVBbGxvY2F0aW9uTmV0d29ya0IIukgFkgECCAESIAoOcGxhY2VtZW50X3RhZ3MYDiADKAlCCLpIBZIBAhBAEjsKC2Ruc19zZXJ2ZXJzGA8gAygLMhwubWV0YWxzdGFjay5hcGkudjIuRE5TU2VydmVyQgi6SAWSAQIQAxI7CgtudHBfc2VydmVycxgQIAMoCzIcLm1ldGFsc3RhY2suYXBpLnYyLk5UUFNlcnZlckIIukgFkgECEAoSSwoPYWxsb2NhdGlvbl90eXBlGBEgASgOMigubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb25UeXBlQgi6SAWCAQIQARI2Cg1maXJld2FsbF9zcGVjGBIgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuRmlyZXdhbGxTcGVjQgcKBV91dWlkQg4KDF9kZXNjcmlwdGlvbkILCglfaG9zdG5hbWVCDAoKX3BhcnRpdGlvbkIHCgVfc2l6ZUIUChJfZmlsZXN5c3RlbV9sYXlvdXRCCwoJX3VzZXJkYXRhIkgKDEZpcmV3YWxsU3BlYxI4Cg5maXJld2FsbF9ydWxlcxgBIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsUnVsZXMiSwocTWFjaGluZVNlcnZpY2VDcmVhdGVSZXNwb25zZRIrCgdtYWNoaW5lGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZSK3AgobTWFjaGluZVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEjoKC3VwZGF0ZV9tZXRhGAIgASgLMh0ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTWV0YUIGukgDyAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgAiAEBEjQKBmxhYmVscxgFIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZUxhYmVsc0gBiAEBEjEKD3NzaF9wdWJsaWNfa2V5cxgGIAMoCUIYukgVkgES0KSzsQIBEDIiCHIGiLSusQIBQg4KDF9kZXNjcmlwdGlvbkIJCgdfbGFiZWxzIksKHE1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVzcG9uc2USKwoHbWFjaGluZRgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUiZgoZTWFjaGluZVNlcnZpY2VMaXN0UmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIuCgVxdWVyeRgCIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVRdWVyeSJKChpNYWNoaW5lU2VydmljZUxpc3RSZXNwb25zZRIsCghtYWNoaW5lcxgBIAMoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUiUAobTWFjaGluZVNlcnZpY2VEZWxldGVSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIksKHE1hY2hpbmVTZXJ2aWNlRGVsZXRlUmVzcG9uc2USKwoHbWFjaGluZRgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUilQEKH01hY2hpbmVTZXJ2aWNlQk1DQ29tbWFuZFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESPwoHY29tbWFuZBgDIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUNDb21tYW5kQgi6SAWCAQIQASIiCiBNYWNoaW5lU2VydmljZUJNQ0NvbW1hbmRSZXNwb25zZSJQChtNYWNoaW5lU2VydmljZUdldEJNQ1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiaAocTWFjaGluZVNlcnZpY2VHZXRCTUNSZXNwb25zZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIwCgNibWMYAiABKAsyIy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQk1DUmVwb3J0IsoDCgdNYWNoaW5lEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEi8KCXBhcnRpdGlvbhgDIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlBhcnRpdGlvbhIWCgRyYWNrGAQgASgJQgi6SAVyAxiAARIWCgRyb29tGAUgASgJQgi6SAVyAxiAARIlCgRzaXplGAYgASgLMhcubWV0YWxzdGFjay5hcGkudjIuU2l6ZRI0CghoYXJkd2FyZRgHIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVIYXJkd2FyZRI4CgphbGxvY2F0aW9uGAggASgLMiQubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb24SMAoGc3RhdHVzGAkgASgLMiAubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVN0YXR1cxJWChpyZWNlbnRfcHJvdmlzaW9uaW5nX2V2ZW50cxgKIAEoCzIyLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVSZWNlbnRQcm92aXNpb25pbmdFdmVudHMi7wEKDU1hY2hpbmVTdGF0dXMSNgoJY29uZGl0aW9uGAEgASgLMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUNvbmRpdGlvbhJECglsZWRfc3RhdGUYAiABKAsyMS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQ2hhc3Npc0lkZW50aWZ5TEVEU3RhdGUSQgoKbGl2ZWxpbmVzcxgDIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVMaXZlbGluZXNzQgi6SAWCAQIQARIcChRtZXRhbF9oYW1tZXJfdmVyc2lvbhgEIAEoCSKIAQoQTWFjaGluZUNvbmRpdGlvbhI4CgVzdGF0ZRgBIAEoDjIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTdGF0ZUIIukgFggECEAESIAoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBEhgKBmlzc3VlchgDIAEoCUIIukgFcgMYgAIihAYKEU1hY2hpbmVBbGxvY2F0aW9uEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIcCgpjcmVhdGVkX2J5GAUgASgJQgi6SAVyAxiAARIZCgdwcm9qZWN0GAYgASgJQgi6SAVyA7ABARInCgVpbWFnZRgHIAEoCzIYLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlEj4KEWZpbGVzeXN0ZW1fbGF5b3V0GAggASgLMiMubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dBIzCghuZXR3b3JrcxgJIAMoCzIhLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVOZXR3b3JrEhkKCGhvc3RuYW1lGAogASgJQge6SARyAmgBEjEKD3NzaF9wdWJsaWNfa2V5cxgLIAMoCUIYukgVkgES0KSzsQIBEDIiCHIGiLSusQIBEiEKCHVzZXJkYXRhGAwgASgJQg+6SAxyCvCzrrECARiAgAISSwoPYWxsb2NhdGlvbl90eXBlGA0gASgOMigubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUFsbG9jYXRpb25UeXBlQgi6SAWCAQIQARI4Cg5maXJld2FsbF9ydWxlcxgOIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsUnVsZXMSOwoLZG5zX3NlcnZlcnMYDyADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5ETlNTZXJ2ZXJCCLpIBZIBAhADEjsKC250cF9zZXJ2ZXJzGBAgAygLMhwubWV0YWxzdGFjay5hcGkudjIuTlRQU2VydmVyQgi6SAWSAQIQChIqCgN2cG4YESABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lVlBOIlMKGE1hY2hpbmVBbGxvY2F0aW9uTmV0d29yaxIcCgduZXR3b3JrGAEgASgJQgu6SAhyBsCzrrECARIZCgNpcHMYAiADKAlCDLpICZIBBsCks7ECASJ/Cg1GaXJld2FsbFJ1bGVzEjUKBmVncmVzcxgBIAMoCzIlLm1ldGFsc3RhY2suYXBpLnYyLkZpcmV3YWxsRWdyZXNzUnVsZRI3CgdpbmdyZXNzGAIgAygLMiYubWV0YWxzdGFjay5hcGkudjIuRmlyZXdhbGxJbmdyZXNzUnVsZSKyAQoSRmlyZXdhbGxFZ3Jlc3NSdWxlEjkKCHByb3RvY29sGAEgASgOMh0ubWV0YWxzdGFjay5hcGkudjIuSVBQcm90b2NvbEIIukgFggECEAESHQoFcG9ydHMYAiADKA1CDrpIC5IBCCIGKgQY/P8DEhgKAnRvGAMgAygJQgy6SAmSAQa4pLOxAgESKAoHY29tbWVudBgEIAEoCUIXukgU2AEBcg8YZDILXlthLXpfIC1dKiQizwEKE0ZpcmV3YWxsSW5ncmVzc1J1bGUSOQoIcHJvdG9jb2wYASABKA4yHS5tZXRhbHN0YWNrLmFwaS52Mi5JUFByb3RvY29sQgi6SAWCAQIQARIdCgVwb3J0cxgCIAMoDUIOukgLkgEIIgYqBBj8/wMSGAoCdG8YAyADKAlCDLpICZIBBriks7ECARIaCgRmcm9tGAQgAygJQgy6SAmSAQa4pLOxAgESKAoHY29tbWVudBgFIAEoCUIXukgU2AEBcg8YZDILXlthLXpfIC1dKiQixgIKDk1hY2hpbmVOZXR3b3JrEg8KB25ldHdvcmsYASABKAkSHgoIcHJlZml4ZXMYAiADKAlCDLpICZIBBriks7ECARIqChRkZXN0aW5hdGlvbl9wcmVmaXhlcxgDIAMoCUIMukgJkgEGuKSzsQIBEhkKA2lwcxgEIAMoCUIMukgJkgEGwKSzsQIBEj4KDG5ldHdvcmtfdHlwZRgFIAEoDjIeLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtUeXBlQgi6SAWCAQIQARI2CghuYXRfdHlwZRgGIAEoDjIaLm1ldGFsc3RhY2suYXBpLnYyLk5BVFR5cGVCCLpIBYIBAhABEgsKA3ZyZhgHIAEoBBILCgNhc24YCCABKA0SHgoHcHJvamVjdBgJIAEoCUIIukgFcgOwAQFIAIgBAUIKCghfcHJvamVjdCLaAQoPTWFjaGluZUhhcmR3YXJlEg4KBm1lbW9yeRgBIAEoBBI0CgVkaXNrcxgCIAMoCzIlLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCbG9ja0RldmljZRIpCgRjcHVzGAMgAygLMhsubWV0YWxzdGFjay5hcGkudjIuTWV0YWxDUFUSKQoEZ3B1cxgEIAMoCzIbLm1ldGFsc3RhY2suYXBpLnYyLk1ldGFsR1BVEisKBG5pY3MYBSADKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljIl0KCE1ldGFsQ1BVEhgKBnZlbmRvchgBIAEoCUIIukgFcgMYgAISFwoFbW9kZWwYAiABKAlCCLpIBXIDGIACEg0KBWNvcmVzGAMgASgNEg8KB3RocmVhZHMYBCABKA0iPQoITWV0YWxHUFUSGAoGdmVuZG9yGAEgASgJQgi6SAVyAxiAAhIXCgVtb2RlbBgCIAEoCUIIukgFcgMYgAIi5QEKCk1hY2hpbmVOaWMSGAoDbWFjGAEgASgJQgu6SAhyBrizrrECARIZCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECARIcCgppZGVudGlmaWVyGAMgASgJQgi6SAVyAxiAARIYCgZ2ZW5kb3IYBCABKAlCCLpIBXIDGIABEhcKBW1vZGVsGAUgASgJQgi6SAVyAxiAARINCgVzcGVlZBgGIAEoBBIwCgluZWlnaGJvcnMYByADKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljEhAKCGhvc3RuYW1lGAggASgJIj0KEk1hY2hpbmVCbG9ja0RldmljZRIZCgRuYW1lGAEgASgJQgu6SAhyBsCzrrECARIMCgRzaXplGAIgASgEIlsKHk1hY2hpbmVDaGFzc2lzSWRlbnRpZnlMRURTdGF0ZRIXCgV2YWx1ZRgBIAEoCUIIukgFcgMYgAESIAoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBIooDChBNYWNoaW5lQk1DUmVwb3J0EioKA2JtYxgBIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUMSLAoEYmlvcxgCIAEoCzIeLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCaW9zEioKA2ZydRgDIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlUSOwoMcG93ZXJfbWV0cmljGAQgASgLMiUubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVBvd2VyTWV0cmljEj0KDnBvd2VyX3N1cHBsaWVzGAUgAygLMiUubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVBvd2VyU3VwcGx5EkQKCWxlZF9zdGF0ZRgGIAEoCzIxLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVDaGFzc2lzSWRlbnRpZnlMRURTdGF0ZRIuCgp1cGRhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJjCgtNYWNoaW5lQmlvcxIcCgd2ZXJzaW9uGAEgASgJQgu6SAhyBsizrrECARIbCgZ2ZW5kb3IYAiABKAlCC7pICHIGyLOusQIBEhkKBGRhdGUYAyABKAlCC7pICHIGyLOusQIBItsBCgpNYWNoaW5lQk1DEhkKB2FkZHJlc3MYASABKAlCCLpIBXIDgAIBEhgKA21hYxgCIAEoCUILukgIcga4s66xAgESGQoEdXNlchgDIAEoCUILukgIcgbIs66xAgESHQoIcGFzc3dvcmQYBCABKAlCC7pICHIGyLOusQIBEh4KCWludGVyZmFjZRgFIAEoCUILukgIcgbIs66xAgESHAoHdmVyc2lvbhgGIAEoCUILukgIcgbIs66xAgESIAoLcG93ZXJfc3RhdGUYByABKAlCC7pICHIGyLOusQIBIp4ECgpNYWNoaW5lRlJVEi0KE2NoYXNzaXNfcGFydF9udW1iZXIYASABKAlCC7pICHIGyLOusQIBSACIAQESLQoTY2hhc3Npc19wYXJ0X3NlcmlhbBgCIAEoCUILukgIcgbIs66xAgFIAYgBARIjCglib2FyZF9tZmcYAyABKAlCC7pICHIGyLOusQIBSAKIAQESKgoQYm9hcmRfbWZnX3NlcmlhbBgEIAEoCUILukgIcgbIs66xAgFIA4gBARIrChFib2FyZF9wYXJ0X251bWJlchgFIAEoCUILukgIcgbIs66xAgFIBIgBARIuChRwcm9kdWN0X21hbnVmYWN0dXJlchgGIAEoCUILukgIcgbIs66xAgFIBYgBARItChNwcm9kdWN0X3BhcnRfbnVtYmVyGAcgASgJQgu6SAhyBsizrrECAUgGiAEBEigKDnByb2R1Y3Rfc2VyaWFsGAggASgJQgu6SAhyBsizrrECAUgHiAEBQhYKFF9jaGFzc2lzX3BhcnRfbnVtYmVyQhYKFF9jaGFzc2lzX3BhcnRfc2VyaWFsQgwKCl9ib2FyZF9tZmdCEwoRX2JvYXJkX21mZ19zZXJpYWxCFAoSX2JvYXJkX3BhcnRfbnVtYmVyQhcKFV9wcm9kdWN0X21hbnVmYWN0dXJlckIWChRfcHJvZHVjdF9wYXJ0X251bWJlckIRCg9fcHJvZHVjdF9zZXJpYWwihQEKEk1hY2hpbmVQb3dlck1ldHJpYxIeChZhdmVyYWdlX2NvbnN1bWVkX3dhdHRzGAEgASgCEhcKD2ludGVydmFsX2luX21pbhgCIAEoAhIaChJtYXhfY29uc3VtZWRfd2F0dHMYAyABKAISGgoSbWluX2NvbnN1bWVkX3dhdHRzGAQgASgCIjMKEk1hY2hpbmVQb3dlclN1cHBseRIOCgZoZWFsdGgYASABKAkSDQoFc3RhdGUYAiABKAkipQIKH01hY2hpbmVSZWNlbnRQcm92aXNpb25pbmdFdmVudHMSOwoGZXZlbnRzGAEgAygLMisubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50EjMKD2xhc3RfZXZlbnRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASRQoQbGFzdF9lcnJvcl9ldmVudBgDIAEoCzIrLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVQcm92aXNpb25pbmdFdmVudBJJCgVzdGF0ZRgEIAEoDjIwLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVQcm92aXNpb25pbmdFdmVudFN0YXRlQgi6SAWCAQIQASKfAQoYTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50EigKBHRpbWUYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkgKBWV2ZW50GAIgASgOMi8ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50VHlwZUIIukgFggECEAESDwoHbWVzc2FnZRgDIAEoCSJrCgpNYWNoaW5lVlBOEh0KFWNvbnRyb2xfcGxhbmVfYWRkcmVzcxgBIAEoCRIQCghhdXRoX2tleRgCIAEoCRIRCgljb25uZWN0ZWQYAyABKAgSGQoDaXBzGAQgAygJQgy6SAmSAQbApLOxAgEi5gcKDE1hY2hpbmVRdWVyeRIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESIwoJcGFydGl0aW9uGAMgASgJQgu6SAhyBtCzrrECAUgCiAEBEh4KBHNpemUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESHgoEcmFjaxgFIAEoCUILukgIcgbAs66xAgFIBIgBARIeCgRyb29tGAYgASgJQgu6SAhyBsCzrrECAUgFiAEBEi4KBmxhYmVscxgHIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gGiAEBEkIKCmFsbG9jYXRpb24YCCABKAsyKS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lQWxsb2NhdGlvblF1ZXJ5SAeIAQESPAoHbmV0d29yaxgJIAEoCzImLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVOZXR3b3JrUXVlcnlICIgBARI0CgNuaWMYCiABKAsyIi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lTmljUXVlcnlICYgBARI2CgRkaXNrGAsgASgLMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZURpc2tRdWVyeUgKiAEBEjQKA2JtYxgMIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVCTUNRdWVyeUgLiAEBEjQKA2ZydRgNIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlVRdWVyeUgMiAEBEj4KCGhhcmR3YXJlGA4gASgLMicubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUhhcmR3YXJlUXVlcnlIDYgBARIzCgVzdGF0ZRgPIAEoDjIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTdGF0ZUgOiAEBEhQKB3dhaXRpbmcYECABKAhID4gBARIZCgxwcmVhbGxvY2F0ZWQYESABKAhIEIgBARIaCg1ub3RfYWxsb2NhdGVkGBIgASgISBGIAQFCBwoFX3V1aWRCBwoFX25hbWVCDAoKX3BhcnRpdGlvbkIHCgVfc2l6ZUIHCgVfcmFja0IHCgVfcm9vbUIJCgdfbGFiZWxzQg0KC19hbGxvY2F0aW9uQgoKCF9uZXR3b3JrQgYKBF9uaWNCBwoFX2Rpc2tCBgoEX2JtY0IGCgRfZnJ1QgsKCV9oYXJkd2FyZUIICgZfc3RhdGVCCgoIX3dhaXRpbmdCDwoNX3ByZWFsbG9jYXRlZEIQCg5fbm90X2FsbG9jYXRlZCKIBAoWTWFjaGluZUFsbG9jYXRpb25RdWVyeRIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESHgoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQFIAogBARIfCgVpbWFnZRgEIAEoCUILukgIcgbAs66xAgFIA4gBARIrChFmaWxlc3lzdGVtX2xheW91dBgFIAEoCUILukgIcgbAs66xAgFIBIgBARIeCghob3N0bmFtZRgGIAEoCUIHukgEcgJoAUgFiAEBElAKD2FsbG9jYXRpb25fdHlwZRgHIAEoDjIoLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVBbGxvY2F0aW9uVHlwZUIIukgFggECEAFIBogBARIuCgZsYWJlbHMYCCABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNIB4gBARIvCgN2cG4YCSABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lVlBOSAiIAQFCBwoFX3V1aWRCBwoFX25hbWVCCgoIX3Byb2plY3RCCAoGX2ltYWdlQhQKEl9maWxlc3lzdGVtX2xheW91dEILCglfaG9zdG5hbWVCEgoQX2FsbG9jYXRpb25fdHlwZUIJCgdfbGFiZWxzQgYKBF92cG4iqgEKE01hY2hpbmVOZXR3b3JrUXVlcnkSEAoIbmV0d29ya3MYASADKAkSHgoIcHJlZml4ZXMYAiADKAlCDLpICZIBBriks7ECARIqChRkZXN0aW5hdGlvbl9wcmVmaXhlcxgDIAMoCUIMukgJkgEGuKSzsQIBEhkKA2lwcxgEIAMoCUIMukgJkgEGwKSzsQIBEgwKBHZyZnMYBSADKAQSDAoEYXNucxgGIAMoDSKvAQoPTWFjaGluZU5pY1F1ZXJ5EiIKBG1hY3MYASADKAlCFLpIEZIBDhBkGAEiCHIGuLOusQIBEiAKBW5hbWVzGAIgAygJQhG6SA6SAQsQZBgBIgVyAxiAARIrCg1uZWlnaGJvcl9tYWNzGAMgAygJQhS6SBGSAQ4QZBgBIghyBrizrrECARIpCg5uZWlnaGJvcl9uYW1lcxgEIAMoCUIRukgOkgELEGQYASIFcgMYgAEiSwoQTWFjaGluZURpc2tRdWVyeRIeCgVuYW1lcxgBIAMoCUIPukgMkgEJEGQiBXIDGIABEhcKBXNpemVzGAIgAygEQgi6SAWSAQIQZCK5AQoPTWFjaGluZUJNQ1F1ZXJ5Eh0KB2FkZHJlc3MYASABKAlCB7pIBHICcAFIAIgBARIdCgNtYWMYAiABKAlCC7pICHIGuLOusQIBSAGIAQESGwoEdXNlchgDIAEoCUIIukgFcgMYgAFIAogBARIgCglpbnRlcmZhY2UYBCABKAlCCLpIBXIDGIABSAOIAQFCCgoIX2FkZHJlc3NCBgoEX21hY0IHCgVfdXNlckIMCgpfaW50ZXJmYWNlIoMECg9NYWNoaW5lRlJVUXVlcnkSKgoTY2hhc3Npc19wYXJ0X251bWJlchgBIAEoCUIIukgFcgMYgAFIAIgBARIqChNjaGFzc2lzX3BhcnRfc2VyaWFsGAIgASgJQgi6SAVyAxiAAUgBiAEBEiAKCWJvYXJkX21mZxgDIAEoCUIIukgFcgMYgAFIAogBARIjCgxib2FyZF9zZXJpYWwYBCABKAlCCLpIBXIDGIABSAOIAQESKAoRYm9hcmRfcGFydF9udW1iZXIYBSABKAlCCLpIBXIDGIABSASIAQESKwoUcHJvZHVjdF9tYW51ZmFjdHVyZXIYBiABKAlCCLpIBXIDGIABSAWIAQESKgoTcHJvZHVjdF9wYXJ0X251bWJlchgHIAEoCUIIukgFcgMYgAFIBogBARIlCg5wcm9kdWN0X3NlcmlhbBgIIAEoCUIIukgFcgMYgAFIB4gBAUIWChRfY2hhc3Npc19wYXJ0X251bWJlckIWChRfY2hhc3Npc19wYXJ0X3NlcmlhbEIMCgpfYm9hcmRfbWZnQg8KDV9ib2FyZF9zZXJpYWxCFAoSX2JvYXJkX3BhcnRfbnVtYmVyQhcKFV9wcm9kdWN0X21hbnVmYWN0dXJlckIWChRfcHJvZHVjdF9wYXJ0X251bWJlckIRCg9fcHJvZHVjdF9zZXJpYWwiXAoUTWFjaGluZUhhcmR3YXJlUXVlcnkSEwoGbWVtb3J5GAEgASgESACIAQESFgoJY3B1X2NvcmVzGAIgASgNSAGIAQFCCQoHX21lbW9yeUIMCgpfY3B1X2NvcmVzIuACChJNYWNoaW5lSXNzdWVzUXVlcnkSNgoNbWFjaGluZV9xdWVyeRgBIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVRdWVyeRJACgRvbmx5GAIgAygOMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUlzc3VlVHlwZUINukgKkgEHIgWCAQIQARJACgRvbWl0GAMgAygOMiMubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUlzc3VlVHlwZUINukgKkgEHIgWCAQIQARJICghzZXZlcml0eRgEIAEoDjInLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZVNldmVyaXR5Qgi6SAWCAQIQAUgAiAEBEjcKFGxhc3RfZXJyb3JfdGhyZXNob2xkGAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQgsKCV9zZXZlcml0eSJYCg1NYWNoaW5lSXNzdWVzEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEi8KBmlzc3VlcxgCIAMoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZSLnAQoMTWFjaGluZUlzc3VlEjsKBHR5cGUYASABKA4yIy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lSXNzdWVUeXBlQgi6SAWCAQIQARJDCghzZXZlcml0eRgCIAEoDjInLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVJc3N1ZVNldmVyaXR5Qgi6SAWCAQIQARIgCgtkZXNjcmlwdGlvbhgDIAEoCUILukgIcgbIs66xAgESIgoNcmVmZXJlbmNlX3VybBgEIAEoCUILukgIcgbgs66xAgESDwoHZGV0YWlscxgFIAEoCSplCgpJUFByb3RvY29sEhsKF0lQX1BST1RPQ09MX1VOU1BFQ0lGSUVEEAASHAoPSVBfUFJPVE9DT0xfVENQEAEaB4KyGQN0Y3ASHAoPSVBfUFJPVE9DT0xfVURQEAIaB4KyGQN1ZHAqrQEKDE1hY2hpbmVTdGF0ZRIjChlNQUNISU5FX1NUQVRFX1VOU1BFQ0lGSUVEEAAaBIKyGQASJgoVTUFDSElORV9TVEFURV9UQUlOVEVEEAEaC4KyGQd0YWludGVkEiQKFE1BQ0hJTkVfU1RBVEVfTE9DS0VEEAIaCoKyGQZsb2NrZWQSKgoXTUFDSElORV9TVEFURV9BVkFJTEFCTEUQAxoNgrIZCWF2YWlsYWJsZSrfAQodTWFjaGluZVByb3Zpc2lvbmluZ0V2ZW50U3RhdGUSNgosTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfU1RBVEVfVU5TUEVDSUZJRUQQABoEgrIZABI9CipNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9TVEFURV9DUkFTSExPT1AQARoNgrIZCWNyYXNobG9vcBJHCi9NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9TVEFURV9GQUlMRURfUkVDTEFJTRACGhKCshkOZmFpbGVkLXJlY2xhaW0qnwYKHE1hY2hpbmVQcm92aXNpb25pbmdFdmVudFR5cGUSLworTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfVFlQRV9VTlNQRUNJRklFRBAAEjQKJU1BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfQUxJVkUQARoJgrIZBUFsaXZlEjgKJ01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfQ1JBU0hFRBACGguCshkHQ3Jhc2hlZBJACitNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BYRV9CT09USU5HEAMaD4KyGQtQWEUgQm9vdGluZxJGCi5NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BMQU5ORURfUkVCT09UEAQaEoKyGQ5QbGFubmVkIFJlYm9vdBI8CilNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BSRVBBUklORxAFGg2CshkJUHJlcGFyaW5nEkAKK01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfUkVHSVNURVJJTkcQBhoPgrIZC1JlZ2lzdGVyaW5nEjgKJ01BQ0hJTkVfUFJPVklTSU9OSU5HX0VWRU5UX1RZUEVfV0FJVElORxAHGguCshkHV2FpdGluZxI+CipNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX0lOU1RBTExJTkcQCBoOgrIZCkluc3RhbGxpbmcSTgoyTUFDSElORV9QUk9WSVNJT05JTkdfRVZFTlRfVFlQRV9CT09USU5HX05FV19LRVJORUwQCRoWgrIZEkJvb3RpbmcgTmV3IEtlcm5lbBJACitNQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX1BIT05FRF9IT01FEAoaD4KyGQtQaG9uZWQgSG9tZRJICi9NQUNISU5FX1BST1ZJU0lPTklOR19FVkVOVF9UWVBFX01BQ0hJTkVfUkVDTEFJTRALGhOCshkPTWFjaGluZSBSZWNsYWltKroBChFNYWNoaW5lTGl2ZWxpbmVzcxIoCh5NQUNISU5FX0xJVkVMSU5FU1NfVU5TUEVDSUZJRUQQABoEgrIZABInChhNQUNISU5FX0xJVkVMSU5FU1NfQUxJVkUQARoJgrIZBWFsaXZlEiUKF01BQ0hJTkVfTElWRUxJTkVTU19ERUFEEAIaCIKyGQRkZWFkEisKGk1BQ0hJTkVfTElWRUxJTkVTU19VTktOT1dOEAMaC4KyGQd1bmtub3duKqwBChVNYWNoaW5lQWxsb2NhdGlvblR5cGUSLQojTUFDSElORV9BTExPQ0FUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABoEgrIZABIwCh9NQUNISU5FX0FMTE9DQVRJT05fVFlQRV9NQUNISU5FEAEaC4KyGQdtYWNoaW5lEjIKIE1BQ0hJTkVfQUxMT0NBVElPTl9UWVBFX0ZJUkVXQUxMEAIaDIKyGQhmaXJld2FsbCr+BAoRTWFjaGluZUJNQ0NvbW1hbmQSIwofTUFDSElORV9CTUNfQ09NTUFORF9VTlNQRUNJRklFRBAAEiIKFk1BQ0hJTkVfQk1DX0NPTU1BTkRfT04QARoGgrIZAm9uEiQKF01BQ0hJTkVfQk1DX0NPTU1BTkRfT0ZGEAIaB4KyGQNvZmYSKAoZTUFDSElORV9CTUNfQ09NTUFORF9SRVNFVBADGgmCshkFcmVzZXQSKAoZTUFDSElORV9CTUNfQ09NTUFORF9DWUNMRRAEGgmCshkFY3ljbGUSNgogTUFDSElORV9CTUNfQ09NTUFORF9CT09UX1RPX0JJT1MQBRoQgrIZDGJvb3QtdG8tYmlvcxI6CiJNQUNISU5FX0JNQ19DT01NQU5EX0JPT1RfRlJPTV9ESVNLEAYaEoKyGQ5ib290LWZyb20tZGlzaxI4CiFNQUNISU5FX0JNQ19DT01NQU5EX0JPT1RfRlJPTV9QWEUQBxoRgrIZDWJvb3QtZnJvbS1weGUSPAojTUFDSElORV9CTUNfQ09NTUFORF9JREVOVElGWV9MRURfT04QCBoTgrIZD2lkZW50aWZ5LWxlZC1vbhI+CiRNQUNISU5FX0JNQ19DT01NQU5EX0lERU5USUZZX0xFRF9PRkYQCRoUgrIZEGlkZW50aWZ5LWxlZC1vZmYSPAojTUFDSElORV9CTUNfQ09NTUFORF9NQUNISU5FX0RFTEVURUQQChoTgrIZD21hY2hpbmUtZGVsZXRlZBI8CiNNQUNISU5FX0JNQ19DT01NQU5EX01BQ0hJTkVfQ1JFQVRFRBALGhOCshkPbWFjaGluZS1jcmVhdGVkKvMGChBNYWNoaW5lSXNzdWVUeXBlEiIKHk1BQ0hJTkVfSVNTVUVfVFlQRV9VTlNQRUNJRklFRBAAEjkKIU1BQ0hJTkVfSVNTVUVfVFlQRV9BU05fVU5JUVVFTkVTUxABGhKCshkOYXNuLW5vdC11bmlxdWUSPwokTUFDSElORV9JU1NVRV9UWVBFX0JNQ19JTkZPX09VVERBVEVEEAIaFYKyGRFibWMtaW5mby1vdXRkYXRlZBJCCiZNQUNISU5FX0lTU1VFX1RZUEVfQk1DX05PTl9ESVNUSU5DVF9JUBADGhaCshkSYm1jLW5vLWRpc3RpbmN0LWlwEjkKIU1BQ0hJTkVfSVNTVUVfVFlQRV9CTUNfV0lUSE9VVF9JUBAEGhKCshkOYm1jLXdpdGhvdXQtaXASOwoiTUFDSElORV9JU1NVRV9UWVBFX0JNQ19XSVRIT1VUX01BQxAFGhOCshkPYm1jLXdpdGhvdXQtbWFjEjAKHU1BQ0hJTkVfSVNTVUVfVFlQRV9DUkFTSF9MT09QEAYaDYKyGQljcmFzaGxvb3ASSQopTUFDSElORV9JU1NVRV9UWVBFX0ZBSUxFRF9NQUNISU5FX1JFQ0xBSU0QBxoagrIZFmZhaWxlZC1tYWNoaW5lLXJlY2xhaW0SPQojTUFDSElORV9JU1NVRV9UWVBFX0xBU1RfRVZFTlRfRVJST1IQCBoUgrIZEGxhc3QtZXZlbnQtZXJyb3ISOwoiTUFDSElORV9JU1NVRV9UWVBFX0xJVkVMSU5FU1NfREVBRBAJGhOCshkPbGl2ZWxpbmVzcy1kZWFkEk0KK01BQ0hJTkVfSVNTVUVfVFlQRV9MSVZFTElORVNTX05PVF9BVkFJTEFCTEUQChocgrIZGGxpdmVsaW5lc3Mtbm90LWF2YWlsYWJsZRJBCiVNQUNISU5FX0lTU1VFX1RZUEVfTElWRUxJTkVTU19VTktOT1dOEAsaFoKyGRJsaXZlbGluZXNzLXVua25vd24SQQolTUFDSElORV9JU1NVRV9UWVBFX05PX0VWRU5UX0NPTlRBSU5FUhAMGhaCshkSbm8tZXZlbnQtY29udGFpbmVyEjUKH01BQ0hJTkVfSVNTVUVfVFlQRV9OT19QQVJUSVRJT04QDRoQgrIZDG5vLXBhcnRpdGlvbirLAQoUTWFjaGluZUlzc3VlU2V2ZXJpdHkSJgoiTUFDSElORV9JU1NVRV9TRVZFUklUWV9VTlNQRUNJRklFRBAAEisKHE1BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfTUlOT1IQARoJgrIZBW1pbm9yEisKHE1BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfTUFKT1IQAhoJgrIZBW1ham9yEjEKH01BQ0hJTkVfSVNTVUVfU0VWRVJJVFlfQ1JJVElDQUwQAxoMgrIZCGNyaXRpY2FsMtEGCg5NYWNoaW5lU2VydmljZRJtCgNHZXQSKy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldFJlcXVlc3QaLC5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJ1CgZDcmVhdGUSLi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUNyZWF0ZVJlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEnUKBlVwZGF0ZRIuLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAEScAoETGlzdBIsLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlTGlzdFJlcXVlc3QaLS5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISdQoGRGVsZXRlEi4ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVNlcnZpY2VEZWxldGVSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZVNlcnZpY2VEZWxldGVSZXNwb25zZSIKyvMYAgEC4PMYARKBAQoKQk1DQ29tbWFuZBIyLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVTZXJ2aWNlQk1DQ29tbWFuZFJlcXVlc3QaMy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUJNQ0NvbW1hbmRSZXNwb25zZSIKyvMYAgEC4PMYARJ1CgZHZXRCTUMSLi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldEJNQ1JlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lU2VydmljZUdldEJNQ1Jlc3BvbnNlIgrK8xgCAQLg8xgBQsIBChVjb20ubWV0YWxzdGFjay5hcGkudjJCDE1hY2hpbmVQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_filesystem, file_metalstack_api_v2_image, file_metalstack_api_v2_network, file_metalstack_api_v2_partition, file_metalstack_api_v2_predefined_rules, file_metalstack_api_v2_size]);
/**
* MachineServiceGetRequest is the request payload for a machine get request
@@ -586,38 +586,45 @@ export type Machine = Message<"metalstack.api.v2.Machine"> & {
*/
rack: string;
+ /**
+ * Room where this machine is located
+ *
+ * @generated from field: string room = 5;
+ */
+ room: string;
+
/**
* Size of this machine
*
- * @generated from field: metalstack.api.v2.Size size = 5;
+ * @generated from field: metalstack.api.v2.Size size = 6;
*/
size?: Size | undefined;
/**
* Hardware specs of this machine
*
- * @generated from field: metalstack.api.v2.MachineHardware hardware = 6;
+ * @generated from field: metalstack.api.v2.MachineHardware hardware = 7;
*/
hardware?: MachineHardware | undefined;
/**
* Allocation details
*
- * @generated from field: metalstack.api.v2.MachineAllocation allocation = 7;
+ * @generated from field: metalstack.api.v2.MachineAllocation allocation = 8;
*/
allocation?: MachineAllocation | undefined;
/**
* Status contains several status details related to this machine
*
- * @generated from field: metalstack.api.v2.MachineStatus status = 8;
+ * @generated from field: metalstack.api.v2.MachineStatus status = 9;
*/
status?: MachineStatus | undefined;
/**
* MachineRecentProvisioningEvents contains the recent provisioning events
*
- * @generated from field: metalstack.api.v2.MachineRecentProvisioningEvents recent_provisioning_events = 9;
+ * @generated from field: metalstack.api.v2.MachineRecentProvisioningEvents recent_provisioning_events = 10;
*/
recentProvisioningEvents?: MachineRecentProvisioningEvents | undefined;
};
@@ -1782,66 +1789,73 @@ export type MachineQuery = Message<"metalstack.api.v2.MachineQuery"> & {
*/
rack?: string | undefined;
+ /**
+ * Room of the machine to get
+ *
+ * @generated from field: optional string room = 6;
+ */
+ room?: string | undefined;
+
/**
* Labels for which this machine should get filtered
*
- * @generated from field: optional metalstack.api.v2.Labels labels = 6;
+ * @generated from field: optional metalstack.api.v2.Labels labels = 7;
*/
labels?: Labels | undefined;
/**
* Allocation specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineAllocationQuery allocation = 7;
+ * @generated from field: optional metalstack.api.v2.MachineAllocationQuery allocation = 8;
*/
allocation?: MachineAllocationQuery | undefined;
/**
* Network specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineNetworkQuery network = 8;
+ * @generated from field: optional metalstack.api.v2.MachineNetworkQuery network = 9;
*/
network?: MachineNetworkQuery | undefined;
/**
* Nic specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineNicQuery nic = 9;
+ * @generated from field: optional metalstack.api.v2.MachineNicQuery nic = 10;
*/
nic?: MachineNicQuery | undefined;
/**
* Disk specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineDiskQuery disk = 10;
+ * @generated from field: optional metalstack.api.v2.MachineDiskQuery disk = 11;
*/
disk?: MachineDiskQuery | undefined;
/**
* Bmc specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineBMCQuery bmc = 11;
+ * @generated from field: optional metalstack.api.v2.MachineBMCQuery bmc = 12;
*/
bmc?: MachineBMCQuery | undefined;
/**
* Fru specific machine queries
*
- * @generated from field: optional metalstack.api.v2.MachineFRUQuery fru = 12;
+ * @generated from field: optional metalstack.api.v2.MachineFRUQuery fru = 13;
*/
fru?: MachineFRUQuery | undefined;
/**
* Hardware specific machine query
*
- * @generated from field: optional metalstack.api.v2.MachineHardwareQuery hardware = 13;
+ * @generated from field: optional metalstack.api.v2.MachineHardwareQuery hardware = 14;
*/
hardware?: MachineHardwareQuery | undefined;
/**
* State this machine has
*
- * @generated from field: optional metalstack.api.v2.MachineState state = 14;
+ * @generated from field: optional metalstack.api.v2.MachineState state = 15;
*/
state?: MachineState | undefined;
@@ -1849,7 +1863,7 @@ export type MachineQuery = Message<"metalstack.api.v2.MachineQuery"> & {
* Waiting if set to true, only waiting machines are returned.
* Only useful for admins.
*
- * @generated from field: optional bool waiting = 15;
+ * @generated from field: optional bool waiting = 16;
*/
waiting?: boolean | undefined;
@@ -1857,7 +1871,7 @@ export type MachineQuery = Message<"metalstack.api.v2.MachineQuery"> & {
* Preallocated if set to true, only machines which are preallocated are returned.
* Only useful for admins.
*
- * @generated from field: optional bool preallocated = 16;
+ * @generated from field: optional bool preallocated = 17;
*/
preallocated?: boolean | undefined;
@@ -1865,7 +1879,7 @@ export type MachineQuery = Message<"metalstack.api.v2.MachineQuery"> & {
* NotAllocated if set to true, only machines which are not allocated are returned.
* Only useful for admins.
*
- * @generated from field: optional bool not_allocated = 17;
+ * @generated from field: optional bool not_allocated = 18;
*/
notAllocated?: boolean | undefined;
};
diff --git a/js/metalstack/api/v2/switch_pb.d.ts b/js/metalstack/api/v2/switch_pb.d.ts
index 9805645a..9798892b 100644
--- a/js/metalstack/api/v2/switch_pb.d.ts
+++ b/js/metalstack/api/v2/switch_pb.d.ts
@@ -37,64 +37,70 @@ export type Switch = Message<"metalstack.api.v2.Switch"> & {
* @generated from field: optional string rack = 4;
*/
rack?: string | undefined;
+ /**
+ * Room ID if the switch resides in a room.
+ *
+ * @generated from field: optional string room = 5;
+ */
+ room?: string | undefined;
/**
* Partition the switch belongs to.
*
- * @generated from field: string partition = 5;
+ * @generated from field: string partition = 6;
*/
partition: string;
/**
* ReplaceMode is used to mark a switch ready for replacement.
*
- * @generated from field: metalstack.api.v2.SwitchReplaceMode replace_mode = 6;
+ * @generated from field: metalstack.api.v2.SwitchReplaceMode replace_mode = 7;
*/
replaceMode: SwitchReplaceMode;
/**
* ManagementIp is the switch's IP for management access.
*
- * @generated from field: string management_ip = 7;
+ * @generated from field: string management_ip = 8;
*/
managementIp: string;
/**
* ManagementUser is the user name to use for management access.
*
- * @generated from field: optional string management_user = 8;
+ * @generated from field: optional string management_user = 9;
*/
managementUser?: string | undefined;
/**
* ConsoleCommand is the command for accessing the switch's console.
*
- * @generated from field: optional string console_command = 9;
+ * @generated from field: optional string console_command = 10;
*/
consoleCommand?: string | undefined;
/**
* Nics are the front panel ports of the switch.
*
- * @generated from field: repeated metalstack.api.v2.SwitchNic nics = 10;
+ * @generated from field: repeated metalstack.api.v2.SwitchNic nics = 11;
*/
nics: SwitchNic[];
/**
* SwitchOs is the OS running on the switch.
*
- * @generated from field: metalstack.api.v2.SwitchOS os = 11;
+ * @generated from field: metalstack.api.v2.SwitchOS os = 12;
*/
os?: SwitchOS | undefined;
/**
* MachineConnections map machines to the nics they are connected to.
*
- * @generated from field: repeated metalstack.api.v2.MachineConnection machine_connections = 12;
+ * @generated from field: repeated metalstack.api.v2.MachineConnection machine_connections = 13;
*/
machineConnections: MachineConnection[];
/**
* LastSync contains information about the last heartbeat of the switch.
*
- * @generated from field: metalstack.api.v2.SwitchSync last_sync = 13;
+ * @generated from field: metalstack.api.v2.SwitchSync last_sync = 14;
*/
lastSync?: SwitchSync | undefined;
/**
* LastSyncError contains information about the last unsuccessful heartbeat of the switch.
*
- * @generated from field: metalstack.api.v2.SwitchSync last_sync_error = 14;
+ * @generated from field: metalstack.api.v2.SwitchSync last_sync_error = 15;
*/
lastSyncError?: SwitchSync | undefined;
};
@@ -337,16 +343,22 @@ export type SwitchQuery = Message<"metalstack.api.v2.SwitchQuery"> & {
* @generated from field: optional string rack = 3;
*/
rack?: string | undefined;
+ /**
+ * Room ID if the switch resides in a room.
+ *
+ * @generated from field: optional string room = 4;
+ */
+ room?: string | undefined;
/**
* Switch OS specific queries.
*
- * @generated from field: optional metalstack.api.v2.SwitchOSQuery os = 4;
+ * @generated from field: optional metalstack.api.v2.SwitchOSQuery os = 5;
*/
os?: SwitchOSQuery | undefined;
/**
* ConnectedMachineID lists the switches which have the given machine id in the connected machines map.
*
- * @generated from field: optional string connected_machine_id = 5;
+ * @generated from field: optional string connected_machine_id = 6;
*/
connectedMachineId?: string | undefined;
};
diff --git a/js/metalstack/api/v2/switch_pb.js b/js/metalstack/api/v2/switch_pb.js
index 6be7cd81..596cbd10 100644
--- a/js/metalstack/api/v2/switch_pb.js
+++ b/js/metalstack/api/v2/switch_pb.js
@@ -10,7 +10,7 @@ import { file_metalstack_api_v2_predefined_rules } from "./predefined_rules_pb";
/**
* Describes the file metalstack/api/v2/switch.proto.
*/
-export const file_metalstack_api_v2_switch = /*@__PURE__*/ fileDesc("Ch5tZXRhbHN0YWNrL2FwaS92Mi9zd2l0Y2gucHJvdG8SEW1ldGFsc3RhY2suYXBpLnYyIpkFCgZTd2l0Y2gSGQoCaWQYASABKAlCDbpICnIIwLOusQIBaAESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEh4KBHJhY2sYBCABKAlCC7pICHIGwLOusQIBSACIAQESHgoJcGFydGl0aW9uGAUgASgJQgu6SAhyBtCzrrECARJECgxyZXBsYWNlX21vZGUYBiABKA4yJC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hSZXBsYWNlTW9kZUIIukgFggECEAESHgoNbWFuYWdlbWVudF9pcBgHIAEoCUIHukgEcgJwARIoCg9tYW5hZ2VtZW50X3VzZXIYCCABKAlCCrpIB3IFEAIYgAFIAYgBARIoCg9jb25zb2xlX2NvbW1hbmQYCSABKAlCCrpIB3IFEAIYgAFIAogBARIqCgRuaWNzGAogAygLMhwubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljEicKAm9zGAsgASgLMhsubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1MSQQoTbWFjaGluZV9jb25uZWN0aW9ucxgMIAMoCzIkLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVDb25uZWN0aW9uEjAKCWxhc3Rfc3luYxgNIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFN5bmMSNgoPbGFzdF9zeW5jX2Vycm9yGA4gASgLMh0ubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoU3luY0IHCgVfcmFja0ISChBfbWFuYWdlbWVudF91c2VyQhIKEF9jb25zb2xlX2NvbW1hbmQijgEKCFN3aXRjaE9TEjsKBnZlbmRvchgBIAEoDjIhLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE9TVmVuZG9yQgi6SAWCAQIQARIcCgd2ZXJzaW9uGAIgASgJQgu6SAhyBsCzrrECARInChJtZXRhbF9jb3JlX3ZlcnNpb24YAyABKAlCC7pICHIGwLOusQIBIuACCglTd2l0Y2hOaWMSGQoEbmFtZRgBIAEoCUILukgIcgbAs66xAgESHwoKaWRlbnRpZmllchgCIAEoCUILukgIcgbAs66xAgESGAoDbWFjGAMgASgJQgu6SAhyBrizrrECARIdCgN2cmYYBCABKAlCC7pICHIGwLOusQIBSACIAQESLwoFc3RhdGUYBSABKAsyGy5tZXRhbHN0YWNrLmFwaS52Mi5OaWNTdGF0ZUgBiAEBEjUKCmJncF9maWx0ZXIYBiABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5CR1BGaWx0ZXJIAogBARJCCg5iZ3BfcG9ydF9zdGF0ZRgHIAEoCzIlLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaEJHUFBvcnRTdGF0ZUgDiAEBQgYKBF92cmZCCAoGX3N0YXRlQg0KC19iZ3BfZmlsdGVyQhEKD19iZ3BfcG9ydF9zdGF0ZSJHCglCR1BGaWx0ZXISGwoFY2lkcnMYASADKAlCDLpICZIBBriks7ECARIdCgR2bmlzGAIgAygJQg+6SAySAQkiB3IFEAIYgAEiqQIKElN3aXRjaEJHUFBvcnRTdGF0ZRIdCghuZWlnaGJvchgBIAEoCUILukgIcgbAs66xAgESHwoKcGVlcl9ncm91cBgCIAEoCUILukgIcgbAs66xAgESHQoIdnJmX25hbWUYAyABKAlCC7pICHIGwLOusQIBEjgKCWJncF9zdGF0ZRgEIAEoDjIbLm1ldGFsc3RhY2suYXBpLnYyLkJHUFN0YXRlQgi6SAWCAQIQARI8ChhiZ3BfdGltZXJfdXBfZXN0YWJsaXNoZWQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhsKE3NlbnRfcHJlZml4X2NvdW50ZXIYBiABKAQSHwoXYWNjZXB0ZWRfcHJlZml4X2NvdW50ZXIYByABKAQimgEKCE5pY1N0YXRlEkMKB2Rlc2lyZWQYASABKA4yIy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hQb3J0U3RhdHVzQgi6SAWCAQIQAUgAiAEBEj0KBmFjdHVhbBgCIAEoDjIjLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFBvcnRTdGF0dXNCCLpIBYIBAhABQgoKCF9kZXNpcmVkIlIKEU1hY2hpbmVDb25uZWN0aW9uEhIKCm1hY2hpbmVfaWQYASABKAkSKQoDbmljGAIgASgLMhwubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljIpACCgtTd2l0Y2hRdWVyeRIeCgJpZBgBIAEoCUINukgKcgjAs66xAgFoAUgAiAEBEiMKCXBhcnRpdGlvbhgCIAEoCUILukgIcgbQs66xAgFIAYgBARIeCgRyYWNrGAMgASgJQgu6SAhyBsCzrrECAUgCiAEBEjEKAm9zGAQgASgLMiAubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1NRdWVyeUgDiAEBEisKFGNvbm5lY3RlZF9tYWNoaW5lX2lkGAUgASgJQgi6SAVyA7ABAUgEiAEBQgUKA19pZEIMCgpfcGFydGl0aW9uQgcKBV9yYWNrQgUKA19vc0IXChVfY29ubmVjdGVkX21hY2hpbmVfaWQiiwEKDVN3aXRjaE9TUXVlcnkSQAoGdmVuZG9yGAEgASgOMiEubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1NWZW5kb3JCCLpIBYIBAhABSACIAQESIQoHdmVyc2lvbhgCIAEoCUILukgIcgbAs66xAgFIAYgBAUIJCgdfdmVuZG9yQgoKCF92ZXJzaW9uIoEBCgpTd2l0Y2hTeW5jEigKBHRpbWUYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKCGR1cmF0aW9uGAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEhIKBWVycm9yGAMgASgJSACIAQFCCAoGX2Vycm9yIn8KElN3aXRjaFdpdGhNYWNoaW5lcxIKCgJpZBgBIAEoCRIRCglwYXJ0aXRpb24YAiABKAkSDAoEcmFjaxgDIAEoCRI8Cgtjb25uZWN0aW9ucxgEIAMoCzInLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE5pY1dpdGhNYWNoaW5lIpoBChRTd2l0Y2hOaWNXaXRoTWFjaGluZRIpCgNuaWMYASABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMSKwoHbWFjaGluZRgCIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUSKgoDZnJ1GAMgASgLMh0ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUZSVSqJAgoIQkdQU3RhdGUSGQoVQkdQX1NUQVRFX1VOU1BFQ0lGSUVEEAASHAoOQkdQX1NUQVRFX0lETEUQARoIgrIZBElkbGUSIgoRQkdQX1NUQVRFX0NPTk5FQ1QQAhoLgrIZB0Nvbm5lY3QSIAoQQkdQX1NUQVRFX0FDVElWRRADGgqCshkGQWN0aXZlEiUKE0JHUF9TVEFURV9PUEVOX1NFTlQQBBoMgrIZCE9wZW5TZW50EisKFkJHUF9TVEFURV9PUEVOX0NPTkZJUk0QBRoPgrIZC09wZW5Db25maXJtEioKFUJHUF9TVEFURV9FU1RBQkxJU0hFRBAGGg+CshkLRXN0YWJsaXNoZWQqogEKEVN3aXRjaFJlcGxhY2VNb2RlEikKH1NXSVRDSF9SRVBMQUNFX01PREVfVU5TUEVDSUZJRUQQABoEgrIZABIsChtTV0lUQ0hfUkVQTEFDRV9NT0RFX1JFUExBQ0UQARoLgrIZB3JlcGxhY2USNAofU1dJVENIX1JFUExBQ0VfTU9ERV9PUEVSQVRJT05BTBACGg+CshkLb3BlcmF0aW9uYWwqhAEKDlN3aXRjaE9TVmVuZG9yEiAKHFNXSVRDSF9PU19WRU5ET1JfVU5TUEVDSUZJRUQQABIpChhTV0lUQ0hfT1NfVkVORE9SX0NVTVVMVVMQARoLgrIZB0N1bXVsdXMSJQoWU1dJVENIX09TX1ZFTkRPUl9TT05JQxACGgmCshkFU09OaUMqrQEKEFN3aXRjaFBvcnRTdGF0dXMSIgoeU1dJVENIX1BPUlRfU1RBVFVTX1VOU1BFQ0lGSUVEEAASIQoVU1dJVENIX1BPUlRfU1RBVFVTX1VQEAEaBoKyGQJ1cBIlChdTV0lUQ0hfUE9SVF9TVEFUVVNfRE9XThACGgiCshkEZG93bhIrChpTV0lUQ0hfUE9SVF9TVEFUVVNfVU5LTk9XThADGguCshkHdW5rbm93bkLBAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQgtTd2l0Y2hQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_machine, file_metalstack_api_v2_predefined_rules]);
+export const file_metalstack_api_v2_switch = /*@__PURE__*/ fileDesc("Ch5tZXRhbHN0YWNrL2FwaS92Mi9zd2l0Y2gucHJvdG8SEW1ldGFsc3RhY2suYXBpLnYyIsIFCgZTd2l0Y2gSGQoCaWQYASABKAlCDbpICnIIwLOusQIBaAESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEh4KBHJhY2sYBCABKAlCC7pICHIGwLOusQIBSACIAQESHgoEcm9vbRgFIAEoCUILukgIcgbAs66xAgFIAYgBARIeCglwYXJ0aXRpb24YBiABKAlCC7pICHIG0LOusQIBEkQKDHJlcGxhY2VfbW9kZRgHIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFJlcGxhY2VNb2RlQgi6SAWCAQIQARIeCg1tYW5hZ2VtZW50X2lwGAggASgJQge6SARyAnABEigKD21hbmFnZW1lbnRfdXNlchgJIAEoCUIKukgHcgUQAhiAAUgCiAEBEigKD2NvbnNvbGVfY29tbWFuZBgKIAEoCUIKukgHcgUQAhiAAUgDiAEBEioKBG5pY3MYCyADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMSJwoCb3MYDCABKAsyGy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hPUxJBChNtYWNoaW5lX2Nvbm5lY3Rpb25zGA0gAygLMiQubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUNvbm5lY3Rpb24SMAoJbGFzdF9zeW5jGA4gASgLMh0ubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoU3luYxI2Cg9sYXN0X3N5bmNfZXJyb3IYDyABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hTeW5jQgcKBV9yYWNrQgcKBV9yb29tQhIKEF9tYW5hZ2VtZW50X3VzZXJCEgoQX2NvbnNvbGVfY29tbWFuZCKOAQoIU3dpdGNoT1MSOwoGdmVuZG9yGAEgASgOMiEubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1NWZW5kb3JCCLpIBYIBAhABEhwKB3ZlcnNpb24YAiABKAlCC7pICHIGwLOusQIBEicKEm1ldGFsX2NvcmVfdmVyc2lvbhgDIAEoCUILukgIcgbAs66xAgEi4AIKCVN3aXRjaE5pYxIZCgRuYW1lGAEgASgJQgu6SAhyBsCzrrECARIfCgppZGVudGlmaWVyGAIgASgJQgu6SAhyBsCzrrECARIYCgNtYWMYAyABKAlCC7pICHIGuLOusQIBEh0KA3ZyZhgEIAEoCUILukgIcgbAs66xAgFIAIgBARIvCgVzdGF0ZRgFIAEoCzIbLm1ldGFsc3RhY2suYXBpLnYyLk5pY1N0YXRlSAGIAQESNQoKYmdwX2ZpbHRlchgGIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLkJHUEZpbHRlckgCiAEBEkIKDmJncF9wb3J0X3N0YXRlGAcgASgLMiUubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoQkdQUG9ydFN0YXRlSAOIAQFCBgoEX3ZyZkIICgZfc3RhdGVCDQoLX2JncF9maWx0ZXJCEQoPX2JncF9wb3J0X3N0YXRlIkcKCUJHUEZpbHRlchIbCgVjaWRycxgBIAMoCUIMukgJkgEGuKSzsQIBEh0KBHZuaXMYAiADKAlCD7pIDJIBCSIHcgUQAhiAASKpAgoSU3dpdGNoQkdQUG9ydFN0YXRlEh0KCG5laWdoYm9yGAEgASgJQgu6SAhyBsCzrrECARIfCgpwZWVyX2dyb3VwGAIgASgJQgu6SAhyBsCzrrECARIdCgh2cmZfbmFtZRgDIAEoCUILukgIcgbAs66xAgESOAoJYmdwX3N0YXRlGAQgASgOMhsubWV0YWxzdGFjay5hcGkudjIuQkdQU3RhdGVCCLpIBYIBAhABEjwKGGJncF90aW1lcl91cF9lc3RhYmxpc2hlZBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoTc2VudF9wcmVmaXhfY291bnRlchgGIAEoBBIfChdhY2NlcHRlZF9wcmVmaXhfY291bnRlchgHIAEoBCKaAQoITmljU3RhdGUSQwoHZGVzaXJlZBgBIAEoDjIjLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFBvcnRTdGF0dXNCCLpIBYIBAhABSACIAQESPQoGYWN0dWFsGAIgASgOMiMubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoUG9ydFN0YXR1c0IIukgFggECEAFCCgoIX2Rlc2lyZWQiUgoRTWFjaGluZUNvbm5lY3Rpb24SEgoKbWFjaGluZV9pZBgBIAEoCRIpCgNuaWMYAiABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMiuQIKC1N3aXRjaFF1ZXJ5Eh4KAmlkGAEgASgJQg26SApyCMCzrrECAWgBSACIAQESIwoJcGFydGl0aW9uGAIgASgJQgu6SAhyBtCzrrECAUgBiAEBEh4KBHJhY2sYAyABKAlCC7pICHIGwLOusQIBSAKIAQESHgoEcm9vbRgEIAEoCUILukgIcgbAs66xAgFIA4gBARIxCgJvcxgFIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE9TUXVlcnlIBIgBARIrChRjb25uZWN0ZWRfbWFjaGluZV9pZBgGIAEoCUIIukgFcgOwAQFIBYgBAUIFCgNfaWRCDAoKX3BhcnRpdGlvbkIHCgVfcmFja0IHCgVfcm9vbUIFCgNfb3NCFwoVX2Nvbm5lY3RlZF9tYWNoaW5lX2lkIosBCg1Td2l0Y2hPU1F1ZXJ5EkAKBnZlbmRvchgBIAEoDjIhLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE9TVmVuZG9yQgi6SAWCAQIQAUgAiAEBEiEKB3ZlcnNpb24YAiABKAlCC7pICHIGwLOusQIBSAGIAQFCCQoHX3ZlbmRvckIKCghfdmVyc2lvbiKBAQoKU3dpdGNoU3luYxIoCgR0aW1lGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCghkdXJhdGlvbhgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhISCgVlcnJvchgDIAEoCUgAiAEBQggKBl9lcnJvciJ/ChJTd2l0Y2hXaXRoTWFjaGluZXMSCgoCaWQYASABKAkSEQoJcGFydGl0aW9uGAIgASgJEgwKBHJhY2sYAyABKAkSPAoLY29ubmVjdGlvbnMYBCADKAsyJy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWNXaXRoTWFjaGluZSKaAQoUU3dpdGNoTmljV2l0aE1hY2hpbmUSKQoDbmljGAEgASgLMhwubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljEisKB21hY2hpbmUYAiABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lEioKA2ZydRgDIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlUqiQIKCEJHUFN0YXRlEhkKFUJHUF9TVEFURV9VTlNQRUNJRklFRBAAEhwKDkJHUF9TVEFURV9JRExFEAEaCIKyGQRJZGxlEiIKEUJHUF9TVEFURV9DT05ORUNUEAIaC4KyGQdDb25uZWN0EiAKEEJHUF9TVEFURV9BQ1RJVkUQAxoKgrIZBkFjdGl2ZRIlChNCR1BfU1RBVEVfT1BFTl9TRU5UEAQaDIKyGQhPcGVuU2VudBIrChZCR1BfU1RBVEVfT1BFTl9DT05GSVJNEAUaD4KyGQtPcGVuQ29uZmlybRIqChVCR1BfU1RBVEVfRVNUQUJMSVNIRUQQBhoPgrIZC0VzdGFibGlzaGVkKqIBChFTd2l0Y2hSZXBsYWNlTW9kZRIpCh9TV0lUQ0hfUkVQTEFDRV9NT0RFX1VOU1BFQ0lGSUVEEAAaBIKyGQASLAobU1dJVENIX1JFUExBQ0VfTU9ERV9SRVBMQUNFEAEaC4KyGQdyZXBsYWNlEjQKH1NXSVRDSF9SRVBMQUNFX01PREVfT1BFUkFUSU9OQUwQAhoPgrIZC29wZXJhdGlvbmFsKoQBCg5Td2l0Y2hPU1ZlbmRvchIgChxTV0lUQ0hfT1NfVkVORE9SX1VOU1BFQ0lGSUVEEAASKQoYU1dJVENIX09TX1ZFTkRPUl9DVU1VTFVTEAEaC4KyGQdDdW11bHVzEiUKFlNXSVRDSF9PU19WRU5ET1JfU09OSUMQAhoJgrIZBVNPTmlDKq0BChBTd2l0Y2hQb3J0U3RhdHVzEiIKHlNXSVRDSF9QT1JUX1NUQVRVU19VTlNQRUNJRklFRBAAEiEKFVNXSVRDSF9QT1JUX1NUQVRVU19VUBABGgaCshkCdXASJQoXU1dJVENIX1BPUlRfU1RBVFVTX0RPV04QAhoIgrIZBGRvd24SKwoaU1dJVENIX1BPUlRfU1RBVFVTX1VOS05PV04QAxoLgrIZB3Vua25vd25CwQEKFWNvbS5tZXRhbHN0YWNrLmFwaS52MkILU3dpdGNoUHJvdG9QAVo1Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hcGkvdjI7YXBpdjKiAgNNQViqAhFNZXRhbHN0YWNrLkFwaS5WMsoCEU1ldGFsc3RhY2tcQXBpXFYy4gIdTWV0YWxzdGFja1xBcGlcVjJcR1BCTWV0YWRhdGHqAhNNZXRhbHN0YWNrOjpBcGk6OlYyYgZwcm90bzM", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_machine, file_metalstack_api_v2_predefined_rules]);
/**
* Describes the message metalstack.api.v2.Switch.
* Use `create(SwitchSchema)` to create a new message.
diff --git a/js/metalstack/api/v2/switch_pb.ts b/js/metalstack/api/v2/switch_pb.ts
index 227746c1..4a639d5a 100644
--- a/js/metalstack/api/v2/switch_pb.ts
+++ b/js/metalstack/api/v2/switch_pb.ts
@@ -18,7 +18,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/api/v2/switch.proto.
*/
export const file_metalstack_api_v2_switch: GenFile = /*@__PURE__*/
- fileDesc("Ch5tZXRhbHN0YWNrL2FwaS92Mi9zd2l0Y2gucHJvdG8SEW1ldGFsc3RhY2suYXBpLnYyIpkFCgZTd2l0Y2gSGQoCaWQYASABKAlCDbpICnIIwLOusQIBaAESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEh4KBHJhY2sYBCABKAlCC7pICHIGwLOusQIBSACIAQESHgoJcGFydGl0aW9uGAUgASgJQgu6SAhyBtCzrrECARJECgxyZXBsYWNlX21vZGUYBiABKA4yJC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hSZXBsYWNlTW9kZUIIukgFggECEAESHgoNbWFuYWdlbWVudF9pcBgHIAEoCUIHukgEcgJwARIoCg9tYW5hZ2VtZW50X3VzZXIYCCABKAlCCrpIB3IFEAIYgAFIAYgBARIoCg9jb25zb2xlX2NvbW1hbmQYCSABKAlCCrpIB3IFEAIYgAFIAogBARIqCgRuaWNzGAogAygLMhwubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljEicKAm9zGAsgASgLMhsubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1MSQQoTbWFjaGluZV9jb25uZWN0aW9ucxgMIAMoCzIkLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVDb25uZWN0aW9uEjAKCWxhc3Rfc3luYxgNIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFN5bmMSNgoPbGFzdF9zeW5jX2Vycm9yGA4gASgLMh0ubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoU3luY0IHCgVfcmFja0ISChBfbWFuYWdlbWVudF91c2VyQhIKEF9jb25zb2xlX2NvbW1hbmQijgEKCFN3aXRjaE9TEjsKBnZlbmRvchgBIAEoDjIhLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE9TVmVuZG9yQgi6SAWCAQIQARIcCgd2ZXJzaW9uGAIgASgJQgu6SAhyBsCzrrECARInChJtZXRhbF9jb3JlX3ZlcnNpb24YAyABKAlCC7pICHIGwLOusQIBIuACCglTd2l0Y2hOaWMSGQoEbmFtZRgBIAEoCUILukgIcgbAs66xAgESHwoKaWRlbnRpZmllchgCIAEoCUILukgIcgbAs66xAgESGAoDbWFjGAMgASgJQgu6SAhyBrizrrECARIdCgN2cmYYBCABKAlCC7pICHIGwLOusQIBSACIAQESLwoFc3RhdGUYBSABKAsyGy5tZXRhbHN0YWNrLmFwaS52Mi5OaWNTdGF0ZUgBiAEBEjUKCmJncF9maWx0ZXIYBiABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5CR1BGaWx0ZXJIAogBARJCCg5iZ3BfcG9ydF9zdGF0ZRgHIAEoCzIlLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaEJHUFBvcnRTdGF0ZUgDiAEBQgYKBF92cmZCCAoGX3N0YXRlQg0KC19iZ3BfZmlsdGVyQhEKD19iZ3BfcG9ydF9zdGF0ZSJHCglCR1BGaWx0ZXISGwoFY2lkcnMYASADKAlCDLpICZIBBriks7ECARIdCgR2bmlzGAIgAygJQg+6SAySAQkiB3IFEAIYgAEiqQIKElN3aXRjaEJHUFBvcnRTdGF0ZRIdCghuZWlnaGJvchgBIAEoCUILukgIcgbAs66xAgESHwoKcGVlcl9ncm91cBgCIAEoCUILukgIcgbAs66xAgESHQoIdnJmX25hbWUYAyABKAlCC7pICHIGwLOusQIBEjgKCWJncF9zdGF0ZRgEIAEoDjIbLm1ldGFsc3RhY2suYXBpLnYyLkJHUFN0YXRlQgi6SAWCAQIQARI8ChhiZ3BfdGltZXJfdXBfZXN0YWJsaXNoZWQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhsKE3NlbnRfcHJlZml4X2NvdW50ZXIYBiABKAQSHwoXYWNjZXB0ZWRfcHJlZml4X2NvdW50ZXIYByABKAQimgEKCE5pY1N0YXRlEkMKB2Rlc2lyZWQYASABKA4yIy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hQb3J0U3RhdHVzQgi6SAWCAQIQAUgAiAEBEj0KBmFjdHVhbBgCIAEoDjIjLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFBvcnRTdGF0dXNCCLpIBYIBAhABQgoKCF9kZXNpcmVkIlIKEU1hY2hpbmVDb25uZWN0aW9uEhIKCm1hY2hpbmVfaWQYASABKAkSKQoDbmljGAIgASgLMhwubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljIpACCgtTd2l0Y2hRdWVyeRIeCgJpZBgBIAEoCUINukgKcgjAs66xAgFoAUgAiAEBEiMKCXBhcnRpdGlvbhgCIAEoCUILukgIcgbQs66xAgFIAYgBARIeCgRyYWNrGAMgASgJQgu6SAhyBsCzrrECAUgCiAEBEjEKAm9zGAQgASgLMiAubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1NRdWVyeUgDiAEBEisKFGNvbm5lY3RlZF9tYWNoaW5lX2lkGAUgASgJQgi6SAVyA7ABAUgEiAEBQgUKA19pZEIMCgpfcGFydGl0aW9uQgcKBV9yYWNrQgUKA19vc0IXChVfY29ubmVjdGVkX21hY2hpbmVfaWQiiwEKDVN3aXRjaE9TUXVlcnkSQAoGdmVuZG9yGAEgASgOMiEubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1NWZW5kb3JCCLpIBYIBAhABSACIAQESIQoHdmVyc2lvbhgCIAEoCUILukgIcgbAs66xAgFIAYgBAUIJCgdfdmVuZG9yQgoKCF92ZXJzaW9uIoEBCgpTd2l0Y2hTeW5jEigKBHRpbWUYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKCGR1cmF0aW9uGAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEhIKBWVycm9yGAMgASgJSACIAQFCCAoGX2Vycm9yIn8KElN3aXRjaFdpdGhNYWNoaW5lcxIKCgJpZBgBIAEoCRIRCglwYXJ0aXRpb24YAiABKAkSDAoEcmFjaxgDIAEoCRI8Cgtjb25uZWN0aW9ucxgEIAMoCzInLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE5pY1dpdGhNYWNoaW5lIpoBChRTd2l0Y2hOaWNXaXRoTWFjaGluZRIpCgNuaWMYASABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMSKwoHbWFjaGluZRgCIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmUSKgoDZnJ1GAMgASgLMh0ubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUZSVSqJAgoIQkdQU3RhdGUSGQoVQkdQX1NUQVRFX1VOU1BFQ0lGSUVEEAASHAoOQkdQX1NUQVRFX0lETEUQARoIgrIZBElkbGUSIgoRQkdQX1NUQVRFX0NPTk5FQ1QQAhoLgrIZB0Nvbm5lY3QSIAoQQkdQX1NUQVRFX0FDVElWRRADGgqCshkGQWN0aXZlEiUKE0JHUF9TVEFURV9PUEVOX1NFTlQQBBoMgrIZCE9wZW5TZW50EisKFkJHUF9TVEFURV9PUEVOX0NPTkZJUk0QBRoPgrIZC09wZW5Db25maXJtEioKFUJHUF9TVEFURV9FU1RBQkxJU0hFRBAGGg+CshkLRXN0YWJsaXNoZWQqogEKEVN3aXRjaFJlcGxhY2VNb2RlEikKH1NXSVRDSF9SRVBMQUNFX01PREVfVU5TUEVDSUZJRUQQABoEgrIZABIsChtTV0lUQ0hfUkVQTEFDRV9NT0RFX1JFUExBQ0UQARoLgrIZB3JlcGxhY2USNAofU1dJVENIX1JFUExBQ0VfTU9ERV9PUEVSQVRJT05BTBACGg+CshkLb3BlcmF0aW9uYWwqhAEKDlN3aXRjaE9TVmVuZG9yEiAKHFNXSVRDSF9PU19WRU5ET1JfVU5TUEVDSUZJRUQQABIpChhTV0lUQ0hfT1NfVkVORE9SX0NVTVVMVVMQARoLgrIZB0N1bXVsdXMSJQoWU1dJVENIX09TX1ZFTkRPUl9TT05JQxACGgmCshkFU09OaUMqrQEKEFN3aXRjaFBvcnRTdGF0dXMSIgoeU1dJVENIX1BPUlRfU1RBVFVTX1VOU1BFQ0lGSUVEEAASIQoVU1dJVENIX1BPUlRfU1RBVFVTX1VQEAEaBoKyGQJ1cBIlChdTV0lUQ0hfUE9SVF9TVEFUVVNfRE9XThACGgiCshkEZG93bhIrChpTV0lUQ0hfUE9SVF9TVEFUVVNfVU5LTk9XThADGguCshkHdW5rbm93bkLBAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQgtTd2l0Y2hQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_machine, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("Ch5tZXRhbHN0YWNrL2FwaS92Mi9zd2l0Y2gucHJvdG8SEW1ldGFsc3RhY2suYXBpLnYyIsIFCgZTd2l0Y2gSGQoCaWQYASABKAlCDbpICnIIwLOusQIBaAESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEh4KBHJhY2sYBCABKAlCC7pICHIGwLOusQIBSACIAQESHgoEcm9vbRgFIAEoCUILukgIcgbAs66xAgFIAYgBARIeCglwYXJ0aXRpb24YBiABKAlCC7pICHIG0LOusQIBEkQKDHJlcGxhY2VfbW9kZRgHIAEoDjIkLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFJlcGxhY2VNb2RlQgi6SAWCAQIQARIeCg1tYW5hZ2VtZW50X2lwGAggASgJQge6SARyAnABEigKD21hbmFnZW1lbnRfdXNlchgJIAEoCUIKukgHcgUQAhiAAUgCiAEBEigKD2NvbnNvbGVfY29tbWFuZBgKIAEoCUIKukgHcgUQAhiAAUgDiAEBEioKBG5pY3MYCyADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMSJwoCb3MYDCABKAsyGy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hPUxJBChNtYWNoaW5lX2Nvbm5lY3Rpb25zGA0gAygLMiQubWV0YWxzdGFjay5hcGkudjIuTWFjaGluZUNvbm5lY3Rpb24SMAoJbGFzdF9zeW5jGA4gASgLMh0ubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoU3luYxI2Cg9sYXN0X3N5bmNfZXJyb3IYDyABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hTeW5jQgcKBV9yYWNrQgcKBV9yb29tQhIKEF9tYW5hZ2VtZW50X3VzZXJCEgoQX2NvbnNvbGVfY29tbWFuZCKOAQoIU3dpdGNoT1MSOwoGdmVuZG9yGAEgASgOMiEubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoT1NWZW5kb3JCCLpIBYIBAhABEhwKB3ZlcnNpb24YAiABKAlCC7pICHIGwLOusQIBEicKEm1ldGFsX2NvcmVfdmVyc2lvbhgDIAEoCUILukgIcgbAs66xAgEi4AIKCVN3aXRjaE5pYxIZCgRuYW1lGAEgASgJQgu6SAhyBsCzrrECARIfCgppZGVudGlmaWVyGAIgASgJQgu6SAhyBsCzrrECARIYCgNtYWMYAyABKAlCC7pICHIGuLOusQIBEh0KA3ZyZhgEIAEoCUILukgIcgbAs66xAgFIAIgBARIvCgVzdGF0ZRgFIAEoCzIbLm1ldGFsc3RhY2suYXBpLnYyLk5pY1N0YXRlSAGIAQESNQoKYmdwX2ZpbHRlchgGIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLkJHUEZpbHRlckgCiAEBEkIKDmJncF9wb3J0X3N0YXRlGAcgASgLMiUubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoQkdQUG9ydFN0YXRlSAOIAQFCBgoEX3ZyZkIICgZfc3RhdGVCDQoLX2JncF9maWx0ZXJCEQoPX2JncF9wb3J0X3N0YXRlIkcKCUJHUEZpbHRlchIbCgVjaWRycxgBIAMoCUIMukgJkgEGuKSzsQIBEh0KBHZuaXMYAiADKAlCD7pIDJIBCSIHcgUQAhiAASKpAgoSU3dpdGNoQkdQUG9ydFN0YXRlEh0KCG5laWdoYm9yGAEgASgJQgu6SAhyBsCzrrECARIfCgpwZWVyX2dyb3VwGAIgASgJQgu6SAhyBsCzrrECARIdCgh2cmZfbmFtZRgDIAEoCUILukgIcgbAs66xAgESOAoJYmdwX3N0YXRlGAQgASgOMhsubWV0YWxzdGFjay5hcGkudjIuQkdQU3RhdGVCCLpIBYIBAhABEjwKGGJncF90aW1lcl91cF9lc3RhYmxpc2hlZBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoTc2VudF9wcmVmaXhfY291bnRlchgGIAEoBBIfChdhY2NlcHRlZF9wcmVmaXhfY291bnRlchgHIAEoBCKaAQoITmljU3RhdGUSQwoHZGVzaXJlZBgBIAEoDjIjLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaFBvcnRTdGF0dXNCCLpIBYIBAhABSACIAQESPQoGYWN0dWFsGAIgASgOMiMubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoUG9ydFN0YXR1c0IIukgFggECEAFCCgoIX2Rlc2lyZWQiUgoRTWFjaGluZUNvbm5lY3Rpb24SEgoKbWFjaGluZV9pZBgBIAEoCRIpCgNuaWMYAiABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWMiuQIKC1N3aXRjaFF1ZXJ5Eh4KAmlkGAEgASgJQg26SApyCMCzrrECAWgBSACIAQESIwoJcGFydGl0aW9uGAIgASgJQgu6SAhyBtCzrrECAUgBiAEBEh4KBHJhY2sYAyABKAlCC7pICHIGwLOusQIBSAKIAQESHgoEcm9vbRgEIAEoCUILukgIcgbAs66xAgFIA4gBARIxCgJvcxgFIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE9TUXVlcnlIBIgBARIrChRjb25uZWN0ZWRfbWFjaGluZV9pZBgGIAEoCUIIukgFcgOwAQFIBYgBAUIFCgNfaWRCDAoKX3BhcnRpdGlvbkIHCgVfcmFja0IHCgVfcm9vbUIFCgNfb3NCFwoVX2Nvbm5lY3RlZF9tYWNoaW5lX2lkIosBCg1Td2l0Y2hPU1F1ZXJ5EkAKBnZlbmRvchgBIAEoDjIhLm1ldGFsc3RhY2suYXBpLnYyLlN3aXRjaE9TVmVuZG9yQgi6SAWCAQIQAUgAiAEBEiEKB3ZlcnNpb24YAiABKAlCC7pICHIGwLOusQIBSAGIAQFCCQoHX3ZlbmRvckIKCghfdmVyc2lvbiKBAQoKU3dpdGNoU3luYxIoCgR0aW1lGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCghkdXJhdGlvbhgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhISCgVlcnJvchgDIAEoCUgAiAEBQggKBl9lcnJvciJ/ChJTd2l0Y2hXaXRoTWFjaGluZXMSCgoCaWQYASABKAkSEQoJcGFydGl0aW9uGAIgASgJEgwKBHJhY2sYAyABKAkSPAoLY29ubmVjdGlvbnMYBCADKAsyJy5tZXRhbHN0YWNrLmFwaS52Mi5Td2l0Y2hOaWNXaXRoTWFjaGluZSKaAQoUU3dpdGNoTmljV2l0aE1hY2hpbmUSKQoDbmljGAEgASgLMhwubWV0YWxzdGFjay5hcGkudjIuU3dpdGNoTmljEisKB21hY2hpbmUYAiABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5NYWNoaW5lEioKA2ZydRgDIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLk1hY2hpbmVGUlUqiQIKCEJHUFN0YXRlEhkKFUJHUF9TVEFURV9VTlNQRUNJRklFRBAAEhwKDkJHUF9TVEFURV9JRExFEAEaCIKyGQRJZGxlEiIKEUJHUF9TVEFURV9DT05ORUNUEAIaC4KyGQdDb25uZWN0EiAKEEJHUF9TVEFURV9BQ1RJVkUQAxoKgrIZBkFjdGl2ZRIlChNCR1BfU1RBVEVfT1BFTl9TRU5UEAQaDIKyGQhPcGVuU2VudBIrChZCR1BfU1RBVEVfT1BFTl9DT05GSVJNEAUaD4KyGQtPcGVuQ29uZmlybRIqChVCR1BfU1RBVEVfRVNUQUJMSVNIRUQQBhoPgrIZC0VzdGFibGlzaGVkKqIBChFTd2l0Y2hSZXBsYWNlTW9kZRIpCh9TV0lUQ0hfUkVQTEFDRV9NT0RFX1VOU1BFQ0lGSUVEEAAaBIKyGQASLAobU1dJVENIX1JFUExBQ0VfTU9ERV9SRVBMQUNFEAEaC4KyGQdyZXBsYWNlEjQKH1NXSVRDSF9SRVBMQUNFX01PREVfT1BFUkFUSU9OQUwQAhoPgrIZC29wZXJhdGlvbmFsKoQBCg5Td2l0Y2hPU1ZlbmRvchIgChxTV0lUQ0hfT1NfVkVORE9SX1VOU1BFQ0lGSUVEEAASKQoYU1dJVENIX09TX1ZFTkRPUl9DVU1VTFVTEAEaC4KyGQdDdW11bHVzEiUKFlNXSVRDSF9PU19WRU5ET1JfU09OSUMQAhoJgrIZBVNPTmlDKq0BChBTd2l0Y2hQb3J0U3RhdHVzEiIKHlNXSVRDSF9QT1JUX1NUQVRVU19VTlNQRUNJRklFRBAAEiEKFVNXSVRDSF9QT1JUX1NUQVRVU19VUBABGgaCshkCdXASJQoXU1dJVENIX1BPUlRfU1RBVFVTX0RPV04QAhoIgrIZBGRvd24SKwoaU1dJVENIX1BPUlRfU1RBVFVTX1VOS05PV04QAxoLgrIZB3Vua25vd25CwQEKFWNvbS5tZXRhbHN0YWNrLmFwaS52MkILU3dpdGNoUHJvdG9QAVo1Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hcGkvdjI7YXBpdjKiAgNNQViqAhFNZXRhbHN0YWNrLkFwaS5WMsoCEU1ldGFsc3RhY2tcQXBpXFYy4gIdTWV0YWxzdGFja1xBcGlcVjJcR1BCTWV0YWRhdGHqAhNNZXRhbHN0YWNrOjpBcGk6OlYyYgZwcm90bzM", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_machine, file_metalstack_api_v2_predefined_rules]);
/**
* Switch represents a network switch.
@@ -54,73 +54,80 @@ export type Switch = Message<"metalstack.api.v2.Switch"> & {
*/
rack?: string | undefined;
+ /**
+ * Room ID if the switch resides in a room.
+ *
+ * @generated from field: optional string room = 5;
+ */
+ room?: string | undefined;
+
/**
* Partition the switch belongs to.
*
- * @generated from field: string partition = 5;
+ * @generated from field: string partition = 6;
*/
partition: string;
/**
* ReplaceMode is used to mark a switch ready for replacement.
*
- * @generated from field: metalstack.api.v2.SwitchReplaceMode replace_mode = 6;
+ * @generated from field: metalstack.api.v2.SwitchReplaceMode replace_mode = 7;
*/
replaceMode: SwitchReplaceMode;
/**
* ManagementIp is the switch's IP for management access.
*
- * @generated from field: string management_ip = 7;
+ * @generated from field: string management_ip = 8;
*/
managementIp: string;
/**
* ManagementUser is the user name to use for management access.
*
- * @generated from field: optional string management_user = 8;
+ * @generated from field: optional string management_user = 9;
*/
managementUser?: string | undefined;
/**
* ConsoleCommand is the command for accessing the switch's console.
*
- * @generated from field: optional string console_command = 9;
+ * @generated from field: optional string console_command = 10;
*/
consoleCommand?: string | undefined;
/**
* Nics are the front panel ports of the switch.
*
- * @generated from field: repeated metalstack.api.v2.SwitchNic nics = 10;
+ * @generated from field: repeated metalstack.api.v2.SwitchNic nics = 11;
*/
nics: SwitchNic[];
/**
* SwitchOs is the OS running on the switch.
*
- * @generated from field: metalstack.api.v2.SwitchOS os = 11;
+ * @generated from field: metalstack.api.v2.SwitchOS os = 12;
*/
os?: SwitchOS | undefined;
/**
* MachineConnections map machines to the nics they are connected to.
*
- * @generated from field: repeated metalstack.api.v2.MachineConnection machine_connections = 12;
+ * @generated from field: repeated metalstack.api.v2.MachineConnection machine_connections = 13;
*/
machineConnections: MachineConnection[];
/**
* LastSync contains information about the last heartbeat of the switch.
*
- * @generated from field: metalstack.api.v2.SwitchSync last_sync = 13;
+ * @generated from field: metalstack.api.v2.SwitchSync last_sync = 14;
*/
lastSync?: SwitchSync | undefined;
/**
* LastSyncError contains information about the last unsuccessful heartbeat of the switch.
*
- * @generated from field: metalstack.api.v2.SwitchSync last_sync_error = 14;
+ * @generated from field: metalstack.api.v2.SwitchSync last_sync_error = 15;
*/
lastSyncError?: SwitchSync | undefined;
};
@@ -404,17 +411,24 @@ export type SwitchQuery = Message<"metalstack.api.v2.SwitchQuery"> & {
*/
rack?: string | undefined;
+ /**
+ * Room ID if the switch resides in a room.
+ *
+ * @generated from field: optional string room = 4;
+ */
+ room?: string | undefined;
+
/**
* Switch OS specific queries.
*
- * @generated from field: optional metalstack.api.v2.SwitchOSQuery os = 4;
+ * @generated from field: optional metalstack.api.v2.SwitchOSQuery os = 5;
*/
os?: SwitchOSQuery | undefined;
/**
* ConnectedMachineID lists the switches which have the given machine id in the connected machines map.
*
- * @generated from field: optional string connected_machine_id = 5;
+ * @generated from field: optional string connected_machine_id = 6;
*/
connectedMachineId?: string | undefined;
};
diff --git a/proto/metalstack/api/v2/ip.proto b/proto/metalstack/api/v2/ip.proto
index a72b8068..cf7fe208 100644
--- a/proto/metalstack/api/v2/ip.proto
+++ b/proto/metalstack/api/v2/ip.proto
@@ -19,13 +19,13 @@ service IPService {
rpc Create(IPServiceCreateRequest) returns (IPServiceCreateResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
option (project_roles) = PROJECT_ROLE_EDITOR;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Updates an IP address.
rpc Update(IPServiceUpdateRequest) returns (IPServiceUpdateResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
option (project_roles) = PROJECT_ROLE_EDITOR;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Returns the list of all IP addresses.
rpc List(IPServiceListRequest) returns (IPServiceListResponse) {
@@ -38,7 +38,7 @@ service IPService {
rpc Delete(IPServiceDeleteRequest) returns (IPServiceDeleteResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
option (project_roles) = PROJECT_ROLE_EDITOR;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
}
diff --git a/proto/metalstack/api/v2/machine.proto b/proto/metalstack/api/v2/machine.proto
index ea63c09e..2a354f71 100644
--- a/proto/metalstack/api/v2/machine.proto
+++ b/proto/metalstack/api/v2/machine.proto
@@ -26,13 +26,13 @@ service MachineService {
rpc Create(MachineServiceCreateRequest) returns (MachineServiceCreateResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
option (project_roles) = PROJECT_ROLE_EDITOR;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Updates a machine.
rpc Update(MachineServiceUpdateRequest) returns (MachineServiceUpdateResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
option (project_roles) = PROJECT_ROLE_EDITOR;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Returns the list of all machines.
rpc List(MachineServiceListRequest) returns (MachineServiceListResponse) {
@@ -45,19 +45,19 @@ service MachineService {
rpc Delete(MachineServiceDeleteRequest) returns (MachineServiceDeleteResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
option (project_roles) = PROJECT_ROLE_EDITOR;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// BMCCommand sends a command to the BMC of a machine.
rpc BMCCommand(MachineServiceBMCCommandRequest) returns (MachineServiceBMCCommandResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
option (project_roles) = PROJECT_ROLE_EDITOR;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Returns the BMC details of a machine.
rpc GetBMC(MachineServiceGetBMCRequest) returns (MachineServiceGetBMCResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
option (project_roles) = PROJECT_ROLE_EDITOR;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
}
@@ -253,16 +253,18 @@ message Machine {
Partition partition = 3;
// Rack where this machine is located
string rack = 4 [(buf.validate.field).string = {max_len: 128}];
+ // Room where this machine is located
+ string room = 5 [(buf.validate.field).string = {max_len: 128}];
// Size of this machine
- Size size = 5;
+ Size size = 6;
// Hardware specs of this machine
- MachineHardware hardware = 6;
+ MachineHardware hardware = 7;
// Allocation details
- MachineAllocation allocation = 7;
+ MachineAllocation allocation = 8;
// Status contains several status details related to this machine
- MachineStatus status = 8;
+ MachineStatus status = 9;
// MachineRecentProvisioningEvents contains the recent provisioning events
- MachineRecentProvisioningEvents recent_provisioning_events = 9;
+ MachineRecentProvisioningEvents recent_provisioning_events = 10;
}
// MachineStatus contains several status details related to this machine
@@ -737,37 +739,36 @@ message MachineQuery {
// Size of the machine to get
optional string size = 4 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Rack of the machine to get
- optional string rack = 5 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ optional string rack = 5 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
+ // Room of the machine to get
+ optional string room = 6 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Labels for which this machine should get filtered
- optional Labels labels = 6;
+ optional Labels labels = 7;
// Allocation specific machine queries
- optional MachineAllocationQuery allocation = 7;
+ optional MachineAllocationQuery allocation = 8;
// Network specific machine queries
- optional MachineNetworkQuery network = 8;
+ optional MachineNetworkQuery network = 9;
// Nic specific machine queries
- optional MachineNicQuery nic = 9;
+ optional MachineNicQuery nic = 10;
// Disk specific machine queries
- optional MachineDiskQuery disk = 10;
+ optional MachineDiskQuery disk = 11;
// Bmc specific machine queries
- optional MachineBMCQuery bmc = 11;
+ optional MachineBMCQuery bmc = 12;
// Fru specific machine queries
- optional MachineFRUQuery fru = 12;
+ optional MachineFRUQuery fru = 13;
// Hardware specific machine query
- optional MachineHardwareQuery hardware = 13;
+ optional MachineHardwareQuery hardware = 14;
// State this machine has
- optional MachineState state = 14;
+ optional MachineState state = 15;
// Waiting if set to true, only waiting machines are returned.
// Only useful for admins.
- optional bool waiting = 15;
+ optional bool waiting = 16;
// Preallocated if set to true, only machines which are preallocated are returned.
// Only useful for admins.
- optional bool preallocated = 16;
+ optional bool preallocated = 17;
// NotAllocated if set to true, only machines which are not allocated are returned.
// Only useful for admins.
- optional bool not_allocated = 17;
+ optional bool not_allocated = 18;
}
// MachineAllocationQuery allocation specific query parameters
diff --git a/proto/metalstack/api/v2/method.proto b/proto/metalstack/api/v2/method.proto
index 0dcf672f..5152f3fd 100644
--- a/proto/metalstack/api/v2/method.proto
+++ b/proto/metalstack/api/v2/method.proto
@@ -12,12 +12,12 @@ service MethodService {
// Returns the list of all public visible methods.
rpc List(MethodServiceListRequest) returns (MethodServiceListResponse) {
option (visibility) = VISIBILITY_PUBLIC;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// TokenScopedList returns all methods callable with the token present in the request.
rpc TokenScopedList(MethodServiceTokenScopedListRequest) returns (MethodServiceTokenScopedListResponse) {
option (visibility) = VISIBILITY_SELF;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
}
diff --git a/proto/metalstack/api/v2/network.proto b/proto/metalstack/api/v2/network.proto
index 519a00af..a0be3190 100644
--- a/proto/metalstack/api/v2/network.proto
+++ b/proto/metalstack/api/v2/network.proto
@@ -19,13 +19,13 @@ service NetworkService {
rpc Create(NetworkServiceCreateRequest) returns (NetworkServiceCreateResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
option (project_roles) = PROJECT_ROLE_EDITOR;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Updates a network.
rpc Update(NetworkServiceUpdateRequest) returns (NetworkServiceUpdateResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
option (project_roles) = PROJECT_ROLE_EDITOR;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Returns the list of all project networks.
rpc List(NetworkServiceListRequest) returns (NetworkServiceListResponse) {
@@ -45,7 +45,7 @@ service NetworkService {
rpc Delete(NetworkServiceDeleteRequest) returns (NetworkServiceDeleteResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
option (project_roles) = PROJECT_ROLE_EDITOR;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
}
diff --git a/proto/metalstack/api/v2/switch.proto b/proto/metalstack/api/v2/switch.proto
index f139e1d3..9d7239a7 100644
--- a/proto/metalstack/api/v2/switch.proto
+++ b/proto/metalstack/api/v2/switch.proto
@@ -22,32 +22,34 @@ message Switch {
string description = 3 [(buf.validate.field).string.(metalstack.api.v2.is_description) = true];
// Rack ID if the switch resides in a rack.
optional string rack = 4 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
+ // Room ID if the switch resides in a room.
+ optional string room = 5 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Partition the switch belongs to.
- string partition = 5 [(buf.validate.field).string.(metalstack.api.v2.is_partition) = true];
+ string partition = 6 [(buf.validate.field).string.(metalstack.api.v2.is_partition) = true];
// ReplaceMode is used to mark a switch ready for replacement.
- SwitchReplaceMode replace_mode = 6 [(buf.validate.field).enum.defined_only = true];
+ SwitchReplaceMode replace_mode = 7 [(buf.validate.field).enum.defined_only = true];
// ManagementIp is the switch's IP for management access.
- string management_ip = 7 [(buf.validate.field).string.ip = true];
+ string management_ip = 8 [(buf.validate.field).string.ip = true];
// ManagementUser is the user name to use for management access.
- optional string management_user = 8 [(buf.validate.field).string = {
+ optional string management_user = 9 [(buf.validate.field).string = {
min_len: 2
max_len: 128
}];
// ConsoleCommand is the command for accessing the switch's console.
- optional string console_command = 9 [(buf.validate.field).string = {
+ optional string console_command = 10 [(buf.validate.field).string = {
min_len: 2
max_len: 128
}];
// Nics are the front panel ports of the switch.
- repeated SwitchNic nics = 10;
+ repeated SwitchNic nics = 11;
// SwitchOs is the OS running on the switch.
- SwitchOS os = 11;
+ SwitchOS os = 12;
// MachineConnections map machines to the nics they are connected to.
- repeated MachineConnection machine_connections = 12;
+ repeated MachineConnection machine_connections = 13;
// LastSync contains information about the last heartbeat of the switch.
- SwitchSync last_sync = 13;
+ SwitchSync last_sync = 14;
// LastSyncError contains information about the last unsuccessful heartbeat of the switch.
- SwitchSync last_sync_error = 14;
+ SwitchSync last_sync_error = 15;
}
// SwitchOS holds information about the NOS and versions running on the switch.
@@ -134,10 +136,12 @@ message SwitchQuery {
optional string partition = 2 [(buf.validate.field).string.(metalstack.api.v2.is_partition) = true];
// Rack of the switches to list.
optional string rack = 3 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
+ // Room ID if the switch resides in a room.
+ optional string room = 4 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Switch OS specific queries.
- optional SwitchOSQuery os = 4;
+ optional SwitchOSQuery os = 5;
// ConnectedMachineID lists the switches which have the given machine id in the connected machines map.
- optional string connected_machine_id = 5 [(buf.validate.field).string.uuid = true];
+ optional string connected_machine_id = 6 [(buf.validate.field).string.uuid = true];
}
// SwitchOSQuery holds OS specific query parameters.
diff --git a/proto/metalstack/api/v2/token.proto b/proto/metalstack/api/v2/token.proto
index eacbeb01..0f061dd8 100644
--- a/proto/metalstack/api/v2/token.proto
+++ b/proto/metalstack/api/v2/token.proto
@@ -13,32 +13,32 @@ service TokenService {
// Returns the token with the specified UUID.
rpc Get(TokenServiceGetRequest) returns (TokenServiceGetResponse) {
option (visibility) = VISIBILITY_SELF;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Creates a token to authenticate against the platform, the secret will be only visible in the response.
rpc Create(TokenServiceCreateRequest) returns (TokenServiceCreateResponse) {
option (visibility) = VISIBILITY_SELF;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Updates a token.
rpc Update(TokenServiceUpdateRequest) returns (TokenServiceUpdateResponse) {
option (visibility) = VISIBILITY_SELF;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Returns the list of all user tokens.
rpc List(TokenServiceListRequest) returns (TokenServiceListResponse) {
option (visibility) = VISIBILITY_SELF;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Revokes a token, no further usage is possible afterwards.
rpc Revoke(TokenServiceRevokeRequest) returns (TokenServiceRevokeResponse) {
option (visibility) = VISIBILITY_SELF;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
// Refreshes a token, this will create a new token with the exact same permissions as the calling token contains.
rpc Refresh(TokenServiceRefreshRequest) returns (TokenServiceRefreshResponse) {
option (visibility) = VISIBILITY_SELF;
- option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ option (auditing) = AUDITING_INCLUDED;
}
}
diff --git a/python/metalstack/api/v2/machine_pb2.py b/python/metalstack/api/v2/machine_pb2.py
index 1afc38b3..f3efadb9 100644
--- a/python/metalstack/api/v2/machine_pb2.py
+++ b/python/metalstack/api/v2/machine_pb2.py
@@ -34,7 +34,7 @@
from metalstack.api.v2 import size_pb2 as metalstack_dot_api_dot_v2_dot_size__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmetalstack/api/v2/machine.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\"metalstack/api/v2/filesystem.proto\x1a\x1dmetalstack/api/v2/image.proto\x1a\x1fmetalstack/api/v2/network.proto\x1a!metalstack/api/v2/partition.proto\x1a(metalstack/api/v2/predefined_rules.proto\x1a\x1cmetalstack/api/v2/size.proto\"\\\n\x18MachineServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"Q\n\x19MachineServiceGetResponse\x12\x34\n\x07machine\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\"\xdb\x08\n\x1bMachineServiceCreateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x04uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12(\n\x08hostname\x18\x05 \x01(\tB\x07\xbaH\x04r\x02h\x01H\x02R\x08hostname\x88\x01\x01\x12.\n\tpartition\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x03R\tpartition\x88\x01\x01\x12$\n\x04size\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x04R\x04size\x88\x01\x01\x12!\n\x05image\x18\x08 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05image\x12=\n\x11\x66ilesystem_layout\x18\t \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x05R\x10\x66ilesystemLayout\x88\x01\x01\x12@\n\x0fssh_public_keys\x18\n \x03(\tB\x18\xbaH\x15\x92\x01\x12\x10\x32\"\x08r\x06\x88\xb4\xae\xb1\x02\x01\xd0\xa4\xb3\xb1\x02\x01R\rsshPublicKeys\x12\x30\n\x08userdata\x18\x0b \x01(\tB\x0f\xbaH\x0cr\n\x18\x80\x80\x02\xf0\xb3\xae\xb1\x02\x01H\x06R\x08userdata\x88\x01\x01\x12\x31\n\x06labels\x18\x0c \x01(\x0b\x32\x19.metalstack.api.v2.LabelsR\x06labels\x12Q\n\x08networks\x18\r \x03(\x0b\x32+.metalstack.api.v2.MachineAllocationNetworkB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x08networks\x12/\n\x0eplacement_tags\x18\x0e \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\rplacementTags\x12G\n\x0b\x64ns_servers\x18\x0f \x03(\x0b\x32\x1c.metalstack.api.v2.DNSServerB\x08\xbaH\x05\x92\x01\x02\x10\x03R\ndnsServers\x12G\n\x0bntp_servers\x18\x10 \x03(\x0b\x32\x1c.metalstack.api.v2.NTPServerB\x08\xbaH\x05\x92\x01\x02\x10\nR\nntpServers\x12[\n\x0f\x61llocation_type\x18\x11 \x01(\x0e\x32(.metalstack.api.v2.MachineAllocationTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0e\x61llocationType\x12\x44\n\rfirewall_spec\x18\x12 \x01(\x0b\x32\x1f.metalstack.api.v2.FirewallSpecR\x0c\x66irewallSpecB\x07\n\x05_uuidB\x0e\n\x0c_descriptionB\x0b\n\t_hostnameB\x0c\n\n_partitionB\x07\n\x05_sizeB\x14\n\x12_filesystem_layoutB\x0b\n\t_userdata\"W\n\x0c\x46irewallSpec\x12G\n\x0e\x66irewall_rules\x18\x01 \x01(\x0b\x32 .metalstack.api.v2.FirewallRulesR\rfirewallRules\"T\n\x1cMachineServiceCreateResponse\x12\x34\n\x07machine\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\"\xf6\x02\n\x1bMachineServiceUpdateRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12<\n\x06labels\x18\x05 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x01R\x06labels\x88\x01\x01\x12@\n\x0fssh_public_keys\x18\x06 \x03(\tB\x18\xbaH\x15\x92\x01\x12\x10\x32\"\x08r\x06\x88\xb4\xae\xb1\x02\x01\xd0\xa4\xb3\xb1\x02\x01R\rsshPublicKeysB\x0e\n\x0c_descriptionB\t\n\x07_labels\"T\n\x1cMachineServiceUpdateResponse\x12\x34\n\x07machine\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\"v\n\x19MachineServiceListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x35\n\x05query\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.MachineQueryR\x05query\"T\n\x1aMachineServiceListResponse\x12\x36\n\x08machines\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.MachineR\x08machines\"_\n\x1bMachineServiceDeleteRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"T\n\x1cMachineServiceDeleteResponse\x12\x34\n\x07machine\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\"\xad\x01\n\x1fMachineServiceBMCCommandRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12H\n\x07\x63ommand\x18\x03 \x01(\x0e\x32$.metalstack.api.v2.MachineBMCCommandB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x07\x63ommand\"\"\n MachineServiceBMCCommandResponse\"_\n\x1bMachineServiceGetBMCRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"s\n\x1cMachineServiceGetBMCResponse\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x35\n\x03\x62mc\x18\x02 \x01(\x0b\x32#.metalstack.api.v2.MachineBMCReportR\x03\x62mc\"\x8d\x04\n\x07Machine\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12:\n\tpartition\x18\x03 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\x12\x1c\n\x04rack\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x04rack\x12+\n\x04size\x18\x05 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size\x12>\n\x08hardware\x18\x06 \x01(\x0b\x32\".metalstack.api.v2.MachineHardwareR\x08hardware\x12\x44\n\nallocation\x18\x07 \x01(\x0b\x32$.metalstack.api.v2.MachineAllocationR\nallocation\x12\x38\n\x06status\x18\x08 \x01(\x0b\x32 .metalstack.api.v2.MachineStatusR\x06status\x12p\n\x1arecent_provisioning_events\x18\t \x01(\x0b\x32\x32.metalstack.api.v2.MachineRecentProvisioningEventsR\x18recentProvisioningEvents\"\xa4\x02\n\rMachineStatus\x12\x41\n\tcondition\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.MachineConditionR\tcondition\x12N\n\tled_state\x18\x02 \x01(\x0b\x32\x31.metalstack.api.v2.MachineChassisIdentifyLEDStateR\x08ledState\x12N\n\nliveliness\x18\x03 \x01(\x0e\x32$.metalstack.api.v2.MachineLivelinessB\x08\xbaH\x05\x82\x01\x02\x10\x01R\nliveliness\x12\x30\n\x14metal_hammer_version\x18\x04 \x01(\tR\x12metalHammerVersion\"\xa4\x01\n\x10MachineCondition\x12?\n\x05state\x18\x01 \x01(\x0e\x32\x1f.metalstack.api.v2.MachineStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05state\x12-\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12 \n\x06issuer\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x02R\x06issuer\"\xb9\x07\n\x11MachineAllocation\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\'\n\ncreated_by\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\tcreatedBy\x12\"\n\x07project\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12.\n\x05image\x18\x07 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\x12P\n\x11\x66ilesystem_layout\x18\x08 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\x12=\n\x08networks\x18\t \x03(\x0b\x32!.metalstack.api.v2.MachineNetworkR\x08networks\x12#\n\x08hostname\x18\n \x01(\tB\x07\xbaH\x04r\x02h\x01R\x08hostname\x12@\n\x0fssh_public_keys\x18\x0b \x03(\tB\x18\xbaH\x15\x92\x01\x12\x10\x32\"\x08r\x06\x88\xb4\xae\xb1\x02\x01\xd0\xa4\xb3\xb1\x02\x01R\rsshPublicKeys\x12+\n\x08userdata\x18\x0c \x01(\tB\x0f\xbaH\x0cr\n\x18\x80\x80\x02\xf0\xb3\xae\xb1\x02\x01R\x08userdata\x12[\n\x0f\x61llocation_type\x18\r \x01(\x0e\x32(.metalstack.api.v2.MachineAllocationTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0e\x61llocationType\x12G\n\x0e\x66irewall_rules\x18\x0e \x01(\x0b\x32 .metalstack.api.v2.FirewallRulesR\rfirewallRules\x12G\n\x0b\x64ns_servers\x18\x0f \x03(\x0b\x32\x1c.metalstack.api.v2.DNSServerB\x08\xbaH\x05\x92\x01\x02\x10\x03R\ndnsServers\x12G\n\x0bntp_servers\x18\x10 \x03(\x0b\x32\x1c.metalstack.api.v2.NTPServerB\x08\xbaH\x05\x92\x01\x02\x10\nR\nntpServers\x12/\n\x03vpn\x18\x11 \x01(\x0b\x32\x1d.metalstack.api.v2.MachineVPNR\x03vpn\"a\n\x18MachineAllocationNetwork\x12%\n\x07network\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07network\x12\x1e\n\x03ips\x18\x02 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xc0\xa4\xb3\xb1\x02\x01R\x03ips\"\x90\x01\n\rFirewallRules\x12=\n\x06\x65gress\x18\x01 \x03(\x0b\x32%.metalstack.api.v2.FirewallEgressRuleR\x06\x65gress\x12@\n\x07ingress\x18\x02 \x03(\x0b\x32&.metalstack.api.v2.FirewallIngressRuleR\x07ingress\"\xd0\x01\n\x12\x46irewallEgressRule\x12\x43\n\x08protocol\x18\x01 \x01(\x0e\x32\x1d.metalstack.api.v2.IPProtocolB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x08protocol\x12$\n\x05ports\x18\x02 \x03(\rB\x0e\xbaH\x0b\x92\x01\x08\"\x06*\x04\x18\xfc\xff\x03R\x05ports\x12\x1c\n\x02to\x18\x03 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x02to\x12\x31\n\x07\x63omment\x18\x04 \x01(\tB\x17\xbaH\x14r\x0f\x18\x64\x32\x0b^[a-z_ -]*$\xd8\x01\x01R\x07\x63omment\"\xf3\x01\n\x13\x46irewallIngressRule\x12\x43\n\x08protocol\x18\x01 \x01(\x0e\x32\x1d.metalstack.api.v2.IPProtocolB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x08protocol\x12$\n\x05ports\x18\x02 \x03(\rB\x0e\xbaH\x0b\x92\x01\x08\"\x06*\x04\x18\xfc\xff\x03R\x05ports\x12\x1c\n\x02to\x18\x03 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x02to\x12 \n\x04\x66rom\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x04\x66rom\x12\x31\n\x07\x63omment\x18\x05 \x01(\tB\x17\xbaH\x14r\x0f\x18\x64\x32\x0b^[a-z_ -]*$\xd8\x01\x01R\x07\x63omment\"\x9c\x03\n\x0eMachineNetwork\x12\x18\n\x07network\x18\x01 \x01(\tR\x07network\x12(\n\x08prefixes\x18\x02 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\x03 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12\x1e\n\x03ips\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xc0\xa4\xb3\xb1\x02\x01R\x03ips\x12K\n\x0cnetwork_type\x18\x05 \x01(\x0e\x32\x1e.metalstack.api.v2.NetworkTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0bnetworkType\x12?\n\x08nat_type\x18\x06 \x01(\x0e\x32\x1a.metalstack.api.v2.NATTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x07natType\x12\x10\n\x03vrf\x18\x07 \x01(\x04R\x03vrf\x12\x10\n\x03\x61sn\x18\x08 \x01(\rR\x03\x61sn\x12\'\n\x07project\x18\t \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x07project\x88\x01\x01\x42\n\n\x08_project\"\xfb\x01\n\x0fMachineHardware\x12\x16\n\x06memory\x18\x01 \x01(\x04R\x06memory\x12;\n\x05\x64isks\x18\x02 \x03(\x0b\x32%.metalstack.api.v2.MachineBlockDeviceR\x05\x64isks\x12/\n\x04\x63pus\x18\x03 \x03(\x0b\x32\x1b.metalstack.api.v2.MetalCPUR\x04\x63pus\x12/\n\x04gpus\x18\x04 \x03(\x0b\x32\x1b.metalstack.api.v2.MetalGPUR\x04gpus\x12\x31\n\x04nics\x18\x05 \x03(\x0b\x32\x1d.metalstack.api.v2.MachineNicR\x04nics\"|\n\x08MetalCPU\x12 \n\x06vendor\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x02R\x06vendor\x12\x1e\n\x05model\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x02R\x05model\x12\x14\n\x05\x63ores\x18\x03 \x01(\rR\x05\x63ores\x12\x18\n\x07threads\x18\x04 \x01(\rR\x07threads\"L\n\x08MetalGPU\x12 \n\x06vendor\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x02R\x06vendor\x12\x1e\n\x05model\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x02R\x05model\"\xa7\x02\n\nMachineNic\x12\x1d\n\x03mac\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xb8\xb3\xae\xb1\x02\x01R\x03mac\x12\x1f\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12(\n\nidentifier\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\nidentifier\x12 \n\x06vendor\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x06vendor\x12\x1e\n\x05model\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x05model\x12\x14\n\x05speed\x18\x06 \x01(\x04R\x05speed\x12;\n\tneighbors\x18\x07 \x03(\x0b\x32\x1d.metalstack.api.v2.MachineNicR\tneighbors\x12\x1a\n\x08hostname\x18\x08 \x01(\tR\x08hostname\"I\n\x12MachineBlockDevice\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x12\n\x04size\x18\x02 \x01(\x04R\x04size\"o\n\x1eMachineChassisIdentifyLEDState\x12\x1e\n\x05value\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x05value\x12-\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\"\xcb\x03\n\x10MachineBMCReport\x12/\n\x03\x62mc\x18\x01 \x01(\x0b\x32\x1d.metalstack.api.v2.MachineBMCR\x03\x62mc\x12\x32\n\x04\x62ios\x18\x02 \x01(\x0b\x32\x1e.metalstack.api.v2.MachineBiosR\x04\x62ios\x12/\n\x03\x66ru\x18\x03 \x01(\x0b\x32\x1d.metalstack.api.v2.MachineFRUR\x03\x66ru\x12H\n\x0cpower_metric\x18\x04 \x01(\x0b\x32%.metalstack.api.v2.MachinePowerMetricR\x0bpowerMetric\x12L\n\x0epower_supplies\x18\x05 \x03(\x0b\x32%.metalstack.api.v2.MachinePowerSupplyR\rpowerSupplies\x12N\n\tled_state\x18\x06 \x01(\x0b\x32\x31.metalstack.api.v2.MachineChassisIdentifyLEDStateR\x08ledState\x12\x39\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\"z\n\x0bMachineBios\x12%\n\x07version\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x07version\x12#\n\x06vendor\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x06vendor\x12\x1f\n\x04\x64\x61te\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x04\x64\x61te\"\x99\x02\n\nMachineBMC\x12\"\n\x07\x61\x64\x64ress\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x80\x02\x01R\x07\x61\x64\x64ress\x12\x1d\n\x03mac\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xb8\xb3\xae\xb1\x02\x01R\x03mac\x12\x1f\n\x04user\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x04user\x12\'\n\x08password\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x08password\x12)\n\tinterface\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\tinterface\x12%\n\x07version\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x07version\x12,\n\x0bpower_state\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\npowerState\"\xa6\x05\n\nMachineFRU\x12@\n\x13\x63hassis_part_number\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x11\x63hassisPartNumber\x88\x01\x01\x12@\n\x13\x63hassis_part_serial\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x11\x63hassisPartSerial\x88\x01\x01\x12-\n\tboard_mfg\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x08\x62oardMfg\x88\x01\x01\x12:\n\x10\x62oard_mfg_serial\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x03R\x0e\x62oardMfgSerial\x88\x01\x01\x12<\n\x11\x62oard_part_number\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x04R\x0f\x62oardPartNumber\x88\x01\x01\x12\x43\n\x14product_manufacturer\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x05R\x13productManufacturer\x88\x01\x01\x12@\n\x13product_part_number\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x06R\x11productPartNumber\x88\x01\x01\x12\x37\n\x0eproduct_serial\x18\x08 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x07R\rproductSerial\x88\x01\x01\x42\x16\n\x14_chassis_part_numberB\x16\n\x14_chassis_part_serialB\x0c\n\n_board_mfgB\x13\n\x11_board_mfg_serialB\x14\n\x12_board_part_numberB\x17\n\x15_product_manufacturerB\x16\n\x14_product_part_numberB\x11\n\x0f_product_serial\"\xce\x01\n\x12MachinePowerMetric\x12\x34\n\x16\x61verage_consumed_watts\x18\x01 \x01(\x02R\x14\x61verageConsumedWatts\x12&\n\x0finterval_in_min\x18\x02 \x01(\x02R\rintervalInMin\x12,\n\x12max_consumed_watts\x18\x03 \x01(\x02R\x10maxConsumedWatts\x12,\n\x12min_consumed_watts\x18\x04 \x01(\x02R\x10minConsumedWatts\"B\n\x12MachinePowerSupply\x12\x16\n\x06health\x18\x01 \x01(\tR\x06health\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\"\xd3\x02\n\x1fMachineRecentProvisioningEvents\x12\x43\n\x06\x65vents\x18\x01 \x03(\x0b\x32+.metalstack.api.v2.MachineProvisioningEventR\x06\x65vents\x12\x42\n\x0flast_event_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\rlastEventTime\x12U\n\x10last_error_event\x18\x03 \x01(\x0b\x32+.metalstack.api.v2.MachineProvisioningEventR\x0elastErrorEvent\x12P\n\x05state\x18\x04 \x01(\x0e\x32\x30.metalstack.api.v2.MachineProvisioningEventStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05state\"\xb5\x01\n\x18MachineProvisioningEvent\x12.\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04time\x12O\n\x05\x65vent\x18\x02 \x01(\x0e\x32/.metalstack.api.v2.MachineProvisioningEventTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05\x65vent\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\"\x99\x01\n\nMachineVPN\x12\x32\n\x15\x63ontrol_plane_address\x18\x01 \x01(\tR\x13\x63ontrolPlaneAddress\x12\x19\n\x08\x61uth_key\x18\x02 \x01(\tR\x07\x61uthKey\x12\x1c\n\tconnected\x18\x03 \x01(\x08R\tconnected\x12\x1e\n\x03ips\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xc0\xa4\xb3\xb1\x02\x01R\x03ips\"\xc7\x08\n\x0cMachineQuery\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12.\n\tpartition\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x02R\tpartition\x88\x01\x01\x12$\n\x04size\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04size\x88\x01\x01\x12#\n\x04rack\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x04R\x04rack\x88\x01\x01\x12\x36\n\x06labels\x18\x06 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x05R\x06labels\x88\x01\x01\x12N\n\nallocation\x18\x07 \x01(\x0b\x32).metalstack.api.v2.MachineAllocationQueryH\x06R\nallocation\x88\x01\x01\x12\x45\n\x07network\x18\x08 \x01(\x0b\x32&.metalstack.api.v2.MachineNetworkQueryH\x07R\x07network\x88\x01\x01\x12\x39\n\x03nic\x18\t \x01(\x0b\x32\".metalstack.api.v2.MachineNicQueryH\x08R\x03nic\x88\x01\x01\x12<\n\x04\x64isk\x18\n \x01(\x0b\x32#.metalstack.api.v2.MachineDiskQueryH\tR\x04\x64isk\x88\x01\x01\x12\x39\n\x03\x62mc\x18\x0b \x01(\x0b\x32\".metalstack.api.v2.MachineBMCQueryH\nR\x03\x62mc\x88\x01\x01\x12\x39\n\x03\x66ru\x18\x0c \x01(\x0b\x32\".metalstack.api.v2.MachineFRUQueryH\x0bR\x03\x66ru\x88\x01\x01\x12H\n\x08hardware\x18\r \x01(\x0b\x32\'.metalstack.api.v2.MachineHardwareQueryH\x0cR\x08hardware\x88\x01\x01\x12:\n\x05state\x18\x0e \x01(\x0e\x32\x1f.metalstack.api.v2.MachineStateH\rR\x05state\x88\x01\x01\x12\x1d\n\x07waiting\x18\x0f \x01(\x08H\x0eR\x07waiting\x88\x01\x01\x12\'\n\x0cpreallocated\x18\x10 \x01(\x08H\x0fR\x0cpreallocated\x88\x01\x01\x12(\n\rnot_allocated\x18\x11 \x01(\x08H\x10R\x0cnotAllocated\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_nameB\x0c\n\n_partitionB\x07\n\x05_sizeB\x07\n\x05_rackB\t\n\x07_labelsB\r\n\x0b_allocationB\n\n\x08_networkB\x06\n\x04_nicB\x07\n\x05_diskB\x06\n\x04_bmcB\x06\n\x04_fruB\x0b\n\t_hardwareB\x08\n\x06_stateB\n\n\x08_waitingB\x0f\n\r_preallocatedB\x10\n\x0e_not_allocated\"\xdd\x04\n\x16MachineAllocationQuery\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\'\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x02R\x07project\x88\x01\x01\x12&\n\x05image\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x05image\x88\x01\x01\x12=\n\x11\x66ilesystem_layout\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x04R\x10\x66ilesystemLayout\x88\x01\x01\x12(\n\x08hostname\x18\x06 \x01(\tB\x07\xbaH\x04r\x02h\x01H\x05R\x08hostname\x88\x01\x01\x12`\n\x0f\x61llocation_type\x18\x07 \x01(\x0e\x32(.metalstack.api.v2.MachineAllocationTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x06R\x0e\x61llocationType\x88\x01\x01\x12\x36\n\x06labels\x18\x08 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x07R\x06labels\x88\x01\x01\x12\x34\n\x03vpn\x18\t \x01(\x0b\x32\x1d.metalstack.api.v2.MachineVPNH\x08R\x03vpn\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_nameB\n\n\x08_projectB\x08\n\x06_imageB\x14\n\x12_filesystem_layoutB\x0b\n\t_hostnameB\x12\n\x10_allocation_typeB\t\n\x07_labelsB\x06\n\x04_vpn\"\xe4\x01\n\x13MachineNetworkQuery\x12\x1a\n\x08networks\x18\x01 \x03(\tR\x08networks\x12(\n\x08prefixes\x18\x02 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\x03 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12\x1e\n\x03ips\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xc0\xa4\xb3\xb1\x02\x01R\x03ips\x12\x12\n\x04vrfs\x18\x05 \x03(\x04R\x04vrfs\x12\x12\n\x04\x61sns\x18\x06 \x03(\rR\x04\x61sns\"\xd9\x01\n\x0fMachineNicQuery\x12(\n\x04macs\x18\x01 \x03(\tB\x14\xbaH\x11\x92\x01\x0e\x10\x64\x18\x01\"\x08r\x06\xb8\xb3\xae\xb1\x02\x01R\x04macs\x12\'\n\x05names\x18\x02 \x03(\tB\x11\xbaH\x0e\x92\x01\x0b\x10\x64\x18\x01\"\x05r\x03\x18\x80\x01R\x05names\x12\x39\n\rneighbor_macs\x18\x03 \x03(\tB\x14\xbaH\x11\x92\x01\x0e\x10\x64\x18\x01\"\x08r\x06\xb8\xb3\xae\xb1\x02\x01R\x0cneighborMacs\x12\x38\n\x0eneighbor_names\x18\x04 \x03(\tB\x11\xbaH\x0e\x92\x01\x0b\x10\x64\x18\x01\"\x05r\x03\x18\x80\x01R\rneighborNames\"Y\n\x10MachineDiskQuery\x12%\n\x05names\x18\x01 \x03(\tB\x0f\xbaH\x0c\x92\x01\t\x10\x64\"\x05r\x03\x18\x80\x01R\x05names\x12\x1e\n\x05sizes\x18\x02 \x03(\x04\x42\x08\xbaH\x05\x92\x01\x02\x10\x64R\x05sizes\"\xd8\x01\n\x0fMachineBMCQuery\x12&\n\x07\x61\x64\x64ress\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01H\x00R\x07\x61\x64\x64ress\x88\x01\x01\x12\"\n\x03mac\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xb8\xb3\xae\xb1\x02\x01H\x01R\x03mac\x88\x01\x01\x12!\n\x04user\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x02R\x04user\x88\x01\x01\x12+\n\tinterface\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x03R\tinterface\x88\x01\x01\x42\n\n\x08_addressB\x06\n\x04_macB\x07\n\x05_userB\x0c\n\n_interface\"\x88\x05\n\x0fMachineFRUQuery\x12=\n\x13\x63hassis_part_number\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x00R\x11\x63hassisPartNumber\x88\x01\x01\x12=\n\x13\x63hassis_part_serial\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x01R\x11\x63hassisPartSerial\x88\x01\x01\x12*\n\tboard_mfg\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x02R\x08\x62oardMfg\x88\x01\x01\x12\x30\n\x0c\x62oard_serial\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x03R\x0b\x62oardSerial\x88\x01\x01\x12\x39\n\x11\x62oard_part_number\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x04R\x0f\x62oardPartNumber\x88\x01\x01\x12@\n\x14product_manufacturer\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x05R\x13productManufacturer\x88\x01\x01\x12=\n\x13product_part_number\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x06R\x11productPartNumber\x88\x01\x01\x12\x34\n\x0eproduct_serial\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x07R\rproductSerial\x88\x01\x01\x42\x16\n\x14_chassis_part_numberB\x16\n\x14_chassis_part_serialB\x0c\n\n_board_mfgB\x0f\n\r_board_serialB\x14\n\x12_board_part_numberB\x17\n\x15_product_manufacturerB\x16\n\x14_product_part_numberB\x11\n\x0f_product_serial\"n\n\x14MachineHardwareQuery\x12\x1b\n\x06memory\x18\x01 \x01(\x04H\x00R\x06memory\x88\x01\x01\x12 \n\tcpu_cores\x18\x02 \x01(\rH\x01R\x08\x63puCores\x88\x01\x01\x42\t\n\x07_memoryB\x0c\n\n_cpu_cores\"\x98\x03\n\x12MachineIssuesQuery\x12\x44\n\rmachine_query\x18\x01 \x01(\x0b\x32\x1f.metalstack.api.v2.MachineQueryR\x0cmachineQuery\x12\x46\n\x04only\x18\x02 \x03(\x0e\x32#.metalstack.api.v2.MachineIssueTypeB\r\xbaH\n\x92\x01\x07\"\x05\x82\x01\x02\x10\x01R\x04only\x12\x46\n\x04omit\x18\x03 \x03(\x0e\x32#.metalstack.api.v2.MachineIssueTypeB\r\xbaH\n\x92\x01\x07\"\x05\x82\x01\x02\x10\x01R\x04omit\x12R\n\x08severity\x18\x04 \x01(\x0e\x32\'.metalstack.api.v2.MachineIssueSeverityB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x08severity\x88\x01\x01\x12K\n\x14last_error_threshold\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationR\x12lastErrorThresholdB\x0b\n\t_severity\"f\n\rMachineIssues\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x37\n\x06issues\x18\x02 \x03(\x0b\x32\x1f.metalstack.api.v2.MachineIssueR\x06issues\"\x9b\x02\n\x0cMachineIssue\x12\x41\n\x04type\x18\x01 \x01(\x0e\x32#.metalstack.api.v2.MachineIssueTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12M\n\x08severity\x18\x02 \x01(\x0e\x32\'.metalstack.api.v2.MachineIssueSeverityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x08severity\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x30\n\rreference_url\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01R\x0creferenceUrl\x12\x18\n\x07\x64\x65tails\x18\x05 \x01(\tR\x07\x64\x65tails*e\n\nIPProtocol\x12\x1b\n\x17IP_PROTOCOL_UNSPECIFIED\x10\x00\x12\x1c\n\x0fIP_PROTOCOL_TCP\x10\x01\x1a\x07\x82\xb2\x19\x03tcp\x12\x1c\n\x0fIP_PROTOCOL_UDP\x10\x02\x1a\x07\x82\xb2\x19\x03udp*\xad\x01\n\x0cMachineState\x12#\n\x19MACHINE_STATE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12&\n\x15MACHINE_STATE_TAINTED\x10\x01\x1a\x0b\x82\xb2\x19\x07tainted\x12$\n\x14MACHINE_STATE_LOCKED\x10\x02\x1a\n\x82\xb2\x19\x06locked\x12*\n\x17MACHINE_STATE_AVAILABLE\x10\x03\x1a\r\x82\xb2\x19\tavailable*\xdf\x01\n\x1dMachineProvisioningEventState\x12\x36\n,MACHINE_PROVISIONING_EVENT_STATE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12=\n*MACHINE_PROVISIONING_EVENT_STATE_CRASHLOOP\x10\x01\x1a\r\x82\xb2\x19\tcrashloop\x12G\n/MACHINE_PROVISIONING_EVENT_STATE_FAILED_RECLAIM\x10\x02\x1a\x12\x82\xb2\x19\x0e\x66\x61iled-reclaim*\x9f\x06\n\x1cMachineProvisioningEventType\x12/\n+MACHINE_PROVISIONING_EVENT_TYPE_UNSPECIFIED\x10\x00\x12\x34\n%MACHINE_PROVISIONING_EVENT_TYPE_ALIVE\x10\x01\x1a\t\x82\xb2\x19\x05\x41live\x12\x38\n\'MACHINE_PROVISIONING_EVENT_TYPE_CRASHED\x10\x02\x1a\x0b\x82\xb2\x19\x07\x43rashed\x12@\n+MACHINE_PROVISIONING_EVENT_TYPE_PXE_BOOTING\x10\x03\x1a\x0f\x82\xb2\x19\x0bPXE Booting\x12\x46\n.MACHINE_PROVISIONING_EVENT_TYPE_PLANNED_REBOOT\x10\x04\x1a\x12\x82\xb2\x19\x0ePlanned Reboot\x12<\n)MACHINE_PROVISIONING_EVENT_TYPE_PREPARING\x10\x05\x1a\r\x82\xb2\x19\tPreparing\x12@\n+MACHINE_PROVISIONING_EVENT_TYPE_REGISTERING\x10\x06\x1a\x0f\x82\xb2\x19\x0bRegistering\x12\x38\n\'MACHINE_PROVISIONING_EVENT_TYPE_WAITING\x10\x07\x1a\x0b\x82\xb2\x19\x07Waiting\x12>\n*MACHINE_PROVISIONING_EVENT_TYPE_INSTALLING\x10\x08\x1a\x0e\x82\xb2\x19\nInstalling\x12N\n2MACHINE_PROVISIONING_EVENT_TYPE_BOOTING_NEW_KERNEL\x10\t\x1a\x16\x82\xb2\x19\x12\x42ooting New Kernel\x12@\n+MACHINE_PROVISIONING_EVENT_TYPE_PHONED_HOME\x10\n\x1a\x0f\x82\xb2\x19\x0bPhoned Home\x12H\n/MACHINE_PROVISIONING_EVENT_TYPE_MACHINE_RECLAIM\x10\x0b\x1a\x13\x82\xb2\x19\x0fMachine Reclaim*\xba\x01\n\x11MachineLiveliness\x12(\n\x1eMACHINE_LIVELINESS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\'\n\x18MACHINE_LIVELINESS_ALIVE\x10\x01\x1a\t\x82\xb2\x19\x05\x61live\x12%\n\x17MACHINE_LIVELINESS_DEAD\x10\x02\x1a\x08\x82\xb2\x19\x04\x64\x65\x61\x64\x12+\n\x1aMACHINE_LIVELINESS_UNKNOWN\x10\x03\x1a\x0b\x82\xb2\x19\x07unknown*\xac\x01\n\x15MachineAllocationType\x12-\n#MACHINE_ALLOCATION_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x30\n\x1fMACHINE_ALLOCATION_TYPE_MACHINE\x10\x01\x1a\x0b\x82\xb2\x19\x07machine\x12\x32\n MACHINE_ALLOCATION_TYPE_FIREWALL\x10\x02\x1a\x0c\x82\xb2\x19\x08\x66irewall*\xfe\x04\n\x11MachineBMCCommand\x12#\n\x1fMACHINE_BMC_COMMAND_UNSPECIFIED\x10\x00\x12\"\n\x16MACHINE_BMC_COMMAND_ON\x10\x01\x1a\x06\x82\xb2\x19\x02on\x12$\n\x17MACHINE_BMC_COMMAND_OFF\x10\x02\x1a\x07\x82\xb2\x19\x03off\x12(\n\x19MACHINE_BMC_COMMAND_RESET\x10\x03\x1a\t\x82\xb2\x19\x05reset\x12(\n\x19MACHINE_BMC_COMMAND_CYCLE\x10\x04\x1a\t\x82\xb2\x19\x05\x63ycle\x12\x36\n MACHINE_BMC_COMMAND_BOOT_TO_BIOS\x10\x05\x1a\x10\x82\xb2\x19\x0c\x62oot-to-bios\x12:\n\"MACHINE_BMC_COMMAND_BOOT_FROM_DISK\x10\x06\x1a\x12\x82\xb2\x19\x0e\x62oot-from-disk\x12\x38\n!MACHINE_BMC_COMMAND_BOOT_FROM_PXE\x10\x07\x1a\x11\x82\xb2\x19\rboot-from-pxe\x12<\n#MACHINE_BMC_COMMAND_IDENTIFY_LED_ON\x10\x08\x1a\x13\x82\xb2\x19\x0fidentify-led-on\x12>\n$MACHINE_BMC_COMMAND_IDENTIFY_LED_OFF\x10\t\x1a\x14\x82\xb2\x19\x10identify-led-off\x12<\n#MACHINE_BMC_COMMAND_MACHINE_DELETED\x10\n\x1a\x13\x82\xb2\x19\x0fmachine-deleted\x12<\n#MACHINE_BMC_COMMAND_MACHINE_CREATED\x10\x0b\x1a\x13\x82\xb2\x19\x0fmachine-created*\xf3\x06\n\x10MachineIssueType\x12\"\n\x1eMACHINE_ISSUE_TYPE_UNSPECIFIED\x10\x00\x12\x39\n!MACHINE_ISSUE_TYPE_ASN_UNIQUENESS\x10\x01\x1a\x12\x82\xb2\x19\x0e\x61sn-not-unique\x12?\n$MACHINE_ISSUE_TYPE_BMC_INFO_OUTDATED\x10\x02\x1a\x15\x82\xb2\x19\x11\x62mc-info-outdated\x12\x42\n&MACHINE_ISSUE_TYPE_BMC_NON_DISTINCT_IP\x10\x03\x1a\x16\x82\xb2\x19\x12\x62mc-no-distinct-ip\x12\x39\n!MACHINE_ISSUE_TYPE_BMC_WITHOUT_IP\x10\x04\x1a\x12\x82\xb2\x19\x0e\x62mc-without-ip\x12;\n\"MACHINE_ISSUE_TYPE_BMC_WITHOUT_MAC\x10\x05\x1a\x13\x82\xb2\x19\x0f\x62mc-without-mac\x12\x30\n\x1dMACHINE_ISSUE_TYPE_CRASH_LOOP\x10\x06\x1a\r\x82\xb2\x19\tcrashloop\x12I\n)MACHINE_ISSUE_TYPE_FAILED_MACHINE_RECLAIM\x10\x07\x1a\x1a\x82\xb2\x19\x16\x66\x61iled-machine-reclaim\x12=\n#MACHINE_ISSUE_TYPE_LAST_EVENT_ERROR\x10\x08\x1a\x14\x82\xb2\x19\x10last-event-error\x12;\n\"MACHINE_ISSUE_TYPE_LIVELINESS_DEAD\x10\t\x1a\x13\x82\xb2\x19\x0fliveliness-dead\x12M\n+MACHINE_ISSUE_TYPE_LIVELINESS_NOT_AVAILABLE\x10\n\x1a\x1c\x82\xb2\x19\x18liveliness-not-available\x12\x41\n%MACHINE_ISSUE_TYPE_LIVELINESS_UNKNOWN\x10\x0b\x1a\x16\x82\xb2\x19\x12liveliness-unknown\x12\x41\n%MACHINE_ISSUE_TYPE_NO_EVENT_CONTAINER\x10\x0c\x1a\x16\x82\xb2\x19\x12no-event-container\x12\x35\n\x1fMACHINE_ISSUE_TYPE_NO_PARTITION\x10\r\x1a\x10\x82\xb2\x19\x0cno-partition*\xcb\x01\n\x14MachineIssueSeverity\x12&\n\"MACHINE_ISSUE_SEVERITY_UNSPECIFIED\x10\x00\x12+\n\x1cMACHINE_ISSUE_SEVERITY_MINOR\x10\x01\x1a\t\x82\xb2\x19\x05minor\x12+\n\x1cMACHINE_ISSUE_SEVERITY_MAJOR\x10\x02\x1a\t\x82\xb2\x19\x05major\x12\x31\n\x1fMACHINE_ISSUE_SEVERITY_CRITICAL\x10\x03\x1a\x0c\x82\xb2\x19\x08\x63ritical2\xd1\x06\n\x0eMachineService\x12m\n\x03Get\x12+.metalstack.api.v2.MachineServiceGetRequest\x1a,.metalstack.api.v2.MachineServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12u\n\x06\x43reate\x12..metalstack.api.v2.MachineServiceCreateRequest\x1a/.metalstack.api.v2.MachineServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\x06Update\x12..metalstack.api.v2.MachineServiceUpdateRequest\x1a/.metalstack.api.v2.MachineServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12p\n\x04List\x12,.metalstack.api.v2.MachineServiceListRequest\x1a-.metalstack.api.v2.MachineServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12u\n\x06\x44\x65lete\x12..metalstack.api.v2.MachineServiceDeleteRequest\x1a/.metalstack.api.v2.MachineServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x81\x01\n\nBMCCommand\x12\x32.metalstack.api.v2.MachineServiceBMCCommandRequest\x1a\x33.metalstack.api.v2.MachineServiceBMCCommandResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\x06GetBMC\x12..metalstack.api.v2.MachineServiceGetBMCRequest\x1a/.metalstack.api.v2.MachineServiceGetBMCResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xc2\x01\n\x15\x63om.metalstack.api.v2B\x0cMachineProtoP\x01Z5github.com/metal-stack/api/go/metalstack/api/v2;apiv2\xa2\x02\x03MAX\xaa\x02\x11Metalstack.Api.V2\xca\x02\x11Metalstack\\Api\\V2\xe2\x02\x1dMetalstack\\Api\\V2\\GPBMetadata\xea\x02\x13Metalstack::Api::V2b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmetalstack/api/v2/machine.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\"metalstack/api/v2/filesystem.proto\x1a\x1dmetalstack/api/v2/image.proto\x1a\x1fmetalstack/api/v2/network.proto\x1a!metalstack/api/v2/partition.proto\x1a(metalstack/api/v2/predefined_rules.proto\x1a\x1cmetalstack/api/v2/size.proto\"\\\n\x18MachineServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"Q\n\x19MachineServiceGetResponse\x12\x34\n\x07machine\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\"\xdb\x08\n\x1bMachineServiceCreateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x04uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12(\n\x08hostname\x18\x05 \x01(\tB\x07\xbaH\x04r\x02h\x01H\x02R\x08hostname\x88\x01\x01\x12.\n\tpartition\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x03R\tpartition\x88\x01\x01\x12$\n\x04size\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x04R\x04size\x88\x01\x01\x12!\n\x05image\x18\x08 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05image\x12=\n\x11\x66ilesystem_layout\x18\t \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x05R\x10\x66ilesystemLayout\x88\x01\x01\x12@\n\x0fssh_public_keys\x18\n \x03(\tB\x18\xbaH\x15\x92\x01\x12\x10\x32\"\x08r\x06\x88\xb4\xae\xb1\x02\x01\xd0\xa4\xb3\xb1\x02\x01R\rsshPublicKeys\x12\x30\n\x08userdata\x18\x0b \x01(\tB\x0f\xbaH\x0cr\n\x18\x80\x80\x02\xf0\xb3\xae\xb1\x02\x01H\x06R\x08userdata\x88\x01\x01\x12\x31\n\x06labels\x18\x0c \x01(\x0b\x32\x19.metalstack.api.v2.LabelsR\x06labels\x12Q\n\x08networks\x18\r \x03(\x0b\x32+.metalstack.api.v2.MachineAllocationNetworkB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x08networks\x12/\n\x0eplacement_tags\x18\x0e \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\rplacementTags\x12G\n\x0b\x64ns_servers\x18\x0f \x03(\x0b\x32\x1c.metalstack.api.v2.DNSServerB\x08\xbaH\x05\x92\x01\x02\x10\x03R\ndnsServers\x12G\n\x0bntp_servers\x18\x10 \x03(\x0b\x32\x1c.metalstack.api.v2.NTPServerB\x08\xbaH\x05\x92\x01\x02\x10\nR\nntpServers\x12[\n\x0f\x61llocation_type\x18\x11 \x01(\x0e\x32(.metalstack.api.v2.MachineAllocationTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0e\x61llocationType\x12\x44\n\rfirewall_spec\x18\x12 \x01(\x0b\x32\x1f.metalstack.api.v2.FirewallSpecR\x0c\x66irewallSpecB\x07\n\x05_uuidB\x0e\n\x0c_descriptionB\x0b\n\t_hostnameB\x0c\n\n_partitionB\x07\n\x05_sizeB\x14\n\x12_filesystem_layoutB\x0b\n\t_userdata\"W\n\x0c\x46irewallSpec\x12G\n\x0e\x66irewall_rules\x18\x01 \x01(\x0b\x32 .metalstack.api.v2.FirewallRulesR\rfirewallRules\"T\n\x1cMachineServiceCreateResponse\x12\x34\n\x07machine\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\"\xf6\x02\n\x1bMachineServiceUpdateRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12<\n\x06labels\x18\x05 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x01R\x06labels\x88\x01\x01\x12@\n\x0fssh_public_keys\x18\x06 \x03(\tB\x18\xbaH\x15\x92\x01\x12\x10\x32\"\x08r\x06\x88\xb4\xae\xb1\x02\x01\xd0\xa4\xb3\xb1\x02\x01R\rsshPublicKeysB\x0e\n\x0c_descriptionB\t\n\x07_labels\"T\n\x1cMachineServiceUpdateResponse\x12\x34\n\x07machine\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\"v\n\x19MachineServiceListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x35\n\x05query\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.MachineQueryR\x05query\"T\n\x1aMachineServiceListResponse\x12\x36\n\x08machines\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.MachineR\x08machines\"_\n\x1bMachineServiceDeleteRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"T\n\x1cMachineServiceDeleteResponse\x12\x34\n\x07machine\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\"\xad\x01\n\x1fMachineServiceBMCCommandRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12H\n\x07\x63ommand\x18\x03 \x01(\x0e\x32$.metalstack.api.v2.MachineBMCCommandB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x07\x63ommand\"\"\n MachineServiceBMCCommandResponse\"_\n\x1bMachineServiceGetBMCRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"s\n\x1cMachineServiceGetBMCResponse\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x35\n\x03\x62mc\x18\x02 \x01(\x0b\x32#.metalstack.api.v2.MachineBMCReportR\x03\x62mc\"\xab\x04\n\x07Machine\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12:\n\tpartition\x18\x03 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\x12\x1c\n\x04rack\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x04rack\x12\x1c\n\x04room\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x04room\x12+\n\x04size\x18\x06 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size\x12>\n\x08hardware\x18\x07 \x01(\x0b\x32\".metalstack.api.v2.MachineHardwareR\x08hardware\x12\x44\n\nallocation\x18\x08 \x01(\x0b\x32$.metalstack.api.v2.MachineAllocationR\nallocation\x12\x38\n\x06status\x18\t \x01(\x0b\x32 .metalstack.api.v2.MachineStatusR\x06status\x12p\n\x1arecent_provisioning_events\x18\n \x01(\x0b\x32\x32.metalstack.api.v2.MachineRecentProvisioningEventsR\x18recentProvisioningEvents\"\xa4\x02\n\rMachineStatus\x12\x41\n\tcondition\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.MachineConditionR\tcondition\x12N\n\tled_state\x18\x02 \x01(\x0b\x32\x31.metalstack.api.v2.MachineChassisIdentifyLEDStateR\x08ledState\x12N\n\nliveliness\x18\x03 \x01(\x0e\x32$.metalstack.api.v2.MachineLivelinessB\x08\xbaH\x05\x82\x01\x02\x10\x01R\nliveliness\x12\x30\n\x14metal_hammer_version\x18\x04 \x01(\tR\x12metalHammerVersion\"\xa4\x01\n\x10MachineCondition\x12?\n\x05state\x18\x01 \x01(\x0e\x32\x1f.metalstack.api.v2.MachineStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05state\x12-\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12 \n\x06issuer\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x02R\x06issuer\"\xb9\x07\n\x11MachineAllocation\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\'\n\ncreated_by\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\tcreatedBy\x12\"\n\x07project\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12.\n\x05image\x18\x07 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\x12P\n\x11\x66ilesystem_layout\x18\x08 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\x12=\n\x08networks\x18\t \x03(\x0b\x32!.metalstack.api.v2.MachineNetworkR\x08networks\x12#\n\x08hostname\x18\n \x01(\tB\x07\xbaH\x04r\x02h\x01R\x08hostname\x12@\n\x0fssh_public_keys\x18\x0b \x03(\tB\x18\xbaH\x15\x92\x01\x12\x10\x32\"\x08r\x06\x88\xb4\xae\xb1\x02\x01\xd0\xa4\xb3\xb1\x02\x01R\rsshPublicKeys\x12+\n\x08userdata\x18\x0c \x01(\tB\x0f\xbaH\x0cr\n\x18\x80\x80\x02\xf0\xb3\xae\xb1\x02\x01R\x08userdata\x12[\n\x0f\x61llocation_type\x18\r \x01(\x0e\x32(.metalstack.api.v2.MachineAllocationTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0e\x61llocationType\x12G\n\x0e\x66irewall_rules\x18\x0e \x01(\x0b\x32 .metalstack.api.v2.FirewallRulesR\rfirewallRules\x12G\n\x0b\x64ns_servers\x18\x0f \x03(\x0b\x32\x1c.metalstack.api.v2.DNSServerB\x08\xbaH\x05\x92\x01\x02\x10\x03R\ndnsServers\x12G\n\x0bntp_servers\x18\x10 \x03(\x0b\x32\x1c.metalstack.api.v2.NTPServerB\x08\xbaH\x05\x92\x01\x02\x10\nR\nntpServers\x12/\n\x03vpn\x18\x11 \x01(\x0b\x32\x1d.metalstack.api.v2.MachineVPNR\x03vpn\"a\n\x18MachineAllocationNetwork\x12%\n\x07network\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07network\x12\x1e\n\x03ips\x18\x02 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xc0\xa4\xb3\xb1\x02\x01R\x03ips\"\x90\x01\n\rFirewallRules\x12=\n\x06\x65gress\x18\x01 \x03(\x0b\x32%.metalstack.api.v2.FirewallEgressRuleR\x06\x65gress\x12@\n\x07ingress\x18\x02 \x03(\x0b\x32&.metalstack.api.v2.FirewallIngressRuleR\x07ingress\"\xd0\x01\n\x12\x46irewallEgressRule\x12\x43\n\x08protocol\x18\x01 \x01(\x0e\x32\x1d.metalstack.api.v2.IPProtocolB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x08protocol\x12$\n\x05ports\x18\x02 \x03(\rB\x0e\xbaH\x0b\x92\x01\x08\"\x06*\x04\x18\xfc\xff\x03R\x05ports\x12\x1c\n\x02to\x18\x03 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x02to\x12\x31\n\x07\x63omment\x18\x04 \x01(\tB\x17\xbaH\x14r\x0f\x18\x64\x32\x0b^[a-z_ -]*$\xd8\x01\x01R\x07\x63omment\"\xf3\x01\n\x13\x46irewallIngressRule\x12\x43\n\x08protocol\x18\x01 \x01(\x0e\x32\x1d.metalstack.api.v2.IPProtocolB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x08protocol\x12$\n\x05ports\x18\x02 \x03(\rB\x0e\xbaH\x0b\x92\x01\x08\"\x06*\x04\x18\xfc\xff\x03R\x05ports\x12\x1c\n\x02to\x18\x03 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x02to\x12 \n\x04\x66rom\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x04\x66rom\x12\x31\n\x07\x63omment\x18\x05 \x01(\tB\x17\xbaH\x14r\x0f\x18\x64\x32\x0b^[a-z_ -]*$\xd8\x01\x01R\x07\x63omment\"\x9c\x03\n\x0eMachineNetwork\x12\x18\n\x07network\x18\x01 \x01(\tR\x07network\x12(\n\x08prefixes\x18\x02 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\x03 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12\x1e\n\x03ips\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xc0\xa4\xb3\xb1\x02\x01R\x03ips\x12K\n\x0cnetwork_type\x18\x05 \x01(\x0e\x32\x1e.metalstack.api.v2.NetworkTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0bnetworkType\x12?\n\x08nat_type\x18\x06 \x01(\x0e\x32\x1a.metalstack.api.v2.NATTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x07natType\x12\x10\n\x03vrf\x18\x07 \x01(\x04R\x03vrf\x12\x10\n\x03\x61sn\x18\x08 \x01(\rR\x03\x61sn\x12\'\n\x07project\x18\t \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x07project\x88\x01\x01\x42\n\n\x08_project\"\xfb\x01\n\x0fMachineHardware\x12\x16\n\x06memory\x18\x01 \x01(\x04R\x06memory\x12;\n\x05\x64isks\x18\x02 \x03(\x0b\x32%.metalstack.api.v2.MachineBlockDeviceR\x05\x64isks\x12/\n\x04\x63pus\x18\x03 \x03(\x0b\x32\x1b.metalstack.api.v2.MetalCPUR\x04\x63pus\x12/\n\x04gpus\x18\x04 \x03(\x0b\x32\x1b.metalstack.api.v2.MetalGPUR\x04gpus\x12\x31\n\x04nics\x18\x05 \x03(\x0b\x32\x1d.metalstack.api.v2.MachineNicR\x04nics\"|\n\x08MetalCPU\x12 \n\x06vendor\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x02R\x06vendor\x12\x1e\n\x05model\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x02R\x05model\x12\x14\n\x05\x63ores\x18\x03 \x01(\rR\x05\x63ores\x12\x18\n\x07threads\x18\x04 \x01(\rR\x07threads\"L\n\x08MetalGPU\x12 \n\x06vendor\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x02R\x06vendor\x12\x1e\n\x05model\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x02R\x05model\"\xa7\x02\n\nMachineNic\x12\x1d\n\x03mac\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xb8\xb3\xae\xb1\x02\x01R\x03mac\x12\x1f\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12(\n\nidentifier\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\nidentifier\x12 \n\x06vendor\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x06vendor\x12\x1e\n\x05model\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x05model\x12\x14\n\x05speed\x18\x06 \x01(\x04R\x05speed\x12;\n\tneighbors\x18\x07 \x03(\x0b\x32\x1d.metalstack.api.v2.MachineNicR\tneighbors\x12\x1a\n\x08hostname\x18\x08 \x01(\tR\x08hostname\"I\n\x12MachineBlockDevice\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x12\n\x04size\x18\x02 \x01(\x04R\x04size\"o\n\x1eMachineChassisIdentifyLEDState\x12\x1e\n\x05value\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x05value\x12-\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\"\xcb\x03\n\x10MachineBMCReport\x12/\n\x03\x62mc\x18\x01 \x01(\x0b\x32\x1d.metalstack.api.v2.MachineBMCR\x03\x62mc\x12\x32\n\x04\x62ios\x18\x02 \x01(\x0b\x32\x1e.metalstack.api.v2.MachineBiosR\x04\x62ios\x12/\n\x03\x66ru\x18\x03 \x01(\x0b\x32\x1d.metalstack.api.v2.MachineFRUR\x03\x66ru\x12H\n\x0cpower_metric\x18\x04 \x01(\x0b\x32%.metalstack.api.v2.MachinePowerMetricR\x0bpowerMetric\x12L\n\x0epower_supplies\x18\x05 \x03(\x0b\x32%.metalstack.api.v2.MachinePowerSupplyR\rpowerSupplies\x12N\n\tled_state\x18\x06 \x01(\x0b\x32\x31.metalstack.api.v2.MachineChassisIdentifyLEDStateR\x08ledState\x12\x39\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\"z\n\x0bMachineBios\x12%\n\x07version\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x07version\x12#\n\x06vendor\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x06vendor\x12\x1f\n\x04\x64\x61te\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x04\x64\x61te\"\x99\x02\n\nMachineBMC\x12\"\n\x07\x61\x64\x64ress\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x80\x02\x01R\x07\x61\x64\x64ress\x12\x1d\n\x03mac\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xb8\xb3\xae\xb1\x02\x01R\x03mac\x12\x1f\n\x04user\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x04user\x12\'\n\x08password\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x08password\x12)\n\tinterface\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\tinterface\x12%\n\x07version\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x07version\x12,\n\x0bpower_state\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\npowerState\"\xa6\x05\n\nMachineFRU\x12@\n\x13\x63hassis_part_number\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x11\x63hassisPartNumber\x88\x01\x01\x12@\n\x13\x63hassis_part_serial\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x11\x63hassisPartSerial\x88\x01\x01\x12-\n\tboard_mfg\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x08\x62oardMfg\x88\x01\x01\x12:\n\x10\x62oard_mfg_serial\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x03R\x0e\x62oardMfgSerial\x88\x01\x01\x12<\n\x11\x62oard_part_number\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x04R\x0f\x62oardPartNumber\x88\x01\x01\x12\x43\n\x14product_manufacturer\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x05R\x13productManufacturer\x88\x01\x01\x12@\n\x13product_part_number\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x06R\x11productPartNumber\x88\x01\x01\x12\x37\n\x0eproduct_serial\x18\x08 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x07R\rproductSerial\x88\x01\x01\x42\x16\n\x14_chassis_part_numberB\x16\n\x14_chassis_part_serialB\x0c\n\n_board_mfgB\x13\n\x11_board_mfg_serialB\x14\n\x12_board_part_numberB\x17\n\x15_product_manufacturerB\x16\n\x14_product_part_numberB\x11\n\x0f_product_serial\"\xce\x01\n\x12MachinePowerMetric\x12\x34\n\x16\x61verage_consumed_watts\x18\x01 \x01(\x02R\x14\x61verageConsumedWatts\x12&\n\x0finterval_in_min\x18\x02 \x01(\x02R\rintervalInMin\x12,\n\x12max_consumed_watts\x18\x03 \x01(\x02R\x10maxConsumedWatts\x12,\n\x12min_consumed_watts\x18\x04 \x01(\x02R\x10minConsumedWatts\"B\n\x12MachinePowerSupply\x12\x16\n\x06health\x18\x01 \x01(\tR\x06health\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\"\xd3\x02\n\x1fMachineRecentProvisioningEvents\x12\x43\n\x06\x65vents\x18\x01 \x03(\x0b\x32+.metalstack.api.v2.MachineProvisioningEventR\x06\x65vents\x12\x42\n\x0flast_event_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\rlastEventTime\x12U\n\x10last_error_event\x18\x03 \x01(\x0b\x32+.metalstack.api.v2.MachineProvisioningEventR\x0elastErrorEvent\x12P\n\x05state\x18\x04 \x01(\x0e\x32\x30.metalstack.api.v2.MachineProvisioningEventStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05state\"\xb5\x01\n\x18MachineProvisioningEvent\x12.\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04time\x12O\n\x05\x65vent\x18\x02 \x01(\x0e\x32/.metalstack.api.v2.MachineProvisioningEventTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05\x65vent\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\"\x99\x01\n\nMachineVPN\x12\x32\n\x15\x63ontrol_plane_address\x18\x01 \x01(\tR\x13\x63ontrolPlaneAddress\x12\x19\n\x08\x61uth_key\x18\x02 \x01(\tR\x07\x61uthKey\x12\x1c\n\tconnected\x18\x03 \x01(\x08R\tconnected\x12\x1e\n\x03ips\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xc0\xa4\xb3\xb1\x02\x01R\x03ips\"\xf7\x08\n\x0cMachineQuery\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12.\n\tpartition\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x02R\tpartition\x88\x01\x01\x12$\n\x04size\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04size\x88\x01\x01\x12$\n\x04rack\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x04R\x04rack\x88\x01\x01\x12$\n\x04room\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x05R\x04room\x88\x01\x01\x12\x36\n\x06labels\x18\x07 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x06R\x06labels\x88\x01\x01\x12N\n\nallocation\x18\x08 \x01(\x0b\x32).metalstack.api.v2.MachineAllocationQueryH\x07R\nallocation\x88\x01\x01\x12\x45\n\x07network\x18\t \x01(\x0b\x32&.metalstack.api.v2.MachineNetworkQueryH\x08R\x07network\x88\x01\x01\x12\x39\n\x03nic\x18\n \x01(\x0b\x32\".metalstack.api.v2.MachineNicQueryH\tR\x03nic\x88\x01\x01\x12<\n\x04\x64isk\x18\x0b \x01(\x0b\x32#.metalstack.api.v2.MachineDiskQueryH\nR\x04\x64isk\x88\x01\x01\x12\x39\n\x03\x62mc\x18\x0c \x01(\x0b\x32\".metalstack.api.v2.MachineBMCQueryH\x0bR\x03\x62mc\x88\x01\x01\x12\x39\n\x03\x66ru\x18\r \x01(\x0b\x32\".metalstack.api.v2.MachineFRUQueryH\x0cR\x03\x66ru\x88\x01\x01\x12H\n\x08hardware\x18\x0e \x01(\x0b\x32\'.metalstack.api.v2.MachineHardwareQueryH\rR\x08hardware\x88\x01\x01\x12:\n\x05state\x18\x0f \x01(\x0e\x32\x1f.metalstack.api.v2.MachineStateH\x0eR\x05state\x88\x01\x01\x12\x1d\n\x07waiting\x18\x10 \x01(\x08H\x0fR\x07waiting\x88\x01\x01\x12\'\n\x0cpreallocated\x18\x11 \x01(\x08H\x10R\x0cpreallocated\x88\x01\x01\x12(\n\rnot_allocated\x18\x12 \x01(\x08H\x11R\x0cnotAllocated\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_nameB\x0c\n\n_partitionB\x07\n\x05_sizeB\x07\n\x05_rackB\x07\n\x05_roomB\t\n\x07_labelsB\r\n\x0b_allocationB\n\n\x08_networkB\x06\n\x04_nicB\x07\n\x05_diskB\x06\n\x04_bmcB\x06\n\x04_fruB\x0b\n\t_hardwareB\x08\n\x06_stateB\n\n\x08_waitingB\x0f\n\r_preallocatedB\x10\n\x0e_not_allocated\"\xdd\x04\n\x16MachineAllocationQuery\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\'\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x02R\x07project\x88\x01\x01\x12&\n\x05image\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x05image\x88\x01\x01\x12=\n\x11\x66ilesystem_layout\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x04R\x10\x66ilesystemLayout\x88\x01\x01\x12(\n\x08hostname\x18\x06 \x01(\tB\x07\xbaH\x04r\x02h\x01H\x05R\x08hostname\x88\x01\x01\x12`\n\x0f\x61llocation_type\x18\x07 \x01(\x0e\x32(.metalstack.api.v2.MachineAllocationTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x06R\x0e\x61llocationType\x88\x01\x01\x12\x36\n\x06labels\x18\x08 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x07R\x06labels\x88\x01\x01\x12\x34\n\x03vpn\x18\t \x01(\x0b\x32\x1d.metalstack.api.v2.MachineVPNH\x08R\x03vpn\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_nameB\n\n\x08_projectB\x08\n\x06_imageB\x14\n\x12_filesystem_layoutB\x0b\n\t_hostnameB\x12\n\x10_allocation_typeB\t\n\x07_labelsB\x06\n\x04_vpn\"\xe4\x01\n\x13MachineNetworkQuery\x12\x1a\n\x08networks\x18\x01 \x03(\tR\x08networks\x12(\n\x08prefixes\x18\x02 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\x03 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12\x1e\n\x03ips\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xc0\xa4\xb3\xb1\x02\x01R\x03ips\x12\x12\n\x04vrfs\x18\x05 \x03(\x04R\x04vrfs\x12\x12\n\x04\x61sns\x18\x06 \x03(\rR\x04\x61sns\"\xd9\x01\n\x0fMachineNicQuery\x12(\n\x04macs\x18\x01 \x03(\tB\x14\xbaH\x11\x92\x01\x0e\x10\x64\x18\x01\"\x08r\x06\xb8\xb3\xae\xb1\x02\x01R\x04macs\x12\'\n\x05names\x18\x02 \x03(\tB\x11\xbaH\x0e\x92\x01\x0b\x10\x64\x18\x01\"\x05r\x03\x18\x80\x01R\x05names\x12\x39\n\rneighbor_macs\x18\x03 \x03(\tB\x14\xbaH\x11\x92\x01\x0e\x10\x64\x18\x01\"\x08r\x06\xb8\xb3\xae\xb1\x02\x01R\x0cneighborMacs\x12\x38\n\x0eneighbor_names\x18\x04 \x03(\tB\x11\xbaH\x0e\x92\x01\x0b\x10\x64\x18\x01\"\x05r\x03\x18\x80\x01R\rneighborNames\"Y\n\x10MachineDiskQuery\x12%\n\x05names\x18\x01 \x03(\tB\x0f\xbaH\x0c\x92\x01\t\x10\x64\"\x05r\x03\x18\x80\x01R\x05names\x12\x1e\n\x05sizes\x18\x02 \x03(\x04\x42\x08\xbaH\x05\x92\x01\x02\x10\x64R\x05sizes\"\xd8\x01\n\x0fMachineBMCQuery\x12&\n\x07\x61\x64\x64ress\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01H\x00R\x07\x61\x64\x64ress\x88\x01\x01\x12\"\n\x03mac\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xb8\xb3\xae\xb1\x02\x01H\x01R\x03mac\x88\x01\x01\x12!\n\x04user\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x02R\x04user\x88\x01\x01\x12+\n\tinterface\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x03R\tinterface\x88\x01\x01\x42\n\n\x08_addressB\x06\n\x04_macB\x07\n\x05_userB\x0c\n\n_interface\"\x88\x05\n\x0fMachineFRUQuery\x12=\n\x13\x63hassis_part_number\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x00R\x11\x63hassisPartNumber\x88\x01\x01\x12=\n\x13\x63hassis_part_serial\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x01R\x11\x63hassisPartSerial\x88\x01\x01\x12*\n\tboard_mfg\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x02R\x08\x62oardMfg\x88\x01\x01\x12\x30\n\x0c\x62oard_serial\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x03R\x0b\x62oardSerial\x88\x01\x01\x12\x39\n\x11\x62oard_part_number\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x04R\x0f\x62oardPartNumber\x88\x01\x01\x12@\n\x14product_manufacturer\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x05R\x13productManufacturer\x88\x01\x01\x12=\n\x13product_part_number\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x06R\x11productPartNumber\x88\x01\x01\x12\x34\n\x0eproduct_serial\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01H\x07R\rproductSerial\x88\x01\x01\x42\x16\n\x14_chassis_part_numberB\x16\n\x14_chassis_part_serialB\x0c\n\n_board_mfgB\x0f\n\r_board_serialB\x14\n\x12_board_part_numberB\x17\n\x15_product_manufacturerB\x16\n\x14_product_part_numberB\x11\n\x0f_product_serial\"n\n\x14MachineHardwareQuery\x12\x1b\n\x06memory\x18\x01 \x01(\x04H\x00R\x06memory\x88\x01\x01\x12 \n\tcpu_cores\x18\x02 \x01(\rH\x01R\x08\x63puCores\x88\x01\x01\x42\t\n\x07_memoryB\x0c\n\n_cpu_cores\"\x98\x03\n\x12MachineIssuesQuery\x12\x44\n\rmachine_query\x18\x01 \x01(\x0b\x32\x1f.metalstack.api.v2.MachineQueryR\x0cmachineQuery\x12\x46\n\x04only\x18\x02 \x03(\x0e\x32#.metalstack.api.v2.MachineIssueTypeB\r\xbaH\n\x92\x01\x07\"\x05\x82\x01\x02\x10\x01R\x04only\x12\x46\n\x04omit\x18\x03 \x03(\x0e\x32#.metalstack.api.v2.MachineIssueTypeB\r\xbaH\n\x92\x01\x07\"\x05\x82\x01\x02\x10\x01R\x04omit\x12R\n\x08severity\x18\x04 \x01(\x0e\x32\'.metalstack.api.v2.MachineIssueSeverityB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x08severity\x88\x01\x01\x12K\n\x14last_error_threshold\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationR\x12lastErrorThresholdB\x0b\n\t_severity\"f\n\rMachineIssues\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x37\n\x06issues\x18\x02 \x03(\x0b\x32\x1f.metalstack.api.v2.MachineIssueR\x06issues\"\x9b\x02\n\x0cMachineIssue\x12\x41\n\x04type\x18\x01 \x01(\x0e\x32#.metalstack.api.v2.MachineIssueTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12M\n\x08severity\x18\x02 \x01(\x0e\x32\'.metalstack.api.v2.MachineIssueSeverityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x08severity\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x30\n\rreference_url\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01R\x0creferenceUrl\x12\x18\n\x07\x64\x65tails\x18\x05 \x01(\tR\x07\x64\x65tails*e\n\nIPProtocol\x12\x1b\n\x17IP_PROTOCOL_UNSPECIFIED\x10\x00\x12\x1c\n\x0fIP_PROTOCOL_TCP\x10\x01\x1a\x07\x82\xb2\x19\x03tcp\x12\x1c\n\x0fIP_PROTOCOL_UDP\x10\x02\x1a\x07\x82\xb2\x19\x03udp*\xad\x01\n\x0cMachineState\x12#\n\x19MACHINE_STATE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12&\n\x15MACHINE_STATE_TAINTED\x10\x01\x1a\x0b\x82\xb2\x19\x07tainted\x12$\n\x14MACHINE_STATE_LOCKED\x10\x02\x1a\n\x82\xb2\x19\x06locked\x12*\n\x17MACHINE_STATE_AVAILABLE\x10\x03\x1a\r\x82\xb2\x19\tavailable*\xdf\x01\n\x1dMachineProvisioningEventState\x12\x36\n,MACHINE_PROVISIONING_EVENT_STATE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12=\n*MACHINE_PROVISIONING_EVENT_STATE_CRASHLOOP\x10\x01\x1a\r\x82\xb2\x19\tcrashloop\x12G\n/MACHINE_PROVISIONING_EVENT_STATE_FAILED_RECLAIM\x10\x02\x1a\x12\x82\xb2\x19\x0e\x66\x61iled-reclaim*\x9f\x06\n\x1cMachineProvisioningEventType\x12/\n+MACHINE_PROVISIONING_EVENT_TYPE_UNSPECIFIED\x10\x00\x12\x34\n%MACHINE_PROVISIONING_EVENT_TYPE_ALIVE\x10\x01\x1a\t\x82\xb2\x19\x05\x41live\x12\x38\n\'MACHINE_PROVISIONING_EVENT_TYPE_CRASHED\x10\x02\x1a\x0b\x82\xb2\x19\x07\x43rashed\x12@\n+MACHINE_PROVISIONING_EVENT_TYPE_PXE_BOOTING\x10\x03\x1a\x0f\x82\xb2\x19\x0bPXE Booting\x12\x46\n.MACHINE_PROVISIONING_EVENT_TYPE_PLANNED_REBOOT\x10\x04\x1a\x12\x82\xb2\x19\x0ePlanned Reboot\x12<\n)MACHINE_PROVISIONING_EVENT_TYPE_PREPARING\x10\x05\x1a\r\x82\xb2\x19\tPreparing\x12@\n+MACHINE_PROVISIONING_EVENT_TYPE_REGISTERING\x10\x06\x1a\x0f\x82\xb2\x19\x0bRegistering\x12\x38\n\'MACHINE_PROVISIONING_EVENT_TYPE_WAITING\x10\x07\x1a\x0b\x82\xb2\x19\x07Waiting\x12>\n*MACHINE_PROVISIONING_EVENT_TYPE_INSTALLING\x10\x08\x1a\x0e\x82\xb2\x19\nInstalling\x12N\n2MACHINE_PROVISIONING_EVENT_TYPE_BOOTING_NEW_KERNEL\x10\t\x1a\x16\x82\xb2\x19\x12\x42ooting New Kernel\x12@\n+MACHINE_PROVISIONING_EVENT_TYPE_PHONED_HOME\x10\n\x1a\x0f\x82\xb2\x19\x0bPhoned Home\x12H\n/MACHINE_PROVISIONING_EVENT_TYPE_MACHINE_RECLAIM\x10\x0b\x1a\x13\x82\xb2\x19\x0fMachine Reclaim*\xba\x01\n\x11MachineLiveliness\x12(\n\x1eMACHINE_LIVELINESS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\'\n\x18MACHINE_LIVELINESS_ALIVE\x10\x01\x1a\t\x82\xb2\x19\x05\x61live\x12%\n\x17MACHINE_LIVELINESS_DEAD\x10\x02\x1a\x08\x82\xb2\x19\x04\x64\x65\x61\x64\x12+\n\x1aMACHINE_LIVELINESS_UNKNOWN\x10\x03\x1a\x0b\x82\xb2\x19\x07unknown*\xac\x01\n\x15MachineAllocationType\x12-\n#MACHINE_ALLOCATION_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x30\n\x1fMACHINE_ALLOCATION_TYPE_MACHINE\x10\x01\x1a\x0b\x82\xb2\x19\x07machine\x12\x32\n MACHINE_ALLOCATION_TYPE_FIREWALL\x10\x02\x1a\x0c\x82\xb2\x19\x08\x66irewall*\xfe\x04\n\x11MachineBMCCommand\x12#\n\x1fMACHINE_BMC_COMMAND_UNSPECIFIED\x10\x00\x12\"\n\x16MACHINE_BMC_COMMAND_ON\x10\x01\x1a\x06\x82\xb2\x19\x02on\x12$\n\x17MACHINE_BMC_COMMAND_OFF\x10\x02\x1a\x07\x82\xb2\x19\x03off\x12(\n\x19MACHINE_BMC_COMMAND_RESET\x10\x03\x1a\t\x82\xb2\x19\x05reset\x12(\n\x19MACHINE_BMC_COMMAND_CYCLE\x10\x04\x1a\t\x82\xb2\x19\x05\x63ycle\x12\x36\n MACHINE_BMC_COMMAND_BOOT_TO_BIOS\x10\x05\x1a\x10\x82\xb2\x19\x0c\x62oot-to-bios\x12:\n\"MACHINE_BMC_COMMAND_BOOT_FROM_DISK\x10\x06\x1a\x12\x82\xb2\x19\x0e\x62oot-from-disk\x12\x38\n!MACHINE_BMC_COMMAND_BOOT_FROM_PXE\x10\x07\x1a\x11\x82\xb2\x19\rboot-from-pxe\x12<\n#MACHINE_BMC_COMMAND_IDENTIFY_LED_ON\x10\x08\x1a\x13\x82\xb2\x19\x0fidentify-led-on\x12>\n$MACHINE_BMC_COMMAND_IDENTIFY_LED_OFF\x10\t\x1a\x14\x82\xb2\x19\x10identify-led-off\x12<\n#MACHINE_BMC_COMMAND_MACHINE_DELETED\x10\n\x1a\x13\x82\xb2\x19\x0fmachine-deleted\x12<\n#MACHINE_BMC_COMMAND_MACHINE_CREATED\x10\x0b\x1a\x13\x82\xb2\x19\x0fmachine-created*\xf3\x06\n\x10MachineIssueType\x12\"\n\x1eMACHINE_ISSUE_TYPE_UNSPECIFIED\x10\x00\x12\x39\n!MACHINE_ISSUE_TYPE_ASN_UNIQUENESS\x10\x01\x1a\x12\x82\xb2\x19\x0e\x61sn-not-unique\x12?\n$MACHINE_ISSUE_TYPE_BMC_INFO_OUTDATED\x10\x02\x1a\x15\x82\xb2\x19\x11\x62mc-info-outdated\x12\x42\n&MACHINE_ISSUE_TYPE_BMC_NON_DISTINCT_IP\x10\x03\x1a\x16\x82\xb2\x19\x12\x62mc-no-distinct-ip\x12\x39\n!MACHINE_ISSUE_TYPE_BMC_WITHOUT_IP\x10\x04\x1a\x12\x82\xb2\x19\x0e\x62mc-without-ip\x12;\n\"MACHINE_ISSUE_TYPE_BMC_WITHOUT_MAC\x10\x05\x1a\x13\x82\xb2\x19\x0f\x62mc-without-mac\x12\x30\n\x1dMACHINE_ISSUE_TYPE_CRASH_LOOP\x10\x06\x1a\r\x82\xb2\x19\tcrashloop\x12I\n)MACHINE_ISSUE_TYPE_FAILED_MACHINE_RECLAIM\x10\x07\x1a\x1a\x82\xb2\x19\x16\x66\x61iled-machine-reclaim\x12=\n#MACHINE_ISSUE_TYPE_LAST_EVENT_ERROR\x10\x08\x1a\x14\x82\xb2\x19\x10last-event-error\x12;\n\"MACHINE_ISSUE_TYPE_LIVELINESS_DEAD\x10\t\x1a\x13\x82\xb2\x19\x0fliveliness-dead\x12M\n+MACHINE_ISSUE_TYPE_LIVELINESS_NOT_AVAILABLE\x10\n\x1a\x1c\x82\xb2\x19\x18liveliness-not-available\x12\x41\n%MACHINE_ISSUE_TYPE_LIVELINESS_UNKNOWN\x10\x0b\x1a\x16\x82\xb2\x19\x12liveliness-unknown\x12\x41\n%MACHINE_ISSUE_TYPE_NO_EVENT_CONTAINER\x10\x0c\x1a\x16\x82\xb2\x19\x12no-event-container\x12\x35\n\x1fMACHINE_ISSUE_TYPE_NO_PARTITION\x10\r\x1a\x10\x82\xb2\x19\x0cno-partition*\xcb\x01\n\x14MachineIssueSeverity\x12&\n\"MACHINE_ISSUE_SEVERITY_UNSPECIFIED\x10\x00\x12+\n\x1cMACHINE_ISSUE_SEVERITY_MINOR\x10\x01\x1a\t\x82\xb2\x19\x05minor\x12+\n\x1cMACHINE_ISSUE_SEVERITY_MAJOR\x10\x02\x1a\t\x82\xb2\x19\x05major\x12\x31\n\x1fMACHINE_ISSUE_SEVERITY_CRITICAL\x10\x03\x1a\x0c\x82\xb2\x19\x08\x63ritical2\xd1\x06\n\x0eMachineService\x12m\n\x03Get\x12+.metalstack.api.v2.MachineServiceGetRequest\x1a,.metalstack.api.v2.MachineServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12u\n\x06\x43reate\x12..metalstack.api.v2.MachineServiceCreateRequest\x1a/.metalstack.api.v2.MachineServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\x06Update\x12..metalstack.api.v2.MachineServiceUpdateRequest\x1a/.metalstack.api.v2.MachineServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12p\n\x04List\x12,.metalstack.api.v2.MachineServiceListRequest\x1a-.metalstack.api.v2.MachineServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12u\n\x06\x44\x65lete\x12..metalstack.api.v2.MachineServiceDeleteRequest\x1a/.metalstack.api.v2.MachineServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x81\x01\n\nBMCCommand\x12\x32.metalstack.api.v2.MachineServiceBMCCommandRequest\x1a\x33.metalstack.api.v2.MachineServiceBMCCommandResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\x06GetBMC\x12..metalstack.api.v2.MachineServiceGetBMCRequest\x1a/.metalstack.api.v2.MachineServiceGetBMCResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xc2\x01\n\x15\x63om.metalstack.api.v2B\x0cMachineProtoP\x01Z5github.com/metal-stack/api/go/metalstack/api/v2;apiv2\xa2\x02\x03MAX\xaa\x02\x11Metalstack.Api.V2\xca\x02\x11Metalstack\\Api\\V2\xe2\x02\x1dMetalstack\\Api\\V2\\GPBMetadata\xea\x02\x13Metalstack::Api::V2b\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -218,6 +218,8 @@
_globals['_MACHINE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_MACHINE'].fields_by_name['rack']._loaded_options = None
_globals['_MACHINE'].fields_by_name['rack']._serialized_options = b'\272H\005r\003\030\200\001'
+ _globals['_MACHINE'].fields_by_name['room']._loaded_options = None
+ _globals['_MACHINE'].fields_by_name['room']._serialized_options = b'\272H\005r\003\030\200\001'
_globals['_MACHINESTATUS'].fields_by_name['liveliness']._loaded_options = None
_globals['_MACHINESTATUS'].fields_by_name['liveliness']._serialized_options = b'\272H\005\202\001\002\020\001'
_globals['_MACHINECONDITION'].fields_by_name['state']._loaded_options = None
@@ -357,7 +359,9 @@
_globals['_MACHINEQUERY'].fields_by_name['size']._loaded_options = None
_globals['_MACHINEQUERY'].fields_by_name['size']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_MACHINEQUERY'].fields_by_name['rack']._loaded_options = None
- _globals['_MACHINEQUERY'].fields_by_name['rack']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_MACHINEQUERY'].fields_by_name['rack']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
+ _globals['_MACHINEQUERY'].fields_by_name['room']._loaded_options = None
+ _globals['_MACHINEQUERY'].fields_by_name['room']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_MACHINEALLOCATIONQUERY'].fields_by_name['uuid']._loaded_options = None
_globals['_MACHINEALLOCATIONQUERY'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_MACHINEALLOCATIONQUERY'].fields_by_name['name']._loaded_options = None
@@ -444,24 +448,24 @@
_globals['_MACHINESERVICE'].methods_by_name['BMCCommand']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001'
_globals['_MACHINESERVICE'].methods_by_name['GetBMC']._loaded_options = None
_globals['_MACHINESERVICE'].methods_by_name['GetBMC']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001'
- _globals['_IPPROTOCOL']._serialized_start=13684
- _globals['_IPPROTOCOL']._serialized_end=13785
- _globals['_MACHINESTATE']._serialized_start=13788
- _globals['_MACHINESTATE']._serialized_end=13961
- _globals['_MACHINEPROVISIONINGEVENTSTATE']._serialized_start=13964
- _globals['_MACHINEPROVISIONINGEVENTSTATE']._serialized_end=14187
- _globals['_MACHINEPROVISIONINGEVENTTYPE']._serialized_start=14190
- _globals['_MACHINEPROVISIONINGEVENTTYPE']._serialized_end=14989
- _globals['_MACHINELIVELINESS']._serialized_start=14992
- _globals['_MACHINELIVELINESS']._serialized_end=15178
- _globals['_MACHINEALLOCATIONTYPE']._serialized_start=15181
- _globals['_MACHINEALLOCATIONTYPE']._serialized_end=15353
- _globals['_MACHINEBMCCOMMAND']._serialized_start=15356
- _globals['_MACHINEBMCCOMMAND']._serialized_end=15994
- _globals['_MACHINEISSUETYPE']._serialized_start=15997
- _globals['_MACHINEISSUETYPE']._serialized_end=16880
- _globals['_MACHINEISSUESEVERITY']._serialized_start=16883
- _globals['_MACHINEISSUESEVERITY']._serialized_end=17086
+ _globals['_IPPROTOCOL']._serialized_start=13762
+ _globals['_IPPROTOCOL']._serialized_end=13863
+ _globals['_MACHINESTATE']._serialized_start=13866
+ _globals['_MACHINESTATE']._serialized_end=14039
+ _globals['_MACHINEPROVISIONINGEVENTSTATE']._serialized_start=14042
+ _globals['_MACHINEPROVISIONINGEVENTSTATE']._serialized_end=14265
+ _globals['_MACHINEPROVISIONINGEVENTTYPE']._serialized_start=14268
+ _globals['_MACHINEPROVISIONINGEVENTTYPE']._serialized_end=15067
+ _globals['_MACHINELIVELINESS']._serialized_start=15070
+ _globals['_MACHINELIVELINESS']._serialized_end=15256
+ _globals['_MACHINEALLOCATIONTYPE']._serialized_start=15259
+ _globals['_MACHINEALLOCATIONTYPE']._serialized_end=15431
+ _globals['_MACHINEBMCCOMMAND']._serialized_start=15434
+ _globals['_MACHINEBMCCOMMAND']._serialized_end=16072
+ _globals['_MACHINEISSUETYPE']._serialized_start=16075
+ _globals['_MACHINEISSUETYPE']._serialized_end=16958
+ _globals['_MACHINEISSUESEVERITY']._serialized_start=16961
+ _globals['_MACHINEISSUESEVERITY']._serialized_end=17164
_globals['_MACHINESERVICEGETREQUEST']._serialized_start=387
_globals['_MACHINESERVICEGETREQUEST']._serialized_end=479
_globals['_MACHINESERVICEGETRESPONSE']._serialized_start=481
@@ -493,75 +497,75 @@
_globals['_MACHINESERVICEGETBMCRESPONSE']._serialized_start=3018
_globals['_MACHINESERVICEGETBMCRESPONSE']._serialized_end=3133
_globals['_MACHINE']._serialized_start=3136
- _globals['_MACHINE']._serialized_end=3661
- _globals['_MACHINESTATUS']._serialized_start=3664
- _globals['_MACHINESTATUS']._serialized_end=3956
- _globals['_MACHINECONDITION']._serialized_start=3959
- _globals['_MACHINECONDITION']._serialized_end=4123
- _globals['_MACHINEALLOCATION']._serialized_start=4126
- _globals['_MACHINEALLOCATION']._serialized_end=5079
- _globals['_MACHINEALLOCATIONNETWORK']._serialized_start=5081
- _globals['_MACHINEALLOCATIONNETWORK']._serialized_end=5178
- _globals['_FIREWALLRULES']._serialized_start=5181
- _globals['_FIREWALLRULES']._serialized_end=5325
- _globals['_FIREWALLEGRESSRULE']._serialized_start=5328
- _globals['_FIREWALLEGRESSRULE']._serialized_end=5536
- _globals['_FIREWALLINGRESSRULE']._serialized_start=5539
- _globals['_FIREWALLINGRESSRULE']._serialized_end=5782
- _globals['_MACHINENETWORK']._serialized_start=5785
- _globals['_MACHINENETWORK']._serialized_end=6197
- _globals['_MACHINEHARDWARE']._serialized_start=6200
- _globals['_MACHINEHARDWARE']._serialized_end=6451
- _globals['_METALCPU']._serialized_start=6453
- _globals['_METALCPU']._serialized_end=6577
- _globals['_METALGPU']._serialized_start=6579
- _globals['_METALGPU']._serialized_end=6655
- _globals['_MACHINENIC']._serialized_start=6658
- _globals['_MACHINENIC']._serialized_end=6953
- _globals['_MACHINEBLOCKDEVICE']._serialized_start=6955
- _globals['_MACHINEBLOCKDEVICE']._serialized_end=7028
- _globals['_MACHINECHASSISIDENTIFYLEDSTATE']._serialized_start=7030
- _globals['_MACHINECHASSISIDENTIFYLEDSTATE']._serialized_end=7141
- _globals['_MACHINEBMCREPORT']._serialized_start=7144
- _globals['_MACHINEBMCREPORT']._serialized_end=7603
- _globals['_MACHINEBIOS']._serialized_start=7605
- _globals['_MACHINEBIOS']._serialized_end=7727
- _globals['_MACHINEBMC']._serialized_start=7730
- _globals['_MACHINEBMC']._serialized_end=8011
- _globals['_MACHINEFRU']._serialized_start=8014
- _globals['_MACHINEFRU']._serialized_end=8692
- _globals['_MACHINEPOWERMETRIC']._serialized_start=8695
- _globals['_MACHINEPOWERMETRIC']._serialized_end=8901
- _globals['_MACHINEPOWERSUPPLY']._serialized_start=8903
- _globals['_MACHINEPOWERSUPPLY']._serialized_end=8969
- _globals['_MACHINERECENTPROVISIONINGEVENTS']._serialized_start=8972
- _globals['_MACHINERECENTPROVISIONINGEVENTS']._serialized_end=9311
- _globals['_MACHINEPROVISIONINGEVENT']._serialized_start=9314
- _globals['_MACHINEPROVISIONINGEVENT']._serialized_end=9495
- _globals['_MACHINEVPN']._serialized_start=9498
- _globals['_MACHINEVPN']._serialized_end=9651
- _globals['_MACHINEQUERY']._serialized_start=9654
- _globals['_MACHINEQUERY']._serialized_end=10749
- _globals['_MACHINEALLOCATIONQUERY']._serialized_start=10752
- _globals['_MACHINEALLOCATIONQUERY']._serialized_end=11357
- _globals['_MACHINENETWORKQUERY']._serialized_start=11360
- _globals['_MACHINENETWORKQUERY']._serialized_end=11588
- _globals['_MACHINENICQUERY']._serialized_start=11591
- _globals['_MACHINENICQUERY']._serialized_end=11808
- _globals['_MACHINEDISKQUERY']._serialized_start=11810
- _globals['_MACHINEDISKQUERY']._serialized_end=11899
- _globals['_MACHINEBMCQUERY']._serialized_start=11902
- _globals['_MACHINEBMCQUERY']._serialized_end=12118
- _globals['_MACHINEFRUQUERY']._serialized_start=12121
- _globals['_MACHINEFRUQUERY']._serialized_end=12769
- _globals['_MACHINEHARDWAREQUERY']._serialized_start=12771
- _globals['_MACHINEHARDWAREQUERY']._serialized_end=12881
- _globals['_MACHINEISSUESQUERY']._serialized_start=12884
- _globals['_MACHINEISSUESQUERY']._serialized_end=13292
- _globals['_MACHINEISSUES']._serialized_start=13294
- _globals['_MACHINEISSUES']._serialized_end=13396
- _globals['_MACHINEISSUE']._serialized_start=13399
- _globals['_MACHINEISSUE']._serialized_end=13682
- _globals['_MACHINESERVICE']._serialized_start=17089
- _globals['_MACHINESERVICE']._serialized_end=17938
+ _globals['_MACHINE']._serialized_end=3691
+ _globals['_MACHINESTATUS']._serialized_start=3694
+ _globals['_MACHINESTATUS']._serialized_end=3986
+ _globals['_MACHINECONDITION']._serialized_start=3989
+ _globals['_MACHINECONDITION']._serialized_end=4153
+ _globals['_MACHINEALLOCATION']._serialized_start=4156
+ _globals['_MACHINEALLOCATION']._serialized_end=5109
+ _globals['_MACHINEALLOCATIONNETWORK']._serialized_start=5111
+ _globals['_MACHINEALLOCATIONNETWORK']._serialized_end=5208
+ _globals['_FIREWALLRULES']._serialized_start=5211
+ _globals['_FIREWALLRULES']._serialized_end=5355
+ _globals['_FIREWALLEGRESSRULE']._serialized_start=5358
+ _globals['_FIREWALLEGRESSRULE']._serialized_end=5566
+ _globals['_FIREWALLINGRESSRULE']._serialized_start=5569
+ _globals['_FIREWALLINGRESSRULE']._serialized_end=5812
+ _globals['_MACHINENETWORK']._serialized_start=5815
+ _globals['_MACHINENETWORK']._serialized_end=6227
+ _globals['_MACHINEHARDWARE']._serialized_start=6230
+ _globals['_MACHINEHARDWARE']._serialized_end=6481
+ _globals['_METALCPU']._serialized_start=6483
+ _globals['_METALCPU']._serialized_end=6607
+ _globals['_METALGPU']._serialized_start=6609
+ _globals['_METALGPU']._serialized_end=6685
+ _globals['_MACHINENIC']._serialized_start=6688
+ _globals['_MACHINENIC']._serialized_end=6983
+ _globals['_MACHINEBLOCKDEVICE']._serialized_start=6985
+ _globals['_MACHINEBLOCKDEVICE']._serialized_end=7058
+ _globals['_MACHINECHASSISIDENTIFYLEDSTATE']._serialized_start=7060
+ _globals['_MACHINECHASSISIDENTIFYLEDSTATE']._serialized_end=7171
+ _globals['_MACHINEBMCREPORT']._serialized_start=7174
+ _globals['_MACHINEBMCREPORT']._serialized_end=7633
+ _globals['_MACHINEBIOS']._serialized_start=7635
+ _globals['_MACHINEBIOS']._serialized_end=7757
+ _globals['_MACHINEBMC']._serialized_start=7760
+ _globals['_MACHINEBMC']._serialized_end=8041
+ _globals['_MACHINEFRU']._serialized_start=8044
+ _globals['_MACHINEFRU']._serialized_end=8722
+ _globals['_MACHINEPOWERMETRIC']._serialized_start=8725
+ _globals['_MACHINEPOWERMETRIC']._serialized_end=8931
+ _globals['_MACHINEPOWERSUPPLY']._serialized_start=8933
+ _globals['_MACHINEPOWERSUPPLY']._serialized_end=8999
+ _globals['_MACHINERECENTPROVISIONINGEVENTS']._serialized_start=9002
+ _globals['_MACHINERECENTPROVISIONINGEVENTS']._serialized_end=9341
+ _globals['_MACHINEPROVISIONINGEVENT']._serialized_start=9344
+ _globals['_MACHINEPROVISIONINGEVENT']._serialized_end=9525
+ _globals['_MACHINEVPN']._serialized_start=9528
+ _globals['_MACHINEVPN']._serialized_end=9681
+ _globals['_MACHINEQUERY']._serialized_start=9684
+ _globals['_MACHINEQUERY']._serialized_end=10827
+ _globals['_MACHINEALLOCATIONQUERY']._serialized_start=10830
+ _globals['_MACHINEALLOCATIONQUERY']._serialized_end=11435
+ _globals['_MACHINENETWORKQUERY']._serialized_start=11438
+ _globals['_MACHINENETWORKQUERY']._serialized_end=11666
+ _globals['_MACHINENICQUERY']._serialized_start=11669
+ _globals['_MACHINENICQUERY']._serialized_end=11886
+ _globals['_MACHINEDISKQUERY']._serialized_start=11888
+ _globals['_MACHINEDISKQUERY']._serialized_end=11977
+ _globals['_MACHINEBMCQUERY']._serialized_start=11980
+ _globals['_MACHINEBMCQUERY']._serialized_end=12196
+ _globals['_MACHINEFRUQUERY']._serialized_start=12199
+ _globals['_MACHINEFRUQUERY']._serialized_end=12847
+ _globals['_MACHINEHARDWAREQUERY']._serialized_start=12849
+ _globals['_MACHINEHARDWAREQUERY']._serialized_end=12959
+ _globals['_MACHINEISSUESQUERY']._serialized_start=12962
+ _globals['_MACHINEISSUESQUERY']._serialized_end=13370
+ _globals['_MACHINEISSUES']._serialized_start=13372
+ _globals['_MACHINEISSUES']._serialized_end=13474
+ _globals['_MACHINEISSUE']._serialized_start=13477
+ _globals['_MACHINEISSUE']._serialized_end=13760
+ _globals['_MACHINESERVICE']._serialized_start=17167
+ _globals['_MACHINESERVICE']._serialized_end=18016
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/machine_pb2.pyi b/python/metalstack/api/v2/machine_pb2.pyi
index c577d4be..1b088a4e 100644
--- a/python/metalstack/api/v2/machine_pb2.pyi
+++ b/python/metalstack/api/v2/machine_pb2.pyi
@@ -311,11 +311,12 @@ class MachineServiceGetBMCResponse(_message.Message):
def __init__(self, uuid: _Optional[str] = ..., bmc: _Optional[_Union[MachineBMCReport, _Mapping]] = ...) -> None: ...
class Machine(_message.Message):
- __slots__ = ("uuid", "meta", "partition", "rack", "size", "hardware", "allocation", "status", "recent_provisioning_events")
+ __slots__ = ("uuid", "meta", "partition", "rack", "room", "size", "hardware", "allocation", "status", "recent_provisioning_events")
UUID_FIELD_NUMBER: _ClassVar[int]
META_FIELD_NUMBER: _ClassVar[int]
PARTITION_FIELD_NUMBER: _ClassVar[int]
RACK_FIELD_NUMBER: _ClassVar[int]
+ ROOM_FIELD_NUMBER: _ClassVar[int]
SIZE_FIELD_NUMBER: _ClassVar[int]
HARDWARE_FIELD_NUMBER: _ClassVar[int]
ALLOCATION_FIELD_NUMBER: _ClassVar[int]
@@ -325,12 +326,13 @@ class Machine(_message.Message):
meta: _common_pb2.Meta
partition: _partition_pb2.Partition
rack: str
+ room: str
size: _size_pb2.Size
hardware: MachineHardware
allocation: MachineAllocation
status: MachineStatus
recent_provisioning_events: MachineRecentProvisioningEvents
- def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., partition: _Optional[_Union[_partition_pb2.Partition, _Mapping]] = ..., rack: _Optional[str] = ..., size: _Optional[_Union[_size_pb2.Size, _Mapping]] = ..., hardware: _Optional[_Union[MachineHardware, _Mapping]] = ..., allocation: _Optional[_Union[MachineAllocation, _Mapping]] = ..., status: _Optional[_Union[MachineStatus, _Mapping]] = ..., recent_provisioning_events: _Optional[_Union[MachineRecentProvisioningEvents, _Mapping]] = ...) -> None: ...
+ def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., partition: _Optional[_Union[_partition_pb2.Partition, _Mapping]] = ..., rack: _Optional[str] = ..., room: _Optional[str] = ..., size: _Optional[_Union[_size_pb2.Size, _Mapping]] = ..., hardware: _Optional[_Union[MachineHardware, _Mapping]] = ..., allocation: _Optional[_Union[MachineAllocation, _Mapping]] = ..., status: _Optional[_Union[MachineStatus, _Mapping]] = ..., recent_provisioning_events: _Optional[_Union[MachineRecentProvisioningEvents, _Mapping]] = ...) -> None: ...
class MachineStatus(_message.Message):
__slots__ = ("condition", "led_state", "liveliness", "metal_hammer_version")
@@ -646,12 +648,13 @@ class MachineVPN(_message.Message):
def __init__(self, control_plane_address: _Optional[str] = ..., auth_key: _Optional[str] = ..., connected: _Optional[bool] = ..., ips: _Optional[_Iterable[str]] = ...) -> None: ...
class MachineQuery(_message.Message):
- __slots__ = ("uuid", "name", "partition", "size", "rack", "labels", "allocation", "network", "nic", "disk", "bmc", "fru", "hardware", "state", "waiting", "preallocated", "not_allocated")
+ __slots__ = ("uuid", "name", "partition", "size", "rack", "room", "labels", "allocation", "network", "nic", "disk", "bmc", "fru", "hardware", "state", "waiting", "preallocated", "not_allocated")
UUID_FIELD_NUMBER: _ClassVar[int]
NAME_FIELD_NUMBER: _ClassVar[int]
PARTITION_FIELD_NUMBER: _ClassVar[int]
SIZE_FIELD_NUMBER: _ClassVar[int]
RACK_FIELD_NUMBER: _ClassVar[int]
+ ROOM_FIELD_NUMBER: _ClassVar[int]
LABELS_FIELD_NUMBER: _ClassVar[int]
ALLOCATION_FIELD_NUMBER: _ClassVar[int]
NETWORK_FIELD_NUMBER: _ClassVar[int]
@@ -669,6 +672,7 @@ class MachineQuery(_message.Message):
partition: str
size: str
rack: str
+ room: str
labels: _common_pb2.Labels
allocation: MachineAllocationQuery
network: MachineNetworkQuery
@@ -681,7 +685,7 @@ class MachineQuery(_message.Message):
waiting: bool
preallocated: bool
not_allocated: bool
- def __init__(self, uuid: _Optional[str] = ..., name: _Optional[str] = ..., partition: _Optional[str] = ..., size: _Optional[str] = ..., rack: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ..., allocation: _Optional[_Union[MachineAllocationQuery, _Mapping]] = ..., network: _Optional[_Union[MachineNetworkQuery, _Mapping]] = ..., nic: _Optional[_Union[MachineNicQuery, _Mapping]] = ..., disk: _Optional[_Union[MachineDiskQuery, _Mapping]] = ..., bmc: _Optional[_Union[MachineBMCQuery, _Mapping]] = ..., fru: _Optional[_Union[MachineFRUQuery, _Mapping]] = ..., hardware: _Optional[_Union[MachineHardwareQuery, _Mapping]] = ..., state: _Optional[_Union[MachineState, str]] = ..., waiting: _Optional[bool] = ..., preallocated: _Optional[bool] = ..., not_allocated: _Optional[bool] = ...) -> None: ...
+ def __init__(self, uuid: _Optional[str] = ..., name: _Optional[str] = ..., partition: _Optional[str] = ..., size: _Optional[str] = ..., rack: _Optional[str] = ..., room: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ..., allocation: _Optional[_Union[MachineAllocationQuery, _Mapping]] = ..., network: _Optional[_Union[MachineNetworkQuery, _Mapping]] = ..., nic: _Optional[_Union[MachineNicQuery, _Mapping]] = ..., disk: _Optional[_Union[MachineDiskQuery, _Mapping]] = ..., bmc: _Optional[_Union[MachineBMCQuery, _Mapping]] = ..., fru: _Optional[_Union[MachineFRUQuery, _Mapping]] = ..., hardware: _Optional[_Union[MachineHardwareQuery, _Mapping]] = ..., state: _Optional[_Union[MachineState, str]] = ..., waiting: _Optional[bool] = ..., preallocated: _Optional[bool] = ..., not_allocated: _Optional[bool] = ...) -> None: ...
class MachineAllocationQuery(_message.Message):
__slots__ = ("uuid", "name", "project", "image", "filesystem_layout", "hostname", "allocation_type", "labels", "vpn")
diff --git a/python/metalstack/api/v2/switch_pb2.py b/python/metalstack/api/v2/switch_pb2.py
index 2db48de9..e8acbd5d 100644
--- a/python/metalstack/api/v2/switch_pb2.py
+++ b/python/metalstack/api/v2/switch_pb2.py
@@ -30,7 +30,7 @@
from metalstack.api.v2 import predefined_rules_pb2 as metalstack_dot_api_dot_v2_dot_predefined__rules__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emetalstack/api/v2/switch.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/machine.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xb3\x06\n\x06Switch\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12$\n\x04rack\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04rack\x88\x01\x01\x12)\n\tpartition\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\tpartition\x12Q\n\x0creplace_mode\x18\x06 \x01(\x0e\x32$.metalstack.api.v2.SwitchReplaceModeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0breplaceMode\x12,\n\rmanagement_ip\x18\x07 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x0cmanagementIp\x12\x38\n\x0fmanagement_user\x18\x08 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x01R\x0emanagementUser\x88\x01\x01\x12\x38\n\x0f\x63onsole_command\x18\t \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x02R\x0e\x63onsoleCommand\x88\x01\x01\x12\x30\n\x04nics\x18\n \x03(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x04nics\x12+\n\x02os\x18\x0b \x01(\x0b\x32\x1b.metalstack.api.v2.SwitchOSR\x02os\x12U\n\x13machine_connections\x18\x0c \x03(\x0b\x32$.metalstack.api.v2.MachineConnectionR\x12machineConnections\x12:\n\tlast_sync\x18\r \x01(\x0b\x32\x1d.metalstack.api.v2.SwitchSyncR\x08lastSync\x12\x45\n\x0flast_sync_error\x18\x0e \x01(\x0b\x32\x1d.metalstack.api.v2.SwitchSyncR\rlastSyncErrorB\x07\n\x05_rackB\x12\n\x10_management_userB\x12\n\x10_console_command\"\xb1\x01\n\x08SwitchOS\x12\x43\n\x06vendor\x18\x01 \x01(\x0e\x32!.metalstack.api.v2.SwitchOSVendorB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06vendor\x12%\n\x07version\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07version\x12\x39\n\x12metal_core_version\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x10metalCoreVersion\"\x9c\x03\n\tSwitchNic\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12+\n\nidentifier\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\nidentifier\x12\x1d\n\x03mac\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xb8\xb3\xae\xb1\x02\x01R\x03mac\x12\"\n\x03vrf\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x03vrf\x88\x01\x01\x12\x36\n\x05state\x18\x05 \x01(\x0b\x32\x1b.metalstack.api.v2.NicStateH\x01R\x05state\x88\x01\x01\x12@\n\nbgp_filter\x18\x06 \x01(\x0b\x32\x1c.metalstack.api.v2.BGPFilterH\x02R\tbgpFilter\x88\x01\x01\x12P\n\x0e\x62gp_port_state\x18\x07 \x01(\x0b\x32%.metalstack.api.v2.SwitchBGPPortStateH\x03R\x0c\x62gpPortState\x88\x01\x01\x42\x06\n\x04_vrfB\x08\n\x06_stateB\r\n\x0b_bgp_filterB\x11\n\x0f_bgp_port_state\"T\n\tBGPFilter\x12\"\n\x05\x63idrs\x18\x01 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x05\x63idrs\x12#\n\x04vnis\x18\x02 \x03(\tB\x0f\xbaH\x0c\x92\x01\t\"\x07r\x05\x10\x02\x18\x80\x01R\x04vnis\"\x92\x03\n\x12SwitchBGPPortState\x12\'\n\x08neighbor\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08neighbor\x12*\n\npeer_group\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\tpeerGroup\x12&\n\x08vrf_name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07vrfName\x12\x42\n\tbgp_state\x18\x04 \x01(\x0e\x32\x1b.metalstack.api.v2.BGPStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x08\x62gpState\x12S\n\x18\x62gp_timer_up_established\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x15\x62gpTimerUpEstablished\x12.\n\x13sent_prefix_counter\x18\x06 \x01(\x04R\x11sentPrefixCounter\x12\x36\n\x17\x61\x63\x63\x65pted_prefix_counter\x18\x07 \x01(\x04R\x15\x61\x63\x63\x65ptedPrefixCounter\"\xab\x01\n\x08NicState\x12L\n\x07\x64\x65sired\x18\x01 \x01(\x0e\x32#.metalstack.api.v2.SwitchPortStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x07\x64\x65sired\x88\x01\x01\x12\x45\n\x06\x61\x63tual\x18\x02 \x01(\x0e\x32#.metalstack.api.v2.SwitchPortStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06\x61\x63tualB\n\n\x08_desired\"b\n\x11MachineConnection\x12\x1d\n\nmachine_id\x18\x01 \x01(\tR\tmachineId\x12.\n\x03nic\x18\x02 \x01(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x03nic\"\xbd\x02\n\x0bSwitchQuery\x12\"\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12.\n\tpartition\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x01R\tpartition\x88\x01\x01\x12$\n\x04rack\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x02R\x04rack\x88\x01\x01\x12\x35\n\x02os\x18\x04 \x01(\x0b\x32 .metalstack.api.v2.SwitchOSQueryH\x03R\x02os\x88\x01\x01\x12?\n\x14\x63onnected_machine_id\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x04R\x12\x63onnectedMachineId\x88\x01\x01\x42\x05\n\x03_idB\x0c\n\n_partitionB\x07\n\x05_rackB\x05\n\x03_osB\x17\n\x15_connected_machine_id\"\x9c\x01\n\rSwitchOSQuery\x12H\n\x06vendor\x18\x01 \x01(\x0e\x32!.metalstack.api.v2.SwitchOSVendorB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x06vendor\x88\x01\x01\x12*\n\x07version\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x07version\x88\x01\x01\x42\t\n\x07_vendorB\n\n\x08_version\"\x98\x01\n\nSwitchSync\x12.\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04time\x12\x35\n\x08\x64uration\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationR\x08\x64uration\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x00R\x05\x65rror\x88\x01\x01\x42\x08\n\x06_error\"\xa1\x01\n\x12SwitchWithMachines\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1c\n\tpartition\x18\x02 \x01(\tR\tpartition\x12\x12\n\x04rack\x18\x03 \x01(\tR\x04rack\x12I\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.metalstack.api.v2.SwitchNicWithMachineR\x0b\x63onnections\"\xad\x01\n\x14SwitchNicWithMachine\x12.\n\x03nic\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x03nic\x12\x34\n\x07machine\x18\x02 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\x12/\n\x03\x66ru\x18\x03 \x01(\x0b\x32\x1d.metalstack.api.v2.MachineFRUR\x03\x66ru*\x89\x02\n\x08\x42GPState\x12\x19\n\x15\x42GP_STATE_UNSPECIFIED\x10\x00\x12\x1c\n\x0e\x42GP_STATE_IDLE\x10\x01\x1a\x08\x82\xb2\x19\x04Idle\x12\"\n\x11\x42GP_STATE_CONNECT\x10\x02\x1a\x0b\x82\xb2\x19\x07\x43onnect\x12 \n\x10\x42GP_STATE_ACTIVE\x10\x03\x1a\n\x82\xb2\x19\x06\x41\x63tive\x12%\n\x13\x42GP_STATE_OPEN_SENT\x10\x04\x1a\x0c\x82\xb2\x19\x08OpenSent\x12+\n\x16\x42GP_STATE_OPEN_CONFIRM\x10\x05\x1a\x0f\x82\xb2\x19\x0bOpenConfirm\x12*\n\x15\x42GP_STATE_ESTABLISHED\x10\x06\x1a\x0f\x82\xb2\x19\x0b\x45stablished*\xa2\x01\n\x11SwitchReplaceMode\x12)\n\x1fSWITCH_REPLACE_MODE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12,\n\x1bSWITCH_REPLACE_MODE_REPLACE\x10\x01\x1a\x0b\x82\xb2\x19\x07replace\x12\x34\n\x1fSWITCH_REPLACE_MODE_OPERATIONAL\x10\x02\x1a\x0f\x82\xb2\x19\x0boperational*\x84\x01\n\x0eSwitchOSVendor\x12 \n\x1cSWITCH_OS_VENDOR_UNSPECIFIED\x10\x00\x12)\n\x18SWITCH_OS_VENDOR_CUMULUS\x10\x01\x1a\x0b\x82\xb2\x19\x07\x43umulus\x12%\n\x16SWITCH_OS_VENDOR_SONIC\x10\x02\x1a\t\x82\xb2\x19\x05SONiC*\xad\x01\n\x10SwitchPortStatus\x12\"\n\x1eSWITCH_PORT_STATUS_UNSPECIFIED\x10\x00\x12!\n\x15SWITCH_PORT_STATUS_UP\x10\x01\x1a\x06\x82\xb2\x19\x02up\x12%\n\x17SWITCH_PORT_STATUS_DOWN\x10\x02\x1a\x08\x82\xb2\x19\x04\x64own\x12+\n\x1aSWITCH_PORT_STATUS_UNKNOWN\x10\x03\x1a\x0b\x82\xb2\x19\x07unknownB\xc1\x01\n\x15\x63om.metalstack.api.v2B\x0bSwitchProtoP\x01Z5github.com/metal-stack/api/go/metalstack/api/v2;apiv2\xa2\x02\x03MAX\xaa\x02\x11Metalstack.Api.V2\xca\x02\x11Metalstack\\Api\\V2\xe2\x02\x1dMetalstack\\Api\\V2\\GPBMetadata\xea\x02\x13Metalstack::Api::V2b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emetalstack/api/v2/switch.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/machine.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xe2\x06\n\x06Switch\x12\x1d\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12$\n\x04rack\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04rack\x88\x01\x01\x12$\n\x04room\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04room\x88\x01\x01\x12)\n\tpartition\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\tpartition\x12Q\n\x0creplace_mode\x18\x07 \x01(\x0e\x32$.metalstack.api.v2.SwitchReplaceModeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0breplaceMode\x12,\n\rmanagement_ip\x18\x08 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x0cmanagementIp\x12\x38\n\x0fmanagement_user\x18\t \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x02R\x0emanagementUser\x88\x01\x01\x12\x38\n\x0f\x63onsole_command\x18\n \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x03R\x0e\x63onsoleCommand\x88\x01\x01\x12\x30\n\x04nics\x18\x0b \x03(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x04nics\x12+\n\x02os\x18\x0c \x01(\x0b\x32\x1b.metalstack.api.v2.SwitchOSR\x02os\x12U\n\x13machine_connections\x18\r \x03(\x0b\x32$.metalstack.api.v2.MachineConnectionR\x12machineConnections\x12:\n\tlast_sync\x18\x0e \x01(\x0b\x32\x1d.metalstack.api.v2.SwitchSyncR\x08lastSync\x12\x45\n\x0flast_sync_error\x18\x0f \x01(\x0b\x32\x1d.metalstack.api.v2.SwitchSyncR\rlastSyncErrorB\x07\n\x05_rackB\x07\n\x05_roomB\x12\n\x10_management_userB\x12\n\x10_console_command\"\xb1\x01\n\x08SwitchOS\x12\x43\n\x06vendor\x18\x01 \x01(\x0e\x32!.metalstack.api.v2.SwitchOSVendorB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06vendor\x12%\n\x07version\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07version\x12\x39\n\x12metal_core_version\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x10metalCoreVersion\"\x9c\x03\n\tSwitchNic\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12+\n\nidentifier\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\nidentifier\x12\x1d\n\x03mac\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xb8\xb3\xae\xb1\x02\x01R\x03mac\x12\"\n\x03vrf\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x03vrf\x88\x01\x01\x12\x36\n\x05state\x18\x05 \x01(\x0b\x32\x1b.metalstack.api.v2.NicStateH\x01R\x05state\x88\x01\x01\x12@\n\nbgp_filter\x18\x06 \x01(\x0b\x32\x1c.metalstack.api.v2.BGPFilterH\x02R\tbgpFilter\x88\x01\x01\x12P\n\x0e\x62gp_port_state\x18\x07 \x01(\x0b\x32%.metalstack.api.v2.SwitchBGPPortStateH\x03R\x0c\x62gpPortState\x88\x01\x01\x42\x06\n\x04_vrfB\x08\n\x06_stateB\r\n\x0b_bgp_filterB\x11\n\x0f_bgp_port_state\"T\n\tBGPFilter\x12\"\n\x05\x63idrs\x18\x01 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x05\x63idrs\x12#\n\x04vnis\x18\x02 \x03(\tB\x0f\xbaH\x0c\x92\x01\t\"\x07r\x05\x10\x02\x18\x80\x01R\x04vnis\"\x92\x03\n\x12SwitchBGPPortState\x12\'\n\x08neighbor\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08neighbor\x12*\n\npeer_group\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\tpeerGroup\x12&\n\x08vrf_name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07vrfName\x12\x42\n\tbgp_state\x18\x04 \x01(\x0e\x32\x1b.metalstack.api.v2.BGPStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x08\x62gpState\x12S\n\x18\x62gp_timer_up_established\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x15\x62gpTimerUpEstablished\x12.\n\x13sent_prefix_counter\x18\x06 \x01(\x04R\x11sentPrefixCounter\x12\x36\n\x17\x61\x63\x63\x65pted_prefix_counter\x18\x07 \x01(\x04R\x15\x61\x63\x63\x65ptedPrefixCounter\"\xab\x01\n\x08NicState\x12L\n\x07\x64\x65sired\x18\x01 \x01(\x0e\x32#.metalstack.api.v2.SwitchPortStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x07\x64\x65sired\x88\x01\x01\x12\x45\n\x06\x61\x63tual\x18\x02 \x01(\x0e\x32#.metalstack.api.v2.SwitchPortStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06\x61\x63tualB\n\n\x08_desired\"b\n\x11MachineConnection\x12\x1d\n\nmachine_id\x18\x01 \x01(\tR\tmachineId\x12.\n\x03nic\x18\x02 \x01(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x03nic\"\xec\x02\n\x0bSwitchQuery\x12\"\n\x02id\x18\x01 \x01(\tB\r\xbaH\nr\x08h\x01\xc0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12.\n\tpartition\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x01R\tpartition\x88\x01\x01\x12$\n\x04rack\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x02R\x04rack\x88\x01\x01\x12$\n\x04room\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04room\x88\x01\x01\x12\x35\n\x02os\x18\x05 \x01(\x0b\x32 .metalstack.api.v2.SwitchOSQueryH\x04R\x02os\x88\x01\x01\x12?\n\x14\x63onnected_machine_id\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x05R\x12\x63onnectedMachineId\x88\x01\x01\x42\x05\n\x03_idB\x0c\n\n_partitionB\x07\n\x05_rackB\x07\n\x05_roomB\x05\n\x03_osB\x17\n\x15_connected_machine_id\"\x9c\x01\n\rSwitchOSQuery\x12H\n\x06vendor\x18\x01 \x01(\x0e\x32!.metalstack.api.v2.SwitchOSVendorB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x06vendor\x88\x01\x01\x12*\n\x07version\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x07version\x88\x01\x01\x42\t\n\x07_vendorB\n\n\x08_version\"\x98\x01\n\nSwitchSync\x12.\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04time\x12\x35\n\x08\x64uration\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationR\x08\x64uration\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x00R\x05\x65rror\x88\x01\x01\x42\x08\n\x06_error\"\xa1\x01\n\x12SwitchWithMachines\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1c\n\tpartition\x18\x02 \x01(\tR\tpartition\x12\x12\n\x04rack\x18\x03 \x01(\tR\x04rack\x12I\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.metalstack.api.v2.SwitchNicWithMachineR\x0b\x63onnections\"\xad\x01\n\x14SwitchNicWithMachine\x12.\n\x03nic\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.SwitchNicR\x03nic\x12\x34\n\x07machine\x18\x02 \x01(\x0b\x32\x1a.metalstack.api.v2.MachineR\x07machine\x12/\n\x03\x66ru\x18\x03 \x01(\x0b\x32\x1d.metalstack.api.v2.MachineFRUR\x03\x66ru*\x89\x02\n\x08\x42GPState\x12\x19\n\x15\x42GP_STATE_UNSPECIFIED\x10\x00\x12\x1c\n\x0e\x42GP_STATE_IDLE\x10\x01\x1a\x08\x82\xb2\x19\x04Idle\x12\"\n\x11\x42GP_STATE_CONNECT\x10\x02\x1a\x0b\x82\xb2\x19\x07\x43onnect\x12 \n\x10\x42GP_STATE_ACTIVE\x10\x03\x1a\n\x82\xb2\x19\x06\x41\x63tive\x12%\n\x13\x42GP_STATE_OPEN_SENT\x10\x04\x1a\x0c\x82\xb2\x19\x08OpenSent\x12+\n\x16\x42GP_STATE_OPEN_CONFIRM\x10\x05\x1a\x0f\x82\xb2\x19\x0bOpenConfirm\x12*\n\x15\x42GP_STATE_ESTABLISHED\x10\x06\x1a\x0f\x82\xb2\x19\x0b\x45stablished*\xa2\x01\n\x11SwitchReplaceMode\x12)\n\x1fSWITCH_REPLACE_MODE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12,\n\x1bSWITCH_REPLACE_MODE_REPLACE\x10\x01\x1a\x0b\x82\xb2\x19\x07replace\x12\x34\n\x1fSWITCH_REPLACE_MODE_OPERATIONAL\x10\x02\x1a\x0f\x82\xb2\x19\x0boperational*\x84\x01\n\x0eSwitchOSVendor\x12 \n\x1cSWITCH_OS_VENDOR_UNSPECIFIED\x10\x00\x12)\n\x18SWITCH_OS_VENDOR_CUMULUS\x10\x01\x1a\x0b\x82\xb2\x19\x07\x43umulus\x12%\n\x16SWITCH_OS_VENDOR_SONIC\x10\x02\x1a\t\x82\xb2\x19\x05SONiC*\xad\x01\n\x10SwitchPortStatus\x12\"\n\x1eSWITCH_PORT_STATUS_UNSPECIFIED\x10\x00\x12!\n\x15SWITCH_PORT_STATUS_UP\x10\x01\x1a\x06\x82\xb2\x19\x02up\x12%\n\x17SWITCH_PORT_STATUS_DOWN\x10\x02\x1a\x08\x82\xb2\x19\x04\x64own\x12+\n\x1aSWITCH_PORT_STATUS_UNKNOWN\x10\x03\x1a\x0b\x82\xb2\x19\x07unknownB\xc1\x01\n\x15\x63om.metalstack.api.v2B\x0bSwitchProtoP\x01Z5github.com/metal-stack/api/go/metalstack/api/v2;apiv2\xa2\x02\x03MAX\xaa\x02\x11Metalstack.Api.V2\xca\x02\x11Metalstack\\Api\\V2\xe2\x02\x1dMetalstack\\Api\\V2\\GPBMetadata\xea\x02\x13Metalstack::Api::V2b\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -72,6 +72,8 @@
_globals['_SWITCH'].fields_by_name['description']._serialized_options = b'\272H\010r\006\310\263\256\261\002\001'
_globals['_SWITCH'].fields_by_name['rack']._loaded_options = None
_globals['_SWITCH'].fields_by_name['rack']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
+ _globals['_SWITCH'].fields_by_name['room']._loaded_options = None
+ _globals['_SWITCH'].fields_by_name['room']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_SWITCH'].fields_by_name['partition']._loaded_options = None
_globals['_SWITCH'].fields_by_name['partition']._serialized_options = b'\272H\010r\006\320\263\256\261\002\001'
_globals['_SWITCH'].fields_by_name['replace_mode']._loaded_options = None
@@ -118,42 +120,44 @@
_globals['_SWITCHQUERY'].fields_by_name['partition']._serialized_options = b'\272H\010r\006\320\263\256\261\002\001'
_globals['_SWITCHQUERY'].fields_by_name['rack']._loaded_options = None
_globals['_SWITCHQUERY'].fields_by_name['rack']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
+ _globals['_SWITCHQUERY'].fields_by_name['room']._loaded_options = None
+ _globals['_SWITCHQUERY'].fields_by_name['room']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_SWITCHQUERY'].fields_by_name['connected_machine_id']._loaded_options = None
_globals['_SWITCHQUERY'].fields_by_name['connected_machine_id']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_SWITCHOSQUERY'].fields_by_name['vendor']._loaded_options = None
_globals['_SWITCHOSQUERY'].fields_by_name['vendor']._serialized_options = b'\272H\005\202\001\002\020\001'
_globals['_SWITCHOSQUERY'].fields_by_name['version']._loaded_options = None
_globals['_SWITCHOSQUERY'].fields_by_name['version']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
- _globals['_BGPSTATE']._serialized_start=3411
- _globals['_BGPSTATE']._serialized_end=3676
- _globals['_SWITCHREPLACEMODE']._serialized_start=3679
- _globals['_SWITCHREPLACEMODE']._serialized_end=3841
- _globals['_SWITCHOSVENDOR']._serialized_start=3844
- _globals['_SWITCHOSVENDOR']._serialized_end=3976
- _globals['_SWITCHPORTSTATUS']._serialized_start=3979
- _globals['_SWITCHPORTSTATUS']._serialized_end=4152
+ _globals['_BGPSTATE']._serialized_start=3505
+ _globals['_BGPSTATE']._serialized_end=3770
+ _globals['_SWITCHREPLACEMODE']._serialized_start=3773
+ _globals['_SWITCHREPLACEMODE']._serialized_end=3935
+ _globals['_SWITCHOSVENDOR']._serialized_start=3938
+ _globals['_SWITCHOSVENDOR']._serialized_end=4070
+ _globals['_SWITCHPORTSTATUS']._serialized_start=4073
+ _globals['_SWITCHPORTSTATUS']._serialized_end=4246
_globals['_SWITCH']._serialized_start=255
- _globals['_SWITCH']._serialized_end=1074
- _globals['_SWITCHOS']._serialized_start=1077
- _globals['_SWITCHOS']._serialized_end=1254
- _globals['_SWITCHNIC']._serialized_start=1257
- _globals['_SWITCHNIC']._serialized_end=1669
- _globals['_BGPFILTER']._serialized_start=1671
- _globals['_BGPFILTER']._serialized_end=1755
- _globals['_SWITCHBGPPORTSTATE']._serialized_start=1758
- _globals['_SWITCHBGPPORTSTATE']._serialized_end=2160
- _globals['_NICSTATE']._serialized_start=2163
- _globals['_NICSTATE']._serialized_end=2334
- _globals['_MACHINECONNECTION']._serialized_start=2336
- _globals['_MACHINECONNECTION']._serialized_end=2434
- _globals['_SWITCHQUERY']._serialized_start=2437
- _globals['_SWITCHQUERY']._serialized_end=2754
- _globals['_SWITCHOSQUERY']._serialized_start=2757
- _globals['_SWITCHOSQUERY']._serialized_end=2913
- _globals['_SWITCHSYNC']._serialized_start=2916
- _globals['_SWITCHSYNC']._serialized_end=3068
- _globals['_SWITCHWITHMACHINES']._serialized_start=3071
- _globals['_SWITCHWITHMACHINES']._serialized_end=3232
- _globals['_SWITCHNICWITHMACHINE']._serialized_start=3235
- _globals['_SWITCHNICWITHMACHINE']._serialized_end=3408
+ _globals['_SWITCH']._serialized_end=1121
+ _globals['_SWITCHOS']._serialized_start=1124
+ _globals['_SWITCHOS']._serialized_end=1301
+ _globals['_SWITCHNIC']._serialized_start=1304
+ _globals['_SWITCHNIC']._serialized_end=1716
+ _globals['_BGPFILTER']._serialized_start=1718
+ _globals['_BGPFILTER']._serialized_end=1802
+ _globals['_SWITCHBGPPORTSTATE']._serialized_start=1805
+ _globals['_SWITCHBGPPORTSTATE']._serialized_end=2207
+ _globals['_NICSTATE']._serialized_start=2210
+ _globals['_NICSTATE']._serialized_end=2381
+ _globals['_MACHINECONNECTION']._serialized_start=2383
+ _globals['_MACHINECONNECTION']._serialized_end=2481
+ _globals['_SWITCHQUERY']._serialized_start=2484
+ _globals['_SWITCHQUERY']._serialized_end=2848
+ _globals['_SWITCHOSQUERY']._serialized_start=2851
+ _globals['_SWITCHOSQUERY']._serialized_end=3007
+ _globals['_SWITCHSYNC']._serialized_start=3010
+ _globals['_SWITCHSYNC']._serialized_end=3162
+ _globals['_SWITCHWITHMACHINES']._serialized_start=3165
+ _globals['_SWITCHWITHMACHINES']._serialized_end=3326
+ _globals['_SWITCHNICWITHMACHINE']._serialized_start=3329
+ _globals['_SWITCHNICWITHMACHINE']._serialized_end=3502
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/switch_pb2.pyi b/python/metalstack/api/v2/switch_pb2.pyi
index af930afb..01b86fcb 100644
--- a/python/metalstack/api/v2/switch_pb2.pyi
+++ b/python/metalstack/api/v2/switch_pb2.pyi
@@ -62,11 +62,12 @@ SWITCH_PORT_STATUS_DOWN: SwitchPortStatus
SWITCH_PORT_STATUS_UNKNOWN: SwitchPortStatus
class Switch(_message.Message):
- __slots__ = ("id", "meta", "description", "rack", "partition", "replace_mode", "management_ip", "management_user", "console_command", "nics", "os", "machine_connections", "last_sync", "last_sync_error")
+ __slots__ = ("id", "meta", "description", "rack", "room", "partition", "replace_mode", "management_ip", "management_user", "console_command", "nics", "os", "machine_connections", "last_sync", "last_sync_error")
ID_FIELD_NUMBER: _ClassVar[int]
META_FIELD_NUMBER: _ClassVar[int]
DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
RACK_FIELD_NUMBER: _ClassVar[int]
+ ROOM_FIELD_NUMBER: _ClassVar[int]
PARTITION_FIELD_NUMBER: _ClassVar[int]
REPLACE_MODE_FIELD_NUMBER: _ClassVar[int]
MANAGEMENT_IP_FIELD_NUMBER: _ClassVar[int]
@@ -81,6 +82,7 @@ class Switch(_message.Message):
meta: _common_pb2.Meta
description: str
rack: str
+ room: str
partition: str
replace_mode: SwitchReplaceMode
management_ip: str
@@ -91,7 +93,7 @@ class Switch(_message.Message):
machine_connections: _containers.RepeatedCompositeFieldContainer[MachineConnection]
last_sync: SwitchSync
last_sync_error: SwitchSync
- def __init__(self, id: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., description: _Optional[str] = ..., rack: _Optional[str] = ..., partition: _Optional[str] = ..., replace_mode: _Optional[_Union[SwitchReplaceMode, str]] = ..., management_ip: _Optional[str] = ..., management_user: _Optional[str] = ..., console_command: _Optional[str] = ..., nics: _Optional[_Iterable[_Union[SwitchNic, _Mapping]]] = ..., os: _Optional[_Union[SwitchOS, _Mapping]] = ..., machine_connections: _Optional[_Iterable[_Union[MachineConnection, _Mapping]]] = ..., last_sync: _Optional[_Union[SwitchSync, _Mapping]] = ..., last_sync_error: _Optional[_Union[SwitchSync, _Mapping]] = ...) -> None: ...
+ def __init__(self, id: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., description: _Optional[str] = ..., rack: _Optional[str] = ..., room: _Optional[str] = ..., partition: _Optional[str] = ..., replace_mode: _Optional[_Union[SwitchReplaceMode, str]] = ..., management_ip: _Optional[str] = ..., management_user: _Optional[str] = ..., console_command: _Optional[str] = ..., nics: _Optional[_Iterable[_Union[SwitchNic, _Mapping]]] = ..., os: _Optional[_Union[SwitchOS, _Mapping]] = ..., machine_connections: _Optional[_Iterable[_Union[MachineConnection, _Mapping]]] = ..., last_sync: _Optional[_Union[SwitchSync, _Mapping]] = ..., last_sync_error: _Optional[_Union[SwitchSync, _Mapping]] = ...) -> None: ...
class SwitchOS(_message.Message):
__slots__ = ("vendor", "version", "metal_core_version")
@@ -164,18 +166,20 @@ class MachineConnection(_message.Message):
def __init__(self, machine_id: _Optional[str] = ..., nic: _Optional[_Union[SwitchNic, _Mapping]] = ...) -> None: ...
class SwitchQuery(_message.Message):
- __slots__ = ("id", "partition", "rack", "os", "connected_machine_id")
+ __slots__ = ("id", "partition", "rack", "room", "os", "connected_machine_id")
ID_FIELD_NUMBER: _ClassVar[int]
PARTITION_FIELD_NUMBER: _ClassVar[int]
RACK_FIELD_NUMBER: _ClassVar[int]
+ ROOM_FIELD_NUMBER: _ClassVar[int]
OS_FIELD_NUMBER: _ClassVar[int]
CONNECTED_MACHINE_ID_FIELD_NUMBER: _ClassVar[int]
id: str
partition: str
rack: str
+ room: str
os: SwitchOSQuery
connected_machine_id: str
- def __init__(self, id: _Optional[str] = ..., partition: _Optional[str] = ..., rack: _Optional[str] = ..., os: _Optional[_Union[SwitchOSQuery, _Mapping]] = ..., connected_machine_id: _Optional[str] = ...) -> None: ...
+ def __init__(self, id: _Optional[str] = ..., partition: _Optional[str] = ..., rack: _Optional[str] = ..., room: _Optional[str] = ..., os: _Optional[_Union[SwitchOSQuery, _Mapping]] = ..., connected_machine_id: _Optional[str] = ...) -> None: ...
class SwitchOSQuery(_message.Message):
__slots__ = ("vendor", "version")