adapting CLI to the surreal brain

This commit is contained in:
ghe0 2025-04-23 04:13:07 +03:00
parent 58157e45fb
commit 51d50ff496
Signed by: ghe0
GPG Key ID: 451028EE56A0FBB4
5 changed files with 18 additions and 49 deletions

2
Cargo.lock generated

@ -1182,7 +1182,7 @@ dependencies = [
[[package]] [[package]]
name = "detee-shared" name = "detee-shared"
version = "0.1.0" version = "0.1.0"
source = "git+ssh://git@gitea.detee.cloud/testnet/proto.git?branch=main#b5289f1f5ba3ddae2ee066d6deb073ce92436b71" source = "git+ssh://git@gitea.detee.cloud/testnet/proto.git?branch=surreal_brain#fb38352e1b47837b14f32d8df5ae7f6b17202aae"
dependencies = [ dependencies = [
"bincode", "bincode",
"prost", "prost",

@ -34,7 +34,7 @@ tokio-retry = "0.3.0"
detee-sgx = { git = "ssh://git@gitea.detee.cloud/testnet/detee-sgx.git", branch = "hratls", features=["hratls", "qvl"] } detee-sgx = { git = "ssh://git@gitea.detee.cloud/testnet/detee-sgx.git", branch = "hratls", features=["hratls", "qvl"] }
shadow-rs = { version = "1.1.1", features = ["metadata"] } shadow-rs = { version = "1.1.1", features = ["metadata"] }
detee-shared = { git = "ssh://git@gitea.detee.cloud/testnet/proto.git", branch = "main" } detee-shared = { git = "ssh://git@gitea.detee.cloud/testnet/proto.git", branch = "surreal_brain" }
# detee-shared = { path = "../detee-shared" } # detee-shared = { path = "../detee-shared" }
[build-dependencies] [build-dependencies]

@ -309,9 +309,9 @@ impl Config {
pub fn get_brain_info() -> (String, String) { pub fn get_brain_info() -> (String, String) {
match Self::init_config().network.as_str() { match Self::init_config().network.as_str() {
"staging" => ("https://159.65.58.38:31337".to_string(), "staging-brain".to_string()), "staging" => ("https://184.107.169.199:49092".to_string(), "staging-brain".to_string()),
"localhost" => ("https://localhost:31337".to_string(), "staging-brain".to_string()), "localhost" => ("https://localhost:31337".to_string(), "staging-brain".to_string()),
_ => ("https://164.92.249.180:31337".to_string(), "testnet-brain".to_string()), _ => ("https://173.234.17.2:39477".to_string(), "testnet-brain".to_string()),
} }
} }

@ -49,18 +49,18 @@ impl crate::HumanOutput for VmContract {
"The VM {} has the UUID {}, and it runs on the node {}", "The VM {} has the UUID {}, and it runs on the node {}",
self.hostname, self.uuid, self.node_pubkey self.hostname, self.uuid, self.node_pubkey
); );
if self.public_ipv4.is_empty() { if self.vm_public_ipv4.is_empty() {
println!( println!(
"The VM has no public IPv4. The ports published by the VM are: {:?}", "The VM has no public IPv4. The ports mapped from the host to the VM are: {:?}",
self.exposed_ports self.mapped_ports
); );
} else { } else {
println!("The Public IPv4 address of the VM is: {}", self.public_ipv4); println!("The Public IPv4 address of the VM is: {}", self.vm_public_ipv4);
} }
if self.public_ipv6.is_empty() { if self.vm_public_ipv6.is_empty() {
println!("The VM does not have a public IPv6 address."); println!("The VM does not have a public IPv6 address.");
} else { } else {
println!("The Public IPv6 address of the VM is: {}", self.public_ipv6); println!("The Public IPv6 address of the VM is: {}", self.vm_public_ipv6);
} }
println!( println!(
"The VM has {} vCPUS, {}MB of memory and a disk of {} GB.", "The VM has {} vCPUS, {}MB of memory and a disk of {} GB.",

@ -64,20 +64,16 @@ impl TryFrom<grpc::proto::VmContract> for VmSshArgs {
args.user = "root".to_string(); args.user = "root".to_string();
args.key_path = args.key_path =
Config::init_config().get_ssh_pubkey()?.trim_end_matches(".pub").to_string(); Config::init_config().get_ssh_pubkey()?.trim_end_matches(".pub").to_string();
if !contract.public_ipv4.is_empty() { if !contract.vm_public_ipv4.is_empty() {
args.ip = contract.public_ipv4; args.ip = contract.vm_public_ipv4;
args.port = "22".to_string(); args.port = "22".to_string();
} else { } else {
args.port = contract.exposed_ports[0].to_string(); args.port = contract.mapped_ports[0].host_port.to_string();
log::info!( log::debug!(
"This VM does not have a public IP. Getting node IP for node {}", "This VM does not have a public IP. Using node public IP: {}",
contract.node_pubkey contract.node_ip
); );
let node = block_on(snp::grpc::get_one_node(proto::VmNodeFilters { args.ip = contract.node_ip;
node_pubkey: contract.node_pubkey.clone(),
..Default::default()
}))?;
args.ip = node.ip;
} }
Ok(args) Ok(args)
} }
@ -97,12 +93,6 @@ pub struct Dtrfs {
impl Dtrfs { impl Dtrfs {
pub fn print_dtrfs_list() -> Vec<Self> { pub fn print_dtrfs_list() -> Vec<Self> {
// let mut dtrfs_vec = Vec::new();
// dtrfs_vec.push(DEFAULT_DTRFS.clone());
// dtrfs_vec.push(ALTERNATIVE_INIT[0].clone());
// dtrfs_vec.push(ALTERNATIVE_INIT[1].clone());
// dtrfs_vec
vec![DEFAULT_DTRFS.clone(), ALTERNATIVE_INIT[0].clone(), ALTERNATIVE_INIT[1].clone()] vec![DEFAULT_DTRFS.clone(), ALTERNATIVE_INIT[0].clone(), ALTERNATIVE_INIT[1].clone()]
} }
@ -134,15 +124,6 @@ impl super::HumanOutput for Vec<Distro> {
impl Distro { impl Distro {
pub fn get_template_list() -> Vec<Self> { pub fn get_template_list() -> Vec<Self> {
// let mut distro_vec = Vec::new();
// distro_vec.push(DEFAULT_ARCHLINUX.clone());
// distro_vec.push(DEFAULT_UBUNTU.clone());
// distro_vec.push(DEFAULT_FEDORA.clone());
// distro_vec.push(ALTERNATIVE_DISTROS[0].clone());
// distro_vec.push(ALTERNATIVE_DISTROS[1].clone());
// distro_vec.push(ALTERNATIVE_DISTROS[2].clone());
// distro_vec
vec![ vec![
DEFAULT_ARCHLINUX.clone(), DEFAULT_ARCHLINUX.clone(),
DEFAULT_UBUNTU.clone(), DEFAULT_UBUNTU.clone(),
@ -203,25 +184,13 @@ fn display_mins(minutes: &u64) -> String {
impl From<proto::VmContract> for VmContract { impl From<proto::VmContract> for VmContract {
fn from(brain_contract: proto::VmContract) -> Self { fn from(brain_contract: proto::VmContract) -> Self {
let node_pubkey = brain_contract.node_pubkey.clone();
let location = match block_on(snp::grpc::get_one_node(proto::VmNodeFilters {
node_pubkey: node_pubkey.clone(),
..Default::default()
})) {
Ok(node) => format!("{}, {} ({})", node.city, node.region, node.country),
Err(e) => {
log::warn!("Could not get information about node {node_pubkey} fram brain: {e:?}");
String::new()
}
};
Self { Self {
uuid: brain_contract.uuid, uuid: brain_contract.uuid,
hostname: brain_contract.hostname, hostname: brain_contract.hostname,
vcpus: brain_contract.vcpus, vcpus: brain_contract.vcpus,
mem: brain_contract.memory_mb, mem: brain_contract.memory_mb,
disk: brain_contract.disk_size_gb, disk: brain_contract.disk_size_gb,
location, location: brain_contract.location,
cost_h: (brain_contract.nano_per_minute * 60) as f64 / 1_000_000_000.0, cost_h: (brain_contract.nano_per_minute * 60) as f64 / 1_000_000_000.0,
time_left: brain_contract.locked_nano / brain_contract.nano_per_minute, time_left: brain_contract.locked_nano / brain_contract.nano_per_minute,
} }