Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 38 additions & 2 deletions openstack_cli/src/network/v2/router/add_external_gateways.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ use crate::common::BoolString;
use openstack_sdk::api::network::v2::router::add_external_gateways;
use openstack_sdk::api::QueryAsync;
use serde_json::Value;
use std::fmt;
use structable_derive::StructTable;

/// Request body
Expand Down Expand Up @@ -150,8 +151,8 @@ struct ResponseData {
/// this would be `null`.
///
#[serde()]
#[structable(optional, pretty)]
external_gateway_info: Option<Value>,
#[structable(optional)]
external_gateway_info: Option<ResponseExternalGatewayInfo>,

/// The ID of the flavor associated with the router.
///
Expand Down Expand Up @@ -216,6 +217,41 @@ struct ResponseData {
#[structable(optional)]
updated_at: Option<String>,
}
/// `struct` response type
#[derive(Default, Clone, Deserialize, Serialize)]
struct ResponseExternalGatewayInfo {
enable_snat: Option<BoolString>,
external_fixed_ips: Option<Value>,
network_id: String,
qos_policy_id: Option<String>,
}

impl fmt::Display for ResponseExternalGatewayInfo {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let data = Vec::from([
format!(
"enable_snat={}",
self.enable_snat
.clone()
.map_or(String::new(), |v| v.to_string())
),
format!(
"external_fixed_ips={}",
self.external_fixed_ips
.clone()
.map_or(String::new(), |v| v.to_string())
),
format!("network_id={}", self.network_id),
format!(
"qos_policy_id={}",
self.qos_policy_id
.clone()
.map_or(String::new(), |v| v.to_string())
),
]);
write!(f, "{}", data.join(";"))
}
}

