Can view from web UI XML definition of domains
This commit is contained in:
		@@ -99,6 +99,20 @@ impl Handler<GetDomainXMLReq> for LibVirtActor {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Message)]
 | 
			
		||||
#[rtype(result = "anyhow::Result<String>")]
 | 
			
		||||
pub struct GetSourceDomainXMLReq(pub XMLUuid);
 | 
			
		||||
 | 
			
		||||
impl Handler<GetSourceDomainXMLReq> for LibVirtActor {
 | 
			
		||||
    type Result = anyhow::Result<String>;
 | 
			
		||||
 | 
			
		||||
    fn handle(&mut self, msg: GetSourceDomainXMLReq, _ctx: &mut Self::Context) -> Self::Result {
 | 
			
		||||
        log::debug!("Get domain source XML:\n{}", msg.0.as_string());
 | 
			
		||||
        let domain = Domain::lookup_by_uuid_string(&self.m, &msg.0.as_string())?;
 | 
			
		||||
        Ok(domain.get_xml_desc(VIR_DOMAIN_XML_SECURE)?)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Message)]
 | 
			
		||||
#[rtype(result = "anyhow::Result<XMLUuid>")]
 | 
			
		||||
pub struct DefineDomainReq(pub DomainXML);
 | 
			
		||||
 
 | 
			
		||||
@@ -73,6 +73,21 @@ pub async fn get_single(client: LibVirtReq, id: web::Path<SingleVMUUidReq>) -> H
 | 
			
		||||
    }))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Get the XML configuration of a VM
 | 
			
		||||
pub async fn get_single_src_def(client: LibVirtReq, id: web::Path<SingleVMUUidReq>) -> HttpResult {
 | 
			
		||||
    let info = match client.get_single_domain_xml(id.uid).await {
 | 
			
		||||
        Ok(i) => i,
 | 
			
		||||
        Err(e) => {
 | 
			
		||||
            log::error!("Failed to get domain source XML! {e}");
 | 
			
		||||
            return Ok(HttpResponse::InternalServerError().json(e.to_string()));
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    Ok(HttpResponse::Ok()
 | 
			
		||||
        .content_type("application/xml")
 | 
			
		||||
        .body(info))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Update a VM information
 | 
			
		||||
pub async fn update(
 | 
			
		||||
    client: LibVirtReq,
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,13 @@ impl LibVirtClient {
 | 
			
		||||
        self.0.send(libvirt_actor::GetDomainXMLReq(id)).await?
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Get the source XML configuration of a single domain
 | 
			
		||||
    pub async fn get_single_domain_xml(&self, id: XMLUuid) -> anyhow::Result<String> {
 | 
			
		||||
        self.0
 | 
			
		||||
            .send(libvirt_actor::GetSourceDomainXMLReq(id))
 | 
			
		||||
            .await?
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Update a domain
 | 
			
		||||
    pub async fn update_domain(&self, xml: DomainXML) -> anyhow::Result<XMLUuid> {
 | 
			
		||||
        self.0.send(libvirt_actor::DefineDomainReq(xml)).await?
 | 
			
		||||
 
 | 
			
		||||
@@ -153,6 +153,10 @@ async fn main() -> std::io::Result<()> {
 | 
			
		||||
            .route("/api/vm/create", web::post().to(vm_controller::create))
 | 
			
		||||
            .route("/api/vm/list", web::get().to(vm_controller::list_all))
 | 
			
		||||
            .route("/api/vm/{uid}", web::get().to(vm_controller::get_single))
 | 
			
		||||
            .route(
 | 
			
		||||
                "/api/vm/{uid}/src",
 | 
			
		||||
                web::get().to(vm_controller::get_single_src_def),
 | 
			
		||||
            )
 | 
			
		||||
            .route(
 | 
			
		||||
                "/api/vm/{uid}/autostart",
 | 
			
		||||
                web::get().to(vm_controller::get_autostart),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user