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 = { workspace = true }
|
||||||
tokio-stream = { workspace = true }
|
tokio-stream = { workspace = true }
|
||||||
tokio-native-tls = { workspace = true }
|
tokio-native-tls = { workspace = true }
|
||||||
|
url = { workspace = true }
|
||||||
|
|
||||||
[dependencies.krata]
|
[dependencies.krata]
|
||||||
path = "../shared"
|
path = "../shared"
|
||||||
|
@ -8,12 +8,12 @@ use kratactl::{
|
|||||||
client::{KrataClient, KrataClientTransport},
|
client::{KrataClient, KrataClientTransport},
|
||||||
console::XenConsole,
|
console::XenConsole,
|
||||||
};
|
};
|
||||||
use tokio::net::UnixStream;
|
use url::Url;
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
#[derive(Parser, Debug)]
|
||||||
#[command(version, about)]
|
#[command(version, about)]
|
||||||
struct ControllerArgs {
|
struct ControllerArgs {
|
||||||
#[arg(long, default_value = "/var/lib/krata/daemon.socket")]
|
#[arg(short, long, default_value = "unix:///var/lib/krata/daemon.socket")]
|
||||||
connection: String,
|
connection: String,
|
||||||
|
|
||||||
#[command(subcommand)]
|
#[command(subcommand)]
|
||||||
@ -53,8 +53,7 @@ async fn main() -> Result<()> {
|
|||||||
env_logger::Builder::from_env(Env::default().default_filter_or("warn")).init();
|
env_logger::Builder::from_env(Env::default().default_filter_or("warn")).init();
|
||||||
|
|
||||||
let args = ControllerArgs::parse();
|
let args = ControllerArgs::parse();
|
||||||
let stream = UnixStream::connect(&args.connection).await?;
|
let transport = KrataClientTransport::dial(Url::parse(&args.connection)?).await?;
|
||||||
let transport = KrataClientTransport::from_unix(stream).await?;
|
|
||||||
let client = KrataClient::new(transport).await?;
|
let client = KrataClient::new(transport).await?;
|
||||||
|
|
||||||
match args.command {
|
match args.command {
|
||||||
|
@ -4,6 +4,7 @@ use anyhow::{anyhow, Result};
|
|||||||
use krata::{
|
use krata::{
|
||||||
control::{Message, Request, RequestBox, Response},
|
control::{Message, Request, RequestBox, Response},
|
||||||
stream::{ConnectionStreams, StreamContext},
|
stream::{ConnectionStreams, StreamContext},
|
||||||
|
KRATA_DEFAULT_TCP_PORT, KRATA_DEFAULT_TLS_PORT,
|
||||||
};
|
};
|
||||||
use log::{trace, warn};
|
use log::{trace, warn};
|
||||||
use tokio::{
|
use tokio::{
|
||||||
@ -16,8 +17,9 @@ use tokio::{
|
|||||||
},
|
},
|
||||||
task::JoinHandle,
|
task::JoinHandle,
|
||||||
};
|
};
|
||||||
use tokio_native_tls::TlsStream;
|
use tokio_native_tls::{native_tls::TlsConnector, TlsStream};
|
||||||
use tokio_stream::{wrappers::LinesStream, StreamExt};
|
use tokio_stream::{wrappers::LinesStream, StreamExt};
|
||||||
|
use url::{Host, Url};
|
||||||
|
|
||||||
const QUEUE_MAX_LEN: usize = 100;
|
const QUEUE_MAX_LEN: usize = 100;
|
||||||
|
|
||||||
@ -106,6 +108,42 @@ impl KrataClientTransport {
|
|||||||
transport_new!(from_tcp, TcpStream, process_tcp_stream);
|
transport_new!(from_tcp, TcpStream, process_tcp_stream);
|
||||||
transport_new!(from_tls_tcp, TlsStream<TcpStream>, process_tls_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_unix_stream, UnixStream);
|
||||||
transport_processor!(process_tcp_stream, TcpStream);
|
transport_processor!(process_tcp_stream, TcpStream);
|
||||||
transport_processor!(process_tls_tcp_stream, TlsStream<TcpStream>);
|
transport_processor!(process_tls_tcp_stream, TlsStream<TcpStream>);
|
||||||
|
@ -22,7 +22,7 @@ build_and_run() {
|
|||||||
if [ "${KRATA_BUILD_INITRD}" = "1" ]
|
if [ "${KRATA_BUILD_INITRD}" = "1" ]
|
||||||
then
|
then
|
||||||
./initrd/build.sh -q
|
./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
|
fi
|
||||||
RUST_TARGET="$(./scripts/detect-rust-target.sh)"
|
RUST_TARGET="$(./scripts/detect-rust-target.sh)"
|
||||||
./scripts/cargo.sh build ${CARGO_BUILD_FLAGS} --bin "${EXE_TARGET}"
|
./scripts/cargo.sh build ${CARGO_BUILD_FLAGS} --bin "${EXE_TARGET}"
|
||||||
|
@ -2,3 +2,6 @@ pub mod control;
|
|||||||
pub mod ethtool;
|
pub mod ethtool;
|
||||||
pub mod launchcfg;
|
pub mod launchcfg;
|
||||||
pub mod stream;
|
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