1use std::collections::HashMap;
2use std::sync::LazyLock;
3
4use k8s_openapi::api::apps::v1 as appsv1;
5use k8s_openapi::api::batch::v1 as batchv1;
6use k8s_openapi::api::core::v1 as corev1;
7
8use crate::k8s::{
9 GVK,
10 OpenApiResourceExt,
11};
12
13pub const KUBERNETES_IO_METADATA_NAME_KEY: &str = "kubernetes.io/metadata.name";
15pub const APP_KUBERNETES_IO_NAME_KEY: &str = "app.kubernetes.io/name";
16pub const APP_KUBERNETES_IO_COMPONENT_KEY: &str = "app.kubernetes.io/component";
17
18pub const SKIP_LOCAL_VOLUME_MOUNT_ANNOTATION_KEY: &str = "controller.simkube.io/skip-local-volume-mount";
21
22pub const SIMKUBE_IO_PREFIX: &str = "simkube.io";
24pub const SIMULATION_LABEL_KEY: &str = "simkube.io/simulation";
25pub const VIRTUAL_LABEL_KEY: &str = "simkube.io/virtual";
26
27pub const KWOK_STAGE_COMPLETE_KEY: &str = "simkube.io/kwok-stage-complete";
29pub const KWOK_STAGE_COMPLETE_TIMESTAMP_KEY: &str = "simkube.io/kwok-stage-complete-time";
30pub const KWOK_STAGE_ERROR_TIMESTAMP_KEY: &str = "simkube.io/kwok-stage-error-time";
31pub const KWOK_STAGE_CREATE_DELAY_KEY: &str = "simkube.io/kwok-stage-create-delay";
32pub const KWOK_STAGE_CREATE_DELAY_JITTER_KEY: &str = "simkube.io/kwok-stage-create-delay-jitter";
33pub const KWOK_STAGE_READY_DELAY_KEY: &str = "simkube.io/kwok-stage-ready-delay";
34pub const KWOK_STAGE_READY_DELAY_JITTER_KEY: &str = "simkube.io/kwok-stage-ready-delay-jitter";
35
36pub const ORIG_NAMESPACE_ANNOTATION_KEY: &str = "static.simkube.io/original-namespace";
39pub const ORIG_OWNER_ANNOTATION_KEY: &str = "static.simkube.io/original-owner";
40pub const POD_SPEC_STABLE_HASH_KEY: &str = "static.simkube.io/pod-spec-stable-hash";
41pub const POD_SEQUENCE_NUMBER_KEY: &str = "static.simkube.io/pod-sequence-number";
42
43pub const PROM2PARQUET_PREFIX_KEY: &str = "prom2parquet_prefix";
45
46pub const DRIVER_CERT_NAME: &str = "sk-driver-cert";
48pub const CERT_MANAGER_INJECT_ANNOTATION_KEY: &str = "cert-manager.io/inject-ca-from";
49
50pub const VIRTUAL_NODE_TOLERATION_KEY: &str = "kwok-provider";
52
53pub const CTRL_NS_ENV_VAR: &str = "CTRL_NAMESPACE";
55pub const DRIVER_NAME_ENV_VAR: &str = "DRIVER_NAME";
56pub const POD_SVC_ACCOUNT_ENV_VAR: &str = "POD_SVC_ACCOUNT";
57
58pub const DEFAULT_METRICS_NS: &str = "monitoring";
60pub const DEFAULT_METRICS_SVC_ACCOUNT: &str = "prometheus-k8s";
61pub const DRIVER_ADMISSION_WEBHOOK_PORT: &str = "8888";
62pub const SK_LEASE_NAME: &str = "sk-lease";
63
64pub const RETRY_DELAY_SECONDS: u64 = 5;
66pub const ERROR_RETRY_DELAY_SECONDS: u64 = 30;
67
68pub const SVC_ACCOUNT_KIND: &str = "ServiceAccount";
70
71pub static SVC_ACCOUNT_GVK: LazyLock<GVK> = LazyLock::new(|| GVK::new("", "v1", SVC_ACCOUNT_KIND));
73pub static CRONJOB_GVK: LazyLock<GVK> = LazyLock::new(batchv1::CronJob::gvk);
74pub static DAEMONSET_GVK: LazyLock<GVK> = LazyLock::new(appsv1::DaemonSet::gvk);
75pub static DEPLOYMENT_GVK: LazyLock<GVK> = LazyLock::new(appsv1::Deployment::gvk);
76pub static JOB_GVK: LazyLock<GVK> = LazyLock::new(batchv1::Job::gvk);
77pub static REPLICASET_GVK: LazyLock<GVK> = LazyLock::new(appsv1::ReplicaSet::gvk);
78pub static STATEFULSET_GVK: LazyLock<GVK> = LazyLock::new(appsv1::StatefulSet::gvk);
79pub static POD_GVK: LazyLock<GVK> = LazyLock::new(corev1::Pod::gvk);
80
81pub static KNOWN_GVKS_METADATA: LazyLock<HashMap<GVK, Vec<&'static str>>> = LazyLock::new(|| {
83 HashMap::from([
84 (CRONJOB_GVK.clone(), vec!["/spec/jobTemplate/spec/template"]),
85 (DAEMONSET_GVK.clone(), vec!["/spec/template"]),
86 (DEPLOYMENT_GVK.clone(), vec!["/spec/template"]),
87 (JOB_GVK.clone(), vec!["/spec/template"]),
88 (REPLICASET_GVK.clone(), vec!["/spec"]),
89 (STATEFULSET_GVK.clone(), vec!["/spec/template"]),
90 (POD_GVK.clone(), vec![""]),
91 ])
92});