refactor(snix/castore): Use ServiceUrls in snix-castore command parsing

Change-Id: Ia7a6b5de215e8bd9b9f6987ae7b22b2f485bd61a
Reviewed-on: https://cl.snix.dev/c/snix/+/30644
Reviewed-by: Florian Klink <flokli@flokli.de>
Tested-by: besadii
This commit is contained in:
Mai 2025-08-04 18:36:55 +03:00
parent d14693ca80
commit 05a9715a20

View file

@ -1,7 +1,6 @@
use clap::{Parser, Subcommand}; use clap::{Parser, Subcommand};
#[cfg(any(feature = "fuse", feature = "virtiofs"))] #[cfg(any(feature = "fuse", feature = "virtiofs"))]
use snix_castore::B3Digest; use snix_castore::B3Digest;
use snix_castore::Node;
#[cfg(feature = "fs")] #[cfg(feature = "fs")]
use snix_castore::fs::SnixStoreFs; use snix_castore::fs::SnixStoreFs;
#[cfg(feature = "fuse")] #[cfg(feature = "fuse")]
@ -9,6 +8,7 @@ use snix_castore::fs::fuse::FuseDaemon;
#[cfg(feature = "virtiofs")] #[cfg(feature = "virtiofs")]
use snix_castore::fs::virtiofs::start_virtiofs_daemon; use snix_castore::fs::virtiofs::start_virtiofs_daemon;
use snix_castore::import::{archive::ingest_archive, fs::ingest_path}; use snix_castore::import::{archive::ingest_archive, fs::ingest_path};
use snix_castore::{Node, utils::ServiceUrls};
use std::error::Error; use std::error::Error;
use std::io::Write; use std::io::Write;
use std::path::PathBuf; use std::path::PathBuf;
@ -30,21 +30,8 @@ enum Commands {
#[arg(value_name = "INPUT")] #[arg(value_name = "INPUT")]
input: PathBuf, input: PathBuf,
/// Address of the blob service #[clap(flatten)]
#[arg( service_addrs: ServiceUrls,
long,
env = "BLOB_SERVICE_ADDR",
default_value = "grpc+http://[::1]:8000"
)]
blob_service_addr: String,
/// Address of the directory service
#[arg(
long,
env = "DIRECTORY_SERVICE_ADDR",
default_value = "grpc+http://[::1]:8000"
)]
directory_service_addr: String,
}, },
#[cfg(feature = "fuse")] #[cfg(feature = "fuse")]
@ -58,21 +45,8 @@ enum Commands {
#[arg(value_name = "OUTPUT")] #[arg(value_name = "OUTPUT")]
output: PathBuf, output: PathBuf,
/// Address of the blob service #[clap(flatten)]
#[arg( service_addrs: ServiceUrls,
long,
env = "BLOB_SERVICE_ADDR",
default_value = "grpc+http://[::1]:8000"
)]
blob_service_addr: String,
/// Address of the directory service
#[arg(
long,
env = "DIRECTORY_SERVICE_ADDR",
default_value = "grpc+http://[::1]:8000"
)]
directory_service_addr: String,
}, },
#[cfg(feature = "virtiofs")] #[cfg(feature = "virtiofs")]
@ -86,21 +60,8 @@ enum Commands {
#[arg(value_name = "OUTPUT")] #[arg(value_name = "OUTPUT")]
output: PathBuf, output: PathBuf,
/// Address of the blob service #[clap(flatten)]
#[arg( service_addrs: ServiceUrls,
long,
env = "BLOB_SERVICE_ADDR",
default_value = "grpc+http://[::1]:8000"
)]
blob_service_addr: String,
/// Address of the directory service
#[arg(
long,
env = "DIRECTORY_SERVICE_ADDR",
default_value = "grpc+http://[::1]:8000"
)]
directory_service_addr: String,
}, },
} }
@ -124,12 +85,11 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
match cli.command { match cli.command {
Commands::Ingest { Commands::Ingest {
input, input,
blob_service_addr, service_addrs,
directory_service_addr,
} => { } => {
let blob_service = snix_castore::blobservice::from_addr(&blob_service_addr).await?; let blob_service = snix_castore::blobservice::from_addr(&service_addrs.blob_service_addr).await?;
let directory_service = let directory_service =
snix_castore::directoryservice::from_addr(&directory_service_addr).await?; snix_castore::directoryservice::from_addr(&service_addrs.directory_service_addr).await?;
let metadata = fs::metadata(&input).await?; let metadata = fs::metadata(&input).await?;
let node = if metadata.is_dir() { let node = if metadata.is_dir() {
ingest_path::<_, _, _, &[u8]>(&blob_service, &directory_service, &input, None) ingest_path::<_, _, _, &[u8]>(&blob_service, &directory_service, &input, None)
@ -150,12 +110,11 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
Commands::Mount { Commands::Mount {
digest, digest,
output, output,
blob_service_addr, service_addrs,
directory_service_addr,
} => { } => {
let blob_service = snix_castore::blobservice::from_addr(&blob_service_addr).await?; let blob_service = snix_castore::blobservice::from_addr(&service_addrs.blob_service_addr).await?;
let directory_service = let directory_service =
snix_castore::directoryservice::from_addr(&directory_service_addr).await?; snix_castore::directoryservice::from_addr(&service_addrs.directory_service_addr).await?;
let digest: B3Digest = digest.parse()?; let digest: B3Digest = digest.parse()?;
let root_nodes_provider = directory_service let root_nodes_provider = directory_service
.get(&digest) .get(&digest)
@ -186,12 +145,11 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
Commands::Virtiofs { Commands::Virtiofs {
digest, digest,
output, output,
blob_service_addr, service_addrs,
directory_service_addr,
} => { } => {
let blob_service = snix_castore::blobservice::from_addr(&blob_service_addr).await?; let blob_service = snix_castore::blobservice::from_addr(&service_addrs.blob_service_addr).await?;
let directory_service = let directory_service =
snix_castore::directoryservice::from_addr(&directory_service_addr).await?; snix_castore::directoryservice::from_addr(&service_addrs.directory_service_addr).await?;
let digest: B3Digest = digest.parse()?; let digest: B3Digest = digest.parse()?;
let root_nodes_provider = directory_service let root_nodes_provider = directory_service
.get(&digest) .get(&digest)