From 553cd12ba63ef52a10075c9a2e8b28a5a30a4c7b Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Sat, 6 Jun 2020 11:38:47 +0200 Subject: [PATCH] src/api2/disks.rs: start disks api --- src/api2.rs | 2 ++ src/api2/disks.rs | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/api2/disks.rs diff --git a/src/api2.rs b/src/api2.rs index abcba8e3..d4d85c2d 100644 --- a/src/api2.rs +++ b/src/api2.rs @@ -8,6 +8,7 @@ mod subscription; pub mod types; pub mod version; pub mod pull; +pub mod disks; use proxmox::api::router::SubdirMap; use proxmox::api::Router; @@ -20,6 +21,7 @@ pub const SUBDIRS: SubdirMap = &[ ("admin", &admin::ROUTER), ("backup", &backup::ROUTER), ("config", &config::ROUTER), + ("disks", &disks::ROUTER), ("nodes", &NODES_ROUTER), ("pull", &pull::ROUTER), ("reader", &reader::ROUTER), diff --git a/src/api2/disks.rs b/src/api2/disks.rs new file mode 100644 index 00000000..61786ed9 --- /dev/null +++ b/src/api2/disks.rs @@ -0,0 +1,60 @@ +use anyhow::{bail, format_err, Error}; + +use serde_json::{json, Value}; + +use proxmox::api::{api, RpcEnvironment, Permission, UserInformation}; +use proxmox::api::router::{Router, SubdirMap}; +use proxmox::{sortable, identity}; +use proxmox::{http_err, list_subdirs_api_method}; + +use crate::config::acl::{PRIV_SYS_AUDIT, PRIV_SYS_MODIFY}; +use crate::tools::disks::{DiskUsageInfo, get_disks}; + +#[api( + input: { + properties: { + skipsmart: { + description: "Skip smart checks.", + type: bool, + optional: true, + default: false, + } + }, + }, + returns: { + description: "Local disk list.", + type: Array, + items: { + type: DiskUsageInfo, + }, + }, + access: { + permission: &Permission::Privilege(&["system", "disks"], PRIV_SYS_AUDIT, false), + }, +)] +/// List local disks +pub fn list_disks( + skipsmart: bool, +) -> Result, Error> { + + let mut list = Vec::new(); + + for (_, info) in get_disks(None, skipsmart)? { + list.push(info); + } + + Ok(list) +} + +#[sortable] +const SUBDIRS: SubdirMap = &sorted!([ +// ("lvm", &lvm::ROUTER), + ( + "list", &Router::new() + .get(&API_METHOD_LIST_DISKS) + ), +]); + +pub const ROUTER: Router = Router::new() + .get(&list_subdirs_api_method!(SUBDIRS)) + .subdirs(SUBDIRS);