openstack_cli_network/v2/vpn/ipsecpolicy/
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::ipsecpolicy::list;
32use openstack_sdk::api::{Pagination, paged};
33use openstack_types::network::v2::vpn::ipsecpolicy::response;
34
35#[derive(Args)]
54#[command(about = "List IPsec policies")]
55pub struct IpsecpoliciesCommand {
56 #[command(flatten)]
58 query: QueryParameters,
59
60 #[command(flatten)]
62 path: PathParameters,
63
64 #[arg(long, default_value_t = 10000)]
66 max_items: usize,
67}
68
69#[derive(Args)]
71struct QueryParameters {
72 #[arg(help_heading = "Query parameters", long, value_parser = ["aes-cmac","aes-xcbc","sha1","sha256","sha384","sha512"])]
74 auth_algorithm: Option<String>,
75
76 #[arg(help_heading = "Query parameters", long)]
78 description: Option<String>,
79
80 #[arg(help_heading = "Query parameters", long, value_parser = ["transport","tunnel"])]
82 encapsulation_mode: Option<String>,
83
84 #[arg(help_heading = "Query parameters", long, value_parser = ["3des","aes-128","aes-128-ccm-12","aes-128-ccm-16","aes-128-ccm-8","aes-128-ctr","aes-128-gcm-12","aes-128-gcm-16","aes-128-gcm-8","aes-192","aes-192-ccm-12","aes-192-ccm-16","aes-192-ccm-8","aes-192-ctr","aes-192-gcm-12","aes-192-gcm-16","aes-192-gcm-8","aes-256","aes-256-ccm-12","aes-256-ccm-16","aes-256-ccm-8","aes-256-ctr","aes-256-gcm-12","aes-256-gcm-16","aes-256-gcm-8"])]
86 encryption_algorithm: Option<String>,
87
88 #[arg(help_heading = "Query parameters", long)]
90 id: Option<String>,
91
92 #[arg(
97 help_heading = "Query parameters",
98 long("page-size"),
99 visible_alias("limit")
100 )]
101 limit: Option<u32>,
102
103 #[arg(help_heading = "Query parameters", long)]
107 marker: Option<String>,
108
109 #[arg(help_heading = "Query parameters", long)]
111 name: Option<String>,
112
113 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
115 page_reverse: Option<bool>,
116
117 #[arg(help_heading = "Query parameters", long, value_parser = ["group14","group15","group16","group17","group18","group19","group2","group20","group21","group22","group23","group24","group25","group26","group27","group28","group29","group30","group31","group5"])]
119 pfs: Option<String>,
120
121 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
124 sort_dir: Option<Vec<String>>,
125
126 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
129 sort_key: Option<Vec<String>>,
130
131 #[arg(help_heading = "Query parameters", long)]
133 tenant_id: Option<String>,
134
135 #[arg(help_heading = "Query parameters", long, value_parser = ["ah","ah-esp","esp"])]
137 transform_protocol: Option<String>,
138}
139
140#[derive(Args)]
142struct PathParameters {}
143
144impl IpsecpoliciesCommand {
145 pub async fn take_action<C: CliArgs>(
147 &self,
148 parsed_args: &C,
149 client: &mut AsyncOpenStack,
150 ) -> Result<(), OpenStackCliError> {
151 info!("List Ipsecpolicies");
152
153 let op =
154 OutputProcessor::from_args(parsed_args, Some("network.vpn/ipsecpolicy"), Some("list"));
155 op.validate_args(parsed_args)?;
156
157 let mut ep_builder = list::Request::builder();
158
159 if let Some(val) = &self.query.auth_algorithm {
161 ep_builder.auth_algorithm(val);
162 }
163 if let Some(val) = &self.query.description {
164 ep_builder.description(val);
165 }
166 if let Some(val) = &self.query.encapsulation_mode {
167 ep_builder.encapsulation_mode(val);
168 }
169 if let Some(val) = &self.query.encryption_algorithm {
170 ep_builder.encryption_algorithm(val);
171 }
172 if let Some(val) = &self.query.id {
173 ep_builder.id(val);
174 }
175 if let Some(val) = &self.query.name {
176 ep_builder.name(val);
177 }
178 if let Some(val) = &self.query.pfs {
179 ep_builder.pfs(val);
180 }
181 if let Some(val) = &self.query.tenant_id {
182 ep_builder.tenant_id(val);
183 }
184 if let Some(val) = &self.query.transform_protocol {
185 ep_builder.transform_protocol(val);
186 }
187 if let Some(val) = &self.query.limit {
188 ep_builder.limit(*val);
189 }
190 if let Some(val) = &self.query.marker {
191 ep_builder.marker(val);
192 }
193 if let Some(val) = &self.query.page_reverse {
194 ep_builder.page_reverse(*val);
195 }
196 if let Some(val) = &self.query.sort_dir {
197 ep_builder.sort_dir(val.iter());
198 }
199 if let Some(val) = &self.query.sort_key {
200 ep_builder.sort_key(val.iter());
201 }
202
203 let ep = ep_builder
204 .build()
205 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
206
207 let data: Vec<serde_json::Value> = paged(ep, Pagination::Limit(self.max_items))
208 .query_async(client)
209 .await?;
210
211 op.output_list::<response::list::IpsecpolicyResponse>(data.clone())?;
212 op.show_command_hint()?;
214 Ok(())
215 }
216}