/// Create new datastore config.
pub fn create_datastore(name: String, param: Value) -> Result<(), Error> {
- // fixme: locking ?
+ let _lock = crate::tools::open_file_locked(datastore::DATASTORE_CFG_LOCKFILE, std::time::Duration::new(10, 0))?;
let datastore: datastore::DataStoreConfig = serde_json::from_value(param.clone())?;
path: Option<String>,
) -> Result<(), Error> {
- // fixme: locking ?
+ let _lock = crate::tools::open_file_locked(datastore::DATASTORE_CFG_LOCKFILE, std::time::Duration::new(10, 0))?;
+
// pass/compare digest
let (mut config, _digest) = datastore::config()?;
/// Create new remote.
pub fn create_remote(name: String, param: Value) -> Result<(), Error> {
- // fixme: locking ?
+ let _lock = crate::tools::open_file_locked(remotes::REMOTES_CFG_LOCKFILE, std::time::Duration::new(10, 0))?;
let remote: remotes::Remote = serde_json::from_value(param.clone())?;
password: Option<String>,
) -> Result<(), Error> {
- // fixme: locking ?
+ let _lock = crate::tools::open_file_locked(remotes::REMOTES_CFG_LOCKFILE, std::time::Duration::new(10, 0))?;
+
// pass/compare digest
let (mut config, _digest) = remotes::config()?;
config
}
-const DATASTORE_CFG_FILENAME: &str = "/etc/proxmox-backup/datastore.cfg";
+pub const DATASTORE_CFG_FILENAME: &str = "/etc/proxmox-backup/datastore.cfg";
+pub const DATASTORE_CFG_LOCKFILE: &str = "/etc/proxmox-backup/.datastore.lck";
pub fn config() -> Result<(SectionConfigData, [u8;32]), Error> {
let content = match std::fs::read_to_string(DATASTORE_CFG_FILENAME) {
config
}
-const REMOTES_CFG_FILENAME: &str = "/etc/proxmox-backup/remotes.cfg";
+pub const REMOTES_CFG_FILENAME: &str = "/etc/proxmox-backup/remotes.cfg";
+pub const REMOTES_CFG_LOCKFILE: &str = "/etc/proxmox-backup/.remotes.lck";
pub fn config() -> Result<(SectionConfigData, [u8;32]), Error> {
let content = match std::fs::read_to_string(REMOTES_CFG_FILENAME) {