diff options
| author | diogo464 <[email protected]> | 2025-10-30 20:03:37 +0000 |
|---|---|---|
| committer | diogo464 <[email protected]> | 2025-10-30 20:03:37 +0000 |
| commit | 2bfd274bf31ed74f690bb5d4087c6a433ab83a06 (patch) | |
| tree | 6fb707941aac04aa9737b127bd6c666197713326 /src/context.rs | |
| parent | 6e4b2e481305efdd7caf096ecca99a7060a9c0d1 (diff) | |
fix: dont panic when unable to obtain hostname
if we are unable to obtain the hostname of the local machine from the
/etc/hostname file or HOSTNAME env var then an empty string is used as
the hostname and a warning is shown instead of a panic. since the
hostname is just used to determine if we are executing on the cluster,
and the cluster machines all have their hostnames set, then using the
empty string should not be a problem.
Diffstat (limited to 'src/context.rs')
| -rw-r--r-- | src/context.rs | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/context.rs b/src/context.rs index 89e2c3e..f67c302 100644 --- a/src/context.rs +++ b/src/context.rs | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | use eyre::{Context as _, Result}; | 1 | use eyre::Result; |
| 2 | 2 | ||
| 3 | use crate::machine::Machine; | 3 | use crate::machine::Machine; |
| 4 | 4 | ||
| @@ -60,7 +60,7 @@ impl Context { | |||
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | async fn get_execution_node() -> Result<ExecutionNode> { | 62 | async fn get_execution_node() -> Result<ExecutionNode> { |
| 63 | let hostname = get_hostname().await?; | 63 | let hostname = get_hostname().await; |
| 64 | let node = match hostname.as_str() { | 64 | let node = match hostname.as_str() { |
| 65 | "frontend" => ExecutionNode::Frontend, | 65 | "frontend" => ExecutionNode::Frontend, |
| 66 | _ => match Machine::from_hostname(&hostname) { | 66 | _ => match Machine::from_hostname(&hostname) { |
| @@ -71,11 +71,14 @@ async fn get_execution_node() -> Result<ExecutionNode> { | |||
| 71 | Ok(node) | 71 | Ok(node) |
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | async fn get_hostname() -> Result<String> { | 74 | async fn get_hostname() -> String { |
| 75 | if let Ok(hostname) = tokio::fs::read_to_string("/etc/hostname").await { | 75 | let hostname = if let Ok(hostname) = tokio::fs::read_to_string("/etc/hostname").await { |
| 76 | Ok(hostname) | 76 | hostname |
| 77 | } else if let Ok(hostname) = std::env::var("HOSTNAME") { | ||
| 78 | hostname | ||
| 77 | } else { | 79 | } else { |
| 78 | std::env::var("HOSTNAME").context("reading HOSTNAME env var") | 80 | tracing::warn!("unable to obtain hostname, using empty string"); |
| 79 | } | 81 | String::default() |
| 80 | .map(|hostname| hostname.trim().to_string()) | 82 | }; |
| 83 | hostname.trim().to_string() | ||
| 81 | } | 84 | } |
