openstack_cli_network/v2/subnetpool/
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::network::v2::subnetpool::list;
32use openstack_sdk::api::{Pagination, paged};
33use openstack_types::network::v2::subnetpool::response;
34
35#[derive(Args)]
58#[command(about = "List subnet pools")]
59pub struct SubnetpoolsCommand {
60 #[command(flatten)]
62 query: QueryParameters,
63
64 #[command(flatten)]
66 path: PathParameters,
67
68 #[arg(long, default_value_t = 10000)]
70 max_items: usize,
71}
72
73#[derive(Args)]
75struct QueryParameters {
76 #[arg(help_heading = "Query parameters", long)]
78 address_scope_id: Option<String>,
79
80 #[arg(help_heading = "Query parameters", long)]
82 default_prefixlen: Option<u32>,
83
84 #[arg(help_heading = "Query parameters", long)]
86 default_quota: Option<u32>,
87
88 #[arg(help_heading = "Query parameters", long)]
90 description: Option<String>,
91
92 #[arg(help_heading = "Query parameters", long)]
94 id: Option<String>,
95
96 #[arg(help_heading = "Query parameters", long)]
98 ip_version: Option<String>,
99
100 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
102 is_default: Option<bool>,
103
104 #[arg(
109 help_heading = "Query parameters",
110 long("page-size"),
111 visible_alias("limit")
112 )]
113 limit: Option<u32>,
114
115 #[arg(help_heading = "Query parameters", long)]
119 marker: Option<String>,
120
121 #[arg(help_heading = "Query parameters", long)]
123 max_prefixlen: Option<u32>,
124
125 #[arg(help_heading = "Query parameters", long)]
127 min_prefixlen: Option<u32>,
128
129 #[arg(help_heading = "Query parameters", long)]
131 name: Option<String>,
132
133 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
135 not_tags: Option<Vec<String>>,
136
137 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
139 not_tags_any: Option<Vec<String>>,
140
141 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
143 page_reverse: Option<bool>,
144
145 #[arg(help_heading = "Query parameters", long)]
147 revision_number: Option<String>,
148
149 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
151 shared: Option<bool>,
152
153 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
156 sort_dir: Option<Vec<String>>,
157
158 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
161 sort_key: Option<Vec<String>>,
162
163 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
165 tags: Option<Vec<String>>,
166
167 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
169 tags_any: Option<Vec<String>>,
170
171 #[arg(help_heading = "Query parameters", long)]
173 tenant_id: Option<String>,
174}
175
176#[derive(Args)]
178struct PathParameters {}
179
180impl SubnetpoolsCommand {
181 pub async fn take_action<C: CliArgs>(
183 &self,
184 parsed_args: &C,
185 client: &mut AsyncOpenStack,
186 ) -> Result<(), OpenStackCliError> {
187 info!("List Subnetpools");
188
189 let op = OutputProcessor::from_args(parsed_args, Some("network.subnetpool"), Some("list"));
190 op.validate_args(parsed_args)?;
191
192 let mut ep_builder = list::Request::builder();
193
194 if let Some(val) = &self.query.limit {
196 ep_builder.limit(*val);
197 }
198 if let Some(val) = &self.query.marker {
199 ep_builder.marker(val);
200 }
201 if let Some(val) = &self.query.page_reverse {
202 ep_builder.page_reverse(*val);
203 }
204 if let Some(val) = &self.query.sort_dir {
205 ep_builder.sort_dir(val.iter());
206 }
207 if let Some(val) = &self.query.sort_key {
208 ep_builder.sort_key(val.iter());
209 }
210 if let Some(val) = &self.query.address_scope_id {
211 ep_builder.address_scope_id(val);
212 }
213 if let Some(val) = &self.query.default_prefixlen {
214 ep_builder.default_prefixlen(*val);
215 }
216 if let Some(val) = &self.query.default_quota {
217 ep_builder.default_quota(*val);
218 }
219 if let Some(val) = &self.query.description {
220 ep_builder.description(val);
221 }
222 if let Some(val) = &self.query.id {
223 ep_builder.id(val);
224 }
225 if let Some(val) = &self.query.ip_version {
226 ep_builder.ip_version(val);
227 }
228 if let Some(val) = &self.query.is_default {
229 ep_builder.is_default(*val);
230 }
231 if let Some(val) = &self.query.max_prefixlen {
232 ep_builder.max_prefixlen(*val);
233 }
234 if let Some(val) = &self.query.min_prefixlen {
235 ep_builder.min_prefixlen(*val);
236 }
237 if let Some(val) = &self.query.name {
238 ep_builder.name(val);
239 }
240 if let Some(val) = &self.query.not_tags {
241 ep_builder.not_tags(val.iter());
242 }
243 if let Some(val) = &self.query.not_tags_any {
244 ep_builder.not_tags_any(val.iter());
245 }
246 if let Some(val) = &self.query.revision_number {
247 ep_builder.revision_number(val);
248 }
249 if let Some(val) = &self.query.shared {
250 ep_builder.shared(*val);
251 }
252 if let Some(val) = &self.query.tags {
253 ep_builder.tags(val.iter());
254 }
255 if let Some(val) = &self.query.tags_any {
256 ep_builder.tags_any(val.iter());
257 }
258 if let Some(val) = &self.query.tenant_id {
259 ep_builder.tenant_id(val);
260 }
261
262 let ep = ep_builder
263 .build()
264 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
265
266 let data: Vec<serde_json::Value> = paged(ep, Pagination::Limit(self.max_items))
267 .query_async(client)
268 .await?;
269
270 op.output_list::<response::list::SubnetpoolResponse>(data.clone())?;
271 op.show_command_hint()?;
273 Ok(())
274 }
275}