From 646aae8ef59a37a632692d535a9f0f89201eb5fa Mon Sep 17 00:00:00 2001 From: Mario Voigt Date: Tue, 25 Feb 2025 20:51:29 +0100 Subject: [PATCH] fix init_connections and actor_connections --- bffhd/actors/mod.rs | 7 +++---- bffhd/config/dhall.rs | 30 ++++++++++++++++++++---------- bffhd/initiators/mod.rs | 12 ++++++++---- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/bffhd/actors/mod.rs b/bffhd/actors/mod.rs index 631d406..2c28a9d 100644 --- a/bffhd/actors/mod.rs +++ b/bffhd/actors/mod.rs @@ -248,12 +248,11 @@ pub fn load( actor_connections_data_vec.push((actor_connection.machine, actor_connection.actor)); } - let mut actor_map: HashMap = - actor_connections_data_vec + let mut actor_map: HashMap = actor_connections_data_vec .iter() .filter_map(|(k, v)| { - if let Some(resource) = resources.get_by_id(v) { - Some((k.clone(), resource.get_signal())) + if let Some(resource) = resources.get_by_id(k) { + Some((v.clone(), resource.get_signal())) } else { tracing::error!(actor=%k, machine=%v, "Machine configured for actor not found!"); None diff --git a/bffhd/config/dhall.rs b/bffhd/config/dhall.rs index 68a45da..19de5cf 100644 --- a/bffhd/config/dhall.rs +++ b/bffhd/config/dhall.rs @@ -94,8 +94,7 @@ pub struct Config { /// Initiators to load and their configuration options pub initiators: HashMap, - pub init_connections: Vec<(String, String)>, - + pub init_connections: Vec, } impl Config { @@ -122,6 +121,12 @@ pub struct ActorConnectionConfig { pub actor: String, } +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct InitiatorConnectionConfig { + pub machine: String, + pub initiator: String, +} + pub(crate) fn deser_option<'de, D, T>(d: D) -> std::result::Result, D::Error> where D: serde::Deserializer<'de>, @@ -138,14 +143,19 @@ impl Default for Config { let mut machines: HashMap = HashMap::new(); let mut initiator_123_params: HashMap = HashMap::new(); - initiator_123_params.insert("args".to_string(), "".to_string() ); - initiator_123_params.insert("cmd".to_string(), "echo".to_string() ); + initiator_123_params.insert("args".to_string(), "".to_string()); + initiator_123_params.insert("cmd".to_string(), "echo".to_string()); - let mut actor_connections_vec: Vec = vec![ - ActorConnectionConfig {machine: "resource_a".to_string(), actor: "actor_123".to_string()}, - ActorConnectionConfig {machine: "resource_b".to_string(), actor: "actor_123".to_string()} - ]; + let mut actor_connections_vec: Vec = vec![ActorConnectionConfig { + machine: "resource_a".to_string(), + actor: "actor_123".to_string(), + }]; + let mut initiator_connections_vec: Vec = + vec![InitiatorConnectionConfig { + machine: "resource_a".to_string(), + initiator: "initiator_123".to_string(), + }]; roles.insert( "admin".to_string(), @@ -273,7 +283,7 @@ impl Default for Config { actors, actor_connections: actor_connections_vec, initiators, - init_connections: vec![("initiator_123".to_string(), "resource_b".to_string())], - } + init_connections: initiator_connections_vec, + } } } diff --git a/bffhd/initiators/mod.rs b/bffhd/initiators/mod.rs index e293927..89787a4 100644 --- a/bffhd/initiators/mod.rs +++ b/bffhd/initiators/mod.rs @@ -103,12 +103,16 @@ pub fn load( let span = tracing::info_span!("loading initiators"); let _guard = span.enter(); - let mut initiator_map: HashMap = config - .init_connections + let mut init_connections_data_vec: Vec<(String, String)> = vec![]; + for init_connection in config.init_connections.clone().into_iter() { + init_connections_data_vec.push((init_connection.machine, init_connection.initiator)); + } + + let mut initiator_map: HashMap = init_connections_data_vec .iter() .filter_map(|(k, v)| { - if let Some(resource) = resources.get_by_id(v) { - Some((k.clone(), resource.clone())) + if let Some(resource) = resources.get_by_id(k) { + Some((v.clone(), resource.clone())) } else { tracing::error!(initiator=%k, machine=%v, "Machine configured for initiator not found!");