From fd4af065f6430efad82723e9c31132a544cde28a Mon Sep 17 00:00:00 2001 From: kieran Date: Tue, 26 Nov 2024 19:14:31 +0000 Subject: [PATCH] feat: return ip info --- lnvps_db/src/hydrate.rs | 6 ++++-- lnvps_db/src/lib.rs | 4 ++-- lnvps_db/src/model.rs | 4 ++++ lnvps_db/src/mysql.rs | 4 ++-- src/api.rs | 2 ++ src/provisioner/lnvps.rs | 4 ++-- src/worker.rs | 2 +- 7 files changed, 17 insertions(+), 9 deletions(-) diff --git a/lnvps_db/src/hydrate.rs b/lnvps_db/src/hydrate.rs index b93bb7f..fa47626 100644 --- a/lnvps_db/src/hydrate.rs +++ b/lnvps_db/src/hydrate.rs @@ -25,9 +25,11 @@ impl Hydrate for Vm { } async fn hydrate_down(&mut self, db: &Box) -> Result<()> { - let payments = db.list_vm_payment(self.id).await?; + //let payments = db.list_vm_payment(self.id).await?; + let ips = db.list_vm_ip_assignments(self.id).await?; - self.payments = Some(payments); + //self.payments = Some(payments); + self.ip_assignments = Some(ips); Ok(()) } } diff --git a/lnvps_db/src/lib.rs b/lnvps_db/src/lib.rs index 76ad201..474ab95 100644 --- a/lnvps_db/src/lib.rs +++ b/lnvps_db/src/lib.rs @@ -88,10 +88,10 @@ pub trait LNVpsDb: Sync + Send { async fn insert_vm_ip_assignment(&self, ip_assignment: &VmIpAssignment) -> Result; /// List VM ip assignments - async fn get_vm_ip_assignments(&self, vm_id: u64) -> Result>; + async fn list_vm_ip_assignments(&self, vm_id: u64) -> Result>; /// List VM ip assignments by IP range - async fn get_vm_ip_assignments_in_range(&self, range_id: u64) -> Result>; + async fn list_vm_ip_assignments_in_range(&self, range_id: u64) -> Result>; /// List payments by VM id async fn list_vm_payment(&self, vm_id: u64) -> Result>; diff --git a/lnvps_db/src/model.rs b/lnvps_db/src/model.rs index 27f929c..3f4fb93 100644 --- a/lnvps_db/src/model.rs +++ b/lnvps_db/src/model.rs @@ -217,9 +217,13 @@ pub struct Vm { #[sqlx(skip)] #[serde(skip_serializing_if = "Option::is_none")] pub ssh_key: Option, + #[sqlx(skip)] #[serde(skip_serializing_if = "Option::is_none")] pub payments: Option>, + #[sqlx(skip)] + #[serde(skip_serializing_if = "Option::is_none")] + pub ip_assignments: Option>, } #[derive(Serialize, Deserialize, FromRow, Clone, Debug)] diff --git a/lnvps_db/src/mysql.rs b/lnvps_db/src/mysql.rs index 2364bd6..baac1f6 100644 --- a/lnvps_db/src/mysql.rs +++ b/lnvps_db/src/mysql.rs @@ -232,7 +232,7 @@ impl LNVpsDb for LNVpsDbMysql { .try_get(0)?) } - async fn get_vm_ip_assignments(&self, vm_id: u64) -> Result> { + async fn list_vm_ip_assignments(&self, vm_id: u64) -> Result> { sqlx::query_as("select * from vm_ip_assignment where vm_id = ?") .bind(vm_id) .fetch_all(&self.db) @@ -240,7 +240,7 @@ impl LNVpsDb for LNVpsDbMysql { .map_err(Error::new) } - async fn get_vm_ip_assignments_in_range(&self, range_id: u64) -> Result> { + async fn list_vm_ip_assignments_in_range(&self, range_id: u64) -> Result> { sqlx::query_as("select * from vm_ip_assignment where ip_range_id = ?") .bind(range_id) .fetch_all(&self.db) diff --git a/src/api.rs b/src/api.rs index 03de2fe..6f5f036 100644 --- a/src/api.rs +++ b/src/api.rs @@ -80,6 +80,7 @@ async fn v1_list_vms( let mut ret = vec![]; for mut vm in vms { vm.hydrate_up(db).await?; + vm.hydrate_down(db).await?; if let Some(t) = &mut vm.template { t.hydrate_up(db).await?; } @@ -105,6 +106,7 @@ async fn v1_get_vm( return ApiData::err("VM doesnt belong to you"); } vm.hydrate_up(db).await?; + vm.hydrate_down(db).await?; if let Some(t) = &mut vm.template { t.hydrate_up(db).await?; } diff --git a/src/provisioner/lnvps.rs b/src/provisioner/lnvps.rs index 29f156b..e034a63 100644 --- a/src/provisioner/lnvps.rs +++ b/src/provisioner/lnvps.rs @@ -195,7 +195,7 @@ impl Provisioner for LNVpsProvisioner { async fn allocate_ips(&self, vm_id: u64) -> Result> { let mut vm = self.db.get_vm(vm_id).await?; - let ips = self.db.get_vm_ip_assignments(vm.id).await?; + let ips = self.db.list_vm_ip_assignments(vm.id).await?; if !ips.is_empty() { bail!("IP resources are already assigned"); @@ -217,7 +217,7 @@ impl Provisioner for LNVpsProvisioner { // TODO: pick round-robin ranges for range in ip_ranges { let range_cidr: IpNetwork = range.cidr.parse()?; - let ips = self.db.get_vm_ip_assignments_in_range(range.id).await?; + let ips = self.db.list_vm_ip_assignments_in_range(range.id).await?; let ips: HashSet = ips.iter().map(|i| i.ip.parse().unwrap()).collect(); // pick an IP at random diff --git a/src/worker.rs b/src/worker.rs index ad0e562..e326f99 100644 --- a/src/worker.rs +++ b/src/worker.rs @@ -57,7 +57,7 @@ impl Worker { if self.read_only { bail!("Cant spawn VM's in read-only mode"); } - let mut ips = self.db.get_vm_ip_assignments(vm.id).await?; + let mut ips = self.db.list_vm_ip_assignments(vm.id).await?; if ips.is_empty() { ips = self.provisioner.allocate_ips(vm.id).await?; }