tape: split api type definitions for changers into extra file
This commit is contained in:
parent
7e1d4712b8
commit
065df12872
80
src/api2/types/tape/changer.rs
Normal file
80
src/api2/types/tape/changer.rs
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
//! Types for tape changer API
|
||||||
|
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use proxmox::api::{
|
||||||
|
api,
|
||||||
|
schema::{Schema, StringSchema},
|
||||||
|
};
|
||||||
|
|
||||||
|
use crate::api2::types::PROXMOX_SAFE_ID_FORMAT;
|
||||||
|
|
||||||
|
pub const CHANGER_NAME_SCHEMA: Schema = StringSchema::new("Tape Changer Identifier.")
|
||||||
|
.format(&PROXMOX_SAFE_ID_FORMAT)
|
||||||
|
.min_length(3)
|
||||||
|
.max_length(32)
|
||||||
|
.schema();
|
||||||
|
|
||||||
|
pub const SCSI_CHANGER_PATH_SCHEMA: Schema = StringSchema::new(
|
||||||
|
"Path to Linux generic SCSI device (i.e. '/dev/sg4')")
|
||||||
|
.schema();
|
||||||
|
|
||||||
|
pub const MEDIA_LABEL_SCHEMA: Schema = StringSchema::new("Media Label/Barcode.")
|
||||||
|
.format(&PROXMOX_SAFE_ID_FORMAT)
|
||||||
|
.min_length(3)
|
||||||
|
.max_length(32)
|
||||||
|
.schema();
|
||||||
|
|
||||||
|
#[api(
|
||||||
|
properties: {
|
||||||
|
name: {
|
||||||
|
schema: CHANGER_NAME_SCHEMA,
|
||||||
|
},
|
||||||
|
path: {
|
||||||
|
schema: SCSI_CHANGER_PATH_SCHEMA,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)]
|
||||||
|
#[derive(Serialize,Deserialize)]
|
||||||
|
/// SCSI tape changer
|
||||||
|
pub struct ScsiTapeChanger {
|
||||||
|
pub name: String,
|
||||||
|
pub path: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[api()]
|
||||||
|
#[derive(Serialize,Deserialize)]
|
||||||
|
#[serde(rename_all = "lowercase")]
|
||||||
|
/// Mtx Entry Kind
|
||||||
|
pub enum MtxEntryKind {
|
||||||
|
/// Drive
|
||||||
|
Drive,
|
||||||
|
/// Slot
|
||||||
|
Slot,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[api(
|
||||||
|
properties: {
|
||||||
|
"entry-kind": {
|
||||||
|
type: MtxEntryKind,
|
||||||
|
},
|
||||||
|
"changer-id": {
|
||||||
|
schema: MEDIA_LABEL_SCHEMA,
|
||||||
|
optional: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)]
|
||||||
|
#[derive(Serialize,Deserialize)]
|
||||||
|
#[serde(rename_all = "kebab-case")]
|
||||||
|
/// Mtx Status Entry
|
||||||
|
pub struct MtxStatusEntry {
|
||||||
|
pub entry_kind: MtxEntryKind,
|
||||||
|
/// The ID of the slot or drive
|
||||||
|
pub entry_id: u64,
|
||||||
|
/// The media label (volume tag) if the slot/drive is full
|
||||||
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
|
pub changer_id: Option<String>,
|
||||||
|
/// The slot the drive was loaded from
|
||||||
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
|
pub loaded_slot: Option<u64>,
|
||||||
|
}
|
@ -7,7 +7,10 @@ use proxmox::api::{
|
|||||||
schema::{Schema, IntegerSchema, StringSchema},
|
schema::{Schema, IntegerSchema, StringSchema},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::api2::types::PROXMOX_SAFE_ID_FORMAT;
|
use crate::api2::types::{
|
||||||
|
PROXMOX_SAFE_ID_FORMAT,
|
||||||
|
CHANGER_NAME_SCHEMA,
|
||||||
|
};
|
||||||
|
|
||||||
pub const DRIVE_NAME_SCHEMA: Schema = StringSchema::new("Drive Identifier.")
|
pub const DRIVE_NAME_SCHEMA: Schema = StringSchema::new("Drive Identifier.")
|
||||||
.format(&PROXMOX_SAFE_ID_FORMAT)
|
.format(&PROXMOX_SAFE_ID_FORMAT)
|
||||||
@ -15,26 +18,10 @@ pub const DRIVE_NAME_SCHEMA: Schema = StringSchema::new("Drive Identifier.")
|
|||||||
.max_length(32)
|
.max_length(32)
|
||||||
.schema();
|
.schema();
|
||||||
|
|
||||||
pub const CHANGER_NAME_SCHEMA: Schema = StringSchema::new("Tape Changer Identifier.")
|
|
||||||
.format(&PROXMOX_SAFE_ID_FORMAT)
|
|
||||||
.min_length(3)
|
|
||||||
.max_length(32)
|
|
||||||
.schema();
|
|
||||||
|
|
||||||
pub const LINUX_DRIVE_PATH_SCHEMA: Schema = StringSchema::new(
|
pub const LINUX_DRIVE_PATH_SCHEMA: Schema = StringSchema::new(
|
||||||
"The path to a LINUX non-rewinding SCSI tape device (i.e. '/dev/nst0')")
|
"The path to a LINUX non-rewinding SCSI tape device (i.e. '/dev/nst0')")
|
||||||
.schema();
|
.schema();
|
||||||
|
|
||||||
pub const SCSI_CHANGER_PATH_SCHEMA: Schema = StringSchema::new(
|
|
||||||
"Path to Linux generic SCSI device (i.e. '/dev/sg4')")
|
|
||||||
.schema();
|
|
||||||
|
|
||||||
pub const MEDIA_LABEL_SCHEMA: Schema = StringSchema::new("Media Label/Barcode.")
|
|
||||||
.format(&PROXMOX_SAFE_ID_FORMAT)
|
|
||||||
.min_length(3)
|
|
||||||
.max_length(32)
|
|
||||||
.schema();
|
|
||||||
|
|
||||||
pub const CHANGER_DRIVE_ID_SCHEMA: Schema = IntegerSchema::new(
|
pub const CHANGER_DRIVE_ID_SCHEMA: Schema = IntegerSchema::new(
|
||||||
"Associated changer drive number (requires option changer)")
|
"Associated changer drive number (requires option changer)")
|
||||||
.minimum(0)
|
.minimum(0)
|
||||||
@ -91,24 +78,6 @@ pub struct LinuxTapeDrive {
|
|||||||
pub changer_drive_id: Option<u64>,
|
pub changer_drive_id: Option<u64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[api(
|
|
||||||
properties: {
|
|
||||||
name: {
|
|
||||||
schema: CHANGER_NAME_SCHEMA,
|
|
||||||
},
|
|
||||||
path: {
|
|
||||||
schema: SCSI_CHANGER_PATH_SCHEMA,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)]
|
|
||||||
#[derive(Serialize,Deserialize)]
|
|
||||||
/// SCSI tape changer
|
|
||||||
pub struct ScsiTapeChanger {
|
|
||||||
pub name: String,
|
|
||||||
pub path: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#[api()]
|
#[api()]
|
||||||
#[derive(Serialize,Deserialize)]
|
#[derive(Serialize,Deserialize)]
|
||||||
/// Drive list entry
|
/// Drive list entry
|
||||||
@ -130,40 +99,3 @@ pub struct DriveListEntry {
|
|||||||
#[serde(skip_serializing_if="Option::is_none")]
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
pub serial: Option<String>,
|
pub serial: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[api()]
|
|
||||||
#[derive(Serialize,Deserialize)]
|
|
||||||
#[serde(rename_all = "lowercase")]
|
|
||||||
/// Mtx Entry Kind
|
|
||||||
pub enum MtxEntryKind {
|
|
||||||
/// Drive
|
|
||||||
Drive,
|
|
||||||
/// Slot
|
|
||||||
Slot,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[api(
|
|
||||||
properties: {
|
|
||||||
"entry-kind": {
|
|
||||||
type: MtxEntryKind,
|
|
||||||
},
|
|
||||||
"changer-id": {
|
|
||||||
schema: MEDIA_LABEL_SCHEMA,
|
|
||||||
optional: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
)]
|
|
||||||
#[derive(Serialize,Deserialize)]
|
|
||||||
#[serde(rename_all = "kebab-case")]
|
|
||||||
/// Mtx Status Entry
|
|
||||||
pub struct MtxStatusEntry {
|
|
||||||
pub entry_kind: MtxEntryKind,
|
|
||||||
/// The ID of the slot or drive
|
|
||||||
pub entry_id: u64,
|
|
||||||
/// The media label (volume tag) if the slot/drive is full
|
|
||||||
#[serde(skip_serializing_if="Option::is_none")]
|
|
||||||
pub changer_id: Option<String>,
|
|
||||||
/// The slot the drive was loaded from
|
|
||||||
#[serde(skip_serializing_if="Option::is_none")]
|
|
||||||
pub loaded_slot: Option<u64>,
|
|
||||||
}
|
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
mod device;
|
mod device;
|
||||||
pub use device::*;
|
pub use device::*;
|
||||||
|
|
||||||
|
mod changer;
|
||||||
|
pub use changer::*;
|
||||||
|
|
||||||
mod drive;
|
mod drive;
|
||||||
pub use drive::*;
|
pub use drive::*;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user