Skip to main content

openstack_cli_load_balancer/v2/provider/
list.rs

1// Licensed under the Apache License, Version 2.0 (the "License");
2// you may not use this file except in compliance with the License.
3// You may obtain a copy of the License at
4//
5//     http://www.apache.org/licenses/LICENSE-2.0
6//
7// Unless required by applicable law or agreed to in writing, software
8// distributed under the License is distributed on an "AS IS" BASIS,
9// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10// See the License for the specific language governing permissions and
11// limitations under the License.
12//
13// SPDX-License-Identifier: Apache-2.0
14//
15// WARNING: This file is automatically generated from OpenAPI schema using
16// `openstack-codegenerator`.
17
18//! List Providers command
19//!
20//! Wraps invoking of the `v2/lbaas/providers` with `GET` method
21
22use 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::load_balancer::v2::provider::list;
32use openstack_sdk::api::{Pagination, paged};
33use openstack_types::load_balancer::v2::provider::response;
34
35/// Lists all enabled provider drivers.
36///
37/// Use the `fields` query parameter to control which fields are returned in
38/// the response body.
39///
40/// The list might be empty.
41#[derive(Args)]
42#[command(about = "List Providers")]
43pub struct ProvidersCommand {
44    /// Request Query parameters
45    #[command(flatten)]
46    query: QueryParameters,
47
48    /// Path parameters
49    #[command(flatten)]
50    path: PathParameters,
51
52    /// Total limit of entities count to return. Use this when there are too many entries.
53    #[arg(long, default_value_t = 10000)]
54    max_items: usize,
55}
56
57/// Query parameters
58#[derive(Args)]
59struct QueryParameters {
60    #[arg(help_heading = "Query parameters", long)]
61    description: Option<String>,
62
63    /// Page size
64    #[arg(
65        help_heading = "Query parameters",
66        long("page-size"),
67        visible_alias("limit")
68    )]
69    limit: Option<i32>,
70
71    /// ID of the last item in the previous list
72    #[arg(help_heading = "Query parameters", long)]
73    marker: Option<String>,
74
75    #[arg(help_heading = "Query parameters", long)]
76    name: Option<String>,
77
78    /// The page direction.
79    #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
80    page_reverse: Option<bool>,
81}
82
83/// Path parameters
84#[derive(Args)]
85struct PathParameters {}
86
87impl ProvidersCommand {
88    /// Perform command action
89    pub async fn take_action<C: CliArgs>(
90        &self,
91        parsed_args: &C,
92        client: &mut AsyncOpenStack,
93    ) -> Result<(), OpenStackCliError> {
94        info!("List Providers");
95
96        let op =
97            OutputProcessor::from_args(parsed_args, Some("load-balancer.provider"), Some("list"));
98        op.validate_args(parsed_args)?;
99
100        let mut ep_builder = list::Request::builder();
101
102        // Set query parameters
103        if let Some(val) = &self.query.description {
104            ep_builder.description(val);
105        }
106        if let Some(val) = &self.query.limit {
107            ep_builder.limit(*val);
108        }
109        if let Some(val) = &self.query.marker {
110            ep_builder.marker(val);
111        }
112        if let Some(val) = &self.query.name {
113            ep_builder.name(val);
114        }
115        if let Some(val) = &self.query.page_reverse {
116            ep_builder.page_reverse(*val);
117        }
118
119        let ep = ep_builder
120            .build()
121            .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
122
123        let data: Vec<serde_json::Value> = paged(ep, Pagination::Limit(self.max_items))
124            .query_async(client)
125            .await?;
126
127        op.output_list::<response::list::ProviderResponse>(data.clone())?;
128        // Show command specific hints
129        op.show_command_hint()?;
130        Ok(())
131    }
132}