openstack_cli_network/v2/vpn/vpnservice/
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::vpn::vpnservice::list;
32use openstack_sdk::api::{Pagination, paged};
33use openstack_types::network::v2::vpn::vpnservice::response;
34
35#[derive(Args)]
56#[command(about = "List VPN services")]
57pub struct VpnservicesCommand {
58 #[command(flatten)]
60 query: QueryParameters,
61
62 #[command(flatten)]
64 path: PathParameters,
65
66 #[arg(long, default_value_t = 10000)]
68 max_items: usize,
69}
70
71#[derive(Args)]
73struct QueryParameters {
74 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
76 admin_state_up: Option<bool>,
77
78 #[arg(help_heading = "Query parameters", long)]
80 description: Option<String>,
81
82 #[arg(help_heading = "Query parameters", long)]
84 external_v4_ip: Option<String>,
85
86 #[arg(help_heading = "Query parameters", long)]
88 external_v6_ip: Option<String>,
89
90 #[arg(help_heading = "Query parameters", long)]
92 flavor_id: Option<String>,
93
94 #[arg(help_heading = "Query parameters", long)]
96 id: Option<String>,
97
98 #[arg(
103 help_heading = "Query parameters",
104 long("page-size"),
105 visible_alias("limit")
106 )]
107 limit: Option<u32>,
108
109 #[arg(help_heading = "Query parameters", long)]
113 marker: Option<String>,
114
115 #[arg(help_heading = "Query parameters", long)]
117 name: Option<String>,
118
119 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
121 page_reverse: Option<bool>,
122
123 #[arg(help_heading = "Query parameters", long)]
125 router_id: Option<String>,
126
127 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
130 sort_dir: Option<Vec<String>>,
131
132 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
135 sort_key: Option<Vec<String>>,
136
137 #[arg(help_heading = "Query parameters", long)]
139 status: Option<String>,
140
141 #[arg(help_heading = "Query parameters", long)]
143 subnet_id: Option<String>,
144
145 #[arg(help_heading = "Query parameters", long)]
147 tenant_id: Option<String>,
148}
149
150#[derive(Args)]
152struct PathParameters {}
153
154impl VpnservicesCommand {
155 pub async fn take_action<C: CliArgs>(
157 &self,
158 parsed_args: &C,
159 client: &mut AsyncOpenStack,
160 ) -> Result<(), OpenStackCliError> {
161 info!("List Vpnservices");
162
163 let op =
164 OutputProcessor::from_args(parsed_args, Some("network.vpn/vpnservice"), Some("list"));
165 op.validate_args(parsed_args)?;
166
167 let mut ep_builder = list::Request::builder();
168
169 if let Some(val) = &self.query.limit {
171 ep_builder.limit(*val);
172 }
173 if let Some(val) = &self.query.marker {
174 ep_builder.marker(val);
175 }
176 if let Some(val) = &self.query.page_reverse {
177 ep_builder.page_reverse(*val);
178 }
179 if let Some(val) = &self.query.sort_dir {
180 ep_builder.sort_dir(val.iter());
181 }
182 if let Some(val) = &self.query.sort_key {
183 ep_builder.sort_key(val.iter());
184 }
185 if let Some(val) = &self.query.admin_state_up {
186 ep_builder.admin_state_up(*val);
187 }
188 if let Some(val) = &self.query.description {
189 ep_builder.description(val);
190 }
191 if let Some(val) = &self.query.external_v4_ip {
192 ep_builder.external_v4_ip(val);
193 }
194 if let Some(val) = &self.query.external_v6_ip {
195 ep_builder.external_v6_ip(val);
196 }
197 if let Some(val) = &self.query.flavor_id {
198 ep_builder.flavor_id(val);
199 }
200 if let Some(val) = &self.query.id {
201 ep_builder.id(val);
202 }
203 if let Some(val) = &self.query.name {
204 ep_builder.name(val);
205 }
206 if let Some(val) = &self.query.router_id {
207 ep_builder.router_id(val);
208 }
209 if let Some(val) = &self.query.status {
210 ep_builder.status(val);
211 }
212 if let Some(val) = &self.query.subnet_id {
213 ep_builder.subnet_id(val);
214 }
215 if let Some(val) = &self.query.tenant_id {
216 ep_builder.tenant_id(val);
217 }
218
219 let ep = ep_builder
220 .build()
221 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
222
223 let data: Vec<serde_json::Value> = paged(ep, Pagination::Limit(self.max_items))
224 .query_async(client)
225 .await?;
226
227 op.output_list::<response::list::VpnserviceResponse>(data.clone())?;
228 op.show_command_hint()?;
230 Ok(())
231 }
232}