impl RouterCommand {
/// Perform command action
Expand Down
52 changes: 47 additions & 5 deletions openstack_cli/src/network/v2/router/create.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ use crate::common::BoolString;
use openstack_sdk::api::network::v2::router::create;
use openstack_sdk::api::QueryAsync;
use serde_json::Value;
use std::fmt;
use structable_derive::StructTable;

/// Creates a logical router.
Expand Down Expand Up @@ -89,6 +90,9 @@ struct ExternalGatewayInfo {

#[arg(help_heading = "Body parameters", long, required = false)]
network_id: String,

#[arg(help_heading = "Body parameters", long)]
qos_policy_id: Option<String>,
}

/// Router Body data
Expand Down Expand Up @@ -228,8 +232,8 @@ struct ResponseData {
/// this would be `null`.
///
#[serde()]
#[structable(optional, pretty)]
external_gateway_info: Option<Value>,
#[structable(optional)]
external_gateway_info: Option<ResponseExternalGatewayInfo>,

/// The ID of the flavor associated with the router.
///
Expand Down Expand Up @@ -294,6 +298,41 @@ struct ResponseData {
#[structable(optional)]
updated_at: Option<String>,
}
/// `struct` response type
#[derive(Default, Clone, Deserialize, Serialize)]
struct ResponseExternalGatewayInfo {
enable_snat: Option<BoolString>,
external_fixed_ips: Option<Value>,
network_id: String,
qos_policy_id: Option<String>,
}

impl fmt::Display for ResponseExternalGatewayInfo {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let data = Vec::from([
format!(
"enable_snat={}",
self.enable_snat
.clone()
.map_or(String::new(), |v| v.to_string())
),
format!(
"external_fixed_ips={}",
self.external_fixed_ips
.clone()
.map_or(String::new(), |v| v.to_string())
),
format!("network_id={}", self.network_id),
format!(
"qos_policy_id={}",
self.qos_policy_id
.clone()
.map_or(String::new(), |v| v.to_string())
),
]);
write!(f, "{}", data.join(";"))
}
}

impl RouterCommand {
/// Perform command action
Expand Down Expand Up @@ -331,16 +370,19 @@ impl RouterCommand {
let mut external_gateway_info_builder = create::ExternalGatewayInfoBuilder::default();

external_gateway_info_builder.network_id(&val.network_id);
if let Some(val) = &val.enable_snat {
external_gateway_info_builder.enable_snat(*val);
}
if let Some(val) = &val.external_fixed_ips {
let external_fixed_ips_builder: Vec<create::ExternalFixedIps> = val
.iter()
.flat_map(|v| serde_json::from_value::<create::ExternalFixedIps>(v.to_owned()))
.collect::<Vec<create::ExternalFixedIps>>();
external_gateway_info_builder.external_fixed_ips(external_fixed_ips_builder);
}
if let Some(val) = &val.enable_snat {
external_gateway_info_builder.enable_snat(*val);
}
if let Some(val) = &val.qos_policy_id {
external_gateway_info_builder.qos_policy_id(Some(val.into()));
}
router_builder.external_gateway_info(
external_gateway_info_builder
.build()
Expand Down
40 changes: 38 additions & 2 deletions openstack_cli/src/network/v2/router/list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ use openstack_sdk::api::network::v2::router::list;
use openstack_sdk::api::QueryAsync;
use openstack_sdk::api::{paged, Pagination};
use serde_json::Value;
use std::fmt;
use structable_derive::StructTable;

/// Lists logical routers that the project who submits the request can access.
Expand Down Expand Up @@ -241,8 +242,8 @@ struct ResponseData {
/// this would be `null`.
///
#[serde()]
#[structable(optional, pretty, wide)]
external_gateway_info: Option<Value>,
#[structable(optional, wide)]
external_gateway_info: Option<ResponseExternalGatewayInfo>,

/// The ID of the flavor associated with the router.
///
Expand Down Expand Up @@ -307,6 +308,41 @@ struct ResponseData {
#[structable(optional)]
updated_at: Option<String>,
}
/// `struct` response type
#[derive(Default, Clone, Deserialize, Serialize)]
struct ResponseExternalGatewayInfo {
enable_snat: Option<BoolString>,
external_fixed_ips: Option<Value>,
network_id: String,
qos_policy_id: Option<String>,
}

impl fmt::Display for ResponseExternalGatewayInfo {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let data = Vec::from([
format!(
"enable_snat={}",
self.enable_snat
.clone()
.map_or(String::new(), |v| v.to_string())
),
format!(
"external_fixed_ips={}",
self.external_fixed_ips
.clone()
.map_or(String::new(), |v| v.to_string())
),
format!("network_id={}", self.network_id),
format!(
"qos_policy_id={}",
self.qos_policy_id
.clone()
.map_or(String::new(), |v| v.to_string())
),
]);
write!(f, "{}", data.join(";"))
}
}

impl RoutersCommand {
/// Perform command action
Expand Down
40 changes: 38 additions & 2 deletions openstack_cli/src/network/v2/router/remove_external_gateways.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ use crate::common::BoolString;
use openstack_sdk::api::network::v2::router::remove_external_gateways;
use openstack_sdk::api::QueryAsync;
use serde_json::Value;
use std::fmt;
use structable_derive::StructTable;

/// Request body
Expand Down Expand Up @@ -150,8 +151,8 @@ struct ResponseData {
/// this would be `null`.
///
#[serde()]
#[structable(optional, pretty)]
external_gateway_info: Option<Value>,
#[structable(optional)]
external_gateway_info: Option<ResponseExternalGatewayInfo>,

/// The ID of the flavor associated with the router.
///
Expand Down Expand Up @@ -216,6 +217,41 @@ struct ResponseData {
#[structable(optional)]
updated_at: Option<String>,
}
/// `struct` response type
#[derive(Default, Clone, Deserialize, Serialize)]
struct ResponseExternalGatewayInfo {
enable_snat: Option<BoolString>,
external_fixed_ips: Option<Value>,
network_id: String,
qos_policy_id: Option<String>,
}

impl fmt::Display for ResponseExternalGatewayInfo {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let data = Vec::from([
format!(
"enable_snat={}",
self.enable_snat
.clone()
.map_or(String::new(), |v| v.to_string())
),
format!(
"external_fixed_ips={}",
self.external_fixed_ips
.clone()
.map_or(String::new(), |v| v.to_string())
),
format!("network_id={}", self.network_id),
format!(
"qos_policy_id={}",
self.qos_policy_id
.clone()
.map_or(String::new(), |v| v.to_string())
),
]);
write!(f, "{}", data.join(";"))
}
}

impl RouterCommand {
/// Perform command action
Expand Down
52 changes: 47 additions & 5 deletions openstack_cli/src/network/v2/router/set.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ use openstack_sdk::api::network::v2::router::find;
use openstack_sdk::api::network::v2::router::set;
use openstack_sdk::api::QueryAsync;
use serde_json::Value;
use std::fmt;
use structable_derive::StructTable;

/// Updates a logical router.
Expand Down Expand Up @@ -95,6 +96,9 @@ struct ExternalGatewayInfo {

#[arg(help_heading = "Body parameters", long, required = false)]
network_id: String,

#[arg(help_heading = "Body parameters", long)]
qos_policy_id: Option<String>,
}

/// Router Body data
Expand Down Expand Up @@ -223,8 +227,8 @@ struct ResponseData {
/// this would be `null`.
///
#[serde()]
#[structable(optional, pretty)]
external_gateway_info: Option<Value>,
#[structable(optional)]
external_gateway_info: Option<ResponseExternalGatewayInfo>,

/// The ID of the flavor associated with the router.
///
Expand Down Expand Up @@ -289,6 +293,41 @@ struct ResponseData {
#[structable(optional)]
updated_at: Option<String>,
}
/// `struct` response type
#[derive(Default, Clone, Deserialize, Serialize)]
struct ResponseExternalGatewayInfo {
enable_snat: Option<BoolString>,
external_fixed_ips: Option<Value>,
network_id: String,
qos_policy_id: Option<String>,
}

impl fmt::Display for ResponseExternalGatewayInfo {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let data = Vec::from([
format!(
"enable_snat={}",
self.enable_snat
.clone()
.map_or(String::new(), |v| v.to_string())
),
format!(
"external_fixed_ips={}",
self.external_fixed_ips
.clone()
.map_or(String::new(), |v| v.to_string())
),
format!("network_id={}", self.network_id),
format!(
"qos_policy_id={}",
self.qos_policy_id
.clone()
.map_or(String::new(), |v| v.to_string())
),
]);
write!(f, "{}", data.join(";"))
}
}

impl RouterCommand {
/// Perform command action
Expand Down Expand Up @@ -335,16 +374,19 @@ impl RouterCommand {
let mut external_gateway_info_builder = set::ExternalGatewayInfoBuilder::default();

external_gateway_info_builder.network_id(&val.network_id);
if let Some(val) = &val.enable_snat {
external_gateway_info_builder.enable_snat(*val);
}
if let Some(val) = &val.external_fixed_ips {
let external_fixed_ips_builder: Vec<set::ExternalFixedIps> = val
.iter()
.flat_map(|v| serde_json::from_value::<set::ExternalFixedIps>(v.to_owned()))
.collect::<Vec<set::ExternalFixedIps>>();
external_gateway_info_builder.external_fixed_ips(external_fixed_ips_builder);
}
if let Some(val) = &val.enable_snat {
external_gateway_info_builder.enable_snat(*val);
}
if let Some(val) = &val.qos_policy_id {
external_gateway_info_builder.qos_policy_id(Some(val.into()));
}
router_builder.external_gateway_info(
external_gateway_info_builder
.build()
Expand Down
Loading