forked from NationTech/harmony
- Added functionality to tag and push the built Docker image to a specified registry. - Modified deployment score to use the full image tag (including registry and project). - Included error handling and logging for the `docker tag` and `docker push` commands. - Updated the `K8sDeploymentScore` struct to include a namespace field and environment variables for database credentials. - Added kebab-case conversion for deployment name and namespace. - Implemented a check_output function for better error reporting.
66 lines
1.9 KiB
Rust
66 lines
1.9 KiB
Rust
use k8s_openapi::{DeepMerge, api::apps::v1::Deployment};
|
|
use log::debug;
|
|
use serde::Serialize;
|
|
use serde_json::json;
|
|
|
|
use crate::{
|
|
interpret::Interpret,
|
|
score::Score,
|
|
topology::{K8sclient, Topology},
|
|
};
|
|
|
|
use super::resource::{K8sResourceInterpret, K8sResourceScore};
|
|
|
|
#[derive(Debug, Clone, Serialize)]
|
|
pub struct K8sDeploymentScore {
|
|
pub name: String,
|
|
pub image: String,
|
|
pub namespace: Option<String>,
|
|
pub env_vars: serde_json::Value,
|
|
}
|
|
|
|
impl<T: Topology + K8sclient> Score<T> for K8sDeploymentScore {
|
|
fn create_interpret(&self) -> Box<dyn Interpret<T>> {
|
|
let deployment = json!(
|
|
{
|
|
"metadata": {
|
|
"name": self.name
|
|
},
|
|
"spec": {
|
|
"selector": {
|
|
"matchLabels": {
|
|
"app": self.name
|
|
},
|
|
},
|
|
"template": {
|
|
"metadata": {
|
|
"labels": {
|
|
"app": self.name
|
|
},
|
|
},
|
|
"spec": {
|
|
"containers": [
|
|
{
|
|
"image": self.image,
|
|
"name": self.name,
|
|
"imagePullPolicy": "IfNotPresent",
|
|
"env": self.env_vars,
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
);
|
|
|
|
let deployment: Deployment = serde_json::from_value(deployment).unwrap();
|
|
Box::new(K8sResourceInterpret {
|
|
score: K8sResourceScore::single(deployment.clone(), self.namespace.clone()),
|
|
})
|
|
}
|
|
|
|
fn name(&self) -> String {
|
|
"K8sDeploymentScore".to_string()
|
|
}
|
|
}
|