sk-ctrl 2.5.0

Kubernetes controller for replaying traces in a simulated cluster
use std::sync::Arc;

use sk_api::v1::Simulation;
use sk_core::prelude::*;

use crate::Options;

#[derive(Clone)]
pub struct SimulationContext {
    pub client: kube::Client,
    pub opts: Options,

    pub name: String,
    pub metaroot_name: String,
    pub driver_name: String,
    pub driver_svc: String,
    pub prometheus_name: String,
    pub prometheus_svc: String,
    pub webhook_name: String,
}

impl SimulationContext {
    pub fn new(client: kube::Client, opts: Options) -> SimulationContext {
        SimulationContext {
            client,
            opts,

            name: String::new(),
            metaroot_name: String::new(),
            driver_name: String::new(),
            driver_svc: String::new(),
            prometheus_name: String::new(),
            prometheus_svc: String::new(),
            webhook_name: String::new(),
        }
    }

    pub fn with_sim(self: Arc<Self>, sim: &Simulation) -> Self {
        let mut new = (*self).clone();
        new.name = sim.name_any();
        new.metaroot_name = format!("sk-{}-metaroot", new.name);
        new.driver_name = format!("sk-{}-driver", new.name);
        new.driver_svc = format!("sk-{}-driver-svc", new.name);
        new.prometheus_name = format!("sk-{}-prom", new.name);
        new.prometheus_svc = format!("sk-{}-prom-svc", new.name);
        new.webhook_name = format!("sk-{}-mutatepods", new.name);

        new
    }
}