openstack_cli_network/v2/address_scope/
create.rs1use 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 openstack_sdk::api::QueryAsync;
32use openstack_sdk::api::network::v2::address_scope::create;
33use openstack_types::network::v2::address_scope::response;
34
35#[derive(Args)]
41#[command(about = "Create address scope")]
42pub struct AddressScopeCommand {
43 #[command(flatten)]
45 query: QueryParameters,
46
47 #[command(flatten)]
49 path: PathParameters,
50
51 #[command(flatten)]
53 address_scope: AddressScope,
54}
55
56#[derive(Args)]
58struct QueryParameters {}
59
60#[derive(Args)]
62struct PathParameters {}
63#[derive(Args, Clone)]
65struct AddressScope {
66 #[arg(help_heading = "Body parameters", long)]
68 ip_version: Option<i32>,
69
70 #[arg(help_heading = "Body parameters", long)]
72 name: Option<String>,
73
74 #[arg(action=clap::ArgAction::Set, help_heading = "Body parameters", long)]
77 shared: Option<bool>,
78
79 #[arg(help_heading = "Body parameters", long)]
83 tenant_id: Option<String>,
84}
85
86impl AddressScopeCommand {
87 pub async fn take_action<C: CliArgs>(
89 &self,
90 parsed_args: &C,
91 client: &mut AsyncOpenStack,
92 ) -> Result<(), OpenStackCliError> {
93 info!("Create AddressScope");
94
95 let op =
96 OutputProcessor::from_args(parsed_args, Some("network.address_scope"), Some("create"));
97 op.validate_args(parsed_args)?;
98
99 let mut ep_builder = create::Request::builder();
100
101 let args = &self.address_scope;
104 let mut address_scope_builder = create::AddressScopeBuilder::default();
105 if let Some(val) = &args.ip_version {
106 address_scope_builder.ip_version(*val);
107 }
108
109 if let Some(val) = &args.name {
110 address_scope_builder.name(val);
111 }
112
113 if let Some(val) = &args.shared {
114 address_scope_builder.shared(*val);
115 }
116
117 if let Some(val) = &args.tenant_id {
118 address_scope_builder.tenant_id(val);
119 }
120
121 ep_builder.address_scope(
122 address_scope_builder
123 .build()
124 .wrap_err("error preparing the request data")?,
125 );
126
127 let ep = ep_builder
128 .build()
129 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
130
131 let data: serde_json::Value = ep.query_async(client).await?;
132
133 op.output_single::<response::create::AddressScopeResponse>(data.clone())?;
134 op.show_command_hint()?;
136 Ok(())
137 }
138}