Now measurement args gets passed as an argument for both newvm and updatevm responses VM type now gets converted with the help of an intermediary function, reducing code duplication Updated proto file accordingly After merging, the whole code base still needs a major refactoring, error handling and a lot more checks to make sure daemon behaves as intended. Co-authored-by: Ramil_Algayev <pro.remred@gmail.com> Reviewed-on: SNP/daemon#3 Co-authored-by: ramrem <ralgayev@detee.ltd> Co-committed-by: ramrem <ralgayev@detee.ltd>
156 lines
3.7 KiB
Protocol Buffer
156 lines
3.7 KiB
Protocol Buffer
syntax = "proto3";
|
|
package brain;
|
|
|
|
message Empty {
|
|
}
|
|
|
|
message NodePubkey {
|
|
string node_pubkey = 1;
|
|
}
|
|
|
|
message RegisterNodeReq {
|
|
string node_pubkey = 1;
|
|
string owner_pubkey = 2;
|
|
}
|
|
|
|
message NodeResourceReq {
|
|
string node_pubkey = 1;
|
|
uint32 avail_ports = 2;
|
|
uint32 avail_ipv4 = 3;
|
|
uint32 avail_ipv6 = 4;
|
|
uint32 avail_vcpus = 5;
|
|
uint32 avail_memory_mb = 6;
|
|
uint32 avail_storage_gb = 7;
|
|
uint32 max_ports_per_vm = 8;
|
|
}
|
|
|
|
message MeasurementArgs {
|
|
// this will be IP:Port of the dtrfs API
|
|
// actually not a measurement arg, but needed for the injector
|
|
string dtrfs_api_endpoint = 1;
|
|
repeated uint32 exposed_ports = 2;
|
|
string ovmf_hash = 5;
|
|
// This is needed to allow the CLI to build the kernel params from known data.
|
|
// The CLI will use the kernel params to get the measurement.
|
|
repeated NewVmRespIP ips = 6;
|
|
}
|
|
|
|
message NewVMReq {
|
|
string uuid = 1; // UUID is empty when CLI sends request; brain sets UUID
|
|
string hostname = 2;
|
|
string admin_pubkey = 3;
|
|
string node_pubkey = 4;
|
|
repeated uint32 extra_ports = 5;
|
|
bool public_ipv4 = 6;
|
|
bool public_ipv6 = 7;
|
|
uint32 disk_size_gb = 8;
|
|
uint32 vcpus = 9;
|
|
uint32 memory_mb = 10;
|
|
string kernel_url = 11;
|
|
string kernel_sha = 12;
|
|
string dtrfs_url = 13;
|
|
string dtrfs_sha = 14;
|
|
}
|
|
|
|
message NewVMResp {
|
|
string uuid = 1;
|
|
string error = 2;
|
|
MeasurementArgs args = 3;
|
|
}
|
|
|
|
message UpdateVMReq {
|
|
string uuid = 1;
|
|
uint32 disk_size_gb = 2;
|
|
uint32 vcpus = 3;
|
|
uint32 memory_mb = 4;
|
|
string kernel_url = 5;
|
|
string kernel_sha = 6;
|
|
string dtrfs_url = 7;
|
|
string dtrfs_sha = 8;
|
|
}
|
|
|
|
message UpdateVMResp {
|
|
string uuid = 1;
|
|
string error = 2;
|
|
MeasurementArgs args = 3;
|
|
}
|
|
|
|
message VMContract {
|
|
string uuid = 1;
|
|
string hostname = 2;
|
|
string admin_pubkey = 3;
|
|
string node_pubkey = 4;
|
|
repeated uint32 exposed_ports = 5;
|
|
string public_ipv4 = 6;
|
|
string public_ipv6 = 7;
|
|
uint32 disk_size_gb = 8;
|
|
uint32 vcpus = 9;
|
|
uint32 memory_mb = 10;
|
|
string kernel_sha = 11;
|
|
string dtrfs_sha = 12;
|
|
string created_at = 13;
|
|
string updated_at = 14;
|
|
}
|
|
|
|
message ListVMContractsReq {
|
|
string admin_pubkey = 1;
|
|
string node_pubkey = 2;
|
|
string uuid = 3;
|
|
}
|
|
|
|
message NewVmRespIP {
|
|
uint32 nic_index = 1;
|
|
string address = 2;
|
|
string mask = 3;
|
|
string gateway = 4;
|
|
}
|
|
|
|
message DeleteVMReq {
|
|
string uuid = 1;
|
|
}
|
|
|
|
service BrainDaemonService {
|
|
rpc RegisterNode (RegisterNodeReq) returns (Empty);
|
|
rpc SendNodeResources (stream NodeResourceReq) returns (Empty);
|
|
rpc GetNewVMReqs (NodePubkey) returns (stream NewVMReq);
|
|
rpc SendNewVMResp (stream NewVMResp) returns (Empty);
|
|
rpc GetDeleteVMReq (NodePubkey) returns (stream DeleteVMReq);
|
|
rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract);
|
|
rpc GetUpdateVMReq (NodePubkey) returns (stream UpdateVMReq);
|
|
rpc SendUpdateVMResp (stream UpdateVMResp) returns (Empty);
|
|
//rpc GetMeasurementArgs (ListVMContractsReq) returns (stream MeasurementArgs);
|
|
}
|
|
|
|
message NodeFilters {
|
|
uint32 free_ports = 1;
|
|
bool offers_ipv4 = 2;
|
|
bool offers_ipv6 = 3;
|
|
uint32 vcpus = 4;
|
|
uint32 memory_mb = 5;
|
|
uint32 storage_gb = 6;
|
|
string country = 7;
|
|
string region = 8;
|
|
string city = 9;
|
|
string ip = 10;
|
|
}
|
|
|
|
message NodeListResp {
|
|
string node_pubkey = 1;
|
|
string country = 2;
|
|
string region = 3;
|
|
string city = 4;
|
|
string ip = 5; // required for latency test
|
|
uint32 server_rating = 6;
|
|
uint32 provider_rating = 7;
|
|
}
|
|
|
|
service BrainCliService {
|
|
rpc CreateVMContract (NewVMReq) returns (NewVMResp);
|
|
rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract);
|
|
rpc ListNodes (NodeFilters) returns (stream NodeListResp);
|
|
rpc GetOneNode (NodeFilters) returns (NodeListResp);
|
|
rpc DeleteVM (DeleteVMReq) returns (Empty);
|
|
rpc UpdateVM (UpdateVMReq) returns (UpdateVMResp);
|
|
//rpc GetMeasurementArgs (ListVMContractsReq) returns (MeasurementArgs);
|
|
}
|