mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-31 07:19:06 +00:00
kata-types:mount: support registering multiple IDs to a single handler
- Updated the `add_handler` function in `StorageHandlerManager` to accept a slice of IDs (`&[&str]`) instead of a single ID (`&str`). This change allows a single handler to be registered for multiple storage device types. - Refactored calls to `add_handler` in `Storage` of kata-agent to use the new function, passing arrays of storage drivers instead of single driver. Signed-off-by: ChengyuZhu6 <chengyu.zhu@intel.com>
This commit is contained in:
parent
4698235e59
commit
e47eb0d7d4
@ -139,20 +139,20 @@ pub trait StorageHandler: Send + Sync {
|
|||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref STORAGE_HANDLERS: StorageHandlerManager<Arc<dyn StorageHandler>> = {
|
pub static ref STORAGE_HANDLERS: StorageHandlerManager<Arc<dyn StorageHandler>> = {
|
||||||
let mut manager: StorageHandlerManager<Arc<dyn StorageHandler>> = StorageHandlerManager::new();
|
let mut manager: StorageHandlerManager<Arc<dyn StorageHandler>> = StorageHandlerManager::new();
|
||||||
manager.add_handler(DRIVER_9P_TYPE, Arc::new(Virtio9pHandler{})).unwrap();
|
manager.add_handler(&[DRIVER_9P_TYPE], Arc::new(Virtio9pHandler{})).unwrap();
|
||||||
#[cfg(target_arch = "s390x")]
|
#[cfg(target_arch = "s390x")]
|
||||||
manager.add_handler(crate::device::DRIVER_BLK_CCW_TYPE, Arc::new(self::block_handler::VirtioBlkCcwHandler{})).unwrap();
|
manager.add_handler(&[crate::device::DRIVER_BLK_CCW_TYPE], Arc::new(self::block_handler::VirtioBlkCcwHandler{})).unwrap();
|
||||||
manager.add_handler(DRIVER_BLK_MMIO_TYPE, Arc::new(VirtioBlkMmioHandler{})).unwrap();
|
manager.add_handler(&[DRIVER_BLK_MMIO_TYPE], Arc::new(VirtioBlkMmioHandler{})).unwrap();
|
||||||
manager.add_handler(DRIVER_BLK_PCI_TYPE, Arc::new(VirtioBlkPciHandler{})).unwrap();
|
manager.add_handler(&[DRIVER_BLK_PCI_TYPE], Arc::new(VirtioBlkPciHandler{})).unwrap();
|
||||||
manager.add_handler(DRIVER_EPHEMERAL_TYPE, Arc::new(EphemeralHandler{})).unwrap();
|
manager.add_handler(&[DRIVER_EPHEMERAL_TYPE], Arc::new(EphemeralHandler{})).unwrap();
|
||||||
manager.add_handler(DRIVER_LOCAL_TYPE, Arc::new(LocalHandler{})).unwrap();
|
manager.add_handler(&[DRIVER_LOCAL_TYPE], Arc::new(LocalHandler{})).unwrap();
|
||||||
manager.add_handler(DRIVER_NVDIMM_TYPE, Arc::new(PmemHandler{})).unwrap();
|
manager.add_handler(&[DRIVER_NVDIMM_TYPE], Arc::new(PmemHandler{})).unwrap();
|
||||||
manager.add_handler(DRIVER_OVERLAYFS_TYPE, Arc::new(OverlayfsHandler{})).unwrap();
|
manager.add_handler(&[DRIVER_OVERLAYFS_TYPE], Arc::new(OverlayfsHandler{})).unwrap();
|
||||||
manager.add_handler(DRIVER_SCSI_TYPE, Arc::new(ScsiHandler{})).unwrap();
|
manager.add_handler(&[DRIVER_SCSI_TYPE], Arc::new(ScsiHandler{})).unwrap();
|
||||||
manager.add_handler(DRIVER_VIRTIOFS_TYPE, Arc::new(VirtioFsHandler{})).unwrap();
|
manager.add_handler(&[DRIVER_VIRTIOFS_TYPE], Arc::new(VirtioFsHandler{})).unwrap();
|
||||||
manager.add_handler(DRIVER_WATCHABLE_BIND_TYPE, Arc::new(BindWatcherHandler{})).unwrap();
|
manager.add_handler(&[DRIVER_WATCHABLE_BIND_TYPE], Arc::new(BindWatcherHandler{})).unwrap();
|
||||||
#[cfg(feature = "guest-pull")]
|
#[cfg(feature = "guest-pull")]
|
||||||
manager.add_handler(KATA_VIRTUAL_VOLUME_IMAGE_GUEST_PULL, Arc::new(ImagePullHandler{})).unwrap();
|
manager.add_handler(&[KATA_VIRTUAL_VOLUME_IMAGE_GUEST_PULL], Arc::new(ImagePullHandler{})).unwrap();
|
||||||
manager
|
manager
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -446,13 +446,19 @@ pub struct StorageHandlerManager<H> {
|
|||||||
handlers: HashMap<String, H>,
|
handlers: HashMap<String, H>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<H> Default for StorageHandlerManager<H> {
|
impl<H> Default for StorageHandlerManager<H>
|
||||||
|
where
|
||||||
|
H: Clone,
|
||||||
|
{
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self::new()
|
Self::new()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<H> StorageHandlerManager<H> {
|
impl<H> StorageHandlerManager<H>
|
||||||
|
where
|
||||||
|
H: Clone,
|
||||||
|
{
|
||||||
/// Create a new instance of `StorageHandlerManager`.
|
/// Create a new instance of `StorageHandlerManager`.
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
@ -461,14 +467,18 @@ impl<H> StorageHandlerManager<H> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Register a storage device handler.
|
/// Register a storage device handler.
|
||||||
pub fn add_handler(&mut self, id: &str, handler: H) -> Result<()> {
|
pub fn add_handler(&mut self, ids: &[&str], handler: H) -> Result<()> {
|
||||||
match self.handlers.entry(id.to_string()) {
|
for &id in ids {
|
||||||
Entry::Occupied(_) => Err(anyhow!("storage handler for {} already exists", id)),
|
match self.handlers.entry(id.to_string()) {
|
||||||
Entry::Vacant(entry) => {
|
Entry::Occupied(_) => {
|
||||||
entry.insert(handler);
|
return Err(anyhow!("storage handler for {} already exists", id));
|
||||||
Ok(())
|
}
|
||||||
|
Entry::Vacant(entry) => {
|
||||||
|
entry.insert(handler.clone());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get storage handler with specified `id`.
|
/// Get storage handler with specified `id`.
|
||||||
|
Loading…
Reference in New Issue
Block a user