Struct CustomResourceDefinitionMaintainer

Source
pub struct CustomResourceDefinitionMaintainer<'a> { /* private fields */ }
Expand description

Maintains various custom resource definitions.

When running this, the following operations are done:

  • Apply the CRDs when starting up
  • Reconcile the CRDs when the conversion webhook certificate is rotated

Implementations§

Source§

impl<'a> CustomResourceDefinitionMaintainer<'a>

Source

pub fn new( client: Client, certificate_rx: Receiver<Certificate>, definitions: impl IntoIterator<Item = CustomResourceDefinition>, options: CustomResourceDefinitionMaintainerOptions<'a>, ) -> (Self, Receiver<()>)

Creates and returns a new CustomResourceDefinitionMaintainer which manages one or more custom resource definitions.

§Parameters

This function expects four parameters:

  • client: A [Client] to interact with the Kubernetes API server. It continuously patches the CRDs when the TLS certificate is rotated.
  • certificate_rx: A [mpsc::Receiver] to receive newly generated TLS certificates. The certificate data sent through the channel is used to set the caBundle in the conversion section of the CRD.
  • definitions: An iterator of [CustomResourceDefinition]s which should be maintained by this maintainer. If the iterator is empty, the maintainer returns early without doing any work. As such, a polling mechanism which waits for all futures should be used to prevent premature termination of the operator.
  • options: Provides CustomResourceDefinitionMaintainerOptions to customize various parts of the maintainer. In the future, this will be converted to a builder, to enable a cleaner API interface.
§Return Values

This function returns a 2-tuple (pair) of values:

§Example
use stackable_webhook::maintainer::{
    CustomResourceDefinitionMaintainerOptions,
    CustomResourceDefinitionMaintainer,
};

let options = CustomResourceDefinitionMaintainerOptions {
    operator_service_name: "my-service-name",
    operator_namespace: "my-namespace",
    field_manager: "my-field-manager",
    webhook_https_port: 8443,
    disabled: true,
};

let client = Client::try_default().await.unwrap();

let definitions = vec![
    S3Connection::merged_crd(S3ConnectionVersion::V1Alpha1).unwrap(),
    S3Bucket::merged_crd(S3BucketVersion::V1Alpha1).unwrap(),
];

let (maintainer, initial_reconcile_rx) = CustomResourceDefinitionMaintainer::new(
    client,
    certificate_rx,
    definitions,
    options,
);
Source

pub async fn run(self) -> Result<(), Error>

Runs the CustomResourceDefinitionMaintainer asynchronously.

This needs to be polled in parallel with other parts of an operator, like controllers or webhook servers. If it is disabled, the returned future immediately resolves to std::task::Poll::Ready and thus doesn’t consume any resources.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,