Skip to main content

Capability

Enum Capability 

Source
#[non_exhaustive]
pub enum Capability {
Show 16 variants GracefulShutdown, UpdateTracking, SoftwareDiscovery, SshRemote, UpdateHooks, Scheduler, DatabaseAccess, NatsAccess, MasterKeyAccess, CaManagement, SystemService, UiSurfaces, InteractiveUpdates, ResetData, WorkloadClaims, Other(String),
}
Expand description

A protocol capability advertised by a service or controller during connection setup.

Both sides announce their capability sets at the start of each authenticated connection. Each side independently computes the agreed set as the intersection of typed variants only — Other is excluded from intersection.

§Wire format

Capabilities are serialized as plain strings (snake_case). Unknown strings from a newer peer become Other(String) for forward compatibility.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

GracefulShutdown

Service participates in the graceful-shutdown protocol: sends Disconnecting before clean exit and honours shutdown_timeout_seconds from ServiceSettings.

Wire string: graceful_shutdown.

§

UpdateTracking

Service tracks software update state and host connectivity.

The controller uses this capability to route software-state broadcasts and connectivity updates. Also gates MQTT-specific lease coordination for MQTT bridge services.

Wire string: update_tracking.

§

SoftwareDiscovery

Service supports DiscoverSoftwareDiscoveryResults flow.

The controller gates autodiscovery requests on this capability.

Wire string: software_discovery.

§

SshRemote

Service manages remote hosts over SSH, rather than running locally.

Identifies an SSH-backed agent. Combined with SoftwareDiscovery, uniquely identifies an SSH agent (vs. a local agent).

Wire string: ssh_remote.

§

UpdateHooks

Service supports pre-/post-update lifecycle hook plugins (PluginAssignment in ExecuteUpdatePayload). The controller omits hook plugins when absent.

Wire string: update_hooks.

§

Scheduler

Marker: service is an external task scheduler.

Identifies a service that runs scheduled tasks (version checks, cert checks, auth cleanup, etc.) externally. The controller uses this to detect scheduler presence and disable the embedded scheduler.

Wire string: scheduler.

§

DatabaseAccess

Service requires direct database access. The controller will include db_url in ServiceCredentialsPayload.

Wire string: database_access.

§

NatsAccess

Service requires NATS access. The controller will include nats_url in ServiceCredentialsPayload (if NATS is configured).

Wire string: nats_access.

§

MasterKeyAccess

Service requires the master encryption key. The controller will include master_key_hex in ServiceCredentialsPayload (if encryption is enabled).

Wire string: master_key_access.

§

CaManagement

Service can request CA certificate rotation via RequestCaRotationPayload. The controller will accept RequestCaRotation messages from services with this capability (via NATS or local delivery).

Wire string: ca_management.

§

SystemService

Service is a global infrastructure service, not bound to any tenant.

When present in an EnrollPayload, the controller routes enrollment to the system_services table instead of the per-tenant services table.

Credential guard: any service requesting DatabaseAccess, NatsAccess, MasterKeyAccess, or CaManagement without also advertising SystemService will be rejected at enrollment with a 403 error. This prevents regular tenant agents from claiming infrastructure credentials.

Wire string: system_service.

§

UiSurfaces

Service supports UI surfaces: it will send SurfaceRegistration after connection and respond to surface action messages.

Wire string: ui_surfaces.

§

InteractiveUpdates

Service supports interactive update sessions: PTY allocation, stdin forwarding, and signal delivery during update execution.

When present, the controller may set interactive: true on ExecuteUpdatePayload and send UpdateStdinData messages to this service. The service allocates a PTY for the update process and keeps stdin open for forwarding.

Wire string: interactive_updates.

§

ResetData

Service supports the reset-data protocol: truncates local data stores when the controller broadcasts a data reset.

Wire string: reset_data.

§

WorkloadClaims

Service participates in the workload claim protocol for exclusive config-key ownership.

Services with this capability send WorkloadClaim after receiving ServiceConfigDelivery to request exclusive ownership of config keys. The controller responds with WorkloadClaimResult and routes tenant-scoped messages only to services that hold granted claims.

Wire string: workload_claims.

§

Other(String)

Unknown capability from a newer peer; never participates in intersection.

Provides forward compatibility: a newer peer may advertise capabilities that an older build does not yet recognise. These are preserved on receipt but never emitted by the current codebase.

Implementations§

Source§

impl Capability

Source

pub fn as_str(&self) -> &str

Returns the snake_case wire string for this capability.

Source

pub fn is_known(&self) -> bool

Returns true for typed variants; Other returns false.

Only typed variants participate in capability intersection. Other values are forwarded-compatibility markers and must not gate behaviour.

Trait Implementations§

Source§

impl Clone for Capability

Source§

fn clone(&self) -> Capability

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Capability

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Capability

Source§

fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for Capability

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for Capability

Source§

impl FromStr for Capability

Source§

type Err = Infallible

The associated error which can be returned from parsing.
Source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
Source§

impl Hash for Capability

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for Capability

Source§

fn cmp(&self, other: &Capability) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Capability

Source§

fn eq(&self, other: &Capability) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialOrd for Capability

Source§

fn partial_cmp(&self, other: &Capability) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Serialize for Capability

Source§

fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Capability

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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.
Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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