mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-02 21:00:55 +00:00
controller: implement support for dialing urls for transport
This commit is contained in:
parent
e5f5f9493c
commit
31cf3044a4
@ -16,6 +16,7 @@ clap = { workspace = true }
|
||||
tokio = { workspace = true }
|
||||
tokio-stream = { workspace = true }
|
||||
tokio-native-tls = { workspace = true }
|
||||
url = { workspace = true }
|
||||
|
||||
[dependencies.krata]
|
||||
path = "../shared"
|
||||
|
@ -8,12 +8,12 @@ use kratactl::{
|
||||
client::{KrataClient, KrataClientTransport},
|
||||
console::XenConsole,
|
||||
};
|
||||
use tokio::net::UnixStream;
|
||||
use url::Url;
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
#[command(version, about)]
|
||||
struct ControllerArgs {
|
||||
#[arg(long, default_value = "/var/lib/krata/daemon.socket")]
|
||||
#[arg(short, long, default_value = "unix:///var/lib/krata/daemon.socket")]
|
||||
connection: String,
|
||||
|
||||
#[command(subcommand)]
|
||||
@ -53,8 +53,7 @@ async fn main() -> Result<()> {
|
||||
env_logger::Builder::from_env(Env::default().default_filter_or("warn")).init();
|
||||
|
||||
let args = ControllerArgs::parse();
|
||||
let stream = UnixStream::connect(&args.connection).await?;
|
||||
let transport = KrataClientTransport::from_unix(stream).await?;
|
||||
let transport = KrataClientTransport::dial(Url::parse(&args.connection)?).await?;
|
||||
let client = KrataClient::new(transport).await?;
|
||||
|
||||
match args.command {
|
||||
|
@ -4,6 +4,7 @@ use anyhow::{anyhow, Result};
|
||||
use krata::{
|
||||
control::{Message, Request, RequestBox, Response},
|
||||
stream::{ConnectionStreams, StreamContext},
|
||||
KRATA_DEFAULT_TCP_PORT, KRATA_DEFAULT_TLS_PORT,
|
||||
};
|
||||
use log::{trace, warn};
|
||||
use tokio::{
|
||||
@ -16,8 +17,9 @@ use tokio::{
|
||||
},
|
||||
task::JoinHandle,
|
||||
};
|
||||
use tokio_native_tls::TlsStream;
|
||||
use tokio_native_tls::{native_tls::TlsConnector, TlsStream};
|
||||
use tokio_stream::{wrappers::LinesStream, StreamExt};
|
||||
use url::{Host, Url};
|
||||
|
||||
const QUEUE_MAX_LEN: usize = 100;
|
||||
|
||||
@ -106,6 +108,42 @@ impl KrataClientTransport {
|
||||
transport_new!(from_tcp, TcpStream, process_tcp_stream);
|
||||
transport_new!(from_tls_tcp, TlsStream<TcpStream>, process_tls_tcp_stream);
|
||||
|
||||
pub async fn dial(url: Url) -> Result<KrataClientTransport> {
|
||||
match url.scheme() {
|
||||
"unix" => {
|
||||
let stream = UnixStream::connect(url.path()).await?;
|
||||
Ok(KrataClientTransport::from_unix(stream).await?)
|
||||
}
|
||||
|
||||
"tcp" => {
|
||||
let address = format!(
|
||||
"{}:{}",
|
||||
url.host().unwrap_or(Host::Domain("localhost")),
|
||||
url.port().unwrap_or(KRATA_DEFAULT_TCP_PORT)
|
||||
);
|
||||
let stream = TcpStream::connect(address).await?;
|
||||
Ok(KrataClientTransport::from_tcp(stream).await?)
|
||||
}
|
||||
|
||||
"tls" | "tls-insecure" => {
|
||||
let insecure = url.scheme() == "tls-insecure";
|
||||
let host = format!("{}", url.host().unwrap_or(Host::Domain("localhost")));
|
||||
let address = format!("{}:{}", host, url.port().unwrap_or(KRATA_DEFAULT_TLS_PORT));
|
||||
let stream = TcpStream::connect(address).await?;
|
||||
let mut connector = TlsConnector::builder();
|
||||
if insecure {
|
||||
connector.danger_accept_invalid_certs(true);
|
||||
}
|
||||
let connector = connector.build()?;
|
||||
let connector = tokio_native_tls::TlsConnector::from(connector);
|
||||
let stream = connector.connect(&host, stream).await?;
|
||||
Ok(KrataClientTransport::from_tls_tcp(stream).await?)
|
||||
}
|
||||
|
||||
_ => Err(anyhow!("unsupported url scheme: {}", url.scheme())),
|
||||
}
|
||||
}
|
||||
|
||||
transport_processor!(process_unix_stream, UnixStream);
|
||||
transport_processor!(process_tcp_stream, TcpStream);
|
||||
transport_processor!(process_tls_tcp_stream, TlsStream<TcpStream>);
|
||||
|
@ -22,7 +22,7 @@ build_and_run() {
|
||||
if [ "${KRATA_BUILD_INITRD}" = "1" ]
|
||||
then
|
||||
./initrd/build.sh -q
|
||||
sudo cp "target/initrd/initrd" "/var/lib/krata/default/initrd"
|
||||
sudo cp "initrd/target/initrd" "/var/lib/krata/default/initrd"
|
||||
fi
|
||||
RUST_TARGET="$(./scripts/detect-rust-target.sh)"
|
||||
./scripts/cargo.sh build ${CARGO_BUILD_FLAGS} --bin "${EXE_TARGET}"
|
||||
|
@ -2,3 +2,6 @@ pub mod control;
|
||||
pub mod ethtool;
|
||||
pub mod launchcfg;
|
||||
pub mod stream;
|
||||
|
||||
pub const KRATA_DEFAULT_TCP_PORT: u16 = 4350;
|
||||
pub const KRATA_DEFAULT_TLS_PORT: u16 = 4353;
|
||||
|
Loading…
Reference in New Issue
Block a user