pub struct CertificateFleet<D: AcmeDnsChallenge> {
managers: Vec<Arc<CertificateManager<D>>>,
resolver: Arc<ZoneResolver>,
}Expand description
Every configured zone’s certificate, renewed independently, served
through one rustls::ServerConfig.
Fields§
§managers: Vec<Arc<CertificateManager<D>>>§resolver: Arc<ZoneResolver>Implementations§
Source§impl<D: AcmeDnsChallenge + 'static> CertificateFleet<D>
impl<D: AcmeDnsChallenge + 'static> CertificateFleet<D>
Sourcepub async fn bootstrap(
data_dir: &Path,
zones: Vec<(String, Arc<D>)>,
environment: Environment,
contact: &[&str],
policy: RenewalPolicy,
) -> Result<Arc<Self>, FleetError>
pub async fn bootstrap( data_dir: &Path, zones: Vec<(String, Arc<D>)>, environment: Environment, contact: &[&str], policy: RenewalPolicy, ) -> Result<Arc<Self>, FleetError>
Loads or obtains a <zone> + *.<zone> certificate for every entry
in zones, each through its own DNS-01 backend.
zones pairs a zone hostname with the backend that can write
_acme-challenge.<zone> for it — in production one Route53Dns per
hosted zone, since one credential is scoped to one zone. The first
entry is the primary (see ZoneResolver).
Fails if any zone fails: a server that came up serving three of its four configured zones would be a deployment silently missing a quarter of its agents, discovered by whoever tried to use them.
Sourcepub fn from_managers(
managers: Vec<Arc<CertificateManager<D>>>,
) -> Result<Arc<Self>, FleetError>
pub fn from_managers( managers: Vec<Arc<CertificateManager<D>>>, ) -> Result<Arc<Self>, FleetError>
Assembles a fleet from managers built elsewhere. The escape hatch a
test uses, and the seam that keeps Self::bootstrap from being the
only way in.
Sourcepub fn resolver(&self) -> Arc<ZoneResolver>
pub fn resolver(&self) -> Arc<ZoneResolver>
The SNI-dispatching resolver behind Self::server_config.
Sourcepub fn server_config(&self) -> Arc<ServerConfig>
pub fn server_config(&self) -> Arc<ServerConfig>
The one rustls::ServerConfig this process should build, whatever
number of zones it holds. Renewal swaps a certificate underneath it;
nothing rebuilds this or rebinds the listener.
Sourcepub fn managers(&self) -> &[Arc<CertificateManager<D>>]
pub fn managers(&self) -> &[Arc<CertificateManager<D>>]
Every zone’s manager, in configuration order.
Sourcepub async fn alert_level(&self) -> AlertLevel
pub async fn alert_level(&self) -> AlertLevel
The worst alert level any zone is currently at.
Sourcepub async fn zone_alert_levels(&self) -> Vec<(String, AlertLevel)>
pub async fn zone_alert_levels(&self) -> Vec<(String, AlertLevel)>
Each zone’s alert level, so a failing renewal is attributable to the zone it is failing for rather than to the deployment as a whole.
Sourcepub async fn run_renewal_loops(self: Arc<Self>)
pub async fn run_renewal_loops(self: Arc<Self>)
Runs every zone’s renewal loop, forever.
One task per zone, not one loop over all of them: a zone whose ACME exchange is hanging must not hold up another zone’s renewal behind it. Cancelling this future aborts all of them.