diff --git a/src/setup/driver.rs b/src/setup/driver.rs index 78eed840a..615bed953 100644 --- a/src/setup/driver.rs +++ b/src/setup/driver.rs @@ -244,6 +244,7 @@ pub fn check_flow_setup_status( ); let mut target_resources = Vec::new(); + let mut unknown_resources = Vec::new(); let grouped_target_resources = group_resource_states( desired_state.iter().flat_map(|d| d.targets.iter()), @@ -251,13 +252,13 @@ pub fn check_flow_setup_status( )?; let registry = executor_factory_registry(); for (resource_id, v) in grouped_target_resources.into_iter() { - let factory = registry.get(&resource_id.target_kind).ok_or_else(|| { - anyhow::anyhow!( - "Target resource type not found: {}", - resource_id.target_kind - ) - })?; - + let factory = match registry.get(&resource_id.target_kind) { + Some(factory) => factory, + None => { + unknown_resources.push(resource_id.clone()); + continue; + } + }; let factory = match factory { ExecutorFactory::ExportTarget(factory) => factory, _ => bail!("Unexpected factory type for {}", resource_id.target_kind), @@ -309,6 +310,7 @@ pub fn check_flow_setup_status( metadata_change, tracking_table: tracking_table_change.into_setup_info(), target_resources, + unknown_resources, }) } diff --git a/src/setup/states.rs b/src/setup/states.rs index 6e546b52d..3ccebc5e1 100644 --- a/src/setup/states.rs +++ b/src/setup/states.rs @@ -274,7 +274,7 @@ impl std::fmt::Display for ResourceSetupInfo< Some(SetupChangeType::Invalid) => "INVALID", None => "USER MANAGED", }; - write!(f, "[ {:^9} ] {}\n\n", status_code, self.description)?; + writeln!(f, "[ {:^9} ] {}", status_code, self.description)?; if let Some(status_check) = &self.status_check { let changes = status_check.describe_changes(); if !changes.is_empty() { @@ -283,9 +283,9 @@ impl std::fmt::Display for ResourceSetupInfo< for change in changes { writeln!(f, " - {}", change)?; } + writeln!(f)?; } } - writeln!(f)?; Ok(()) } } @@ -323,6 +323,8 @@ pub struct FlowSetupStatusCheck { pub target_resources: Vec< ResourceSetupInfo>, >, + + pub unknown_resources: Vec, } impl ObjectSetupStatusCheck for FlowSetupStatusCheck { @@ -383,18 +385,17 @@ impl std::fmt::Display for FormattedFlowSetupStatusCheck<'_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let flow_ssc = self.1; - write!( - f, - "{} Flow: {}\n\n", - ObjectSetupStatusCode(flow_ssc), - self.0 - )?; + write!(f, "{} Flow: {}\n", ObjectSetupStatusCode(flow_ssc), self.0)?; let mut f = indented(f).with_str(INDENT); write!(f, "{}", flow_ssc.tracking_table)?; for target_resource in &flow_ssc.target_resources { - writeln!(f, "{}", target_resource)?; + write!(f, "{}", target_resource)?; + } + + for resource in &flow_ssc.unknown_resources { + writeln!(f, "[ UNKNOWN ] {resource}")?; } Ok(()) @@ -403,9 +404,9 @@ impl std::fmt::Display for FormattedFlowSetupStatusCheck<'_> { impl std::fmt::Display for AllSetupStatusCheck { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.metadata_table)?; + writeln!(f, "{}", self.metadata_table)?; for (flow_name, flow_status) in &self.flows { - write!( + writeln!( f, "{}", FormattedFlowSetupStatusCheck(flow_name, flow_status)