]> git.proxmox.com Git - proxmox-backup.git/commitdiff
move media_pool config to pbs_config workspace
authorDietmar Maurer <dietmar@proxmox.com>
Mon, 6 Sep 2021 06:56:04 +0000 (08:56 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 6 Sep 2021 06:56:04 +0000 (08:56 +0200)
13 files changed:
pbs-config/src/lib.rs
pbs-config/src/media_pool.rs [new file with mode: 0644]
src/api2/config/media_pool.rs
src/api2/tape/backup.rs
src/api2/tape/drive.rs
src/api2/tape/media.rs
src/bin/docgen.rs
src/bin/proxmox-tape.rs
src/bin/proxmox_tape/backup_job.rs
src/bin/proxmox_tape/media.rs
src/bin/proxmox_tape/pool.rs
src/config/media_pool.rs [deleted file]
src/config/mod.rs

index 6948ad825c8c1d345d1d993368f62deca2219a06..29811164207e7efba8e76efb983b8bc9927aa587 100644 (file)
@@ -1,5 +1,6 @@
 pub mod domains;
 pub mod drive;
+pub mod media_pool;
 pub mod remote;
 
 use anyhow::{format_err, Error};
diff --git a/pbs-config/src/media_pool.rs b/pbs-config/src/media_pool.rs
new file mode 100644 (file)
index 0000000..3512c70
--- /dev/null
@@ -0,0 +1,82 @@
+//! Media Pool configuration (Tape backup)
+//!
+//! This configuration module is based on [`SectionConfig`], and
+//! provides a type safe interface to store [`MediaPoolConfig`],
+//!
+//! [MediaPoolConfig]: crate::api2::types::MediaPoolConfig
+//! [SectionConfig]: proxmox::api::section_config::SectionConfig
+
+use std::collections::HashMap;
+
+use anyhow::Error;
+use lazy_static::lazy_static;
+
+use proxmox::{
+    api::{
+        schema::*,
+        section_config::{
+            SectionConfig,
+            SectionConfigData,
+            SectionConfigPlugin,
+        }
+    },
+};
+
+use pbs_api_types::{MEDIA_POOL_NAME_SCHEMA, MediaPoolConfig};
+
+use crate::{open_backup_lockfile, replace_backup_config, BackupLockGuard};
+
+lazy_static! {
+    /// Static [`SectionConfig`] to access parser/writer functions.
+    pub static ref CONFIG: SectionConfig = init();
+}
+
+fn init() -> SectionConfig {
+    let mut config = SectionConfig::new(&MEDIA_POOL_NAME_SCHEMA);
+
+    let obj_schema = match MediaPoolConfig::API_SCHEMA {
+        Schema::Object(ref obj_schema) => obj_schema,
+        _ => unreachable!(),
+    };
+    let plugin = SectionConfigPlugin::new("pool".to_string(), Some("name".to_string()), obj_schema);
+    config.register_plugin(plugin);
+
+    config
+}
+
+/// Configuration file name
+pub const MEDIA_POOL_CFG_FILENAME: &str = "/etc/proxmox-backup/media-pool.cfg";
+/// Lock file name (used to prevent concurrent access)
+pub const MEDIA_POOL_CFG_LOCKFILE: &str = "/etc/proxmox-backup/.media-pool.lck";
+
+/// Get exclusive lock
+pub fn lock() -> Result<BackupLockGuard, Error> {
+    open_backup_lockfile(MEDIA_POOL_CFG_LOCKFILE, None, true)
+}
+
+/// Read and parse the configuration file
+pub fn config() -> Result<(SectionConfigData, [u8;32]), Error> {
+
+    let content = proxmox::tools::fs::file_read_optional_string(MEDIA_POOL_CFG_FILENAME)?
+        .unwrap_or_else(|| "".to_string());
+
+    let digest = openssl::sha::sha256(content.as_bytes());
+    let data = CONFIG.parse(MEDIA_POOL_CFG_FILENAME, &content)?;
+    Ok((data, digest))
+}
+
+/// Save the configuration file
+pub fn save_config(config: &SectionConfigData) -> Result<(), Error> {
+    let raw = CONFIG.write(MEDIA_POOL_CFG_FILENAME, &config)?;
+    replace_backup_config(MEDIA_POOL_CFG_FILENAME, raw.as_bytes())
+}
+
+// shell completion helper
+
+/// List existing pool names
+pub fn complete_pool_name(_arg: &str, _param: &HashMap<String, String>) -> Vec<String> {
+    match config() {
+        Ok((data, _digest)) => data.sections.iter().map(|(id, _)| id.to_string()).collect(),
+        Err(_) => return vec![],
+    }
+}
index 56b296af3dad3a51e19609e38d65f8d78c0c9b28..3e583a2902fa31612799d7e1c36090f8d6acafb0 100644 (file)
@@ -10,15 +10,15 @@ use proxmox::{
     },
 };
 
