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

View File

@ -51,7 +51,7 @@ pub mod tui {
/// harmony_tui::init(maestro).await.unwrap(); /// 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>, maestro: Maestro<T>,
) -> Result<(), Box<dyn std::error::Error>> { ) -> Result<(), Box<dyn std::error::Error>> {
HarmonyTUI::new(maestro).init().await HarmonyTUI::new(maestro).init().await
@ -63,12 +63,21 @@ pub struct HarmonyTUI<T: Topology> {
tui_state: TuiWidgetState, tui_state: TuiWidgetState,
} }
#[derive(Debug)]
enum HarmonyTuiEvent<T: Topology> { enum HarmonyTuiEvent<T: Topology> {
LaunchScore(Box<dyn Score<T>>), 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 { pub fn new(maestro: Maestro<T>) -> Self {
let maestro = Arc::new(maestro); let maestro = Arc::new(maestro);
let (_handle, sender) = Self::start_channel(maestro.clone()); 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 { let handle = tokio::spawn(async move {
info!("Starting message channel receiver loop"); info!("Starting message channel receiver loop");
while let Some(event) = receiver.recv().await { while let Some(event) = receiver.recv().await {
info!("Received event {event:#?}"); info!("Received event {event}");
match event { match event {
HarmonyTuiEvent::LaunchScore(score_item) => { HarmonyTuiEvent::LaunchScore(score_item) => {
let maestro = maestro.clone(); let maestro = maestro.clone();