Create enum for PathType and use FQDN for namespace (RFC 1035 is more strict than RFC 1123, but very similar)

This commit is contained in:
tahahawa 2025-05-15 11:22:35 -04:00
parent 966fd757bc
commit 2817939b18
2 changed files with 30 additions and 6 deletions

View File

@ -10,6 +10,23 @@ use crate::{
use super::resource::{K8sResourceInterpret, K8sResourceScore};
#[derive(Debug, Clone, Serialize)]
pub enum PathType {
ImplementationSpecific,
Exact,
Prefix,
}
impl PathType {
fn as_str(&self) -> &'static str {
match self {
PathType::ImplementationSpecific => "ImplementationSpecific",
PathType::Exact => "Exact",
PathType::Prefix => "Prefix",
}
}
}
#[derive(Debug, Clone, Serialize)]
pub struct K8sIngressScore {
pub name: fqdn::FQDN,
@ -17,8 +34,8 @@ pub struct K8sIngressScore {
pub backend_service: fqdn::FQDN,
pub port: u16,
pub path: Option<String>,
pub path_type: Option<String>,
pub namespace: Option<String>,
pub path_type: Option<PathType>,
pub namespace: Option<fqdn::FQDN>,
}
impl<T: Topology + K8sclient> Score<T> for K8sIngressScore {
@ -29,7 +46,7 @@ impl<T: Topology + K8sclient> Score<T> for K8sIngressScore {
};
let path_type = match self.path_type.clone() {
Some(p) => p,
None => "Prefix".to_string(),
None => PathType::Prefix,
};
let ingress = json!(
@ -44,7 +61,7 @@ impl<T: Topology + K8sclient> Score<T> for K8sIngressScore {
"paths": [
{
"path": path,
"pathType": path_type,
"pathType": path_type.as_str(),
"backend": [
{
"service": self.backend_service,
@ -62,7 +79,12 @@ impl<T: Topology + K8sclient> Score<T> for K8sIngressScore {
let ingress: Ingress = serde_json::from_value(ingress).unwrap();
Box::new(K8sResourceInterpret {
score: K8sResourceScore::single(ingress.clone(), self.namespace.clone()),
score: K8sResourceScore::single(
ingress.clone(),
self.namespace
.clone()
.map(|f| f.as_c_str().to_str().unwrap().to_string()),
),
})
}

View File

@ -145,7 +145,9 @@ impl<T: Topology + K8sclient + HelmCommand> Interpret<T> for LAMPInterpret {
port: 8080,
path: None,
path_type: None,
namespace: self.get_namespace().map(|nbs| nbs.to_string()),
namespace: self
.get_namespace()
.map(|nbs| fqdn!(nbs.to_string().as_str())),
};
lamp_ingress