101 lines
3.0 KiB
Rust
101 lines
3.0 KiB
Rust
//! Code System Kubernetes Operator
|
|
//!
|
|
//! Manages the lifecycle of: App, GitServer, EmailWorker, GitHook, Migrate CRDs.
|
|
|
|
use operator::context::ReconcileCtx;
|
|
use std::sync::Arc;
|
|
use tracing::{Level, error, info};
|
|
use tracing_subscriber::FmtSubscriber;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
// ---- Logging ----
|
|
let log_level = std::env::var("OPERATOR_LOG_LEVEL").unwrap_or_else(|_| "info".to_string());
|
|
let level = match log_level.to_lowercase().as_str() {
|
|
"trace" => Level::TRACE,
|
|
"debug" => Level::DEBUG,
|
|
"info" => Level::INFO,
|
|
"warn" => Level::WARN,
|
|
"error" => Level::ERROR,
|
|
_ => Level::INFO,
|
|
};
|
|
FmtSubscriber::builder()
|
|
.with_max_level(level)
|
|
.with_target(false)
|
|
.with_thread_ids(false)
|
|
.with_file(true)
|
|
.with_line_number(true)
|
|
.compact()
|
|
.init();
|
|
|
|
let ctx = Arc::new(ReconcileCtx::from_env().await?);
|
|
info!(
|
|
namespace = ctx.operator_namespace,
|
|
image_prefix = ctx.image_prefix,
|
|
"code-operator starting"
|
|
);
|
|
|
|
// ---- Spawn all 5 controllers ----
|
|
let app_handle = tokio::spawn({
|
|
let ctx = ctx.clone();
|
|
let client = ctx.client.clone();
|
|
async move {
|
|
use operator::controller;
|
|
if let Err(e) = controller::start_app(client, ctx).await {
|
|
error!(%e, "app controller stopped");
|
|
}
|
|
}
|
|
});
|
|
|
|
let gs_handle = tokio::spawn({
|
|
let ctx = ctx.clone();
|
|
let client = ctx.client.clone();
|
|
async move {
|
|
use operator::controller;
|
|
if let Err(e) = controller::start_gitserver(client, ctx).await {
|
|
error!(%e, "gitserver controller stopped");
|
|
}
|
|
}
|
|
});
|
|
|
|
let ew_handle = tokio::spawn({
|
|
let ctx = ctx.clone();
|
|
let client = ctx.client.clone();
|
|
async move {
|
|
use operator::controller;
|
|
if let Err(e) = controller::start_email_worker(client, ctx).await {
|
|
error!(%e, "email_worker controller stopped");
|
|
}
|
|
}
|
|
});
|
|
|
|
let gh_handle = tokio::spawn({
|
|
let ctx = ctx.clone();
|
|
let client = ctx.client.clone();
|
|
async move {
|
|
use operator::controller;
|
|
if let Err(e) = controller::start_git_hook(client, ctx).await {
|
|
error!(%e, "git_hook controller stopped");
|
|
}
|
|
}
|
|
});
|
|
|
|
let mig_handle = tokio::spawn({
|
|
let ctx = ctx.clone();
|
|
let client = ctx.client.clone();
|
|
async move {
|
|
use operator::controller;
|
|
if let Err(e) = controller::start_migrate(client, ctx).await {
|
|
error!(%e, "migrate controller stopped");
|
|
}
|
|
}
|
|
});
|
|
|
|
// ---- Graceful shutdown on SIGINT / SIGTERM ----
|
|
tokio::signal::ctrl_c().await.ok();
|
|
|
|
info!("code-operator stopped");
|
|
let _ = tokio::join!(app_handle, gs_handle, ew_handle, gh_handle, mig_handle,);
|
|
Ok(())
|
|
}
|