rename structs so that they say "VM"
This commit is contained in:
parent
0ed21fdf98
commit
76c88810a6
2
build.rs
2
build.rs
@ -1,6 +1,6 @@
|
||||
fn main() {
|
||||
tonic_build::configure()
|
||||
.build_server(true)
|
||||
.compile_protos(&["snp.proto"], &["proto"])
|
||||
.compile_protos(&["vm.proto"], &["proto"])
|
||||
.unwrap_or_else(|e| panic!("Failed to compile protos {:?}", e));
|
||||
}
|
||||
|
50
src/grpc.rs
50
src/grpc.rs
@ -1,8 +1,8 @@
|
||||
use crate::global::*;
|
||||
use crate::snp_proto::DaemonMessage;
|
||||
use crate::snp_proto::VmDaemonMessage;
|
||||
use anyhow::Result;
|
||||
use log::{debug, info, warn};
|
||||
use snp_proto::{brain_daemon_client::BrainDaemonClient, BrainMessage, Contract, RegisterNodeReq};
|
||||
use snp_proto::{brain_vm_daemon_client::BrainVmDaemonClient, BrainVmMessage, VmContract, RegisterVmNodeReq};
|
||||
use tokio::{
|
||||
sync::mpsc::{Receiver, Sender},
|
||||
task::JoinSet,
|
||||
@ -11,34 +11,34 @@ use tokio_stream::{wrappers::ReceiverStream, StreamExt};
|
||||
use tonic::transport::Channel;
|
||||
|
||||
pub mod snp_proto {
|
||||
tonic::include_proto!("snp_proto");
|
||||
tonic::include_proto!("vm_proto");
|
||||
}
|
||||
|
||||
impl From<snp_proto::NewVmResp> for snp_proto::DaemonMessage {
|
||||
impl From<snp_proto::NewVmResp> for snp_proto::VmDaemonMessage {
|
||||
fn from(value: snp_proto::NewVmResp) -> Self {
|
||||
snp_proto::DaemonMessage { msg: Some(snp_proto::daemon_message::Msg::NewVmResp(value)) }
|
||||
snp_proto::VmDaemonMessage { msg: Some(snp_proto::vm_daemon_message::Msg::NewVmResp(value)) }
|
||||
}
|
||||
}
|
||||
|
||||
impl From<snp_proto::UpdateVmResp> for snp_proto::DaemonMessage {
|
||||
impl From<snp_proto::UpdateVmResp> for snp_proto::VmDaemonMessage {
|
||||
fn from(value: snp_proto::UpdateVmResp) -> Self {
|
||||
snp_proto::DaemonMessage { msg: Some(snp_proto::daemon_message::Msg::UpdateVmResp(value)) }
|
||||
snp_proto::VmDaemonMessage { msg: Some(snp_proto::vm_daemon_message::Msg::UpdateVmResp(value)) }
|
||||
}
|
||||
}
|
||||
|
||||
impl From<snp_proto::NodeResources> for snp_proto::DaemonMessage {
|
||||
fn from(value: snp_proto::NodeResources) -> Self {
|
||||
snp_proto::DaemonMessage { msg: Some(snp_proto::daemon_message::Msg::NodeResources(value)) }
|
||||
impl From<snp_proto::VmNodeResources> for snp_proto::VmDaemonMessage {
|
||||
fn from(value: snp_proto::VmNodeResources) -> Self {
|
||||
snp_proto::VmDaemonMessage { msg: Some(snp_proto::vm_daemon_message::Msg::VmNodeResources(value)) }
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn register_node(config: &crate::config::Config) -> Result<Vec<Contract>> {
|
||||
pub async fn register_node(config: &crate::config::Config) -> Result<Vec<VmContract>> {
|
||||
use tonic::metadata::AsciiMetadataValue;
|
||||
use tonic::Request;
|
||||
let mut client = BrainDaemonClient::connect(config.brain_url.clone()).await?;
|
||||
let mut client = BrainVmDaemonClient::connect(config.brain_url.clone()).await?;
|
||||
debug!("Starting node registration...");
|
||||
let ip_info = IP_INFO.clone();
|
||||
let req = RegisterNodeReq {
|
||||
let req = RegisterVmNodeReq {
|
||||
node_pubkey: PUBLIC_KEY.clone(),
|
||||
owner_pubkey: config.owner_wallet.clone(),
|
||||
main_ip: ip_info.ip,
|
||||
@ -60,7 +60,7 @@ pub async fn register_node(config: &crate::config::Config) -> Result<Vec<Contrac
|
||||
req.metadata_mut().insert("request-signature", signature);
|
||||
|
||||
let mut contracts = Vec::new();
|
||||
let mut grpc_stream = client.register_node(req).await?.into_inner();
|
||||
let mut grpc_stream = client.register_vm_node(req).await?.into_inner();
|
||||
while let Some(stream_update) = grpc_stream.next().await {
|
||||
match stream_update {
|
||||
Ok(node) => {
|
||||
@ -85,9 +85,9 @@ fn sign_stream_auth(contracts: Vec<String>) -> Result<snp_proto::DaemonStreamAut
|
||||
}
|
||||
|
||||
async fn receive_messages(
|
||||
mut client: BrainDaemonClient<Channel>,
|
||||
mut client: BrainVmDaemonClient<Channel>,
|
||||
contracts: Vec<String>,
|
||||
tx: Sender<BrainMessage>,
|
||||
tx: Sender<BrainVmMessage>,
|
||||
) -> Result<()> {
|
||||
debug!("starting to listen for messages from brain");
|
||||
let mut grpc_stream = client.brain_messages(sign_stream_auth(contracts)?).await?.into_inner();
|
||||
@ -107,15 +107,15 @@ async fn receive_messages(
|
||||
}
|
||||
|
||||
async fn send_messages(
|
||||
mut client: BrainDaemonClient<Channel>,
|
||||
mut client: BrainVmDaemonClient<Channel>,
|
||||
contracts: Vec<String>,
|
||||
rx: Receiver<DaemonMessage>,
|
||||
tx: Sender<DaemonMessage>,
|
||||
rx: Receiver<VmDaemonMessage>,
|
||||
tx: Sender<VmDaemonMessage>,
|
||||
) -> Result<()> {
|
||||
debug!("starting daemon message stream to brain");
|
||||
let rx_stream = ReceiverStream::new(rx);
|
||||
tx.send(DaemonMessage {
|
||||
msg: Some(snp_proto::daemon_message::Msg::Auth(sign_stream_auth(contracts)?)),
|
||||
tx.send(VmDaemonMessage {
|
||||
msg: Some(snp_proto::vm_daemon_message::Msg::Auth(sign_stream_auth(contracts)?)),
|
||||
})
|
||||
.await?;
|
||||
client.daemon_messages(rx_stream).await?;
|
||||
@ -126,13 +126,13 @@ async fn send_messages(
|
||||
pub struct ConnectionData {
|
||||
pub contracts: Vec<String>,
|
||||
pub brain_url: String,
|
||||
pub brain_msg_tx: Sender<BrainMessage>,
|
||||
pub daemon_msg_rx: Receiver<DaemonMessage>,
|
||||
pub daemon_msg_tx: Sender<DaemonMessage>,
|
||||
pub brain_msg_tx: Sender<BrainVmMessage>,
|
||||
pub daemon_msg_rx: Receiver<VmDaemonMessage>,
|
||||
pub daemon_msg_tx: Sender<VmDaemonMessage>,
|
||||
}
|
||||
|
||||
pub async fn connect_and_run(cd: ConnectionData) -> Result<()> {
|
||||
let client = BrainDaemonClient::connect(cd.brain_url).await?;
|
||||
let client = BrainVmDaemonClient::connect(cd.brain_url).await?;
|
||||
let mut streaming_tasks = JoinSet::new();
|
||||
|
||||
streaming_tasks.spawn(receive_messages(client.clone(), cd.contracts.clone(), cd.brain_msg_tx));
|
||||
|
18
src/main.rs
18
src/main.rs
@ -14,8 +14,8 @@ use tokio::{
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct VMHandler {
|
||||
receiver: Receiver<snp_proto::BrainMessage>,
|
||||
sender: Sender<snp_proto::DaemonMessage>,
|
||||
receiver: Receiver<snp_proto::BrainVmMessage>,
|
||||
sender: Sender<snp_proto::VmDaemonMessage>,
|
||||
config: Config,
|
||||
res: state::Resources,
|
||||
}
|
||||
@ -23,8 +23,8 @@ struct VMHandler {
|
||||
#[allow(dead_code)]
|
||||
impl VMHandler {
|
||||
fn new(
|
||||
receiver: Receiver<snp_proto::BrainMessage>,
|
||||
sender: Sender<snp_proto::DaemonMessage>,
|
||||
receiver: Receiver<snp_proto::BrainVmMessage>,
|
||||
sender: Sender<snp_proto::VmDaemonMessage>,
|
||||
) -> Self {
|
||||
let config = match Config::load_from_disk(DAEMON_CONFIG_PATH) {
|
||||
Ok(config) => config,
|
||||
@ -68,7 +68,7 @@ impl VMHandler {
|
||||
}
|
||||
}
|
||||
let avail_storage_gb = avail_storage_gb as u32;
|
||||
let res = snp_proto::NodeResources {
|
||||
let res = snp_proto::VmNodeResources {
|
||||
node_pubkey: PUBLIC_KEY.clone(),
|
||||
avail_ports: (self.config.public_port_range.len() - self.res.reserved_ports.len())
|
||||
as u32,
|
||||
@ -180,15 +180,15 @@ impl VMHandler {
|
||||
self.send_node_resources().await;
|
||||
while let Some(brain_msg) = self.receiver.recv().await {
|
||||
match brain_msg.msg {
|
||||
Some(snp_proto::brain_message::Msg::NewVmReq(new_vm_req)) => {
|
||||
Some(snp_proto::brain_vm_message::Msg::NewVmReq(new_vm_req)) => {
|
||||
self.handle_new_vm_req(new_vm_req).await;
|
||||
}
|
||||
Some(snp_proto::brain_message::Msg::UpdateVmReq(update_vm_req)) => {
|
||||
Some(snp_proto::brain_vm_message::Msg::UpdateVmReq(update_vm_req)) => {
|
||||
if let Err(e) = self.handle_update_vm_req(update_vm_req).await {
|
||||
log::error!("Could not update vm: {e:?}");
|
||||
}
|
||||
}
|
||||
Some(snp_proto::brain_message::Msg::DeleteVm(delete_vm_req)) => {
|
||||
Some(snp_proto::brain_vm_message::Msg::DeleteVm(delete_vm_req)) => {
|
||||
let uuid = delete_vm_req.uuid.clone();
|
||||
if let Err(e) = self.handle_delete_vm(delete_vm_req) {
|
||||
log::error!("Could not delete vm {uuid}: {e:?}");
|
||||
@ -201,7 +201,7 @@ impl VMHandler {
|
||||
}
|
||||
}
|
||||
|
||||
fn clear_deleted_contracts(&mut self, contracts: Vec<snp_proto::Contract>) {
|
||||
fn clear_deleted_contracts(&mut self, contracts: Vec<snp_proto::VmContract>) {
|
||||
for uuid in self.res.existing_vms.clone() {
|
||||
if contracts.iter().find(|c| c.uuid == uuid).is_none() {
|
||||
info!("VM {uuid} exists locally but not found in brain. Deleting...");
|
||||
|
@ -1,5 +1,5 @@
|
||||
syntax = "proto3";
|
||||
package snp_proto;
|
||||
package vm_proto;
|
||||
|
||||
message Empty {
|
||||
}
|
||||
@ -13,7 +13,7 @@ message AccountBalance {
|
||||
uint64 tmp_locked = 2;
|
||||
}
|
||||
|
||||
message Contract {
|
||||
message VmContract {
|
||||
string uuid = 1;
|
||||
string hostname = 2;
|
||||
string admin_pubkey = 3;
|
||||
@ -53,7 +53,7 @@ message MeasurementIP {
|
||||
}
|
||||
|
||||
// This should also include a block hash or similar, for auth
|
||||
message RegisterNodeReq {
|
||||
message RegisterVmNodeReq {
|
||||
string node_pubkey = 1;
|
||||
string owner_pubkey = 2;
|
||||
string main_ip = 3;
|
||||
@ -64,7 +64,7 @@ message RegisterNodeReq {
|
||||
uint64 price = 7;
|
||||
}
|
||||
|
||||
message NodeResources {
|
||||
message VmNodeResources {
|
||||
string node_pubkey = 1;
|
||||
uint32 avail_ports = 2;
|
||||
uint32 avail_ipv4 = 3;
|
||||
@ -123,7 +123,7 @@ message DeleteVmReq {
|
||||
string admin_pubkey = 2;
|
||||
}
|
||||
|
||||
message BrainMessage {
|
||||
message BrainVmMessage {
|
||||
oneof Msg {
|
||||
NewVmReq new_vm_req = 1;
|
||||
UpdateVmReq update_vm_req = 2;
|
||||
@ -138,28 +138,28 @@ message DaemonStreamAuth {
|
||||
string signature = 4;
|
||||
}
|
||||
|
||||
message DaemonMessage {
|
||||
message VmDaemonMessage {
|
||||
oneof Msg {
|
||||
DaemonStreamAuth auth = 1;
|
||||
NewVmResp new_vm_resp = 2;
|
||||
UpdateVmResp update_vm_resp = 3;
|
||||
NodeResources node_resources = 4;
|
||||
VmNodeResources vm_node_resources = 4;
|
||||
}
|
||||
}
|
||||
|
||||
service BrainDaemon {
|
||||
rpc RegisterNode (RegisterNodeReq) returns (stream Contract);
|
||||
rpc BrainMessages (DaemonStreamAuth) returns (stream BrainMessage);
|
||||
rpc DaemonMessages (stream DaemonMessage) returns (Empty);
|
||||
service BrainVmDaemon {
|
||||
rpc RegisterVmNode (RegisterVmNodeReq) returns (stream VmContract);
|
||||
rpc BrainMessages (DaemonStreamAuth) returns (stream BrainVmMessage);
|
||||
rpc DaemonMessages (stream VmDaemonMessage) returns (Empty);
|
||||
}
|
||||
|
||||
message ListContractsReq {
|
||||
message ListVmContractsReq {
|
||||
string admin_pubkey = 1;
|
||||
string node_pubkey = 2;
|
||||
string uuid = 3;
|
||||
}
|
||||
|
||||
message NodeFilters {
|
||||
message VmNodeFilters {
|
||||
uint32 free_ports = 1;
|
||||
bool offers_ipv4 = 2;
|
||||
bool offers_ipv6 = 3;
|
||||
@ -173,7 +173,7 @@ message NodeFilters {
|
||||
string node_pubkey = 11;
|
||||
}
|
||||
|
||||
message NodeListResp {
|
||||
message VmNodeListResp {
|
||||
string node_pubkey = 1;
|
||||
string country = 2;
|
||||
string region = 3;
|
||||
@ -191,14 +191,28 @@ message ExtendVmReq {
|
||||
uint64 locked_nano = 3;
|
||||
}
|
||||
|
||||
message AirdropReq {
|
||||
string pubkey = 1;
|
||||
uint64 tokens = 2;
|
||||
}
|
||||
|
||||
message Account {
|
||||
string pubkey = 1;
|
||||
uint64 balance = 2;
|
||||
uint64 tmp_locked = 3;
|
||||
}
|
||||
|
||||
service BrainCli {
|
||||
rpc GetAirdrop (Pubkey) returns (Empty);
|
||||
rpc GetBalance (Pubkey) returns (AccountBalance);
|
||||
rpc NewVm (NewVmReq) returns (NewVmResp);
|
||||
rpc ListContracts (ListContractsReq) returns (stream Contract);
|
||||
rpc ListNodes (NodeFilters) returns (stream NodeListResp);
|
||||
rpc GetOneNode (NodeFilters) returns (NodeListResp);
|
||||
rpc ListVmContracts (ListVmContractsReq) returns (stream VmContract);
|
||||
rpc ListVmNodes (VmNodeFilters) returns (stream VmNodeListResp);
|
||||
rpc GetOneVmNode (VmNodeFilters) returns (VmNodeListResp);
|
||||
rpc DeleteVm (DeleteVmReq) returns (Empty);
|
||||
rpc UpdateVm (UpdateVmReq) returns (UpdateVmResp);
|
||||
rpc ExtendVm (ExtendVmReq) returns (Empty);
|
||||
// admin commands
|
||||
rpc Airdrop (AirdropReq) returns (Empty);
|
||||
rpc ListAllVmContracts (Empty) returns (stream VmContract);
|
||||
rpc ListAccounts (Empty) returns (stream Account);
|
||||
}
|
Loading…
Reference in New Issue
Block a user