vm deployment working
there still are bugs on how it manages tables in the DB
This commit is contained in:
parent
512dad5146
commit
b5332316c2
@ -33,7 +33,6 @@ DEFINE FIELD dtrfs_url ON TABLE new_vm_req TYPE string;
|
|||||||
DEFINE FIELD kernel_sha ON TABLE new_vm_req TYPE string;
|
DEFINE FIELD kernel_sha ON TABLE new_vm_req TYPE string;
|
||||||
DEFINE FIELD kernel_url ON TABLE new_vm_req TYPE string;
|
DEFINE FIELD kernel_url ON TABLE new_vm_req TYPE string;
|
||||||
DEFINE FIELD created_at ON TABLE new_vm_req TYPE datetime;
|
DEFINE FIELD created_at ON TABLE new_vm_req TYPE datetime;
|
||||||
DEFINE FIELD updated_at ON TABLE new_vm_req TYPE datetime;
|
|
||||||
DEFINE FIELD price_per_unit ON TABLE new_vm_req TYPE int;
|
DEFINE FIELD price_per_unit ON TABLE new_vm_req TYPE int;
|
||||||
DEFINE FIELD locked_nano ON TABLE new_vm_req TYPE int;
|
DEFINE FIELD locked_nano ON TABLE new_vm_req TYPE int;
|
||||||
DEFINE FIELD error ON TABLE new_vm_req TYPE string;
|
DEFINE FIELD error ON TABLE new_vm_req TYPE string;
|
||||||
|
@ -10,12 +10,12 @@ server="$1"
|
|||||||
}
|
}
|
||||||
|
|
||||||
[[ "$server" == "testnet" ]] && server="164.92.249.180"
|
[[ "$server" == "testnet" ]] && server="164.92.249.180"
|
||||||
[[ "$server" == "staging" ]] && server="registry.detee.ltd"
|
[[ "$server" == "staging" ]] && server="149.36.48.100"
|
||||||
|
|
||||||
cargo build --release
|
cargo build --release --bin brain
|
||||||
ssh $server systemctl stop detee-brain-mock.service
|
ssh $server systemctl stop detee-brain.service
|
||||||
scp target/release/brain-mock $server:/usr/local/bin/brain-mock
|
scp target/release/brain $server:/usr/local/bin/detee-brain
|
||||||
ssh $server mkdir -p /etc/detee/brain-mock/
|
ssh $server mkdir -p /etc/detee/brain/
|
||||||
scp scripts/detee-brain-mock.service $server:/etc/systemd/system/detee-brain-mock.service
|
scp scripts/detee-brain.service $server:/etc/systemd/system/detee-brain.service
|
||||||
ssh $server systemctl daemon-reload
|
ssh $server systemctl daemon-reload
|
||||||
ssh $server systemctl start detee-brain-mock.service
|
ssh $server systemctl start detee-brain.service
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=DeTEE Brain Mock
|
Description=DeTEE Brain
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
ExecStart=/usr/local/bin/brain-mock
|
ExecStart=/usr/local/bin/detee-brain
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
[Install]
|
[Install]
|
@ -1,8 +1,10 @@
|
|||||||
use detee_shared::general_proto::brain_general_cli_server::BrainGeneralCliServer;
|
use detee_shared::general_proto::brain_general_cli_server::BrainGeneralCliServer;
|
||||||
use detee_shared::vm_proto::brain_vm_cli_server::BrainVmCliServer;
|
use detee_shared::vm_proto::brain_vm_cli_server::BrainVmCliServer;
|
||||||
|
use detee_shared::vm_proto::brain_vm_daemon_server::BrainVmDaemonServer;
|
||||||
|
use surreal_brain::db;
|
||||||
use surreal_brain::grpc::BrainGeneralCliForReal;
|
use surreal_brain::grpc::BrainGeneralCliForReal;
|
||||||
use surreal_brain::grpc::BrainVmCliForReal;
|
use surreal_brain::grpc::BrainVmCliForReal;
|
||||||
use surreal_brain::db;
|
use surreal_brain::grpc::BrainVmDaemonForReal;
|
||||||
use tonic::transport::{Identity, Server, ServerTlsConfig};
|
use tonic::transport::{Identity, Server, ServerTlsConfig};
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
@ -11,17 +13,19 @@ async fn main() {
|
|||||||
db::init().await.unwrap();
|
db::init().await.unwrap();
|
||||||
let addr = "0.0.0.0:31337".parse().unwrap();
|
let addr = "0.0.0.0:31337".parse().unwrap();
|
||||||
|
|
||||||
|
let snp_daemon_server = BrainVmDaemonServer::new(BrainVmDaemonForReal {});
|
||||||
let snp_cli_server = BrainVmCliServer::new(BrainVmCliForReal {});
|
let snp_cli_server = BrainVmCliServer::new(BrainVmCliForReal {});
|
||||||
let general_service_server = BrainGeneralCliServer::new(BrainGeneralCliForReal {});
|
let general_service_server = BrainGeneralCliServer::new(BrainGeneralCliForReal {});
|
||||||
|
|
||||||
let cert = std::fs::read_to_string("./tmp/brain-crt.pem").unwrap();
|
let cert = std::fs::read_to_string("/etc/detee/brain/brain-crt.pem").unwrap();
|
||||||
let key = std::fs::read_to_string("./tmp/brain-key.pem").unwrap();
|
let key = std::fs::read_to_string("/etc/detee/brain/brain-key.pem").unwrap();
|
||||||
|
|
||||||
let identity = Identity::from_pem(cert, key);
|
let identity = Identity::from_pem(cert, key);
|
||||||
|
|
||||||
Server::builder()
|
Server::builder()
|
||||||
.tls_config(ServerTlsConfig::new().identity(identity))
|
.tls_config(ServerTlsConfig::new().identity(identity))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
.add_service(snp_daemon_server)
|
||||||
.add_service(snp_cli_server)
|
.add_service(snp_cli_server)
|
||||||
.add_service(general_service_server)
|
.add_service(general_service_server)
|
||||||
.serve(addr)
|
.serve(addr)
|
||||||
|
19
src/db.rs
19
src/db.rs
@ -206,16 +206,16 @@ impl VmNodeWithReports {
|
|||||||
filters.storage_gb
|
filters.storage_gb
|
||||||
);
|
);
|
||||||
if !filters.city.is_empty() {
|
if !filters.city.is_empty() {
|
||||||
query += &format!(r#"&& city = "{}"\n"#, filters.city);
|
query += &format!("&& city = '{}' ", filters.city);
|
||||||
}
|
}
|
||||||
if !filters.region.is_empty() {
|
if !filters.region.is_empty() {
|
||||||
query += &format!(r#"&& region = "{}"\n"#, filters.region);
|
query += &format!("&& region = '{}' ", filters.region);
|
||||||
}
|
}
|
||||||
if !filters.country.is_empty() {
|
if !filters.country.is_empty() {
|
||||||
query += &format!(r#"&& country = "{}"\n"#, filters.country);
|
query += &format!("&& country = '{}' ", filters.country);
|
||||||
}
|
}
|
||||||
if !filters.ip.is_empty() {
|
if !filters.ip.is_empty() {
|
||||||
query += &format!(r#"&& ip = "{}"\n"#, filters.ip);
|
query += &format!("&& ip = '{}' ", filters.ip);
|
||||||
}
|
}
|
||||||
query += ";";
|
query += ";";
|
||||||
let mut result =
|
let mut result =
|
||||||
@ -284,7 +284,7 @@ impl NewVmReq {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn submit(self) -> Result<(), Error> {
|
pub async fn submit(self) -> Result<(), Error> {
|
||||||
let _: Option<Self> = DB.create(self.id.clone()).content(self).await?;
|
let _: Vec<Self> = DB.insert(NEW_VM_REQ).relation(self).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -305,13 +305,14 @@ impl NewVmResp {
|
|||||||
"live select * from measurement_args where id = measurement_args:{vm_id};"
|
"live select * from measurement_args where id = measurement_args:{vm_id};"
|
||||||
))
|
))
|
||||||
.await?;
|
.await?;
|
||||||
let mut live_stream1 = resp.stream::<Notification<NewVmReq>>(0)?;
|
let mut new_vm_stream = resp.stream::<Notification<NewVmReq>>(0)?;
|
||||||
let mut live_stream2 =
|
let mut args_stream =
|
||||||
resp.stream::<Notification<detee_shared::snp::pb::vm_proto::MeasurementArgs>>(1)?;
|
resp.stream::<Notification<detee_shared::snp::pb::vm_proto::MeasurementArgs>>(1)?;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
tokio::select! {
|
tokio::select! {
|
||||||
new_vm_req_notif = live_stream1.next() => {
|
new_vm_req_notif = new_vm_stream.next() => {
|
||||||
|
log::debug!("Got stream 1...");
|
||||||
if let Some(new_vm_req_notif) = new_vm_req_notif {
|
if let Some(new_vm_req_notif) = new_vm_req_notif {
|
||||||
match new_vm_req_notif {
|
match new_vm_req_notif {
|
||||||
Ok(new_vm_req_notif) => {
|
Ok(new_vm_req_notif) => {
|
||||||
@ -328,7 +329,7 @@ impl NewVmResp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
args_notif = live_stream2.next() => {
|
args_notif = args_stream.next() => {
|
||||||
if let Some(args_notif) = args_notif {
|
if let Some(args_notif) = args_notif {
|
||||||
match args_notif {
|
match args_notif {
|
||||||
Ok(args_notif) => {
|
Ok(args_notif) => {
|
||||||
|
17
src/grpc.rs
17
src/grpc.rs
@ -35,9 +35,9 @@ impl From<NewVmReq> for db::NewVmReq {
|
|||||||
fn from(new_vm_req: NewVmReq) -> Self {
|
fn from(new_vm_req: NewVmReq) -> Self {
|
||||||
Self {
|
Self {
|
||||||
id: RecordId::from((db::NEW_VM_REQ, nanoid!(40, &db::ID_ALPHABET))),
|
id: RecordId::from((db::NEW_VM_REQ, nanoid!(40, &db::ID_ALPHABET))),
|
||||||
hostname: new_vm_req.hostname,
|
|
||||||
admin: RecordId::from((db::ACCOUNT, new_vm_req.admin_pubkey)),
|
admin: RecordId::from((db::ACCOUNT, new_vm_req.admin_pubkey)),
|
||||||
vm_node: RecordId::from((db::VM_NODE, new_vm_req.node_pubkey)),
|
vm_node: RecordId::from((db::VM_NODE, new_vm_req.node_pubkey)),
|
||||||
|
hostname: new_vm_req.hostname,
|
||||||
extra_ports: new_vm_req.extra_ports,
|
extra_ports: new_vm_req.extra_ports,
|
||||||
public_ipv4: new_vm_req.public_ipv4,
|
public_ipv4: new_vm_req.public_ipv4,
|
||||||
public_ipv6: new_vm_req.public_ipv6,
|
public_ipv6: new_vm_req.public_ipv6,
|
||||||
@ -235,7 +235,7 @@ impl From<VmNodeResources> for db::VmNodeResources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct BrainVmDaemonForReal {}
|
pub struct BrainVmDaemonForReal {}
|
||||||
|
|
||||||
#[tonic::async_trait]
|
#[tonic::async_trait]
|
||||||
impl BrainVmDaemon for BrainVmDaemonForReal {
|
impl BrainVmDaemon for BrainVmDaemonForReal {
|
||||||
@ -676,13 +676,12 @@ impl BrainVmCli for BrainVmCliForReal {
|
|||||||
) -> Result<Response<VmNodeListResp>, Status> {
|
) -> Result<Response<VmNodeListResp>, Status> {
|
||||||
let req = check_sig_from_req(req)?;
|
let req = check_sig_from_req(req)?;
|
||||||
info!("Unknown CLI requested ListVmNodesStream: {req:?}");
|
info!("Unknown CLI requested ListVmNodesStream: {req:?}");
|
||||||
todo!();
|
// TODO: optimize this query so that it gets only one node
|
||||||
// match self.data.get_one_node_by_filters(&req) {
|
let nodes = db::VmNodeWithReports::find_by_filters(req).await?;
|
||||||
// Some(node) => Ok(Response::new(node.into())),
|
if let Some(node) = nodes.into_iter().next() {
|
||||||
// None => Err(Status::not_found(
|
return Ok(Response::new(node.into()));
|
||||||
// "Could not find any node based on your search criteria",
|
}
|
||||||
// )),
|
Err(Status::not_found("Could not find any node based on your search criteria"))
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user