api2/tape/media: add 'move' api call
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
		
				
					committed by
					
						
						Dietmar Maurer
					
				
			
			
				
	
			
			
			
						parent
						
							85cdc4f371
						
					
				
				
					commit
					56d22c66c0
				
			@ -24,6 +24,7 @@ use crate::{
 | 
				
			|||||||
        MediaListEntry,
 | 
					        MediaListEntry,
 | 
				
			||||||
        MediaStatus,
 | 
					        MediaStatus,
 | 
				
			||||||
        MediaContentEntry,
 | 
					        MediaContentEntry,
 | 
				
			||||||
 | 
					        VAULT_NAME_SCHEMA,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    backup::{
 | 
					    backup::{
 | 
				
			||||||
        BackupDir,
 | 
					        BackupDir,
 | 
				
			||||||
@ -162,6 +163,43 @@ pub async fn list_media(pool: Option<String>) -> Result<Vec<MediaListEntry>, Err
 | 
				
			|||||||
    Ok(list)
 | 
					    Ok(list)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[api(
 | 
				
			||||||
 | 
					    input: {
 | 
				
			||||||
 | 
					        properties: {
 | 
				
			||||||
 | 
					            "label-text": {
 | 
				
			||||||
 | 
					                schema: MEDIA_LABEL_SCHEMA,
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "vault-name": {
 | 
				
			||||||
 | 
					                schema: VAULT_NAME_SCHEMA,
 | 
				
			||||||
 | 
					                optional: true,
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					)]
 | 
				
			||||||
 | 
					/// Change Tape location to vault (if given), or offline.
 | 
				
			||||||
 | 
					pub fn move_tape(
 | 
				
			||||||
 | 
					    label_text: String,
 | 
				
			||||||
 | 
					    vault_name: Option<String>,
 | 
				
			||||||
 | 
					) -> Result<(), Error> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let status_path = Path::new(TAPE_STATUS_DIR);
 | 
				
			||||||
 | 
					    let mut inventory = Inventory::load(status_path)?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let uuid = inventory.find_media_by_label_text(&label_text)
 | 
				
			||||||
 | 
					        .ok_or_else(|| format_err!("no such media '{}'", label_text))?
 | 
				
			||||||
 | 
					        .label
 | 
				
			||||||
 | 
					        .uuid
 | 
				
			||||||
 | 
					        .clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if let Some(vault_name) = vault_name {
 | 
				
			||||||
 | 
					        inventory.set_media_location_vault(&uuid, &vault_name)?;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        inventory.set_media_location_offline(&uuid)?;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Ok(())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[api(
 | 
					#[api(
 | 
				
			||||||
    input: {
 | 
					    input: {
 | 
				
			||||||
        properties: {
 | 
					        properties: {
 | 
				
			||||||
@ -342,6 +380,11 @@ const SUBDIRS: SubdirMap = &[
 | 
				
			|||||||
        &Router::new()
 | 
					        &Router::new()
 | 
				
			||||||
            .get(&API_METHOD_LIST_MEDIA)
 | 
					            .get(&API_METHOD_LIST_MEDIA)
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					    (
 | 
				
			||||||
 | 
					        "move",
 | 
				
			||||||
 | 
					        &Router::new()
 | 
				
			||||||
 | 
					            .post(&API_METHOD_MOVE_TAPE)
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user