Use custom aliased type for ingress path and new macro to check path validity
This commit is contained in:
parent
2817939b18
commit
c4850e79c1
@ -3,13 +3,12 @@ use harmony::{
|
||||
inventory::Inventory,
|
||||
maestro::Maestro,
|
||||
modules::{
|
||||
k8s::{self, ingress::K8sIngressScore, resource::K8sResourceScore},
|
||||
{
|
||||
lamp::{LAMPConfig, LAMPScore},
|
||||
},
|
||||
monitoring::monitoring_alerting::MonitoringAlertingStackScore,
|
||||
},
|
||||
topology::{K8sAnywhereTopology, Url, k8s::K8sClient},
|
||||
topology::{K8sAnywhereTopology, Url},
|
||||
};
|
||||
|
||||
#[tokio::main]
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
use harmony_macros::k8s_ingress_path;
|
||||
use k8s_openapi::api::networking::v1::Ingress;
|
||||
use serde::Serialize;
|
||||
use serde_json::json;
|
||||
@ -27,13 +28,15 @@ impl PathType {
|
||||
}
|
||||
}
|
||||
|
||||
type K8sIngressPath = String;
|
||||
|
||||
#[derive(Debug, Clone, Serialize)]
|
||||
pub struct K8sIngressScore {
|
||||
pub name: fqdn::FQDN,
|
||||
pub host: fqdn::FQDN,
|
||||
pub backend_service: fqdn::FQDN,
|
||||
pub port: u16,
|
||||
pub path: Option<String>,
|
||||
pub path: Option<K8sIngressPath>,
|
||||
pub path_type: Option<PathType>,
|
||||
pub namespace: Option<fqdn::FQDN>,
|
||||
}
|
||||
@ -42,8 +45,9 @@ impl<T: Topology + K8sclient> Score<T> for K8sIngressScore {
|
||||
fn create_interpret(&self) -> Box<dyn Interpret<T>> {
|
||||
let path = match self.path.clone() {
|
||||
Some(p) => p,
|
||||
None => "/".to_string(),
|
||||
None => k8s_ingress_path!("/"),
|
||||
};
|
||||
|
||||
let path_type = match self.path_type.clone() {
|
||||
Some(p) => p,
|
||||
None => PathType::Prefix,
|
||||
|
||||
@ -2,6 +2,7 @@ use convert_case::{Case, Casing};
|
||||
use dockerfile_builder::instruction::{CMD, COPY, ENV, EXPOSE, FROM, RUN, WORKDIR};
|
||||
use dockerfile_builder::{Dockerfile, instruction_builder::EnvBuilder};
|
||||
use fqdn::fqdn;
|
||||
use harmony_macros::k8s_ingress_path;
|
||||
use non_blank_string_rs::NonBlankString;
|
||||
use serde_json::json;
|
||||
use std::collections::HashMap;
|
||||
@ -143,7 +144,7 @@ impl<T: Topology + K8sclient + HelmCommand> Interpret<T> for LAMPInterpret {
|
||||
.as_str()
|
||||
),
|
||||
port: 8080,
|
||||
path: None,
|
||||
path: Some(k8s_ingress_path!("/")),
|
||||
path_type: None,
|
||||
namespace: self
|
||||
.get_namespace()
|
||||
|
||||
@ -116,3 +116,19 @@ pub fn yaml(input: TokenStream) -> TokenStream {
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
/// Verify that a string is a valid(ish) kubernetes path
|
||||
/// Panics if path does not start with `/`
|
||||
#[proc_macro]
|
||||
pub fn k8s_ingress_path(input: TokenStream) -> TokenStream {
|
||||
let input = parse_macro_input!(input as LitStr);
|
||||
let path_str = input.value();
|
||||
|
||||
match path_str.starts_with("/") {
|
||||
true => {
|
||||
let expanded = quote! {(#path_str.to_string()) };
|
||||
return TokenStream::from(expanded);
|
||||
}
|
||||
false => panic!("Invalid k8s path"),
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user