Some checks failed
Run Check Script / check (pull_request) Has been cancelled
252 lines
7.1 KiB
Rust
252 lines
7.1 KiB
Rust
use std::collections::BTreeMap;
|
|
|
|
use kube::CustomResource;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
use serde_json::Value;
|
|
|
|
#[derive(CustomResource, Deserialize, Serialize, Clone, Debug, JsonSchema)]
|
|
#[kube(group = "nmstate.io", version = "v1", kind = "NMState", namespaced)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct NMStateSpec {
|
|
pub probe_configuration: Option<ProbeConfig>,
|
|
}
|
|
|
|
impl Default for NMState {
|
|
fn default() -> Self {
|
|
Self {
|
|
metadata: Default::default(),
|
|
spec: NMStateSpec {
|
|
probe_configuration: None,
|
|
},
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, JsonSchema)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct ProbeConfig {
|
|
pub dns: ProbeDns,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, JsonSchema)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct ProbeDns {
|
|
pub host: String,
|
|
}
|
|
|
|
#[derive(CustomResource, Deserialize, Serialize, Clone, Debug, JsonSchema)]
|
|
#[kube(
|
|
group = "nmstate.io",
|
|
version = "v1",
|
|
kind = "NodeNetworkConfigurationPolicy",
|
|
namespaced
|
|
)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct NodeNetworkConfigurationPolicySpec {
|
|
pub node_selector: Option<BTreeMap<String, String>>,
|
|
pub desired_state: DesiredStateSpec,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct DesiredStateSpec {
|
|
pub interfaces: Vec<InterfaceSpec>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct InterfaceSpec {
|
|
pub name: String,
|
|
pub description: Option<String>,
|
|
pub r#type: String,
|
|
pub state: String,
|
|
pub mac_address: Option<String>,
|
|
pub mtu: Option<u32>,
|
|
pub controller: Option<String>,
|
|
pub ipv4: Option<IpStackSpec>,
|
|
pub ipv6: Option<IpStackSpec>,
|
|
pub ethernet: Option<EthernetSpec>,
|
|
pub link_aggregation: Option<BondSpec>,
|
|
pub vlan: Option<VlanSpec>,
|
|
pub vxlan: Option<VxlanSpec>,
|
|
pub mac_vtap: Option<MacVtapSpec>,
|
|
pub mac_vlan: Option<MacVlanSpec>,
|
|
pub infiniband: Option<InfinibandSpec>,
|
|
pub linux_bridge: Option<LinuxBridgeSpec>,
|
|
pub ovs_bridge: Option<OvsBridgeSpec>,
|
|
pub ethtool: Option<EthtoolSpec>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct IpStackSpec {
|
|
pub enabled: Option<bool>,
|
|
pub dhcp: Option<bool>,
|
|
pub autoconf: Option<bool>,
|
|
pub address: Option<Vec<IpAddressSpec>>,
|
|
pub auto_dns: Option<bool>,
|
|
pub auto_gateway: Option<bool>,
|
|
pub auto_routes: Option<bool>,
|
|
pub dhcp_client_id: Option<String>,
|
|
pub dhcp_duid: Option<String>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct IpAddressSpec {
|
|
pub ip: String,
|
|
pub prefix_length: u8,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct EthernetSpec {
|
|
pub speed: Option<u32>,
|
|
pub duplex: Option<String>,
|
|
pub auto_negotiation: Option<bool>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct BondSpec {
|
|
pub mode: String,
|
|
pub ports: Vec<String>,
|
|
pub options: Option<BTreeMap<String, Value>>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct VlanSpec {
|
|
pub base_iface: String,
|
|
pub id: u16,
|
|
pub protocol: Option<String>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct VxlanSpec {
|
|
pub base_iface: String,
|
|
pub id: u32,
|
|
pub remote: String,
|
|
pub local: Option<String>,
|
|
pub learning: Option<bool>,
|
|
pub destination_port: Option<u16>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct MacVtapSpec {
|
|
pub base_iface: String,
|
|
pub mode: String,
|
|
pub promiscuous: Option<bool>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct MacVlanSpec {
|
|
pub base_iface: String,
|
|
pub mode: String,
|
|
pub promiscuous: Option<bool>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct InfinibandSpec {
|
|
pub base_iface: String,
|
|
pub pkey: String,
|
|
pub mode: String,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct LinuxBridgeSpec {
|
|
pub options: Option<LinuxBridgeOptions>,
|
|
pub ports: Option<Vec<LinuxBridgePort>>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct LinuxBridgeOptions {
|
|
pub mac_ageing_time: Option<u32>,
|
|
pub multicast_snooping: Option<bool>,
|
|
pub stp: Option<StpOptions>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct StpOptions {
|
|
pub enabled: Option<bool>,
|
|
pub forward_delay: Option<u16>,
|
|
pub hello_time: Option<u16>,
|
|
pub max_age: Option<u16>,
|
|
pub priority: Option<u16>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct LinuxBridgePort {
|
|
pub name: String,
|
|
pub vlan: Option<LinuxBridgePortVlan>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct LinuxBridgePortVlan {
|
|
pub mode: Option<String>,
|
|
pub trunk_tags: Option<Vec<VlanTag>>,
|
|
pub tag: Option<u16>,
|
|
pub enable_native: Option<bool>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct VlanTag {
|
|
pub id: u16,
|
|
pub id_range: Option<VlanIdRange>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct VlanIdRange {
|
|
pub min: u16,
|
|
pub max: u16,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct OvsBridgeSpec {
|
|
pub options: Option<OvsBridgeOptions>,
|
|
pub ports: Option<Vec<OvsPortSpec>>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct OvsBridgeOptions {
|
|
pub stp: Option<bool>,
|
|
pub rstp: Option<bool>,
|
|
pub mcast_snooping_enable: Option<bool>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct OvsPortSpec {
|
|
pub name: String,
|
|
pub link_aggregation: Option<BondSpec>,
|
|
pub vlan: Option<LinuxBridgePortVlan>,
|
|
pub r#type: Option<String>,
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct EthtoolSpec {
|
|
// TODO: Properly describe this spec (https://nmstate.io/devel/yaml_api.html#ethtool)
|
|
}
|
|
|
|
#[derive(Deserialize, Serialize, Clone, Debug, Default, JsonSchema)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub struct EthtoolFecSpec {
|
|
pub auto: Option<bool>,
|
|
pub mode: Option<String>,
|
|
}
|