refactor: Improve async
This commit is contained in:
+32
-35
@@ -4,55 +4,52 @@ use ipxe::IPXE_DIR;
|
||||
use minijinja::{Environment, context};
|
||||
use regex::regex;
|
||||
|
||||
// TODO: Make this a proper async function
|
||||
pub fn get_file(
|
||||
pub async fn get_file(
|
||||
filename: impl ToString,
|
||||
http_url: impl ToString,
|
||||
) -> impl Future<Output = Option<(Vec<u8>, &'static str)>> {
|
||||
) -> Option<(Vec<u8>, &'static str)> {
|
||||
let re = regex!(r"^talos/(?<cluster>.+)/(?<node>.+)\.ya?ml$");
|
||||
|
||||
let filename: String = filename.to_string();
|
||||
let re = re.clone();
|
||||
|
||||
async move {
|
||||
const IPXE_PATTERN: &str = "ipxe/";
|
||||
if filename == format!("{IPXE_PATTERN}boot.ipxe") {
|
||||
let mut env = Environment::new();
|
||||
const IPXE_PATTERN: &str = "ipxe/";
|
||||
if filename == format!("{IPXE_PATTERN}boot.ipxe") {
|
||||
let mut env = Environment::new();
|
||||
|
||||
configure_environment(&mut env);
|
||||
configure_environment(&mut env);
|
||||
|
||||
let template = env
|
||||
.template_from_str(include_str!("./boot.ipxe"))
|
||||
.expect("Template should be valid");
|
||||
let template = env
|
||||
.template_from_str(include_str!("./boot.ipxe"))
|
||||
.expect("Template should be valid");
|
||||
|
||||
let clusters = Cluster::get_all().await;
|
||||
let content = template
|
||||
.render(context! {
|
||||
clusters => clusters.values().collect::<Vec<_>>(),
|
||||
httpUrl => http_url.to_string()
|
||||
})
|
||||
.unwrap();
|
||||
let clusters = Cluster::get_all().await;
|
||||
let content = template
|
||||
.render(context! {
|
||||
clusters => clusters.values().collect::<Vec<_>>(),
|
||||
httpUrl => http_url.to_string()
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
Some((content.into(), "text/plain; charset=utf-8"))
|
||||
} else if let Some(filename) = filename.strip_prefix(IPXE_PATTERN) {
|
||||
Some((
|
||||
IPXE_DIR.get_file(filename)?.contents().to_owned(),
|
||||
"application/octet-stream",
|
||||
))
|
||||
} else if let Some(caps) = re.captures(&filename) {
|
||||
let cluster = &caps["cluster"];
|
||||
let node = &caps["node"];
|
||||
Some((content.into(), "text/plain; charset=utf-8"))
|
||||
} else if let Some(filename) = filename.strip_prefix(IPXE_PATTERN) {
|
||||
Some((
|
||||
IPXE_DIR.get_file(filename)?.contents().to_owned(),
|
||||
"application/octet-stream",
|
||||
))
|
||||
} else if let Some(caps) = re.captures(&filename) {
|
||||
let cluster = &caps["cluster"];
|
||||
let node = &caps["node"];
|
||||
|
||||
let clusters = Cluster::get_all().await;
|
||||
let cluster = clusters.get(cluster)?;
|
||||
let clusters = Cluster::get_all().await;
|
||||
let cluster = clusters.get(cluster)?;
|
||||
|
||||
let node = cluster.node(node)?;
|
||||
let node = cluster.node(node)?;
|
||||
|
||||
let config = node.config(cluster).await;
|
||||
let config = node.config(cluster).await;
|
||||
|
||||
Some((config.into(), "application/yaml; charset=utf-8"))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
Some((config.into(), "application/yaml; charset=utf-8"))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user