src/config/network.rs: implement network reload, set "changes" attribute

This commit is contained in:
Dietmar Maurer
2020-04-24 09:55:46 +02:00
parent 8a6b86b8a7
commit 2eefd9aee1
4 changed files with 107 additions and 5 deletions

View File

@ -27,7 +27,7 @@ use crate::api2::types::*;
pub fn list_network_devices(
_param: Value,
_info: &ApiMethod,
_rpcenv: &mut dyn RpcEnvironment,
rpcenv: &mut dyn RpcEnvironment,
) -> Result<Value, Error> {
let (config, digest) = network::config()?;
@ -41,6 +41,11 @@ pub fn list_network_devices(
list.push(item);
}
let diff = network::changes()?;
if !diff.is_empty() {
rpcenv.set_result_attrib("changes", diff.into());
}
Ok(list.into())
}
@ -312,6 +317,23 @@ pub fn delete_interface(name: String, digest: Option<String>) -> Result<(), Erro
Ok(())
}
#[api(
access: {
permission: &Permission::Privilege(&[], PRIV_SYS_MODIFY, false),
},
)]
/// Reload network configuration (requires ifupdown2).
pub fn reload_network_config() -> Result<(), Error> {
network::assert_ifupdown2_installed()?;
let _ = std::fs::rename(network::NETWORK_INTERFACES_NEW_FILENAME, network::NETWORK_INTERFACES_FILENAME);
network::network_reload()?;
Ok(())
}
const ITEM_ROUTER: Router = Router::new()
.get(&API_METHOD_READ_INTERFACE)
.put(&API_METHOD_UPDATE_INTERFACE)
@ -319,4 +341,5 @@ const ITEM_ROUTER: Router = Router::new()
pub const ROUTER: Router = Router::new()
.get(&API_METHOD_LIST_NETWORK_DEVICES)
.put(&API_METHOD_RELOAD_NETWORK_CONFIG)
.match_all("name", &ITEM_ROUTER);