Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions crates/k8s-version/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
//!
//! ```
//! # use std::str::FromStr;
//! use k8s_version::{ApiVersion, Version, Level, Group};
//! use k8s_version::{ApiVersion, Group, Level, Version};
//!
//! let version = Version::new(1, Some(Level::Beta(1)));
//! let group = Group::from_str("extension").unwrap();
Expand All @@ -38,10 +38,7 @@
//!
//! // Or using ::try_new()
//! let version = Version::new(1, Some(Level::Beta(1)));
//! let api_version = ApiVersion::try_new(
//! Some("extension"),
//! version
//! ).unwrap();
//! let api_version = ApiVersion::try_new(Some("extension"), version).unwrap();
//!
//! assert_eq!(api_version.to_string(), "extension/v1beta1");
//! ```
Expand Down
10 changes: 8 additions & 2 deletions crates/stackable-operator-derive/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ mod merge;
/// # use stackable_operator::config::merge::Merge;
/// #[derive(Merge)]
/// #[merge(bound = "T: Merge")]
/// struct Wrapper<T> where T: Clone {
/// struct Wrapper<T>
/// where
/// T: Clone,
/// {
/// inner: T,
/// }
/// ```
Expand All @@ -30,7 +33,10 @@ mod merge;
///
/// ```
/// # use stackable_operator::config::merge::Merge;
/// struct Wrapper<T> where T: Clone {
/// struct Wrapper<T>
/// where
/// T: Clone,
/// {
/// inner: T,
/// }
/// impl<T> Merge for Wrapper<T>
Expand Down
1 change: 0 additions & 1 deletion crates/stackable-operator/src/builder/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
//!
//! They are often not _pure_ builders but contain extra logic to set fields based on others or
//! to fill in sensible defaults.
//!
pub mod configmap;
pub mod event;
pub mod meta;
Expand Down
32 changes: 20 additions & 12 deletions crates/stackable-operator/src/builder/pod/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -337,10 +337,11 @@ impl PodBuilder {
/// # };
/// # use std::collections::BTreeMap;
///
/// let labels: Labels = Labels::try_from(
/// BTreeMap::from([("app.kubernetes.io/component", "test-role"),
/// ("app.kubernetes.io/instance", "test"),
/// ("app.kubernetes.io/name", "test")]))
/// let labels: Labels = Labels::try_from(BTreeMap::from([
/// ("app.kubernetes.io/component", "test-role"),
/// ("app.kubernetes.io/instance", "test"),
/// ("app.kubernetes.io/name", "test"),
/// ]))
/// .unwrap();
///
/// let pod = PodBuilder::new()
Expand All @@ -357,7 +358,8 @@ impl PodBuilder {
/// .build()
/// .unwrap();
///
/// assert_eq!("\
/// assert_eq!(
/// "\
/// apiVersion: v1
/// kind: Pod
/// metadata: {}
Expand Down Expand Up @@ -387,7 +389,9 @@ impl PodBuilder {
/// storage: '1'
/// storageClassName: listeners.stackable.tech
/// name: listener
/// ", serde_yaml::to_string(&pod).unwrap())
/// ",
/// serde_yaml::to_string(&pod).unwrap()
/// )
/// ```
pub fn add_listener_volume_by_listener_class(
&mut self,
Expand Down Expand Up @@ -423,10 +427,11 @@ impl PodBuilder {
/// # };
/// # use std::collections::BTreeMap;
///
/// let labels: Labels = Labels::try_from(
/// BTreeMap::from([("app.kubernetes.io/component", "test-role"),
/// ("app.kubernetes.io/instance", "test"),
/// ("app.kubernetes.io/name", "test")]))
/// let labels: Labels = Labels::try_from(BTreeMap::from([
/// ("app.kubernetes.io/component", "test-role"),
/// ("app.kubernetes.io/instance", "test"),
/// ("app.kubernetes.io/name", "test"),
/// ]))
/// .unwrap();
///
/// let pod = PodBuilder::new()
Expand All @@ -443,7 +448,8 @@ impl PodBuilder {
/// .build()
/// .unwrap();
///
/// assert_eq!("\
/// assert_eq!(
/// "\
/// apiVersion: v1
/// kind: Pod
/// metadata: {}
Expand Down Expand Up @@ -473,7 +479,9 @@ impl PodBuilder {
/// storage: '1'
/// storageClassName: listeners.stackable.tech
/// name: listener
/// ", serde_yaml::to_string(&pod).unwrap())
/// ",
/// serde_yaml::to_string(&pod).unwrap()
/// )
/// ```
pub fn add_listener_volume_by_listener_name(
&mut self,
Expand Down
5 changes: 1 addition & 4 deletions crates/stackable-operator/src/builder/pod/probe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@
//! ### Usage example
//!
//! ```
//! use stackable_operator::{
//! builder::pod::probe::ProbeBuilder,
//! shared::time::Duration,
//! };
//! use stackable_operator::{builder::pod::probe::ProbeBuilder, shared::time::Duration};
//! # use k8s_openapi::api::core::v1::HTTPGetAction;
//! # use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString;
//!
Expand Down
27 changes: 12 additions & 15 deletions crates/stackable-operator/src/builder/pod/volume.rs
Original file line number Diff line number Diff line change
Expand Up @@ -466,24 +466,21 @@ pub enum ListenerOperatorVolumeSourceBuilderError {
///
/// let labels: Labels = Labels::try_from(BTreeMap::<String, String>::new()).unwrap();
///
/// let volume_source =
/// ListenerOperatorVolumeSourceBuilder::new(
/// &ListenerReference::ListenerClass("nodeport".into()),
/// &labels,
/// )
/// .build_ephemeral()
/// .unwrap();
/// let volume_source = ListenerOperatorVolumeSourceBuilder::new(
/// &ListenerReference::ListenerClass("nodeport".into()),
/// &labels,
/// )
/// .build_ephemeral()
/// .unwrap();
///
/// pod_builder
/// .add_volume(Volume {
/// name: "listener".to_string(),
/// ephemeral: Some(volume_source),
/// ..Volume::default()
/// });
/// pod_builder.add_volume(Volume {
/// name: "listener".to_string(),
/// ephemeral: Some(volume_source),
/// ..Volume::default()
/// });
///
/// // There is also a shortcut for the code above:
/// pod_builder
/// .add_listener_volume_by_listener_class("listener", "nodeport", &labels);
/// pod_builder.add_listener_volume_by_listener_class("listener", "nodeport", &labels);
/// ```
#[derive(Clone, Debug)]
pub struct ListenerOperatorVolumeSourceBuilder {
Expand Down
8 changes: 4 additions & 4 deletions crates/stackable-operator/src/cli/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ pub const AUTHOR: &str = "Stackable GmbH - info@stackable.tech";
/// [`RunArguments`] is used, but a custom type can be used.
///
/// ```rust
/// use stackable_operator::cli::Command;
/// use clap::Parser;
/// use stackable_operator::cli::Command;
///
/// #[derive(Parser)]
/// struct Run {
Expand All @@ -39,16 +39,16 @@ pub const AUTHOR: &str = "Stackable GmbH - info@stackable.tech";
/// enum.
///
/// ```rust
/// use stackable_operator::cli::Command;
/// use clap::Parser;
/// use stackable_operator::cli::Command;
///
/// #[derive(Parser)]
/// enum CustomCommand {
/// /// Print hello world message
/// Hello,
///
/// #[clap(flatten)]
/// Framework(Command)
/// Framework(Command),
/// }
/// ```
#[derive(Debug, PartialEq, Eq, Parser)]
Expand All @@ -65,8 +65,8 @@ pub enum Command<Run: Args = RunArguments> {
/// ### Embed into an extended argument set
///
/// ```rust
/// use stackable_operator::cli::RunArguments;
/// use clap::Parser;
/// use stackable_operator::cli::RunArguments;
///
/// #[derive(clap::Parser, Debug, PartialEq, Eq)]
/// struct Run {
Expand Down
23 changes: 11 additions & 12 deletions crates/stackable-operator/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -542,33 +542,32 @@ impl Client {
///
/// ```no_run
/// use std::time::Duration;
///
/// use clap::Parser;
/// use tokio::time::error::Elapsed;
/// use kube::runtime::watcher;
/// use k8s_openapi::api::core::v1::Pod;
/// use kube::runtime::watcher;
/// use stackable_operator::{
/// client::{Client, initialize_operator},
/// utils::cluster_info::KubernetesClusterInfoOptions,
/// };
/// use tokio::time::error::Elapsed;
///
/// #[tokio::main]
/// async fn main() {
/// # async fn docs() {
/// let cluster_info_options = KubernetesClusterInfoOptions::parse();
/// let client = initialize_operator(None, &cluster_info_options)
/// .await
/// .expect("Unable to construct client.");
/// let watcher_config: watcher::Config =
/// watcher::Config::default().fields(&format!("metadata.name=nonexistent-pod"));
/// watcher::Config::default().fields(&format!("metadata.name=nonexistent-pod"));
///
/// // Will time out in 1 second unless the nonexistent-pod actually exists
/// let wait_created_result: Result<(), Elapsed> = tokio::time::timeout(
/// Duration::from_secs(1),
/// client.wait_created::<Pod>(&client.default_namespace, watcher_config),
/// )
/// .await;
/// }
/// let wait_created_result: Result<(), Elapsed> = tokio::time::timeout(
/// Duration::from_secs(1),
/// client.wait_created::<Pod>(&client.default_namespace, watcher_config),
/// )
/// .await;
/// # }
/// ```
///
pub async fn wait_created<T>(&self, namespace: &T::Namespace, watcher_config: watcher::Config)
where
T: Resource + GetApi + Clone + Debug + DeserializeOwned + Send + 'static,
Expand Down
69 changes: 36 additions & 33 deletions crates/stackable-operator/src/cluster_resources.rs
Original file line number Diff line number Diff line change
Expand Up @@ -328,19 +328,26 @@ impl ClusterResource for Deployment {
/// # Examples
///
/// ```
/// use k8s_openapi::api::apps::v1::StatefulSet;
/// use k8s_openapi::api::core::v1::{ConfigMap, Service};
/// use kube::CustomResource;
/// use kube::core::{Resource, CustomResourceExt};
/// use kube::runtime::controller::Action;
/// use std::sync::Arc;
///
/// use k8s_openapi::api::{
/// apps::v1::StatefulSet,
/// core::v1::{ConfigMap, Service},
/// };
/// use kube::{
/// CustomResource,
/// core::{CustomResourceExt, Resource},
/// runtime::controller::Action,
/// };
/// use schemars::JsonSchema;
/// use serde::{Deserialize, Serialize};
/// use stackable_operator::client::Client;
/// use stackable_operator::cluster_resources::{self, ClusterResourceApplyStrategy, ClusterResources};
/// use stackable_operator::deep_merger::ObjectOverrides;
/// use stackable_operator::product_config_utils::ValidatedRoleConfigByPropertyKind;
/// use stackable_operator::role_utils::Role;
/// use std::sync::Arc;
/// use stackable_operator::{
/// client::Client,
/// cluster_resources::{self, ClusterResourceApplyStrategy, ClusterResources},
/// deep_merger::ObjectOverrides,
/// product_config_utils::ValidatedRoleConfigByPropertyKind,
/// role_utils::Role,
/// };
///
/// const APP_NAME: &str = "app";
/// const OPERATOR_NAME: &str = "app.stackable.tech";
Expand All @@ -352,23 +359,17 @@ impl ClusterResource for Deployment {
/// version = "v1",
/// kind = "AppCluster",
/// plural = "AppClusters",
/// namespaced,
/// namespaced
/// )]
/// struct AppClusterSpec {
/// #[serde(default)]
/// pub object_overrides: ObjectOverrides,
/// }
///
/// enum Error {
/// CreateClusterResources {
/// source: cluster_resources::Error,
/// },
/// AddClusterResource {
/// source: cluster_resources::Error,
/// },
/// DeleteOrphanedClusterResources {
/// source: cluster_resources::Error,
/// },
/// CreateClusterResources { source: cluster_resources::Error },
/// AddClusterResource { source: cluster_resources::Error },
/// DeleteOrphanedClusterResources { source: cluster_resources::Error },
/// };
///
/// async fn reconcile(app: Arc<AppCluster>, client: Arc<Client>) -> Result<Action, Error> {
Expand All @@ -385,35 +386,38 @@ impl ClusterResource for Deployment {
/// .map_err(|source| Error::CreateClusterResources { source })?;
///
/// let role_service = Service::default();
/// let patched_role_service =
/// cluster_resources.add(&client, role_service)
/// .await
/// .map_err(|source| Error::AddClusterResource { source })?;
/// let patched_role_service = cluster_resources
/// .add(&client, role_service)
/// .await
/// .map_err(|source| Error::AddClusterResource { source })?;
///
/// for (role_name, group_config) in validated_config.iter() {
/// for (rolegroup_name, rolegroup_config) in group_config.iter() {
/// let rolegroup_service = Service::default();
/// cluster_resources.add(&client, rolegroup_service)
/// cluster_resources
/// .add(&client, rolegroup_service)
/// .await
/// .map_err(|source| Error::AddClusterResource { source })?;
///
/// let rolegroup_configmap = ConfigMap::default();
/// cluster_resources.add(&client, rolegroup_configmap)
/// cluster_resources
/// .add(&client, rolegroup_configmap)
/// .await
/// .map_err(|source| Error::AddClusterResource { source })?;
///
/// let rolegroup_statefulset = StatefulSet::default();
/// cluster_resources.add(&client, rolegroup_statefulset)
/// cluster_resources
/// .add(&client, rolegroup_statefulset)
/// .await
/// .map_err(|source| Error::AddClusterResource { source })?;
/// }
/// }
///
/// let discovery_configmap = ConfigMap::default();
/// let patched_discovery_configmap =
/// cluster_resources.add(&client, discovery_configmap)
/// .await
/// .map_err(|source| Error::AddClusterResource { source })?;
/// let patched_discovery_configmap = cluster_resources
/// .add(&client, discovery_configmap)
/// .await
/// .map_err(|source| Error::AddClusterResource { source })?;
///
/// cluster_resources
/// .delete_orphaned_resources(&client)
Expand Down Expand Up @@ -666,7 +670,6 @@ impl ClusterResources {
/// # Arguments
///
/// * `client` - The client which is used to access Kubernetes
///
pub async fn delete_orphaned_resources(self, client: &Client) -> Result<()> {
tokio::try_join!(
self.delete_orphaned_resources_of_kind::<Service>(client),
Expand Down
Loading
Loading