Cleanup dependencies and code

we're so back
This commit is contained in:
snow flurry 2024-07-27 23:11:11 -07:00
parent 1023fdca8c
commit 295609a57d
17 changed files with 644 additions and 583 deletions

1068
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -8,8 +8,9 @@ edition = "2021"
[dependencies] [dependencies]
figment = { version = "0.10.8", features = ["json", "toml", "env"] } figment = { version = "0.10.8", features = ["json", "toml", "env"] }
serde = { version = "1", features = ["derive"] } serde = { version = "1", features = ["derive"] }
tarpc = { version = "0.31", features = ["tokio1", "unix"] } tarpc = { version = "0.34", features = ["tokio1", "unix"] }
tokio = { version = "1.0", features = ["macros"] } tokio = { version = "1.0", features = ["macros"] }
uuid = "1.2.2" uuid = "1.2.2"
trust-dns-proto = { version = "0.22.0", features = ["serde-config"] } # trust-dns-proto = { version = "0.23", features = ["serde-config"] }
log = "0.4.17" hickory-proto = { version = "0.24", features = ["serde-config"] }
log = "0.4.17"

View file

@ -4,8 +4,8 @@ use figment::{
providers::{Env, Format, Json, Toml}, providers::{Env, Format, Json, Toml},
Figment, Metadata, Provider, Figment, Metadata, Provider,
}; };
use hickory_proto::rr::Name;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use trust_dns_proto::rr::Name;
#[derive(Clone, Debug, Serialize, Deserialize)] #[derive(Clone, Debug, Serialize, Deserialize)]
pub struct StorageConfig { pub struct StorageConfig {

View file

@ -5,7 +5,7 @@ pub mod config;
pub mod model; pub mod model;
pub mod net; pub mod net;
pub use trust_dns_proto; pub use hickory_proto;
#[tarpc::service] #[tarpc::service]
pub trait Nazrin { pub trait Nazrin {

View file

@ -1,6 +1,6 @@
use hickory_proto::rr::Name;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::{fmt, net::Ipv4Addr}; use std::{fmt, net::Ipv4Addr};
use trust_dns_proto::rr::Name;
use crate::net::{cidr::CidrV4, mac::MacAddr}; use crate::net::{cidr::CidrV4, mac::MacAddr};

View file

@ -10,9 +10,14 @@ nzr-api = { path = "../api" }
clap = { version = "4.0.26", features = ["derive"] } clap = { version = "4.0.26", features = ["derive"] }
home = "0.5.4" home = "0.5.4"
tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] } tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }
tokio-serde = { version = "0.8.0", features = ["bincode"] } tokio-serde = { version = "0.9", features = ["bincode"] }
tarpc = { version = "0.31", features = ["tokio1", "unix", "serde-transport", "serde-transport-bincode"] } tarpc = { version = "0.34", features = [
tabled = "0.10.0" "tokio1",
"unix",
"serde-transport",
"serde-transport-bincode",
] }
tabled = "0.15"
serde_json = "1" serde_json = "1"
log = "0.4.17" log = "0.4.17"
env_logger = "0.10.0" env_logger = "0.11"

View file

@ -1,7 +1,7 @@
use clap::{CommandFactory, FromArgMatches, Parser, Subcommand}; use clap::{CommandFactory, FromArgMatches, Parser, Subcommand};
use nzr_api::hickory_proto::rr::Name;
use nzr_api::model; use nzr_api::model;
use nzr_api::net::cidr::CidrV4; use nzr_api::net::cidr::CidrV4;
use nzr_api::trust_dns_proto::rr::Name;
use nzr_api::{config, NazrinClient}; use nzr_api::{config, NazrinClient};
use std::any::{Any, TypeId}; use std::any::{Any, TypeId};
use std::path::PathBuf; use std::path::PathBuf;
@ -328,8 +328,8 @@ async fn handle_command() -> Result<(), Box<dyn std::error::Error>> {
let tabular: Vec<table::Instance> = let tabular: Vec<table::Instance> =
instances?.iter().map(table::Instance::from).collect(); instances?.iter().map(table::Instance::from).collect();
let mut table = tabled::Table::new(&tabular); let mut table = tabled::Table::new(tabular);
println!("{}", table.with(tabled::Style::psql())); println!("{}", table.with(tabled::settings::Style::psql()));
} }
InstanceCmd::Prune => (client.garbage_collect(tarpc::context::current()).await?)?, InstanceCmd::Prune => (client.garbage_collect(tarpc::context::current()).await?)?,
}, },
@ -423,8 +423,8 @@ async fn handle_command() -> Result<(), Box<dyn std::error::Error>> {
let tabular: Vec<table::Subnet> = let tabular: Vec<table::Subnet> =
subnets?.iter().map(table::Subnet::from).collect(); subnets?.iter().map(table::Subnet::from).collect();
let mut table = tabled::Table::new(&tabular); let mut table = tabled::Table::new(tabular);
println!("{}", table.with(tabled::Style::psql())); println!("{}", table.with(tabled::settings::Style::psql()));
} }
}, },
}; };

