Skip to main content

Manager

Struct Manager 

Source
pub struct Manager { /* private fields */ }
Expand description

Implements the mirror reloader.

Implementations§

Source§

impl Manager

Source

pub fn prepare_copies( &self, targets: &[Target], copy_image: &str, ) -> Result<Vec<CopyInfo>, CopyError>

Scales down original deployments and creates -caproni copies for the given targets. Skips unsupported resource types.

Callers are responsible for passing a deduplicated, pre-merged target list; in practice, callers should use collect_and_validate_targets to produce it. Returns a list of CopyInfo for cleanup operations.

§Errors

Returns CopyError if scaling down, fetching, modifying, or applying a copy fails for any target.

Source

pub fn cleanup_copy(&self, deployment: &CopyInfo) -> Result<(), CopyError>

Deletes a -caproni deployment copy and scales the original back up.

§Errors

Returns CopyError if deleting, scaling, or waiting fails.

Source§

impl Manager

Source

pub fn new(kubectl_backend: Box<dyn KubectlBackend + Send + Sync>) -> Self

Creates a new mirror reloader manager.

Source

pub fn reloader_type(&self) -> &'static str

Returns the reloader type identifier ("mirror").

Source

pub fn check_preconditions( &self, executor: &dyn CommandRunner, reloader_config: &ReloaderConfig, _caproni_config: &CaproniConfig, get_tool_version: &dyn Fn(&str) -> Option<String>, ) -> Result<(), MirrorError>

Verifies mirrord version meets minimum requirements and that no stale -caproni copy exists for this reloader’s target.

executor is threaded explicitly rather than read off an ambient context, unlike the Go original’s executor.FromContext: xianyun_executor::exec::context::{from_context, with_context} are themselves unimplemented stubs in a sibling crate outside this task’s scope, so this port takes the CommandRunner directly as a parameter instead of threading it through a context object. See PORT_NOTES.md.

§Errors

Returns MirrorError::MirrordVersionTooOld if the installed mirrord version is below the configured minimum, or MirrorError::CaproniDeploymentsExist if a stale -caproni copy of the target already exists.

Source

pub fn run( &self, executor: &dyn CommandRunner, reloader_config: &ReloaderConfig, caproni_config: &CaproniConfig, kubeconfig_path: &str, ) -> Result<(), MirrorError>

Runs the mirror reloader, blocking until the context is cancelled. Deployment copies must be prepared by the caller before run is invoked (see Manager::cleanup_copy_deployments).

This method:

  • Generates a mirrord configuration file
  • Starts caproni edit-mode-process-supervisor wrapped in mirrord
  • Runs processes tagged context: local outside mirrord

kubeconfig_path is the path to a temporary kubeconfig for the caproni-selected cluster (created and owned by the caller). Implementations that launch external tooling pin KUBECONFIG to it rather than relying on the user’s global current-context. It may be empty.

§Errors

Returns MirrorError if the config is invalid, no repository is configured, the mirrord config cannot be generated, or the underlying process supervision fails.

Source

pub fn prepare_from_reloader_configs( &self, reloaders: &HashMap<String, ReloaderConfig>, copy_sleep_image: &str, ) -> Result<Vec<CopyInfo>, MirrorError>

Collects and validates mirror targets from the given reloader configs, then prepares a coordinated set of deployment copies. Returns an empty list if there are no mirror targets.

§Errors

Returns MirrorError::ValidatingTargets if the targets conflict, or MirrorError::Copy if preparing a copy fails.

Source

pub fn cleanup_copy_deployments(&self, deployments: &[CopyInfo])

Deletes all -caproni deployment copies and scales the originals back up. Cleanup failures are logged, not returned: the caller is typically shutting down and cannot act on them.

Source

pub fn status( &self, reloader_config: &ReloaderConfig, _caproni_config: &CaproniConfig, ) -> Result<Status, MirrorError>

Returns the current status of the reloader.

§Errors

Returns MirrorError if the config is not a mirror reloader or has no target configured.

Source

pub fn cleanup_stale_mirrord_agents(&self, namespace: &str)

Removes leftover mirrord agent pods that may cause “Detected dirty iptables” errors on subsequent runs. This must be called once before any reloaders are started, not per-reloader, to avoid killing a live agent belonging to a concurrently running reloader. Failures are logged, not returned: this cleanup is best-effort.

Source

pub fn validate( &self, reloader_config: &ReloaderConfig, caproni_config: &CaproniConfig, ) -> Result<(), MirrorError>

Validates the mirror reloader configuration. Mirror reloaders don’t have file path dependencies, so this primarily validates the configuration structure.

§Errors

Returns MirrorError if the config is not a mirror reloader, has no target or referenced repository configured, or any edit-mode process has an empty command.

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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

§

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> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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: Sized + 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
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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<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