Skip to main content

openstack_cli_network/v2/network_segment_range/
create.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//! Create NetworkSegmentRange command
19//!
20//! Wraps invoking of the `v2.0/network-segment-ranges` with `POST` method
21
22use clap::Args;
23use eyre::WrapErr;
24use tracing::info;
25
26use openstack_cli_core::cli::CliArgs;
27use openstack_cli_core::error::OpenStackCliError;
28use openstack_cli_core::output::OutputProcessor;
29use openstack_sdk::AsyncOpenStack;
30
31use clap::ValueEnum;
32use openstack_sdk::api::QueryAsync;
33use openstack_sdk::api::network::v2::network_segment_range::create;
34use openstack_types::network::v2::network_segment_range::response;
35
36/// Command without description in OpenAPI
37#[derive(Args)]
38pub struct NetworkSegmentRangeCommand {
39    /// Request Query parameters
40    #[command(flatten)]
41    query: QueryParameters,
42
43    /// Path parameters
44    #[command(flatten)]
45    path: PathParameters,
46
47    #[command(flatten)]
48    network_segment_range: NetworkSegmentRange,
49}
50
51/// Query parameters
52#[derive(Args)]
53struct QueryParameters {}
54
55/// Path parameters
56#[derive(Args)]
57struct PathParameters {}
58
59#[derive(Clone, Eq, Ord, PartialEq, PartialOrd, ValueEnum)]
60enum NetworkType {
61    Geneve,
62    Gre,
63    Vlan,
64    Vxlan,
65}
66
67/// NetworkSegmentRange Body data
68#[derive(Args, Clone)]
69struct NetworkSegmentRange {
70    #[arg(help_heading = "Body parameters", long)]
71    description: Option<String>,
72
73    #[arg(help_heading = "Body parameters", long)]
74    maximum: Option<i32>,
75
76    #[arg(help_heading = "Body parameters", long)]
77    minimum: Option<i32>,
78
79    #[arg(help_heading = "Body parameters", long)]
80    name: Option<String>,
81
82    #[arg(help_heading = "Body parameters", long)]
83    network_type: Option<NetworkType>,
84
85    #[arg(help_heading = "Body parameters", long)]
86    physical_network: Option<String>,
87
88    #[arg(help_heading = "Body parameters", long)]
89    project_id: Option<String>,
90
91    #[arg(action=clap::ArgAction::Set, help_heading = "Body parameters", long)]
92    shared: Option<bool>,
93}
94
95impl NetworkSegmentRangeCommand {
96    /// Perform command action
97    pub async fn take_action<C: CliArgs>(
98        &self,
99        parsed_args: &C,
100        client: &mut AsyncOpenStack,
101    ) -> Result<(), OpenStackCliError> {
102        info!("Create NetworkSegmentRange");
103
104        let op = OutputProcessor::from_args(
105            parsed_args,
106            Some("network.network_segment_range"),
107            Some("create"),
108        );
109        op.validate_args(parsed_args)?;
110
111        let mut ep_builder = create::Request::builder();
112
113        // Set body parameters
114        // Set Request.network_segment_range data
115        let args = &self.network_segment_range;
116        let mut network_segment_range_builder = create::NetworkSegmentRangeBuilder::default();
117        if let Some(val) = &args.description {
118            network_segment_range_builder.description(val);
119        }
120
121        if let Some(val) = &args.maximum {
122            network_segment_range_builder.maximum(*val);
123        }
124
125        if let Some(val) = &args.minimum {
126            network_segment_range_builder.minimum(*val);
127        }
128
129        if let Some(val) = &args.name {
130            network_segment_range_builder.name(val);
131        }
132
133        if let Some(val) = &args.network_type {
134            let tmp = match val {
135                NetworkType::Geneve => create::NetworkType::Geneve,
136                NetworkType::Gre => create::NetworkType::Gre,
137                NetworkType::Vlan => create::NetworkType::Vlan,
138                NetworkType::Vxlan => create::NetworkType::Vxlan,
139            };
140            network_segment_range_builder.network_type(tmp);
141        }
142
143        if let Some(val) = &args.physical_network {
144            network_segment_range_builder.physical_network(val);
145        }
146
147        if let Some(val) = &args.project_id {
148            network_segment_range_builder.project_id(val);
149        }
150
151        if let Some(val) = &args.shared {
152            network_segment_range_builder.shared(*val);
153        }
154
155        ep_builder.network_segment_range(
156            network_segment_range_builder
157                .build()
158                .wrap_err("error preparing the request data")?,
159        );
160
161        let ep = ep_builder
162            .build()
163            .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
164
165        let data: serde_json::Value = ep.query_async(client).await?;
166
167        op.output_single::<response::create::NetworkSegmentRangeResponse>(data.clone())?;
168        // Show command specific hints
169        op.show_command_hint()?;
170        Ok(())
171    }
172}