src/config/network.rs: move type definitions to src/api2/types.rs
This commit is contained in:
parent
7e02d08cd0
commit
c357260d09
@ -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: {
|
||||||
|
@ -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]
|
||||||
|
@ -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 {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user