+use pbs_api_types::{
+    Authid,
+    MEDIA_POOL_NAME_SCHEMA,
+    MediaPoolConfig,
+    MediaPoolConfigUpdater,
+};
+
 use crate::{
-    api2::types::{
-        Authid,
-        MEDIA_POOL_NAME_SCHEMA,
-        MediaPoolConfig,
-        MediaPoolConfigUpdater,
-    },
     config::{
-        self,
         cached_user_info::CachedUserInfo,
         acl::{
             PRIV_TAPE_AUDIT,
@@ -46,9 +46,9 @@ pub fn create_pool(
     config: MediaPoolConfig,
 ) -> Result<(), Error> {
 
-    let _lock = config::media_pool::lock()?;
+    let _lock = pbs_config::media_pool::lock()?;
 
-    let (mut section_config, _digest) = config::media_pool::config()?;
+    let (mut section_config, _digest) = pbs_config::media_pool::config()?;
 
     if section_config.sections.get(&config.name).is_some() {
         bail!("Media pool '{}' already exists", config.name);
@@ -56,7 +56,7 @@ pub fn create_pool(
 
     section_config.set_data(&config.name, "pool", &config)?;
 
-    config::media_pool::save_config(&section_config)?;
+    pbs_config::media_pool::save_config(&section_config)?;
 
     Ok(())
 }
@@ -81,7 +81,7 @@ pub fn list_pools(
     let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
     let user_info = CachedUserInfo::new()?;
 
-    let (config, digest) = config::media_pool::config()?;
+    let (config, digest) = pbs_config::media_pool::config()?;
 
     let list = config.convert_to_typed_array::<MediaPoolConfig>("pool")?;
 
@@ -116,7 +116,7 @@ pub fn list_pools(
 /// Get media pool configuration
 pub fn get_config(name: String) -> Result<MediaPoolConfig, Error> {
 
-    let (config, _digest) = config::media_pool::config()?;
+    let (config, _digest) = pbs_config::media_pool::config()?;
 
     let data: MediaPoolConfig = config.lookup("pool", &name)?;
 
@@ -172,9 +172,9 @@ pub fn update_pool(
     delete: Option<Vec<DeletableProperty>>,
 ) -> Result<(), Error> {
 
-    let _lock = config::media_pool::lock()?;
+    let _lock = pbs_config::media_pool::lock()?;
 
-    let (mut config, _digest) = config::media_pool::config()?;
+    let (mut config, _digest) = pbs_config::media_pool::config()?;
 
     let mut data: MediaPoolConfig = config.lookup("pool", &name)?;
 
@@ -206,7 +206,7 @@ pub fn update_pool(
 
     config.set_data(&name, "pool", &data)?;
 
-    config::media_pool::save_config(&config)?;
+    pbs_config::media_pool::save_config(&config)?;
 
     Ok(())
 }
@@ -227,16 +227,16 @@ pub fn update_pool(
 /// Delete a media pool configuration
 pub fn delete_pool(name: String) -> Result<(), Error> {
 
-    let _lock = config::media_pool::lock()?;
+    let _lock = pbs_config::media_pool::lock()?;
 
-    let (mut config, _digest) = config::media_pool::config()?;
+    let (mut config, _digest) = pbs_config::media_pool::config()?;
 
     match config.sections.get(&name) {
         Some(_) => { config.sections.remove(&name); },
         None => bail!("delete pool '{}' failed - no such pool", name),
     }
 
-    config::media_pool::save_config(&config)?;
+    pbs_config::media_pool::save_config(&config)?;
 
     Ok(())
 }
index 4e6c735d2a6462ec324721cd6921f89c9f24cd11..1d3e3cc55b9cb2299649260522062e05d973ff87 100644 (file)
@@ -122,7 +122,7 @@ pub fn list_tape_backup_jobs(
     let user_info = CachedUserInfo::new()?;
 
     let (job_config, digest) = config::tape_job::config()?;
-    let (pool_config, _pool_digest) = config::media_pool::config()?;
+    let (pool_config, _pool_digest) = pbs_config::media_pool::config()?;
     let (drive_config, _digest) = pbs_config::drive::config()?;
 
     let job_list_iter = job_config
@@ -191,7 +191,7 @@ pub fn do_tape_backup_job(
 
     let datastore = DataStore::lookup_datastore(&setup.store)?;
 
-    let (config, _digest) = config::media_pool::config()?;
+    let (config, _digest) = pbs_config::media_pool::config()?;
     let pool_config: MediaPoolConfig = config.lookup("pool", &setup.pool)?;
 
     let (drive_config, _digest) = pbs_config::drive::config()?;
@@ -370,7 +370,7 @@ pub fn backup(
 
     let datastore = DataStore::lookup_datastore(&setup.store)?;
 
-    let (config, _digest) = config::media_pool::config()?;
+    let (config, _digest) = pbs_config::media_pool::config()?;
     let pool_config: MediaPoolConfig = config.lookup("pool", &setup.pool)?;
 
     let (drive_config, _digest) = pbs_config::drive::config()?;
index f625ba0355695448042fa3ad51939ef812e0456d..8b60a2b44377fd2cf7e8132d9c62e0a649ff7e1b 100644 (file)
@@ -514,7 +514,7 @@ pub fn label_media(
     rpcenv: &mut dyn RpcEnvironment,
 ) -> Result<Value, Error> {
     if let Some(ref pool) = pool {
-        let (pool_config, _digest) = config::media_pool::config()?;
+        let (pool_config, _digest) = pbs_config::media_pool::config()?;
 
         if pool_config.sections.get(pool).is_none() {
             bail!("no such pool ('{}')", pool);
@@ -1029,7 +1029,7 @@ pub fn barcode_label_media(
     rpcenv: &mut dyn RpcEnvironment,
 ) -> Result<Value, Error> {
     if let Some(ref pool) = pool {
-        let (pool_config, _digest) = config::media_pool::config()?;
+        let (pool_config, _digest) = pbs_config::media_pool::config()?;
 
         if pool_config.sections.get(pool).is_none() {
             bail!("no such pool ('{}')", pool);
index feef39210274cf6e0e99cef1a33327f95fd648f5..15514d52c75989925ac62a0718b2be947f96bef4 100644 (file)
@@ -18,13 +18,12 @@ use pbs_api_types::{
 
 use crate::{
     config::{
-        self,
         cached_user_info::CachedUserInfo,
         acl::{
             PRIV_TAPE_AUDIT,
         },
     },
-     tape::{
+    tape::{
         TAPE_STATUS_DIR,
         Inventory,
         MediaPool,
@@ -54,7 +53,7 @@ pub async fn list_media_sets(
     let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
     let user_info = CachedUserInfo::new()?;
 
-    let (config, _digest) = config::media_pool::config()?;
+    let (config, _digest) = pbs_config::media_pool::config()?;
 
     let status_path = Path::new(TAPE_STATUS_DIR);
 
@@ -143,7 +142,7 @@ pub async fn list_media(
     let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
     let user_info = CachedUserInfo::new()?;
 
-    let (config, _digest) = config::media_pool::config()?;
+    let (config, _digest) = pbs_config::media_pool::config()?;
 
     let status_path = Path::new(TAPE_STATUS_DIR);
 
@@ -410,7 +409,7 @@ pub fn list_content(
     let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
     let user_info = CachedUserInfo::new()?;
 
-    let (config, _digest) = config::media_pool::config()?;
+    let (config, _digest) = pbs_config::media_pool::config()?;
 
     let status_path = Path::new(TAPE_STATUS_DIR);
     let inventory = Inventory::load(status_path)?;
index 12193fc824f422b741bfb20cbd2ba150700529f4..4206274a3ad9d205077e196f2be610625c2bb456 100644 (file)
@@ -61,7 +61,7 @@ fn main() -> Result<(), Error> {
             "remote.cfg" => dump_section_config(&pbs_config::remote::CONFIG),
             "sync.cfg" => dump_section_config(&config::sync::CONFIG),
             "verification.cfg" => dump_section_config(&config::verify::CONFIG),
-            "media-pool.cfg" => dump_section_config(&config::media_pool::CONFIG),
+            "media-pool.cfg" => dump_section_config(&pbs_config::media_pool::CONFIG),
             "config::acl::Role" => dump_enum_properties(&config::acl::Role::API_SCHEMA)?,
             _ => bail!("docgen: got unknown type"),
         };
index 6d3c2d7870619828eb708678a308c19f2caaab5f..14216e693f2b23ede44dc16001692b36b3c6ca81 100644 (file)
@@ -22,6 +22,7 @@ use pbs_tools::format::{
 };
 
 use pbs_config::drive::complete_drive_name;
+use pbs_config::media_pool::complete_pool_name;
 
 use proxmox_backup::{
     api2::{
@@ -39,7 +40,6 @@ use proxmox_backup::{
     },
     config::{
         datastore::complete_datastore_name,
-        media_pool::complete_pool_name,
     },
     tape::{
         BlockReadError,
index f181868c772424a723c0a9e695222a4fe8da6e34..f658783bb5f58cb2d4f28307acd6293a11b9cc46 100644 (file)
@@ -125,7 +125,7 @@ pub fn backup_job_commands() -> CommandLineInterface {
                 .completion_cb("id", config::tape_job::complete_tape_job_id)
                 .completion_cb("schedule", config::datastore::complete_calendar_event)
                 .completion_cb("store", config::datastore::complete_datastore_name)
-                .completion_cb("pool", config::media_pool::complete_pool_name)
+                .completion_cb("pool", pbs_config::media_pool::complete_pool_name)
                 .completion_cb("drive", crate::complete_drive_name)
         )
         .insert("update",
@@ -134,7 +134,7 @@ pub fn backup_job_commands() -> CommandLineInterface {
                 .completion_cb("id", config::tape_job::complete_tape_job_id)
                 .completion_cb("schedule", config::datastore::complete_calendar_event)
                 .completion_cb("store", config::datastore::complete_datastore_name)
-                .completion_cb("pool", config::media_pool::complete_pool_name)
+                .completion_cb("pool", pbs_config::media_pool::complete_pool_name)
                 .completion_cb("drive", crate::complete_drive_name)
         )
         .insert("remove",
index 8b866e3efc86af6caa4e094da42175351db55242..e65108ec29c23185de4a4ec7ba357f64db1c8efd 100644 (file)
@@ -15,6 +15,7 @@ use pbs_api_types::{
     MediaContentListFilter,
 };
 use pbs_config::drive::complete_changer_name;
+use pbs_config::media_pool::complete_pool_name;
 
 use proxmox_backup::{
     api2,
@@ -23,9 +24,6 @@ use proxmox_backup::{
         complete_media_uuid,
         complete_media_set_uuid,
     },
-    config::{
-        media_pool::complete_pool_name,
-    },
 };
 
 pub fn media_commands() -> CommandLineInterface {
index a20bb33f1d923be5c399a53dd855bc2467d81399..0889a7645732a4ad8e817a8f5f8e1fefb5152678 100644 (file)
@@ -10,6 +10,8 @@ use proxmox::{
     },
 };
 
+use pbs_config::media_pool::complete_pool_name;
+
 use proxmox_backup::{
     api2::{
         self,
@@ -18,9 +20,6 @@ use proxmox_backup::{
         },
     },
     config::{
-        media_pool::{
-            complete_pool_name,
-        },
         tape_encryption_keys:: {
             complete_key_fingerprint,
         },
diff --git a/src/config/media_pool.rs b/src/config/media_pool.rs
deleted file mode 100644 (file)
index f7f544f..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-//! Media Pool configuration (Tape backup)
-//!
-//! This configuration module is based on [`SectionConfig`], and
-//! provides a type safe interface to store [`MediaPoolConfig`],
-//!
-//! [MediaPoolConfig]: crate::api2::types::MediaPoolConfig
-//! [SectionConfig]: proxmox::api::section_config::SectionConfig
-
-use std::collections::HashMap;
-
-use anyhow::Error;
-use lazy_static::lazy_static;
-
-use proxmox::{
-    api::{
-        schema::*,
-        section_config::{
-            SectionConfig,
-            SectionConfigData,
-            SectionConfigPlugin,
-        }
-    },
-};
-
-use pbs_config::{open_backup_lockfile, BackupLockGuard};
-
-use crate::{
-    api2::types::{
-        MEDIA_POOL_NAME_SCHEMA,
-        MediaPoolConfig,
-    },
-};
-
-lazy_static! {
-    /// Static [`SectionConfig`] to access parser/writer functions.
-    pub static ref CONFIG: SectionConfig = init();
-}
-
-fn init() -> SectionConfig {
-    let mut config = SectionConfig::new(&MEDIA_POOL_NAME_SCHEMA);
-
-    let obj_schema = match MediaPoolConfig::API_SCHEMA {
-        Schema::Object(ref obj_schema) => obj_schema,
-        _ => unreachable!(),
-    };
-    let plugin = SectionConfigPlugin::new("pool".to_string(), Some("name".to_string()), obj_schema);
-    config.register_plugin(plugin);
-
-    config
-}
-
-/// Configuration file name
-pub const MEDIA_POOL_CFG_FILENAME: &str = "/etc/proxmox-backup/media-pool.cfg";
-/// Lock file name (used to prevent concurrent access)
-pub const MEDIA_POOL_CFG_LOCKFILE: &str = "/etc/proxmox-backup/.media-pool.lck";
-
-/// Get exclusive lock
-pub fn lock() -> Result<BackupLockGuard, Error> {
-    open_backup_lockfile(MEDIA_POOL_CFG_LOCKFILE, None, true)
-}
-
-/// Read and parse the configuration file
-pub fn config() -> Result<(SectionConfigData, [u8;32]), Error> {
-
-    let content = proxmox::tools::fs::file_read_optional_string(MEDIA_POOL_CFG_FILENAME)?
-        .unwrap_or_else(|| "".to_string());
-
-    let digest = openssl::sha::sha256(content.as_bytes());
-    let data = CONFIG.parse(MEDIA_POOL_CFG_FILENAME, &content)?;
-    Ok((data, digest))
-}
-
-/// Save the configuration file
-pub fn save_config(config: &SectionConfigData) -> Result<(), Error> {
-    let raw = CONFIG.write(MEDIA_POOL_CFG_FILENAME, &config)?;
-    pbs_config::replace_backup_config(MEDIA_POOL_CFG_FILENAME, raw.as_bytes())
-}
-
-// shell completion helper
-
-/// List existing pool names
-pub fn complete_pool_name(_arg: &str, _param: &HashMap<String, String>) -> Vec<String> {
-    match config() {
-        Ok((data, _digest)) => data.sections.iter().map(|(id, _)| id.to_string()).collect(),
-        Err(_) => return vec![],
-    }
-}
index 80246407d5207b7783241d859c962c5d6bbb144c..89f155e0e4a97146f2e282501a645660b3720917 100644 (file)
@@ -25,7 +25,6 @@ pub mod tfa;
 pub mod token_shadow;
 pub mod user;
 pub mod verify;
-pub mod media_pool;
 pub mod tape_encryption_keys;
 pub mod tape_job;