2026-03-06 14:58:45 +01:00
|
|
|
mod attach_provider;
|
2025-12-10 15:46:25 +01:00
|
|
|
mod orchestrator;
|
|
|
|
|
|
|
|
|
|
pub use orchestrator::{K8sDeployer, K8sRunnerError};
|
2026-03-08 14:05:28 +01:00
|
|
|
use testing_framework_core::scenario::{DynError, ExistingCluster};
|
2026-03-06 14:58:45 +01:00
|
|
|
|
|
|
|
|
/// Kubernetes deployment metadata returned by k8s-specific deployment APIs.
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
|
|
pub struct K8sDeploymentMetadata {
|
|
|
|
|
/// Namespace used for this deployment when available.
|
|
|
|
|
pub namespace: Option<String>,
|
|
|
|
|
/// Attach selector used to discover node services.
|
|
|
|
|
pub label_selector: Option<String>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, thiserror::Error)]
|
|
|
|
|
enum K8sMetadataError {
|
|
|
|
|
#[error("k8s deployment metadata has no namespace")]
|
|
|
|
|
MissingNamespace,
|
|
|
|
|
#[error("k8s deployment metadata has no label selector")]
|
|
|
|
|
MissingLabelSelector,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl K8sDeploymentMetadata {
|
|
|
|
|
/// Returns namespace when deployment is bound to a specific namespace.
|
|
|
|
|
#[must_use]
|
|
|
|
|
pub fn namespace(&self) -> Option<&str> {
|
|
|
|
|
self.namespace.as_deref()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Returns attach label selector when available.
|
|
|
|
|
#[must_use]
|
|
|
|
|
pub fn label_selector(&self) -> Option<&str> {
|
|
|
|
|
self.label_selector.as_deref()
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-08 14:03:50 +01:00
|
|
|
/// Builds an existing-cluster descriptor for the same k8s deployment scope.
|
2026-03-08 14:05:28 +01:00
|
|
|
pub fn existing_cluster(&self) -> Result<ExistingCluster, DynError> {
|
2026-03-06 14:58:45 +01:00
|
|
|
let namespace = self.namespace().ok_or(K8sMetadataError::MissingNamespace)?;
|
|
|
|
|
let label_selector = self
|
|
|
|
|
.label_selector()
|
|
|
|
|
.ok_or(K8sMetadataError::MissingLabelSelector)?;
|
|
|
|
|
|
2026-03-08 14:05:28 +01:00
|
|
|
Ok(ExistingCluster::k8s_in_namespace(
|
2026-03-08 13:32:10 +01:00
|
|
|
label_selector.to_owned(),
|
|
|
|
|
namespace.to_owned(),
|
|
|
|
|
))
|
2026-03-06 14:58:45 +01:00
|
|
|
}
|
2026-03-08 14:03:50 +01:00
|
|
|
|
|
|
|
|
#[doc(hidden)]
|
2026-03-08 14:05:28 +01:00
|
|
|
pub fn attach_source(&self) -> Result<ExistingCluster, DynError> {
|
2026-03-08 14:03:50 +01:00
|
|
|
self.existing_cluster()
|
|
|
|
|
}
|
2026-03-06 14:58:45 +01:00
|
|
|
}
|