View file

@ -6,35 +6,49 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
tarpc = { version = "0.31", features = ["tokio1", "unix", "serde-transport", "serde-transport-bincode"] } tarpc = { version = "0.34", features = [
tokio = { version = "1.0", features = ["macros", "rt-multi-thread", "process"] } "tokio1",
tokio-serde = { version = "0.8.0", features = ["bincode"] } "unix",
"serde-transport",
"serde-transport-bincode",
] }
tokio = { version = "1", features = ["macros", "rt-multi-thread", "process"] }
tokio-serde = { version = "0.9", features = ["bincode"] }
sled = "0.34.7" sled = "0.34.7"
# virt = "0.2.11" virt = "0.4"
virt = { path = "../../libvirt-rust" } # virt = { path = "../../libvirt-rust" }
fatfs = "0.3" fatfs = "0.3"
uuid = { version = "1.2.2", features = ["v4", "fast-rng", "serde", "macro-diagnostics"] } uuid = { version = "1.2.2", features = [
"v4",
"fast-rng",
"serde",
"macro-diagnostics",
] }
clap = { version = "4.0.26", features = ["derive"] } clap = { version = "4.0.26", features = ["derive"] }
serde = { version = "1", features = ["derive"] } serde = { version = "1", features = ["derive"] }
# for new @attr support, awaiting 0.27.0 # for new @attr support, awaiting 0.27.0
quick-xml = { git = "https://github.com/tafia/quick-xml", rev = "fb079b6714d7238d5180aaa098c5f9b02dbcc7da", features = ["serialize"] } quick-xml = { version = "0.36", features = ["serialize"] }
serde_with = "2.1.0" # quick-xml = { git = "https://github.com/tafia/quick-xml", rev = "fb079b6714d7238d5180aaa098c5f9b02dbcc7da", features = [
# "serialize",
# ] }
serde_with = "2"
serde_yaml = "0.9.14" serde_yaml = "0.9.14"
rand = "0.8.5" rand = "0.8.5"
libc = "0.2.137" libc = "0.2.137"
home = "0.5.4" home = "0.5.4"
stdext = "0.3.1" stdext = "0.3.1"
zerocopy = "0.6.1" zerocopy = "0.7"
nzr-api = { path = "../api" } nzr-api = { path = "../api" }
futures = "0.3" futures = "0.3"
async-trait = "0.1.60"
ciborium = "0.2.0" ciborium = "0.2.0"
ciborium-io = "0.2.0" ciborium-io = "0.2.0"
trust-dns-server = "0.22.0" hickory-server = "0.24"
hickory-proto = { version = "0.24", features = ["serde-config"] }
async-trait = "0.1"
log = "0.4.17" log = "0.4.17"
syslog = "6.0.1" syslog = "7"
nix = "0.26.1" nix = { version = "0.29", features = ["user", "fs"] }
tempdir = "0.3.7" tempfile = "3"
[dev-dependencies] [dev-dependencies]
regex = "1" regex = "1"

View file

@ -1,11 +1,11 @@
use std::net::Ipv4Addr; use std::net::Ipv4Addr;
use fatfs::FsOptions; use fatfs::FsOptions;
use hickory_server::proto::rr::Name;
use serde::Serialize; use serde::Serialize;
use serde_with::skip_serializing_none; use serde_with::skip_serializing_none;
use std::collections::HashMap; use std::collections::HashMap;
use std::io::{prelude::*, Cursor}; use std::io::{prelude::*, Cursor};
use trust_dns_server::proto::rr::Name;
use nzr_api::net::{cidr::CidrV4, mac::MacAddr}; use nzr_api::net::{cidr::CidrV4, mac::MacAddr};

View file

