openstack_cli_network/v2/network/
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::network::list;
32use openstack_sdk::api::{Pagination, paged};
33use openstack_types::network::v2::network::response;
34
35#[derive(Args)]
63#[command(about = "List networks")]
64pub struct NetworksCommand {
65 #[command(flatten)]
67 query: QueryParameters,
68
69 #[command(flatten)]
71 path: PathParameters,
72
73 #[arg(long, default_value_t = 10000)]
75 max_items: usize,
76}
77
78#[derive(Args)]
80struct QueryParameters {
81 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
83 admin_state_up: Option<bool>,
84
85 #[arg(help_heading = "Query parameters", long)]
87 description: Option<String>,
88
89 #[arg(help_heading = "Query parameters", long)]
91 id: Option<String>,
92
93 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
95 is_default: Option<bool>,
96
97 #[arg(
102 help_heading = "Query parameters",
103 long("page-size"),
104 visible_alias("limit")
105 )]
106 limit: Option<u32>,
107
108 #[arg(help_heading = "Query parameters", long)]
112 marker: Option<String>,
113
114 #[arg(help_heading = "Query parameters", long)]
116 mtu: Option<u32>,
117
118 #[arg(help_heading = "Query parameters", long)]
120 name: Option<String>,
121
122 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
124 not_tags: Option<Vec<String>>,
125
126 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
128 not_tags_any: Option<Vec<String>>,
129
130 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
132 page_reverse: Option<bool>,
133
134 #[arg(help_heading = "Query parameters", long)]
136 provider_network_type: Option<String>,
137
138 #[arg(help_heading = "Query parameters", long)]
140 provider_physical_network: Option<String>,
141
142 #[arg(help_heading = "Query parameters", long)]
144 provider_segmentation_id: Option<i32>,
145
146 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
148 qinq: Option<bool>,
149
150 #[arg(help_heading = "Query parameters", long)]
152 revision_number: Option<String>,
153
154 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
156 router_external: Option<bool>,
157
158 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
160 shared: Option<bool>,
161
162 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
165 sort_dir: Option<Vec<String>>,
166
167 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
170 sort_key: Option<Vec<String>>,
171
172 #[arg(help_heading = "Query parameters", long)]
174 status: Option<String>,
175
176 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
178 tags: Option<Vec<String>>,
179
180 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
182 tags_any: Option<Vec<String>>,
183
184 #[arg(help_heading = "Query parameters", long)]
186 tenant_id: Option<String>,
187
188 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
190 vlan_transparent: Option<bool>,
191}
192
193#[derive(Args)]
195struct PathParameters {}
196
197impl NetworksCommand {
198 pub async fn take_action<C: CliArgs>(
200 &self,
201 parsed_args: &C,
202 client: &mut AsyncOpenStack,
203 ) -> Result<(), OpenStackCliError> {
204 info!("List Networks");
205
206 let op = OutputProcessor::from_args(parsed_args, Some("network.network"), Some("list"));
207 op.validate_args(parsed_args)?;
208
209 let mut ep_builder = list::Request::builder();
210
211 if let Some(val) = &self.query.limit {
213 ep_builder.limit(*val);
214 }
215 if let Some(val) = &self.query.marker {
216 ep_builder.marker(val);
217 }
218 if let Some(val) = &self.query.admin_state_up {
219 ep_builder.admin_state_up(*val);
220 }
221 if let Some(val) = &self.query.description {
222 ep_builder.description(val);
223 }
224 if let Some(val) = &self.query.id {
225 ep_builder.id(val);
226 }
227 if let Some(val) = &self.query.is_default {
228 ep_builder.is_default(*val);
229 }
230 if let Some(val) = &self.query.mtu {
231 ep_builder.mtu(*val);
232 }
233 if let Some(val) = &self.query.name {
234 ep_builder.name(val);
235 }
236 if let Some(val) = &self.query.not_tags {
237 ep_builder.not_tags(val.iter());
238 }
239 if let Some(val) = &self.query.not_tags_any {
240 ep_builder.not_tags_any(val.iter());
241 }
242 if let Some(val) = &self.query.provider_network_type {
243 ep_builder.provider_network_type(val);
244 }
245 if let Some(val) = &self.query.provider_physical_network {
246 ep_builder.provider_physical_network(val);
247 }
248 if let Some(val) = &self.query.provider_segmentation_id {
249 ep_builder.provider_segmentation_id(*val);
250 }
251 if let Some(val) = &self.query.qinq {
252 ep_builder.qinq(*val);
253 }
254 if let Some(val) = &self.query.revision_number {
255 ep_builder.revision_number(val);
256 }
257 if let Some(val) = &self.query.router_external {
258 ep_builder.router_external(*val);
259 }
260 if let Some(val) = &self.query.shared {
261 ep_builder.shared(*val);
262 }
263 if let Some(val) = &self.query.status {
264 ep_builder.status(val);
265 }
266 if let Some(val) = &self.query.tags {
267 ep_builder.tags(val.iter());
268 }
269 if let Some(val) = &self.query.tags_any {
270 ep_builder.tags_any(val.iter());
271 }
272 if let Some(val) = &self.query.tenant_id {
273 ep_builder.tenant_id(val);
274 }
275 if let Some(val) = &self.query.vlan_transparent {
276 ep_builder.vlan_transparent(*val);
277 }
278 if let Some(val) = &self.query.page_reverse {
279 ep_builder.page_reverse(*val);
280 }
281 if let Some(val) = &self.query.sort_dir {
282 ep_builder.sort_dir(val.iter());
283 }
284 if let Some(val) = &self.query.sort_key {
285 ep_builder.sort_key(val.iter());
286 }
287
288 let ep = ep_builder
289 .build()
290 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
291
292 let data: Vec<serde_json::Value> = paged(ep, Pagination::Limit(self.max_items))
293 .query_async(client)
294 .await?;
295
296 op.output_list::<response::list::NetworkResponse>(data.clone())?;
297 op.show_command_hint()?;
299 Ok(())
300 }
301}