pub struct ScoutContext {
pub client: Client,
pub remote_client: Client,
pub target_namespace: String,
pub cluster_name: String,
pub excluded_namespaces: Vec<String>,
pub default_ips: Vec<String>,
pub gateway_services: BTreeMap<String, GatewayServiceTarget>,
pub default_zone: Option<String>,
pub namespace_selector: Option<String>,
pub zone_store: Store<DNSZone>,
}Expand description
Shared context passed to every reconciler invocation.
Fields§
§client: ClientLocal Kubernetes client — Ingress watching and finalizer management. Always the in-cluster client regardless of mode.
remote_client: ClientRemote Kubernetes client — ARecord creation/deletion and DNSZone validation.
In same-cluster mode (Phase 1) this is identical to client.
In remote mode (Phase 2+) this targets the dedicated Bindy cluster.
target_namespace: StringNamespace where ARecords are created (on the remote/target cluster)
cluster_name: StringLogical cluster name stamped on created ARecord labels
excluded_namespaces: Vec<String>Namespaces excluded from Ingress watching (always includes Scout’s own namespace)
default_ips: Vec<String>Default IPs used when no annotation override and no LB status IP is available.
Intended for shared-ingress topologies (e.g. Traefik) where all Ingresses resolve
to the same IP(s). Set via BINDY_SCOUT_DEFAULT_IPS or --default-ips.
gateway_services: BTreeMap<String, GatewayServiceTarget>Operator-configured gatewayClass → LoadBalancer Service map. When an HTTPRoute
or TLSRoute has no explicit IP annotation, Scout follows its parentRefs to a
Gateway of one of these classes and reads the mapped Service’s external IP.
Set via BINDY_SCOUT_GATEWAY_SERVICES or --gateway-service.
default_zone: Option<String>Default DNS zone applied to all Ingresses when no bindy.firestoned.io/zone annotation
is present. Set via BINDY_SCOUT_DEFAULT_ZONE or --default-zone.
namespace_selector: Option<String>Kubernetes label selector restricting which namespaces Scout will act in (e.g.
"bindy.firestoned.io/scout-enabled=true"). A source object’s own per-resource opt-in
annotation is still required in addition — the namespace must match this selector AND
the object must carry the annotation. None means every namespace is eligible, matching
pre-selector behavior; this is the default for backward compatibility, but production
deployments are strongly encouraged to set it rather than run with cluster-wide scope
(see namespace_matches_selector and the Scout guide). Set via
BINDY_SCOUT_NAMESPACE_SELECTOR or --namespace-selector.
zone_store: Store<DNSZone>Read-only store of DNSZone resources for zone validation. Populated from the remote client so zones are validated against the bindy cluster.
Auto Trait Implementations§
impl Freeze for ScoutContext
impl !RefUnwindSafe for ScoutContext
impl Send for ScoutContext
impl Sync for ScoutContext
impl Unpin for ScoutContext
impl !UnwindSafe for ScoutContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].