@ -11,11 +11,11 @@ use crate::ctrl::Storable;
use crate::ctx::Context; use crate::ctx::Context;
use crate::prelude::*; use crate::prelude::*;
use crate::virt::VirtVolume; use crate::virt::VirtVolume;
use hickory_server::proto::rr::Name;
use log::*; use log::*;
use nzr_api::args; use nzr_api::args;
use nzr_api::net::mac::MacAddr; use nzr_api::net::mac::MacAddr;
use std::sync::Arc; use std::sync::Arc;
use trust_dns_server::proto::rr::Name;
const VIRT_MAC_OUI: &[u8] = &[0x02, 0xf1, 0x0f]; const VIRT_MAC_OUI: &[u8] = &[0x02, 0xf1, 0x0f];
@ -37,13 +37,10 @@ pub async fn new_instance(
// find the subnet corresponding to the interface // find the subnet corresponding to the interface
let subnet = Subnet::get_by_key(ctx.db.clone(), args.subnet.as_bytes()) let subnet = Subnet::get_by_key(ctx.db.clone(), args.subnet.as_bytes())
.map_err(|er| cmd_error!("Unable to get interface: {}", er))? .map_err(|er| cmd_error!("Unable to get interface: {}", er))?
.map_or( .ok_or(cmd_error!(
Err(cmd_error!( "Subnet {} wasn't found in database",
"Subnet {} wasn't found in database", &args.subnet
&args.subnet ))?;
)),
Ok,
)?;
// bail if a domain already exists // bail if a domain already exists
if let Ok(dom) = virt::domain::Domain::lookup_by_name(&ctx.virt.conn, &args.name) { if let Ok(dom) = virt::domain::Domain::lookup_by_name(&ctx.virt.conn, &args.name) {

View file

@ -19,7 +19,7 @@ impl DomainBuilder {
/// > used to form the filename for storing the persistent /// > used to form the filename for storing the persistent
/// > configuration file. /// > configuration file.
pub fn name(mut self, name: &str) -> Self { pub fn name(mut self, name: &str) -> Self {
self.domain.name = name.to_owned(); name.clone_into(&mut self.domain.name);
self self
} }
@ -175,7 +175,7 @@ impl IfaceBuilder {
/// qemu-system-x86_64 -net nic,model=? /dev/null /// qemu-system-x86_64 -net nic,model=? /dev/null
/// ``` /// ```
pub fn model(mut self, model: &str) -> Self { pub fn model(mut self, model: &str) -> Self {
self.iface.model.r#type = model.to_owned(); model.clone_into(&mut self.iface.model.r#type);
self self
} }
@ -233,8 +233,8 @@ impl DiskBuilder {
/// Set the target for the disk to attach to. /// Set the target for the disk to attach to.
pub fn target(mut self, dev: &str, bus: &str) -> Self { pub fn target(mut self, dev: &str, bus: &str) -> Self {
self.disk.target.bus = bus.to_owned(); bus.clone_into(&mut self.disk.target.bus);
self.disk.target.dev = dev.to_owned(); dev.clone_into(&mut self.disk.target.dev);
self self
} }

View file

@ -69,7 +69,7 @@ impl std::error::Error for ContextError {}
impl InnerCtx { impl InnerCtx {
fn new(config: Config) -> Result<Self, ContextError> { fn new(config: Config) -> Result<Self, ContextError> {
let zones = ZoneData::new(&config.dns); let zones = ZoneData::new(&config.dns);
let conn = Connect::open(&config.libvirt_uri).map_err(ContextError::Virt)?; let conn = Connect::open(Some(&config.libvirt_uri)).map_err(ContextError::Virt)?;
virt::error::clear_error_callback(); virt::error::clear_error_callback();
let pools = PoolRefs { let pools = PoolRefs {

View file

@ -9,14 +9,12 @@ use std::str::FromStr;
use std::sync::Arc; use std::sync::Arc;
use tokio::sync::{Mutex, RwLock}; use tokio::sync::{Mutex, RwLock};
use trust_dns_server::authority::{AuthorityObject, Catalog}; use hickory_proto::rr::Name;
use trust_dns_server::client::rr::{LowerName, RrKey}; use hickory_server::authority::{AuthorityObject, Catalog};
use trust_dns_server::proto::rr::{rdata::soa, RData, RecordSet}; use hickory_server::proto::rr::{rdata::soa, RData, RecordSet};
use trust_dns_server::server::{Request, RequestHandler, ResponseHandler, ResponseInfo}; use hickory_server::proto::rr::{LowerName, RrKey};
use trust_dns_server::{ use hickory_server::server::{Request, RequestHandler, ResponseHandler, ResponseInfo};
proto::rr::{Name, Record}, use hickory_server::{proto::rr::Record, store::in_memory::InMemoryAuthority};
store::in_memory::InMemoryAuthority,
};
#[derive(Clone)] #[derive(Clone)]
pub struct CatalogRef(Arc<RwLock<Catalog>>); pub struct CatalogRef(Arc<RwLock<Catalog>>);
@ -32,12 +30,14 @@ macro_rules! make_serial {
}}; }};
} }
// hickory_dns 0.24 still requires async_trait
#[async_trait::async_trait] #[async_trait::async_trait]
impl RequestHandler for CatalogRef { impl RequestHandler for CatalogRef {
async fn handle_request<R>(&self, request: &Request, response_handle: R) -> ResponseInfo async fn handle_request<R: ResponseHandler>(
where &self,
R: ResponseHandler, request: &Request,
{ response_handle: R,
) -> ResponseInfo {
self.0 self.0
.read() .read()
.await .await
@ -74,7 +74,7 @@ pub fn make_rectree_with_soa(name: &Name, config: &DNSConfig) -> BTreeMap<RrKey,
let mut records: BTreeMap<RrKey, RecordSet> = BTreeMap::new(); let mut records: BTreeMap<RrKey, RecordSet> = BTreeMap::new();
let soa_key = RrKey::new( let soa_key = RrKey::new(
LowerName::from(name), LowerName::from(name),
trust_dns_server::proto::rr::RecordType::SOA, hickory_server::proto::rr::RecordType::SOA,
); );
let soa_rec = Record::from_rdata( let soa_rec = Record::from_rdata(
name.clone(), name.clone(),
@ -100,7 +100,7 @@ impl InnerZD {
InMemoryAuthority::new( InMemoryAuthority::new(
dns_config.default_zone.clone(), dns_config.default_zone.clone(),
records, records,
trust_dns_server::authority::ZoneType::Primary, hickory_server::authority::ZoneType::Primary,
false, false,
) )
.unwrap() .unwrap()
@ -123,7 +123,7 @@ impl InnerZD {
let auth = InMemoryAuthority::new( let auth = InMemoryAuthority::new(
name.clone(), name.clone(),
make_rectree_with_soa(name, &self.config), make_rectree_with_soa(name, &self.config),
trust_dns_server::authority::ZoneType::Primary, hickory_server::authority::ZoneType::Primary,
false, false,
)?; )?;
self.import(&subnet.ifname.to_string(), auth).await; self.import(&subnet.ifname.to_string(), auth).await;
@ -174,7 +174,7 @@ impl InnerZD {
zone.origin() zone.origin()
); );
let record = Record::from_rdata(fqdn, 3600, RData::A(addr)); let record = Record::from_rdata(fqdn, 3600, RData::A(addr.into()));
zone.upsert(record, 0).await; zone.upsert(record, 0).await;
self.catalog() self.catalog()
.0 .0
@ -194,7 +194,7 @@ impl InnerZD {
if let Some(zone) = zones.get_mut(interface) { if let Some(zone) = zones.get_mut(interface) {
let hostname: LowerName = hostname.into(); let hostname: LowerName = hostname.into();
self.catalog.0.write().await.remove(&hostname); self.catalog.0.write().await.remove(&hostname);
let key = RrKey::new(hostname, trust_dns_server::proto::rr::RecordType::A); let key = RrKey::new(hostname, hickory_server::proto::rr::RecordType::A);
Ok(zone.records_mut().await.remove(&key).is_some()) Ok(zone.records_mut().await.remove(&key).is_some())
} else { } else {
Ok(false) Ok(false)

View file

@ -5,7 +5,7 @@ use std::{
}; };
use std::future::Future; use std::future::Future;
use tempdir::TempDir; use tempfile::TempDir;
use tokio::process::Command; use tokio::process::Command;
use crate::ctrl::virtxml::SizeInfo; use crate::ctrl::virtxml::SizeInfo;
@ -101,7 +101,7 @@ where
Fut: Future<Output = std::io::Result<std::process::Output>>, Fut: Future<Output = std::io::Result<std::process::Output>>,
{ {
let qi_path = qemu_img_path()?; let qi_path = qemu_img_path()?;
let img_dir = TempDir::new("nazrin")?; let img_dir = TempDir::with_prefix("nazrin")?;
let img_path = img_dir.path().join("img"); let img_path = img_dir.path().join("img");
let qi_out = func(Command::new(&qi_path), &img_path) let qi_out = func(Command::new(&qi_path), &img_path)

View file

@ -11,12 +11,12 @@ mod test;
mod virt; mod virt;
use crate::ctrl::{net::Subnet, Storable}; use crate::ctrl::{net::Subnet, Storable};
use hickory_server::ServerFuture;
use log::LevelFilter; use log::LevelFilter;
use log::*; use log::*;
use nzr_api::config; use nzr_api::config;
use std::str::FromStr; use std::str::FromStr;
use tokio::net::UdpSocket; use tokio::net::UdpSocket;
use trust_dns_server::ServerFuture;
#[tokio::main(flavor = "multi_thread")] #[tokio::main(flavor = "multi_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> { async fn main() -> Result<(), Box<dyn std::error::Error>> {

View file

@ -1,3 +1,4 @@
use futures::{future, StreamExt};
use nzr_api::{args, model, Nazrin}; use nzr_api::{args, model, Nazrin};
use std::borrow::Borrow; use std::borrow::Borrow;
use std::sync::Arc; use std::sync::Arc;
@ -35,7 +36,6 @@ impl NzrServer {
} }
} }
#[tarpc::server]
impl Nazrin for NzrServer { impl Nazrin for NzrServer {
async fn new_instance( async fn new_instance(
self, self,
@ -55,7 +55,7 @@ impl Nazrin for NzrServer {
{ {
let mut pt = prog_task.write().await; let mut pt = prog_task.write().await;
pt.status_text = "Starting instance...".to_owned(); "Starting instance...".clone_into(&mut pt.status_text);
pt.percentage = 90.0; pt.percentage = 90.0;
} }
if let Some(addr) = addr { if let Some(addr) = addr {
@ -281,6 +281,10 @@ pub async fn serve(ctx: Context, zones: ZoneData) -> Result<(), Box<dyn std::err
let transport = tarpc::serde_transport::new(framed, Bincode::default()); let transport = tarpc::serde_transport::new(framed, Bincode::default());
BaseChannel::with_defaults(transport) BaseChannel::with_defaults(transport)
.execute(NzrServer::new(ctx, zones).serve()) .execute(NzrServer::new(ctx, zones).serve())
.for_each(|rpc| {
tokio::spawn(rpc);
future::ready(())
})
.await; .await;
}); });
} }

View file

@ -75,7 +75,7 @@ impl VirtVolume {
let svol = StorageVol::create_xml(pool, &xml, flags)?; let svol = StorageVol::create_xml(pool, &xml, flags)?;
if xmldata.vol_type() == Some(VolType::Qcow2) { if xmldata.vol_type() == Some(VolType::Qcow2) {
let size = xmldata.capacity.unwrap().clone(); let size = xmldata.capacity.unwrap();
let src_img = img::create_qcow2(size).await?; let src_img = img::create_qcow2(size).await?;
let stream = match Stream::new(&svol.get_connect().map_err(PoolError::VirtError)?, 0) { let stream = match Stream::new(&svol.get_connect().map_err(PoolError::VirtError)?, 0) {
@ -93,7 +93,7 @@ impl VirtVolume {
return Err(Box::new(PoolError::CantUpload(er))); return Err(Box::new(PoolError::CantUpload(er)));
} }
Self::upload_img(&*src_img, stream)?; Self::upload_img(&src_img, stream)?;
} }
Ok(Self { Ok(Self {
@ -125,7 +125,7 @@ impl VirtVolume {
let src_path = self.get_path().map_err(PoolError::NoPath)?; let src_path = self.get_path().map_err(PoolError::NoPath)?;
let src_img = img::clone_qcow2(src_path, size.clone()) let src_img = img::clone_qcow2(src_path, size)
.await .await
.map_err(PoolError::QemuError)?; .map_err(PoolError::QemuError)?;
@ -177,7 +177,7 @@ impl VirtVolume {
return Err(PoolError::CantUpload(er)); return Err(PoolError::CantUpload(er));
} }
Self::upload_img(&*src_img, stream)?; Self::upload_img(&src_img, stream)?;
Ok(Self { Ok(Self {
inner: cloned, inner: cloned,