Can create network filter rules

This commit is contained in:
2024-01-02 13:14:11 +01:00
parent 388a1ed478
commit 81f60ce766
8 changed files with 102 additions and 192 deletions

View File

@ -5,6 +5,7 @@ use crate::libvirt_lib_structures::nwfilter::*;
use crate::libvirt_lib_structures::*;
use crate::libvirt_rest_structures::hypervisor::*;
use crate::libvirt_rest_structures::net::*;
use crate::libvirt_rest_structures::nw_filter::NetworkFilter;
use crate::libvirt_rest_structures::vm::*;
use actix::{Actor, Context, Handler, Message};
use image::ImageOutputFormat;
@ -591,3 +592,29 @@ impl Handler<GetNWFilterXMLReq> for LibVirtActor {
NetworkFilterXML::parse_xml(xml)
}
}
#[derive(Message)]
#[rtype(result = "anyhow::Result<XMLUuid>")]
pub struct DefineNWFilterReq(pub NetworkFilter, pub NetworkFilterXML);
impl Handler<DefineNWFilterReq> for LibVirtActor {
type Result = anyhow::Result<XMLUuid>;
fn handle(&mut self, mut msg: DefineNWFilterReq, _ctx: &mut Self::Context) -> Self::Result {
let xml = msg.1.into_xml()?;
log::debug!("Define network filter:\n{}", xml);
let filter = NWFilter::define_xml(&self.m, &xml)?;
let uuid = XMLUuid::parse_from_str(&filter.get_uuid_string()?)?;
// Save a copy of the source definition
msg.0.uuid = Some(uuid);
let json = serde_json::to_string(&msg.0)?;
std::fs::write(
AppConfig::get().net_filter_definition_path(&msg.0.name),
json,
)?;
Ok(uuid)
}
}