src/config/network.rs: parse bond-slaves
This commit is contained in:
		@ -590,6 +590,10 @@ pub const NETWORK_INTERFACE_LIST_SCHEMA: Schema = ArraySchema::new(
 | 
			
		||||
            schema: NETWORK_INTERFACE_LIST_SCHEMA,
 | 
			
		||||
            optional: true,
 | 
			
		||||
        },
 | 
			
		||||
        bond_slaves: {
 | 
			
		||||
            schema: NETWORK_INTERFACE_LIST_SCHEMA,
 | 
			
		||||
            optional: true,
 | 
			
		||||
        },
 | 
			
		||||
    }
 | 
			
		||||
)]
 | 
			
		||||
#[derive(Debug, Serialize, Deserialize)]
 | 
			
		||||
@ -631,6 +635,9 @@ pub struct Interface {
 | 
			
		||||
 | 
			
		||||
    #[serde(skip_serializing_if="Option::is_none")]
 | 
			
		||||
    pub bridge_ports: Option<Vec<String>>,
 | 
			
		||||
 | 
			
		||||
    #[serde(skip_serializing_if="Option::is_none")]
 | 
			
		||||
    pub bond_slaves: Option<Vec<String>>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Regression tests
 | 
			
		||||
 | 
			
		||||
@ -34,6 +34,7 @@ impl Interface {
 | 
			
		||||
            options_v6: Vec::new(),
 | 
			
		||||
            mtu: None,
 | 
			
		||||
            bridge_ports: None,
 | 
			
		||||
            bond_slaves: None,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -112,6 +113,15 @@ impl Interface {
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            NetworkInterfaceType::Bond => {
 | 
			
		||||
                if let Some(ref slaves) = self.bond_slaves {
 | 
			
		||||
                    if slaves.is_empty() {
 | 
			
		||||
                        writeln!(w, "    bond-slaves none")?;
 | 
			
		||||
                    } else {
 | 
			
		||||
                        writeln!(w, "    bond-slaves {}", slaves.join(" "))?;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            _ => {}
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -178,6 +188,7 @@ impl Interface {
 | 
			
		||||
                gateway_v6: _gateway_v6,
 | 
			
		||||
                mtu: _mtu,
 | 
			
		||||
                bridge_ports: _bridge_ports,
 | 
			
		||||
                bond_slaves: _bond_slaves,
 | 
			
		||||
            } => {
 | 
			
		||||
                method_v4 == method_v6
 | 
			
		||||
                    && options_v4.is_empty()
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@ pub enum Token {
 | 
			
		||||
    Attribute,
 | 
			
		||||
    MTU,
 | 
			
		||||
    BridgePorts,
 | 
			
		||||
    BondSlaves,
 | 
			
		||||
    EOF,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -43,6 +44,8 @@ lazy_static! {
 | 
			
		||||
        map.insert("mtu", Token::MTU);
 | 
			
		||||
        map.insert("bridge-ports", Token::BridgePorts);
 | 
			
		||||
        map.insert("bridge_ports", Token::BridgePorts);
 | 
			
		||||
        map.insert("bond-slaves", Token::BondSlaves);
 | 
			
		||||
        map.insert("bond_slaves", Token::BondSlaves);
 | 
			
		||||
        map
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -196,6 +196,12 @@ impl <R: BufRead> NetworkParser<R> {
 | 
			
		||||
                    interface.bridge_ports = Some(ports);
 | 
			
		||||
                    interface.interface_type = NetworkInterfaceType::Bridge;
 | 
			
		||||
                }
 | 
			
		||||
                Token::BondSlaves => {
 | 
			
		||||
                    self.eat(Token::BondSlaves)?;
 | 
			
		||||
                    let slaves = self.parse_iface_list()?;
 | 
			
		||||
                    interface.bond_slaves = Some(slaves);
 | 
			
		||||
                    interface.interface_type = NetworkInterfaceType::Bond;
 | 
			
		||||
                }
 | 
			
		||||
                Token::Netmask => bail!("netmask is deprecated and no longer supported"),
 | 
			
		||||
                _ => {
 | 
			
		||||
                    self.parse_iface_addon_attribute(interface)?;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user