src/config/network.rs: move type definitions to src/api2/types.rs

This commit is contained in:
Dietmar Maurer 2020-04-21 17:25:05 +02:00
parent 7e02d08cd0
commit c357260d09
3 changed files with 90 additions and 89 deletions

View File

@ -6,6 +6,7 @@ use proxmox::api::{api, ApiMethod, Router, RpcEnvironment, Permission};
//use crate::api2::types::*; //use crate::api2::types::*;
use crate::config::network; use crate::config::network;
use crate::config::acl::{PRIV_SYS_AUDIT}; use crate::config::acl::{PRIV_SYS_AUDIT};
use crate::api2::types::Interface;
#[api( #[api(
input: { input: {
@ -15,7 +16,7 @@ use crate::config::acl::{PRIV_SYS_AUDIT};
description: "List network devices (with config digest).", description: "List network devices (with config digest).",
type: Array, type: Array,
items: { items: {
type: network::Interface, type: Interface,
}, },
}, },
access: { access: {

View File

@ -443,6 +443,93 @@ pub struct TaskListItem {
pub status: Option<String>, pub status: Option<String>,
} }
#[api()]
#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
/// Interface configuration method
pub enum NetworkConfigMethod {
/// Configuration is done manually using other tools
Manual,
/// Define interfaces with statically allocated addresses.
Static,
/// Obtain an address via DHCP
DHCP,
/// Define the loopback interface.
Loopback,
}
#[api(
properties: {
name: {
type: String,
min_length: 1,
max_length: libc::IFNAMSIZ-1,
},
method_v4: {
type: NetworkConfigMethod,
optional: true,
},
method_v6: {
type: NetworkConfigMethod,
optional: true,
},
options_v4: {
description: "Option list (inet)",
type: Array,
items: {
description: "Optional attribute.",
type: String,
},
},
options_v6: {
description: "Option list (inet6)",
type: Array,
items: {
description: "Optional attribute.",
type: String,
},
},
}
)]
#[derive(Debug, Serialize, Deserialize)]
/// Network Interface configuration
pub struct Interface {
/// Autostart interface
pub autostart: bool,
/// Interface is a physical network device
pub exists: bool,
/// Interface is active (UP)
pub active: bool,
/// Interface name
pub name: String,
#[serde(skip_serializing_if="Option::is_none")]
pub method_v4: Option<NetworkConfigMethod>,
#[serde(skip_serializing_if="Option::is_none")]
pub method_v6: Option<NetworkConfigMethod>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv4 address
pub address_v4: Option<String>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv4 gateway
pub gateway_v4: Option<String>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv4 netmask
pub netmask_v4: Option<u8>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv6 address
pub address_v6: Option<String>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv6 gateway
pub gateway_v6: Option<String>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv6 netmask
pub netmask_v6: Option<u8>,
#[serde(skip_serializing_if="Vec::is_empty")]
pub options_v4: Vec<String>,
#[serde(skip_serializing_if="Vec::is_empty")]
pub options_v6: Vec<String>,
}
// Regression tests // Regression tests
#[test] #[test]

View File

@ -2,10 +2,8 @@ use std::io::{Write};
use std::collections::{HashSet, HashMap}; use std::collections::{HashSet, HashMap};
use anyhow::{Error, bail}; use anyhow::{Error, bail};
use serde::{Serialize, Deserialize};
use proxmox::tools::{fs::replace_file, fs::CreateOptions}; use proxmox::tools::{fs::replace_file, fs::CreateOptions};
use proxmox::api::api;
mod helper; mod helper;
pub use helper::*; pub use helper::*;
@ -16,92 +14,7 @@ pub use lexer::*;
mod parser; mod parser;
pub use parser::*; pub use parser::*;
#[api()] use crate::api2::types::{Interface, NetworkConfigMethod};
#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
/// Interface configuration method
pub enum NetworkConfigMethod {
/// Configuration is done manually using other tools
Manual,
/// Define interfaces with statically allocated addresses.
Static,
/// Obtain an address via DHCP
DHCP,
/// Define the loopback interface.
Loopback,
}
#[api(
properties: {
name: {
type: String,
min_length: 1,
max_length: libc::IFNAMSIZ-1,
},
method_v4: {
type: NetworkConfigMethod,
optional: true,
},
method_v6: {
type: NetworkConfigMethod,
optional: true,
},
options_v4: {
description: "Option list (inet)",
type: Array,
items: {
description: "Optional attribute.",
type: String,
},
},
options_v6: {
description: "Option list (inet6)",
type: Array,
items: {
description: "Optional attribute.",
type: String,
},
},
}
)]
#[derive(Debug, Serialize, Deserialize)]
/// Network Interface configuration
pub struct Interface {
/// Autostart interface
pub autostart: bool,
/// Interface is a physical network device
pub exists: bool,
/// Interface is active (UP)
pub active: bool,
/// Interface name
pub name: String,
#[serde(skip_serializing_if="Option::is_none")]
pub method_v4: Option<NetworkConfigMethod>,
#[serde(skip_serializing_if="Option::is_none")]
pub method_v6: Option<NetworkConfigMethod>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv4 address
pub address_v4: Option<String>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv4 gateway
pub gateway_v4: Option<String>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv4 netmask
pub netmask_v4: Option<u8>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv6 address
pub address_v6: Option<String>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv6 gateway
pub gateway_v6: Option<String>,
#[serde(skip_serializing_if="Option::is_none")]
/// IPv6 netmask
pub netmask_v6: Option<u8>,
#[serde(skip_serializing_if="Vec::is_empty")]
pub options_v4: Vec<String>,
#[serde(skip_serializing_if="Vec::is_empty")]
pub options_v6: Vec<String>,
}
impl Interface { impl Interface {