Skip to content

libstorage/libstoragemgmt-rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

libstorage

Rust binding of LibStorageMgmt

LibStorageMgmt provides a set of API for programmatically manage their storage hardware in a vendor neutral way supporting these actions:

  • List storage pools, volumes, access groups, or file systems.

  • Create and delete volumes, access groups, file systems, or NFS exports.

  • Grant and remove access to volumes, access groups, or initiators.

  • Replicate volumes with snapshots, clones, and copies.

  • Create and delete access groups and edit members of a group.

  • List Linux local SCSI/ATA/NVMe disks.

  • Control IDENT/FAULT LED of local disk via SES(SCSI Enclosure Service).

To use LibStorageMgmt rust binding, you need:

Example code using simulator plugin

extern crate lsm;
use lsm::{Client, LsmError};
fn main() {
    let mut c: Client = match Client::new("sim://", None, None) {
        Ok(i) => i,
        Err(e) => {
            match e {
                // Error handling goes here
                LsmError::DaemonNotRunning(_) =>
                    panic!("Please start the libstoragemgmt daemon"),
                _ => panic!(e)
            };
        },
    };
    let syss = match c.systems() {
        Ok(i) => i,
        Err(e) => panic!(e)         // Please use error handling as above.
    };
    for s in syss {
        let cap = match c.capabilities(&s) {
            Ok(i) => i,
            Err(e) => panic!(e)     // Please use error handling as above.
        };
        if cap.is_supported(lsm::Capability::Volumes) {
            let vols = match c.volumes() {
                Ok(i) => i,
                Err(e) => panic!(e) // Please use error handling as above.
            };
            for vol in vols {
                println!("Got volume: {} {}", vol.name, vol.id);
            }
        }
    }
}