Jarl is now an ACME client (lego's core, no DNS providers). It answers DNS-01 challenges in a zone it serves, or through Porkbun's DNS API while Porkbun serves the domain; "auto" decides from the domain's public name servers at every renewal, and a CNAME on _acme-challenge is followed. Certificates are used for jarld's HTTPS (served without a restart; each port speaks HTTPS and plain HTTP, plain HTTP from loopback and trusted proxies still served) and/or written for named's DNS over TLS/HTTPS, with rndc reconfig on renewal. Renewal follows the CA's ARI window or two thirds of the lifetime, with back-off. Certificates you renew yourself can be used too. Certificates page and dashboard card, jarl cert, /api/v1/certificates, Prometheus gauges, docs/certificates.md, and an e2e section against Pebble. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
23 lines
643 B
Go
23 lines
643 B
Go
package engine
|
|
|
|
import (
|
|
"context"
|
|
"io/fs"
|
|
)
|
|
|
|
// WriteFile writes a file outside the rendered configuration (a
|
|
// certificate for named, docs/certificates.md) the way deployed files are
|
|
// written: atomically, with bind.file_group, creating its directory.
|
|
func (e *Engine) WriteFile(path string, content []byte, mode fs.FileMode) error {
|
|
return e.deploy.writeAtomic(path, content, mode)
|
|
}
|
|
|
|
// Reconfig makes named reread its configuration, and with it the files
|
|
// its tls blocks name (nothing with bind.no_reload).
|
|
func (e *Engine) Reconfig(ctx context.Context) error {
|
|
if e.cfg.NoReload {
|
|
return nil
|
|
}
|
|
return e.tools.Reconfig(ctx)
|
|
}
|