mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 02:11:53 +00:00
* complete get_primary_url fn * complete clear_network_interfaces fn * formatting * complete remove_address fn * get_system_smtp wip * complete get_system_smtp and set_system_smtp * add SetSystemSmtpParams struct * add set_system_smtp subcommand * Remove 'Copy' implementation from `HostAddress` Co-authored-by: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> * Refactor `get_host_primary` fn and clone resulting `HostAddress` Co-authored-by: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> * misc fixes and debug info * seed hosts with a tor address --------- Co-authored-by: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Co-authored-by: Aiden McClelland <me@drbonez.dev>
67 lines
1.8 KiB
Rust
67 lines
1.8 KiB
Rust
use std::path::{Path, PathBuf};
|
|
use std::sync::Arc;
|
|
|
|
use clap::Parser;
|
|
use imbl_value::Value;
|
|
use once_cell::sync::OnceCell;
|
|
use rpc_toolkit::yajrc::RpcError;
|
|
use rpc_toolkit::{call_remote_socket, yajrc, CallRemote, Context, Empty};
|
|
use tokio::runtime::Runtime;
|
|
|
|
use crate::lxc::HOST_RPC_SERVER_SOCKET;
|
|
use crate::service::service_effect_handler::EffectContext;
|
|
|
|
#[derive(Debug, Default, Parser)]
|
|
pub struct ContainerClientConfig {
|
|
#[arg(long = "socket")]
|
|
pub socket: Option<PathBuf>,
|
|
}
|
|
|
|
pub struct ContainerCliSeed {
|
|
socket: PathBuf,
|
|
runtime: OnceCell<Runtime>,
|
|
}
|
|
|
|
#[derive(Clone)]
|
|
pub struct ContainerCliContext(Arc<ContainerCliSeed>);
|
|
impl ContainerCliContext {
|
|
pub fn init(cfg: ContainerClientConfig) -> Self {
|
|
Self(Arc::new(ContainerCliSeed {
|
|
socket: cfg
|
|
.socket
|
|
.unwrap_or_else(|| Path::new("/media/startos/rpc").join(HOST_RPC_SERVER_SOCKET)),
|
|
runtime: OnceCell::new(),
|
|
}))
|
|
}
|
|
}
|
|
impl Context for ContainerCliContext {
|
|
fn runtime(&self) -> tokio::runtime::Handle {
|
|
self.0
|
|
.runtime
|
|
.get_or_init(|| {
|
|
tokio::runtime::Builder::new_current_thread()
|
|
.enable_all()
|
|
.build()
|
|
.unwrap()
|
|
})
|
|
.handle()
|
|
.clone()
|
|
}
|
|
}
|
|
|
|
impl CallRemote<EffectContext> for ContainerCliContext {
|
|
async fn call_remote(&self, method: &str, params: Value, _: Empty) -> Result<Value, RpcError> {
|
|
call_remote_socket(
|
|
tokio::net::UnixStream::connect(&self.0.socket)
|
|
.await
|
|
.map_err(|e| RpcError {
|
|
data: Some(e.to_string().into()),
|
|
..yajrc::INTERNAL_ERROR
|
|
})?,
|
|
method,
|
|
params,
|
|
)
|
|
.await
|
|
}
|
|
}
|