Switch HAClusterTopology for K8sAnywhereTopology in lamp example

This commit is contained in:
Jean-Gabriel Gill-Couture 2025-04-23 10:15:51 -04:00
parent 452ebc2614
commit 0857aba039
2 changed files with 15 additions and 9 deletions

View File

@ -1,9 +1,8 @@
use harmony::{
data::Version,
inventory::Inventory,
maestro::Maestro,
modules::lamp::{LAMPConfig, LAMPScore},
topology::{HAClusterTopology, Url},
topology::{K8sAnywhereTopology, Url},
};
#[tokio::main]
@ -18,9 +17,7 @@ async fn main() {
},
};
let inventory = Inventory::autoload();
let topology = HAClusterTopology::autoload();
let mut maestro = Maestro::new(inventory, topology);
let maestro = Maestro::<K8sAnywhereTopology>::load_from_env();
maestro.register_all(vec![Box::new(lamp_stack)]);
harmony_tui::init(maestro).await.unwrap();
}

View File

@ -51,7 +51,7 @@ pub mod tui {
/// harmony_tui::init(maestro).await.unwrap();
/// }
/// ```
pub async fn init<T: Topology + std::fmt::Debug + Send + Sync + 'static>(
pub async fn init<T: Topology + Send + Sync + 'static>(
maestro: Maestro<T>,
) -> Result<(), Box<dyn std::error::Error>> {
HarmonyTUI::new(maestro).init().await
@ -63,12 +63,21 @@ pub struct HarmonyTUI<T: Topology> {
tui_state: TuiWidgetState,
}
#[derive(Debug)]
enum HarmonyTuiEvent<T: Topology> {
LaunchScore(Box<dyn Score<T>>),
}
impl<T: Topology + std::fmt::Debug + Send + Sync + 'static> HarmonyTUI<T> {
impl <T: Topology> std::fmt::Display for HarmonyTuiEvent<T> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let output = match self {
HarmonyTuiEvent::LaunchScore(score) => format!("LaunchScore({})",score.name()),
};
f.write_str(&output)
}
}
impl<T: Topology + Send + Sync + 'static> HarmonyTUI<T> {
pub fn new(maestro: Maestro<T>) -> Self {
let maestro = Arc::new(maestro);
let (_handle, sender) = Self::start_channel(maestro.clone());
@ -91,7 +100,7 @@ impl<T: Topology + std::fmt::Debug + Send + Sync + 'static> HarmonyTUI<T> {
let handle = tokio::spawn(async move {
info!("Starting message channel receiver loop");
while let Some(event) = receiver.recv().await {
info!("Received event {event:#?}");
info!("Received event {event}");
match event {
HarmonyTuiEvent::LaunchScore(score_item) => {
let maestro = maestro.clone();