deploy 2.0.0-dev-74

This commit is contained in:
mbecker20
2025-10-23 11:51:40 -07:00
parent 0bd15fc442
commit c1502e89c2
7 changed files with 98 additions and 44 deletions

40
Cargo.lock generated
View File

@@ -902,7 +902,7 @@ dependencies = [
[[package]]
name = "cache"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"tokio",
@@ -1094,7 +1094,7 @@ dependencies = [
[[package]]
name = "command"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"komodo_client",
"run_command",
@@ -1120,7 +1120,7 @@ checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb"
[[package]]
name = "config"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"colored",
"indexmap 2.12.0",
@@ -1442,7 +1442,7 @@ checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
[[package]]
name = "database"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"async-compression",
@@ -1741,7 +1741,7 @@ dependencies = [
[[package]]
name = "encoding"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"bytes",
@@ -1783,7 +1783,7 @@ dependencies = [
[[package]]
name = "environment"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"formatting",
@@ -1793,7 +1793,7 @@ dependencies = [
[[package]]
name = "environment_file"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"thiserror 2.0.17",
]
@@ -1889,7 +1889,7 @@ dependencies = [
[[package]]
name = "formatting"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"serror",
]
@@ -2055,7 +2055,7 @@ dependencies = [
[[package]]
name = "git"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"cache",
@@ -2688,7 +2688,7 @@ dependencies = [
[[package]]
name = "interpolate"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"komodo_client",
@@ -2810,7 +2810,7 @@ dependencies = [
[[package]]
name = "komodo_cli"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"bytes",
@@ -2840,7 +2840,7 @@ dependencies = [
[[package]]
name = "komodo_client"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"async_timing_util",
@@ -2875,7 +2875,7 @@ dependencies = [
[[package]]
name = "komodo_core"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"arc-swap",
@@ -2948,7 +2948,7 @@ dependencies = [
[[package]]
name = "komodo_periphery"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"arc-swap",
@@ -3069,7 +3069,7 @@ checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
[[package]]
name = "logger"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"komodo_client",
@@ -3361,7 +3361,7 @@ dependencies = [
[[package]]
name = "noise"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"arc-swap",
@@ -3776,7 +3776,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
[[package]]
name = "periphery_client"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"derive_variants",
@@ -4257,7 +4257,7 @@ dependencies = [
[[package]]
name = "response"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"axum",
@@ -4536,7 +4536,7 @@ dependencies = [
[[package]]
name = "secret_file"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"tokio",
]
@@ -5569,7 +5569,7 @@ dependencies = [
[[package]]
name = "transport"
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
dependencies = [
"anyhow",
"axum",

View File

@@ -8,7 +8,7 @@ members = [
]
[workspace.package]
version = "2.0.0-dev-73"
version = "2.0.0-dev-74"
edition = "2024"
authors = ["mbecker20 <becker.maxh@gmail.com>"]
license = "GPL-3.0-or-later"

View File

@@ -61,7 +61,8 @@ async fn list_containers(
.map(|s| (s.id.clone(), s))
.collect::<HashMap<_, _>>())),
client.read(ListAllDockerContainers {
servers: Default::default()
servers: Default::default(),
containers: Default::default(),
}),
)?;
@@ -145,7 +146,8 @@ pub async fn inspect_container(
.map(|s| (s.id.clone(), s))
.collect::<HashMap<_, _>>())),
client.read(ListAllDockerContainers {
servers: Default::default()
servers: Default::default(),
containers: Default::default()
}),
)?;

View File

@@ -1,10 +1,16 @@
use anyhow::Context;
use anyhow::{Context, anyhow};
use bytes::Bytes;
use colored::Colorize;
use futures_util::{SinkExt, StreamExt};
use komodo_client::{
api::write::{CreateTerminal, TerminalRecreateMode},
entities::config::cli::args::terminal::{Connect, Exec},
api::{
read::{ListAllDockerContainers, ListServers},
write::{CreateTerminal, TerminalRecreateMode},
},
entities::{
config::cli::args::terminal::{Connect, Exec},
server::ServerQuery,
},
};
use tokio::{
io::{AsyncReadExt as _, AsyncWriteExt as _},
@@ -51,11 +57,48 @@ pub async fn handle_exec(
recreate,
}: &Exec,
) -> anyhow::Result<()> {
let client = super::komodo_client().await?;
let server = if let Some(server) = server {
server.to_string()
} else {
let mut containers = client
.read(ListAllDockerContainers {
servers: Default::default(),
containers: vec![container.to_string()],
})
.await?;
if containers.is_empty() {
return Err(anyhow!(
"Did not find any container matching {container}"
));
} else if containers.len() == 1 {
let container = containers.pop().context("Shouldn't happen")?;
container
.server_id
.context("Container doesn't have server_id")?
} else {
let servers = containers
.into_iter()
.flat_map(|container| container.server_id)
.collect::<Vec<_>>();
let servers = client
.read(ListServers {
query: ServerQuery::builder().names(servers).build(),
})
.await?
.into_iter()
.map(|server| format!("\t{}", server.name))
.collect::<Vec<_>>()
.join("\n");
return Err(anyhow!(
"Multiple containers matching '{container}':\n{servers}"
));
}
};
handle_terminal_forwarding(async {
super::komodo_client()
.await?
client
.connect_container_websocket(
server,
&server,
container,
shell,
recreate.then_some(TerminalRecreateMode::Always),

View File

@@ -29,8 +29,8 @@ use komodo_client::{
komodo_timestamp,
permission::PermissionLevel,
server::{
Server, ServerActionState, ServerListItem, ServerState,
TerminalInfo, TerminalInfoWithServer,
Server, ServerActionState, ServerListItem, ServerQuery,
ServerState, TerminalInfo, TerminalInfoWithServer,
},
stack::{Stack, StackServiceNames},
stats::{SystemInformation, SystemProcess},
@@ -390,17 +390,11 @@ impl Resolve<ReadArgs> for ListAllDockerContainers {
ReadArgs { user }: &ReadArgs,
) -> serror::Result<ListAllDockerContainersResponse> {
let servers = resource::list_for_user::<Server>(
Default::default(),
ServerQuery::builder().names(self.servers.clone()).build(),
user,
&[],
)
.await?
.into_iter()
.filter(|server| {
self.servers.is_empty()
|| self.servers.contains(&server.id)
|| self.servers.contains(&server.name)
});
.await?;
let mut containers = Vec::<ContainerListItem>::new();
@@ -408,9 +402,17 @@ impl Resolve<ReadArgs> for ListAllDockerContainers {
let cache = server_status_cache()
.get_or_insert_default(&server.id)
.await;
if let Some(more_containers) = &cache.containers {
containers.extend(more_containers.clone());
}
let Some(more) = &cache.containers else {
continue;
};
let more = more
.iter()
.filter(|container| {
self.containers.is_empty()
|| self.containers.contains(&container.name)
})
.cloned();
containers.extend(more);
}
Ok(containers)

View File

@@ -61,6 +61,10 @@ pub struct ListAllDockerContainers {
/// Filter by server id or name.
#[serde(default)]
pub servers: Vec<String>,
/// Filter by container name.
#[serde(default)]
pub containers: Vec<String>,
}
#[typeshare]

View File

@@ -18,13 +18,16 @@ pub struct Connect {
#[derive(Debug, Clone, clap::Parser)]
pub struct Exec {
/// Specify Server
pub server: String,
/// The container (name) to connect to.
/// Will error if matches multiple containers but no Server is defined.
pub container: String,
/// The shell, eg `bash`.
pub shell: String,
/// Specify Server.
/// Required if multiple servers have same container name.
/// (alias: `s`)
#[arg(long, short = 's')]
pub server: Option<String>,
/// Force fresh terminal to replace existing one.
#[arg(long, short = 'r', default_value_t = false)]
pub recreate: bool,