diff --git a/sk-core/src/constants.rs b/sk-core/src/constants.rs index dacbe0ec..849b50a1 100644 --- a/sk-core/src/constants.rs +++ b/sk-core/src/constants.rs @@ -17,6 +17,8 @@ pub const CURRENT_TRACE_FORMAT_VERSION: u16 = 2; pub const KUBERNETES_IO_METADATA_NAME_KEY: &str = "kubernetes.io/metadata.name"; pub const APP_KUBERNETES_IO_NAME_KEY: &str = "app.kubernetes.io/name"; pub const APP_KUBERNETES_IO_COMPONENT_KEY: &str = "app.kubernetes.io/component"; +pub const LAST_APPLIED_CONFIG_LABEL_KEY: &str = "kubectl.kubernetes.io/last-applied-configuration"; +pub const DEPL_REVISION_LABEL_KEY: &str = "deployment.kubernetes.io/revision"; // Annotations that go on the Simulation CR itself // TODO (SK-277) maybe this just belongs in the CRD specification? diff --git a/sk-core/src/events.rs b/sk-core/src/events.rs index d7f21186..c519d98c 100644 --- a/sk-core/src/events.rs +++ b/sk-core/src/events.rs @@ -3,6 +3,7 @@ use std::sync::Arc; use anyhow::bail; use async_trait::async_trait; use k8s_openapi::api::batch::v1 as batchv1; +use k8s_openapi::api::core::v1 as corev1; use kube::Resource; use kube::runtime::events; use kube::runtime::events::{ @@ -11,8 +12,10 @@ use kube::runtime::events::{ }; #[cfg(feature = "mock")] use mockall::automock; +use sk_api::v1::Simulation; -use crate::prelude::*; +use crate::errors::EmptyResult; +use crate::k8s::KubeResourceExt; #[cfg_attr(feature = "mock", automock)] #[async_trait] diff --git a/sk-core/src/hooks.rs b/sk-core/src/hooks.rs index dc28c974..bc185e1b 100644 --- a/sk-core/src/hooks.rs +++ b/sk-core/src/hooks.rs @@ -6,7 +6,10 @@ use anyhow::{ bail, }; use derive_more::Display; -use sk_api::v1::SimulationHooksConfig; +use sk_api::v1::{ + Simulation, + SimulationHooksConfig, +}; use tokio::io::{ AsyncWriteExt, BufWriter, @@ -14,7 +17,8 @@ use tokio::io::{ use tokio::process::Command; use tracing::*; -use crate::prelude::*; +use crate::errors::EmptyResult; +use crate::events::SkEventRecorder; #[derive(Debug, Display)] #[display("{_variant}")] diff --git a/sk-core/src/k8s/container_state.rs b/sk-core/src/k8s/container_state.rs index bae73d32..72dbf94b 100644 --- a/sk-core/src/k8s/container_state.rs +++ b/sk-core/src/k8s/container_state.rs @@ -1,7 +1,10 @@ +use k8s_openapi::api::core::v1 as corev1; use tracing::*; -use super::*; -use crate::prelude::*; +use crate::k8s::{ + KubernetesError, + StartEndTimeable, +}; // StartEndTimeable provides helper functions for computing the start and end times of a container // from its corresponding ContainerState object. Note that as per the Kubernetes spec, it is an diff --git a/sk-core/src/k8s/gvk.rs b/sk-core/src/k8s/gvk.rs index 5c9d0eb6..eed8475d 100644 --- a/sk-core/src/k8s/gvk.rs +++ b/sk-core/src/k8s/gvk.rs @@ -2,7 +2,12 @@ use std::borrow::Cow; use std::fmt; use std::ops::Deref; -use kube::api::GroupVersionKind; +use k8s_openapi::apimachinery::pkg::apis::meta::v1 as metav1; +use kube::api::{ + DynamicObject, + GroupVersionKind, + TypeMeta, +}; use serde::{ Deserialize, Deserializer, @@ -12,7 +17,6 @@ use serde::{ }; use crate::errors::*; -use crate::prelude::*; // GVK is a "newtype" wrapper around the metav1::GroupVersionKind object that lets me provide // custom serialization methods. We also add some handy helper/conversion functions. diff --git a/sk-core/src/k8s/lease.rs b/sk-core/src/k8s/lease.rs index d3a064f1..d7d5e0e2 100644 --- a/sk-core/src/k8s/lease.rs +++ b/sk-core/src/k8s/lease.rs @@ -4,15 +4,22 @@ use clockabilly::{ Utc, }; use k8s_openapi::api::coordination::v1 as coordinationv1; +use k8s_openapi::apimachinery::pkg::apis::meta::v1 as metav1; +use kube::ResourceExt; use kube::api::Patch; use serde_json::json; +use sk_api::v1::{ + Simulation, + SimulationRoot, +}; use tracing::*; +use crate::constants::*; +use crate::errors::EmptyResult; use crate::k8s::{ KubernetesError, build_object_meta, }; -use crate::prelude::*; #[derive(Debug, Eq, PartialEq)] pub enum LeaseState { diff --git a/sk-core/src/k8s/mod.rs b/sk-core/src/k8s/mod.rs index c32c5157..a324a8c4 100644 --- a/sk-core/src/k8s/mod.rs +++ b/sk-core/src/k8s/mod.rs @@ -10,6 +10,9 @@ mod util; pub use apiset::*; pub use gvk::*; +use k8s_openapi::api::core::v1 as corev1; +use k8s_openapi::apimachinery::pkg::apis::meta::v1 as metav1; +use kube::api::TypeMeta; pub use lease::*; pub use owners::OwnersCache; use serde::{ @@ -21,10 +24,6 @@ pub use util::*; use crate::errors::*; use crate::macros::partial_ord_eq_ref; -use crate::prelude::*; - -const LAST_APPLIED_CONFIG_LABEL_KEY: &str = "kubectl.kubernetes.io/last-applied-configuration"; -const DEPL_REVISION_LABEL_KEY: &str = "deployment.kubernetes.io/revision"; err_impl! {KubernetesError, #[error("field not found in struct: {0}")] diff --git a/sk-core/src/k8s/owners.rs b/sk-core/src/k8s/owners.rs index 92083fa3..3c0ec54f 100644 --- a/sk-core/src/k8s/owners.rs +++ b/sk-core/src/k8s/owners.rs @@ -1,20 +1,25 @@ use std::collections::HashMap; use async_recursion::async_recursion; -use kube::Resource; +use k8s_openapi::apimachinery::pkg::apis::meta::v1 as metav1; use kube::api::ListParams; use kube::discovery::{ ApiCapabilities, Scope, }; +use kube::{ + Resource, + ResourceExt, +}; use tracing::*; -use super::*; use crate::k8s::{ DynamicApiSet, + GVK, + KubeResourceExt, format_gvk_name, }; -use crate::prelude::*; + // TODO I really want a way to mock out the OwnersCache, because // any tests that depend on it implicitly now have to depend on tokio diff --git a/sk-core/src/k8s/pod_ext.rs b/sk-core/src/k8s/pod_ext.rs index 7f042aa5..85095f1f 100644 --- a/sk-core/src/k8s/pod_ext.rs +++ b/sk-core/src/k8s/pod_ext.rs @@ -1,5 +1,10 @@ -use super::*; -use crate::prelude::*; +use anyhow::bail; +use k8s_openapi::api::core::v1 as corev1; + +use crate::k8s::{ + KubernetesError, + PodExt, +}; const KUBE_SVC_ACCOUNT_VOLUME_NAME_PREFIX: &str = "kube-api-access"; diff --git a/sk-core/src/k8s/pod_lifecycle.rs b/sk-core/src/k8s/pod_lifecycle.rs index ac5f5dc4..0787dcff 100644 --- a/sk-core/src/k8s/pod_lifecycle.rs +++ b/sk-core/src/k8s/pod_lifecycle.rs @@ -5,10 +5,15 @@ use std::cmp::{ min, }; +use k8s_openapi::api::core::v1 as corev1; use tracing::*; -use super::*; -use crate::prelude::*; +use crate::k8s::{ + KubeResourceExt, + PodExt, + PodLifecycleData, + StartEndTimeable, +}; // A PodLifecycleData object is how we track the length of time a pod was running in a cluster. It // has three states, Empty, Running, and Finished. For each state, we track the timestamps that diff --git a/sk-core/src/k8s/sim.rs b/sk-core/src/k8s/sim.rs index f3ee996e..a82d945c 100644 --- a/sk-core/src/k8s/sim.rs +++ b/sk-core/src/k8s/sim.rs @@ -1,3 +1,4 @@ +use kube::ResourceExt; use sk_api::v1::{ Simulation, SimulationMetricsConfig, @@ -6,8 +7,8 @@ use sk_api::v1::{ SimulationState, }; +use crate::constants::*; use crate::k8s::build_global_object_meta; -use crate::prelude::*; pub fn metrics_ns(sim: &Simulation) -> String { match &sim.spec.metrics { diff --git a/sk-core/src/k8s/tests/lease_test.rs b/sk-core/src/k8s/tests/lease_test.rs index a3c6dd96..f095f1a3 100644 --- a/sk-core/src/k8s/tests/lease_test.rs +++ b/sk-core/src/k8s/tests/lease_test.rs @@ -6,6 +6,10 @@ use httpmock::Method::*; use k8s_openapi::api::coordination::v1 as coordinationv1; use kube::error::ErrorResponse; use serde_json::json; +use sk_api::v1::{ + Simulation, + SimulationRoot, +}; use super::*; diff --git a/sk-core/src/k8s/tests/mod.rs b/sk-core/src/k8s/tests/mod.rs index fd1b9cba..b381f714 100644 --- a/sk-core/src/k8s/tests/mod.rs +++ b/sk-core/src/k8s/tests/mod.rs @@ -7,4 +7,5 @@ mod util_test; use sk_testutils::*; use super::*; +use crate::constants::*; use crate::macros::*; diff --git a/sk-core/src/k8s/tests/util_test.rs b/sk-core/src/k8s/tests/util_test.rs index 3f02c286..3bd7f34e 100644 --- a/sk-core/src/k8s/tests/util_test.rs +++ b/sk-core/src/k8s/tests/util_test.rs @@ -1,5 +1,6 @@ use assertables::*; use clockabilly::Utc; +use kube::api::DynamicObject; use serde_json::Value; use super::*; diff --git a/sk-core/src/k8s/util.rs b/sk-core/src/k8s/util.rs index 52a81a3c..d4f4d9f3 100644 --- a/sk-core/src/k8s/util.rs +++ b/sk-core/src/k8s/util.rs @@ -1,14 +1,24 @@ use std::collections::BTreeMap; -use kube::api::Resource; +use k8s_openapi::api::core::v1 as corev1; +use k8s_openapi::apimachinery::pkg::apis::meta::v1 as metav1; +use kube::ResourceExt; +use kube::api::{ + DynamicObject, + Resource, +}; use serde_json::{ Map, Value, }; -use super::*; use crate::constants::*; use crate::errors::*; +use crate::k8s::{ + GVK, + KubeResourceExt, + KubernetesError, +}; const MAX_LABEL_LENGTH: usize = 63; diff --git a/sk-core/src/trace/config.rs b/sk-core/src/trace/config.rs index 976999f4..80262bf5 100644 --- a/sk-core/src/trace/config.rs +++ b/sk-core/src/trace/config.rs @@ -9,7 +9,7 @@ use serde::{ use thiserror::Error; use tracing::*; -use crate::constants::KNOWN_GVKS_METADATA; +use crate::constants::*; use crate::k8s::GVK; #[derive(Debug, Error)] diff --git a/sk-core/src/trace/tests/pod_owners_map_test.rs b/sk-core/src/trace/tests/pod_owners_map_test.rs index 8f48c3db..ea277ba9 100644 --- a/sk-core/src/trace/tests/pod_owners_map_test.rs +++ b/sk-core/src/trace/tests/pod_owners_map_test.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use super::*; -use crate::constants::DEPLOYMENT_GVK; +use crate::constants::*; use crate::k8s::PodLifecycleData; use crate::trace::TraceIndex; use crate::trace::pod_owners_map::{ diff --git a/sk-core/src/trace/tests/trace_test.rs b/sk-core/src/trace/tests/trace_test.rs index 349ee396..175327e5 100644 --- a/sk-core/src/trace/tests/trace_test.rs +++ b/sk-core/src/trace/tests/trace_test.rs @@ -8,7 +8,7 @@ use sk_testutils::{ }; use super::*; -use crate::constants::DEPLOYMENT_GVK; +use crate::constants::*; use crate::k8s::PodLifecycleData; use crate::trace::Trace; use crate::trace::event::TraceEvent; diff --git a/sk-driver/src/runner.rs b/sk-driver/src/runner.rs index e6811161..5341161e 100644 --- a/sk-driver/src/runner.rs +++ b/sk-driver/src/runner.rs @@ -30,7 +30,7 @@ use sk_core::prelude::*; use tokio::time::sleep; use tracing::*; -use super::*; +use crate::DriverContext; use crate::util::{ compute_step_size, wait_if_paused,