This commit is contained in:
@ -151,6 +151,24 @@ pub enum OsDistribution {
|
|||||||
RedHatEnterprise = 7,
|
RedHatEnterprise = 7,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl FromStr for OsDistribution {
|
||||||
|
type Err = anyhow::Error;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||||
|
match s.to_lowercase().as_str() {
|
||||||
|
"ubuntu" => Ok(OsDistribution::Ubuntu),
|
||||||
|
"debian" => Ok(OsDistribution::Debian),
|
||||||
|
"centos" => Ok(OsDistribution::CentOS),
|
||||||
|
"fedora" => Ok(OsDistribution::Fedora),
|
||||||
|
"freebsd" => Ok(OsDistribution::FreeBSD),
|
||||||
|
"opensuse" => Ok(OsDistribution::OpenSUSE),
|
||||||
|
"archlinux" => Ok(OsDistribution::ArchLinux),
|
||||||
|
"redhatenterprise" => Ok(OsDistribution::RedHatEnterprise),
|
||||||
|
_ => Err(anyhow!("unknown distribution {}", s)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// OS Images are templates which are used as a basis for
|
/// OS Images are templates which are used as a basis for
|
||||||
/// provisioning new vms
|
/// provisioning new vms
|
||||||
#[derive(FromRow, Clone, Debug)]
|
#[derive(FromRow, Clone, Debug)]
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
use crate::dvm::{build_status_for_job, DVMHandler, DVMJobRequest};
|
use crate::dvm::{build_status_for_job, DVMHandler, DVMJobRequest};
|
||||||
use crate::provisioner::LNVpsProvisioner;
|
use crate::provisioner::LNVpsProvisioner;
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use lnvps_db::{DiskInterface, DiskType, LNVpsDb, PaymentMethod, UserSshKey, VmCustomTemplate};
|
use lnvps_db::{
|
||||||
|
DiskInterface, DiskType, LNVpsDb, OsDistribution, PaymentMethod, UserSshKey, VmCustomTemplate,
|
||||||
|
};
|
||||||
use nostr::prelude::DataVendingMachineStatus;
|
use nostr::prelude::DataVendingMachineStatus;
|
||||||
use nostr::Tag;
|
use nostr::Tag;
|
||||||
use nostr_sdk::Client;
|
use nostr_sdk::Client;
|
||||||
@ -54,6 +56,14 @@ impl DVMHandler for LnvpsDvm {
|
|||||||
.get("ssh_key")
|
.get("ssh_key")
|
||||||
.context("missing ssh_key parameter")?;
|
.context("missing ssh_key parameter")?;
|
||||||
let ssh_key_name = request.params.get("ssh_key_name");
|
let ssh_key_name = request.params.get("ssh_key_name");
|
||||||
|
let os_image = request
|
||||||
|
.params
|
||||||
|
.get("os_image")
|
||||||
|
.context("missing os_image parameter")?;
|
||||||
|
let os_version = request
|
||||||
|
.params
|
||||||
|
.get("os_version")
|
||||||
|
.context("missing os_version parameter")?;
|
||||||
let region = request.params.get("region");
|
let region = request.params.get("region");
|
||||||
|
|
||||||
let db = provisioner.get_db();
|
let db = provisioner.get_db();
|
||||||
@ -112,8 +122,16 @@ impl DVMHandler for LnvpsDvm {
|
|||||||
db.insert_user_ssh_key(&new_key).await?
|
db.insert_user_ssh_key(&new_key).await?
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let image = OsDistribution::from_str(os_image)?;
|
||||||
|
let image = db
|
||||||
|
.list_os_image()
|
||||||
|
.await?
|
||||||
|
.into_iter()
|
||||||
|
.find(|i| i.distribution == image && i.version == *os_version)
|
||||||
|
.context("no os image found")?;
|
||||||
|
|
||||||
let vm = provisioner
|
let vm = provisioner
|
||||||
.provision_custom(uid, template, 0, ssh_key_id, None)
|
.provision_custom(uid, template, image.id, ssh_key_id, None)
|
||||||
.await?;
|
.await?;
|
||||||
let invoice = provisioner.renew(vm.id, PaymentMethod::Lightning).await?;
|
let invoice = provisioner.renew(vm.id, PaymentMethod::Lightning).await?;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user