src/config/network.rs: move type definitions to src/api2/types.rs
This commit is contained in:
		@ -6,6 +6,7 @@ use proxmox::api::{api, ApiMethod, Router, RpcEnvironment, Permission};
 | 
			
		||||
//use crate::api2::types::*;
 | 
			
		||||
use crate::config::network;
 | 
			
		||||
use crate::config::acl::{PRIV_SYS_AUDIT};
 | 
			
		||||
use crate::api2::types::Interface;
 | 
			
		||||
 | 
			
		||||
#[api(
 | 
			
		||||
    input: {
 | 
			
		||||
@ -15,7 +16,7 @@ use crate::config::acl::{PRIV_SYS_AUDIT};
 | 
			
		||||
        description: "List network devices (with config digest).",
 | 
			
		||||
        type: Array,
 | 
			
		||||
        items: {
 | 
			
		||||
            type: network::Interface,
 | 
			
		||||
            type: Interface,
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    access: {
 | 
			
		||||
 | 
			
		||||
@ -443,6 +443,93 @@ pub struct TaskListItem {
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
#[test]
 | 
			
		||||
 | 
			
		||||
@ -2,10 +2,8 @@ use std::io::{Write};
 | 
			
		||||
use std::collections::{HashSet, HashMap};
 | 
			
		||||
 | 
			
		||||
use anyhow::{Error, bail};
 | 
			
		||||
use serde::{Serialize, Deserialize};
 | 
			
		||||
 | 
			
		||||
use proxmox::tools::{fs::replace_file, fs::CreateOptions};
 | 
			
		||||
use proxmox::api::api;
 | 
			
		||||
 | 
			
		||||
mod helper;
 | 
			
		||||
pub use helper::*;
 | 
			
		||||
@ -16,92 +14,7 @@ pub use lexer::*;
 | 
			
		||||
mod parser;
 | 
			
		||||
pub use parser::*;
 | 
			
		||||
 | 
			
		||||
#[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>,
 | 
			
		||||
}
 | 
			
		||||
use crate::api2::types::{Interface, NetworkConfigMethod};
 | 
			
		||||
 | 
			
		||||
impl Interface {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user