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:
parent
966fd757bc
commit
2817939b18
@ -10,6 +10,23 @@ use crate::{
|
|||||||
|
|
||||||
use super::resource::{K8sResourceInterpret, K8sResourceScore};
|
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)]
|
#[derive(Debug, Clone, Serialize)]
|
||||||
pub struct K8sIngressScore {
|
pub struct K8sIngressScore {
|
||||||
pub name: fqdn::FQDN,
|
pub name: fqdn::FQDN,
|
||||||
@ -17,8 +34,8 @@ pub struct K8sIngressScore {
|
|||||||
pub backend_service: fqdn::FQDN,
|
pub backend_service: fqdn::FQDN,
|
||||||
pub port: u16,
|
pub port: u16,
|
||||||
pub path: Option<String>,
|
pub path: Option<String>,
|
||||||
pub path_type: Option<String>,
|
pub path_type: Option<PathType>,
|
||||||
pub namespace: Option<String>,
|
pub namespace: Option<fqdn::FQDN>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Topology + K8sclient> Score<T> for K8sIngressScore {
|
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() {
|
let path_type = match self.path_type.clone() {
|
||||||
Some(p) => p,
|
Some(p) => p,
|
||||||
None => "Prefix".to_string(),
|
None => PathType::Prefix,
|
||||||
};
|
};
|
||||||
|
|
||||||
let ingress = json!(
|
let ingress = json!(
|
||||||
@ -44,7 +61,7 @@ impl<T: Topology + K8sclient> Score<T> for K8sIngressScore {
|
|||||||
"paths": [
|
"paths": [
|
||||||
{
|
{
|
||||||
"path": path,
|
"path": path,
|
||||||
"pathType": path_type,
|
"pathType": path_type.as_str(),
|
||||||
"backend": [
|
"backend": [
|
||||||
{
|
{
|
||||||
"service": self.backend_service,
|
"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();
|
let ingress: Ingress = serde_json::from_value(ingress).unwrap();
|
||||||
Box::new(K8sResourceInterpret {
|
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()),
|
||||||
|
),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -145,7 +145,9 @@ impl<T: Topology + K8sclient + HelmCommand> Interpret<T> for LAMPInterpret {
|
|||||||
port: 8080,
|
port: 8080,
|
||||||
path: None,
|
path: None,
|
||||||
path_type: 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
|
lamp_ingress
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user