Start to build NAT configuration mode
This commit is contained in:
@ -1,2 +1,3 @@
|
||||
pub mod nat_conf_mode;
|
||||
pub mod nat_definition;
|
||||
pub mod nat_lib;
|
||||
|
79
virtweb_backend/src/nat/nat_conf_mode.rs
Normal file
79
virtweb_backend/src/nat/nat_conf_mode.rs
Normal file
@ -0,0 +1,79 @@
|
||||
use crate::constants;
|
||||
use crate::libvirt_rest_structures::net::NetworkName;
|
||||
use crate::nat::nat_definition::NetNat;
|
||||
use crate::utils::net_utils;
|
||||
use clap::Parser;
|
||||
use std::collections::HashMap;
|
||||
use std::net::IpAddr;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
/// VirtWeb NAT configuration mode. This executable should never be executed manually
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
#[clap(author, version, about, long_about = None)]
|
||||
struct NatArgs {
|
||||
/// Storage directory
|
||||
#[clap(short, long)]
|
||||
storage: String,
|
||||
|
||||
/// Network name
|
||||
#[clap(short, long)]
|
||||
network_name: String,
|
||||
|
||||
/// Operation
|
||||
#[clap(short, long)]
|
||||
operation: String,
|
||||
|
||||
/// Sub operation
|
||||
#[clap(long)]
|
||||
sub_operation: String,
|
||||
}
|
||||
|
||||
impl NatArgs {
|
||||
pub fn network_file(&self) -> PathBuf {
|
||||
let network_name = NetworkName(self.network_name.to_string());
|
||||
Path::new(&self.storage)
|
||||
.join(constants::STORAGE_NAT_DIR)
|
||||
.join(network_name.nat_file_name())
|
||||
}
|
||||
}
|
||||
|
||||
/// NAT sub main function
|
||||
pub async fn sub_main() -> anyhow::Result<()> {
|
||||
let args = NatArgs::parse();
|
||||
|
||||
if !args.network_file().exists() {
|
||||
log::warn!("Cannot do anything for the network, because the NAT configuration file does not exixsts!");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let conf_json = std::fs::read_to_string(args.network_file())?;
|
||||
let conf: NetNat = serde_json::from_str(&conf_json)?;
|
||||
|
||||
let ips = net_utils::net_list_and_ips()?;
|
||||
|
||||
match (args.operation.as_str(), args.sub_operation.as_str()) {
|
||||
("started", "begin") => network_started_begin(&conf, &ips).await?,
|
||||
("stopped", "end") => network_stopped_end(&conf, &ips).await?,
|
||||
_ => log::debug!(
|
||||
"Operation {} - {} not supported",
|
||||
args.operation,
|
||||
args.sub_operation
|
||||
),
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn network_started_begin(
|
||||
conf: &NetNat,
|
||||
ips: &HashMap<String, Vec<IpAddr>>,
|
||||
) -> anyhow::Result<()> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
pub async fn network_stopped_end(
|
||||
conf: &NetNat,
|
||||
ips: &HashMap<String, Vec<IpAddr>>,
|
||||
) -> anyhow::Result<()> {
|
||||
todo!()
|
||||
}
|
Reference in New Issue
Block a user