manta_server/service/
cluster.rs1use csm_rs::node::types::NodeDetails;
4use manta_backend_dispatcher::error::Error;
5use manta_backend_dispatcher::interfaces::hsm::group::GroupTrait;
6
7use crate::server::common::app_context::InfraContext;
8use crate::server::common::authorization::get_groups_names_available;
9pub use manta_shared::shared::params::cluster::GetClusterParams;
10
11pub async fn get_cluster_nodes(
13 infra: &InfraContext<'_>,
14 token: &str,
15 params: &GetClusterParams,
16) -> Result<Vec<NodeDetails>, Error> {
17 let target_hsm_group_vec = get_groups_names_available(
18 infra.backend,
19 token,
20 params.hsm_group_name.as_deref(),
21 params.settings_hsm_group_name.as_deref(),
22 )
23 .await?;
24
25 let mut hsm_groups_node_list = infra
26 .backend
27 .get_member_vec_from_group_name_vec(token, &target_hsm_group_vec)
28 .await?;
29
30 hsm_groups_node_list.sort();
31
32 let mut node_details_list = csm_rs::node::utils::get_node_details(
33 token,
34 infra.shasta_base_url,
35 infra.shasta_root_cert,
36 infra.socks5_proxy,
37 hsm_groups_node_list,
38 )
39 .await
40 .map_err(|e: csm_rs::error::Error| -> Error { e.into() })?;
41
42 if let Some(ref status) = params.status_filter {
44 node_details_list.retain(|nd| {
45 nd.power_status.eq_ignore_ascii_case(status)
46 || nd.configuration_status.eq_ignore_ascii_case(status)
47 });
48 }
49
50 node_details_list.sort_by(|a, b| a.xname.cmp(&b.xname));
51
52 Ok(node_details_list)
53}