openstack_cli_block_storage/v3/cluster/
list.rs1use clap::Args;
23use tracing::info;
24
25use openstack_cli_core::cli::CliArgs;
26use openstack_cli_core::error::OpenStackCliError;
27use openstack_cli_core::output::OutputProcessor;
28use openstack_sdk::AsyncOpenStack;
29
30use openstack_sdk::api::QueryAsync;
31use openstack_sdk::api::block_storage::v3::cluster::list_detailed;
32use openstack_types::block_storage::v3::cluster::response;
33
34#[derive(Args)]
38pub struct ClustersCommand {
39 #[command(flatten)]
41 query: QueryParameters,
42
43 #[command(flatten)]
45 path: PathParameters,
46}
47
48#[derive(Args)]
50struct QueryParameters {
51 #[arg(help_heading = "Query parameters", long)]
53 active_backend_id: Option<String>,
54
55 #[arg(help_heading = "Query parameters", long, value_parser = ["cinder-api","cinder-backup","cinder-scheduler","cinder-volume"])]
59 binary: Option<String>,
60
61 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
63 disabled: Option<bool>,
64
65 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
67 frozen: Option<bool>,
68
69 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
71 is_up: Option<bool>,
72
73 #[arg(help_heading = "Query parameters", long)]
75 name: Option<String>,
76
77 #[arg(help_heading = "Query parameters", long)]
79 num_down_hosts: Option<f32>,
80
81 #[arg(help_heading = "Query parameters", long)]
83 num_hosts: Option<f32>,
84
85 #[arg(help_heading = "Query parameters", long, value_parser = ["disabled","enabled"])]
87 replication_stats: Option<String>,
88}
89
90#[derive(Args)]
92struct PathParameters {}
93
94impl ClustersCommand {
95 pub async fn take_action<C: CliArgs>(
97 &self,
98 parsed_args: &C,
99 client: &mut AsyncOpenStack,
100 ) -> Result<(), OpenStackCliError> {
101 info!("List Clusters");
102
103 let op =
104 OutputProcessor::from_args(parsed_args, Some("block-storage.cluster"), Some("list"));
105 op.validate_args(parsed_args)?;
106
107 let mut ep_builder = list_detailed::Request::builder();
108
109 if let Some(val) = &self.query.active_backend_id {
111 ep_builder.active_backend_id(val);
112 }
113 if let Some(val) = &self.query.binary {
114 ep_builder.binary(val);
115 }
116 if let Some(val) = &self.query.disabled {
117 ep_builder.disabled(*val);
118 }
119 if let Some(val) = &self.query.frozen {
120 ep_builder.frozen(*val);
121 }
122 if let Some(val) = &self.query.is_up {
123 ep_builder.is_up(*val);
124 }
125 if let Some(val) = &self.query.name {
126 ep_builder.name(val);
127 }
128 if let Some(val) = &self.query.num_down_hosts {
129 ep_builder.num_down_hosts(*val);
130 }
131 if let Some(val) = &self.query.num_hosts {
132 ep_builder.num_hosts(*val);
133 }
134 if let Some(val) = &self.query.replication_stats {
135 ep_builder.replication_stats(val);
136 }
137
138 let ep = ep_builder
139 .build()
140 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
141
142 let data: Vec<serde_json::Value> = ep.query_async(client).await?;
143
144 op.output_list::<response::list_detailed::ClusterResponse>(data.clone())?;
145 op.show_command_hint()?;
147 Ok(())
148 }
149}