Skip to content

Commit

Permalink
Allow for overwriting the default container name with -c
Browse files Browse the repository at this point in the history
  • Loading branch information
elizabethengelman committed Jul 1, 2024
1 parent aaa2cbe commit da56f0c
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 16 deletions.
10 changes: 6 additions & 4 deletions cmd/soroban-cli/src/commands/network/container/logs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use crate::commands::network::container::shared::{
connect_to_docker, Error as ConnectionError, Network,
};

use super::shared::ContainerArgs;
use super::shared::{get_container_name, ContainerArgs};

#[derive(thiserror::Error, Debug)]
pub enum Error {
Expand All @@ -20,13 +20,15 @@ pub struct Cmd {
#[command(flatten)]
pub container_args: ContainerArgs,

/// Network to tail
pub network: Network,
/// Network container to tail (used in container name generation)
#[arg(required_unless_present = "container_name")]
pub network: Option<Network>,
}

impl Cmd {
pub async fn run(&self) -> Result<(), Error> {
let container_name = format!("stellar-{}", self.network);
let container_name =
get_container_name(self.container_args.container_name.clone(), self.network);
let docker = connect_to_docker(&self.container_args.docker_host).await?;
let logs_stream = &mut docker.logs(
&container_name,
Expand Down
10 changes: 9 additions & 1 deletion cmd/soroban-cli/src/commands/network/container/shared.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ pub struct ContainerArgs {
pub docker_host: Option<String>,
}

#[derive(ValueEnum, Debug, Clone, PartialEq)]
#[derive(ValueEnum, Debug, Copy, Clone, PartialEq)]
pub enum Network {
Local,
Testnet,
Expand Down Expand Up @@ -159,3 +159,11 @@ async fn check_docker_connection(docker: &Docker) -> Result<(), bollard::errors:
}
}
}

pub fn get_container_name(container_name_arg: Option<String>, network: Option<Network>) -> String {
if let Some(container_name) = container_name_arg {
container_name.to_string()
} else {
format!("stellar-{}", network.unwrap())
}
}
52 changes: 45 additions & 7 deletions cmd/soroban-cli/src/commands/network/container/start.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use bollard::{
use futures_util::TryStreamExt;

use crate::commands::network::container::shared::{
connect_to_docker, Error as ConnectionError, Network,
connect_to_docker, get_container_name, Error as ConnectionError, Network,
};

use super::shared::ContainerArgs;
Expand Down Expand Up @@ -89,7 +89,8 @@ async fn run_docker_command(cmd: &Cmd) -> Result<(), Error> {
..Default::default()
};

let container_name = format!("stellar-{}", cmd.network);
let container_name =
get_container_name(cmd.container_args.container_name.clone(), Some(cmd.network));
let create_container_response = docker
.create_container(
Some(CreateContainerOptions {
Expand All @@ -107,18 +108,55 @@ async fn run_docker_command(cmd: &Cmd) -> Result<(), Error> {
)
.await?;
println!("✅ Container started: {container_name}");
print_log_message(cmd);
print_stop_message(cmd);
Ok(())
}

fn print_stop_message(cmd: &Cmd) {
let stop_message = format!(
"ℹ️ To stop this container run: stellar network container stop {network} {additional_flags}",
network = &cmd.network,
"ℹ️ To stop this container run: stellar network container stop {arg} {additional_flags}",
arg = if cmd.container_args.container_name.is_some() {
format!(
"--container-name {}",
cmd.container_args.container_name.clone().unwrap()
)
} else {
cmd.network.to_string()
},
additional_flags = if cmd.container_args.docker_host.is_some() {
format!("--docker-host {}", cmd.container_args.docker_host.as_ref().unwrap())
format!(
"--docker-host {}",
cmd.container_args.docker_host.as_ref().unwrap()
)
} else {
String::new()
}
);

println!("{stop_message}");
Ok(())
}

fn print_log_message(cmd: &Cmd) {
let log_message = format!(
"ℹ️ To see the logs for this container run: stellar network container logs {arg} {additional_flags}",
arg = if cmd.container_args.container_name.is_some() {
format!(
"--container-name {}",
cmd.container_args.container_name.clone().unwrap()
)
} else {
cmd.network.to_string()
},
additional_flags = if cmd.container_args.docker_host.is_some() {
format!(
"--docker-host {}",
cmd.container_args.docker_host.as_ref().unwrap()
)
} else {
String::new()
}
);
println!("{log_message}");
}

fn get_container_args(cmd: &Cmd) -> Vec<String> {
Expand Down
10 changes: 6 additions & 4 deletions cmd/soroban-cli/src/commands/network/container/stop.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::commands::network::container::shared::{
connect_to_docker, Error as ConnectionError, Network,
connect_to_docker, get_container_name, Error as ConnectionError, Network,
};

use super::shared::ContainerArgs;
Expand All @@ -25,13 +25,15 @@ pub struct Cmd {
#[command(flatten)]
pub container_args: ContainerArgs,

/// Network to stop
pub network: Network,
/// Network to stop (used in container name generation)
#[arg(required_unless_present = "container_name")]
pub network: Option<Network>,
}

impl Cmd {
pub async fn run(&self) -> Result<(), Error> {
let container_name = format!("stellar-{}", self.network);
let container_name =
get_container_name(self.container_args.container_name.clone(), self.network);
let docker = connect_to_docker(&self.container_args.docker_host).await?;
println!("ℹ️ Stopping container: {container_name}");
docker
Expand Down

0 comments on commit da56f0c

Please sign in to comment.