openstack_cli_dns/v2/zone/
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::dns::v2::zone::list;
32use openstack_sdk::api::{Pagination, paged};
33use openstack_types::dns::v2::zone::response;
34
35#[derive(Args)]
37#[command(about = "List Zones")]
38pub struct ZonesCommand {
39 #[command(flatten)]
41 query: QueryParameters,
42
43 #[command(flatten)]
45 headers: HeaderParameters,
46
47 #[command(flatten)]
49 path: PathParameters,
50
51 #[arg(long, default_value_t = 10000)]
53 max_items: usize,
54}
55
56#[derive(Args)]
58struct QueryParameters {
59 #[arg(help_heading = "Query parameters", long, value_parser = ["CATALOG","PRIMARY","SECONDARY"])]
61 _type: Option<String>,
62
63 #[arg(help_heading = "Query parameters", long)]
66 description: Option<String>,
67
68 #[arg(help_heading = "Query parameters", long)]
71 email: Option<String>,
72
73 #[arg(
78 help_heading = "Query parameters",
79 long("page-size"),
80 visible_alias("limit")
81 )]
82 limit: Option<i32>,
83
84 #[arg(help_heading = "Query parameters", long)]
88 marker: Option<String>,
89
90 #[arg(help_heading = "Query parameters", long)]
92 name: Option<String>,
93
94 #[arg(help_heading = "Query parameters", long, value_parser = ["asc","desc"])]
100 sort_dir: Option<String>,
101
102 #[arg(help_heading = "Query parameters", long, value_parser = ["created_at","id","name","serial","status","tenant_id","ttl","updated_at"])]
108 sort_key: Option<String>,
109
110 #[arg(help_heading = "Query parameters", long, value_parser = ["ACTIVE","DELETED","ERROR","PENDING","SUCCESS","ZONE"])]
113 status: Option<String>,
114
115 #[arg(help_heading = "Query parameters", long)]
117 ttl: Option<i32>,
118}
119
120#[derive(Args)]
122struct HeaderParameters {
123 #[arg(long)]
125 x_auth_all_projects: Option<bool>,
126
127 #[arg(long)]
129 x_auth_sudo_project_id: Option<String>,
130}
131
132#[derive(Args)]
134struct PathParameters {}
135
136impl ZonesCommand {
137 pub async fn take_action<C: CliArgs>(
139 &self,
140 parsed_args: &C,
141 client: &mut AsyncOpenStack,
142 ) -> Result<(), OpenStackCliError> {
143 info!("List Zones");
144
145 let op = OutputProcessor::from_args(parsed_args, Some("dns.zone"), Some("list"));
146 op.validate_args(parsed_args)?;
147
148 let mut ep_builder = list::Request::builder();
149 if let Some(val) = &self.query.description {
152 ep_builder.description(val);
153 }
154 if let Some(val) = &self.query.email {
155 ep_builder.email(val);
156 }
157 if let Some(val) = &self.query.limit {
158 ep_builder.limit(*val);
159 }
160 if let Some(val) = &self.query.marker {
161 ep_builder.marker(val);
162 }
163 if let Some(val) = &self.query.name {
164 ep_builder.name(val);
165 }
166 if let Some(val) = &self.query.sort_dir {
167 ep_builder.sort_dir(val);
168 }
169 if let Some(val) = &self.query.sort_key {
170 ep_builder.sort_key(val);
171 }
172 if let Some(val) = &self.query.status {
173 ep_builder.status(val);
174 }
175 if let Some(val) = &self.query.ttl {
176 ep_builder.ttl(*val);
177 }
178 if let Some(val) = &self.query._type {
179 ep_builder._type(val);
180 }
181 if let Some(val) = &self.headers.x_auth_all_projects {
183 ep_builder.header(
184 http::header::HeaderName::from_static("x-auth-all-projects"),
185 http::header::HeaderValue::from_static(if *val { "true" } else { "false" }),
186 );
187 }
188 if let Some(val) = &self.headers.x_auth_sudo_project_id {
189 ep_builder.header(
190 http::header::HeaderName::from_static("x-auth-sudo-project-id"),
191 http::header::HeaderValue::from_str(val)?,
192 );
193 }
194
195 let ep = ep_builder
196 .build()
197 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
198
199 let data: Vec<serde_json::Value> = paged(ep, Pagination::Limit(self.max_items))
200 .query_async(client)
201 .await?;
202
203 op.output_list::<response::list::ZoneResponse>(data.clone())?;
204 op.show_command_hint()?;
206 Ok(())
207 }
208}