diff --git a/ca/ca.go b/ca/ca.go index 598d5e70..9991d647 100644 --- a/ca/ca.go +++ b/ca/ca.go @@ -15,6 +15,7 @@ import ( "strings" "time" + "github.com/coreos/go-systemd/v22/daemon" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "golang.org/x/sync/errgroup" @@ -469,8 +470,12 @@ func (ca *CA) Run() error { return ca.srv.ListenAndServe() }) + _, _ = daemon.SdNotify(true, daemon.SdNotifyReady) + err := eg.Wait() + _, _ = daemon.SdNotify(true, daemon.SdNotifyStopping) + // if the error is not the usual HTTP server closed error, it is // highly likely that an error occurred when starting one of the // CA servers, possibly because of a port already being in use or @@ -526,6 +531,8 @@ func (ca *CA) Stop() error { // Reload reloads the configuration of the CA and calls to the server Reload // method. func (ca *CA) Reload() error { + _, _ = daemon.SdNotify(true, daemon.SdNotifyReloading) + cfg, err := config.LoadConfiguration(ca.opts.configFile) if err != nil { return fmt.Errorf("error reloading ca configuration: %w", err) @@ -590,6 +597,9 @@ func (ca *CA) Reload() error { ca.config = newCA.config ca.opts = newCA.opts ca.renewer = newCA.renewer + + _, _ = daemon.SdNotify(true, daemon.SdNotifyReady) + return nil } diff --git a/go.mod b/go.mod index 1762763f..b37940a1 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/Masterminds/sprig/v3 v3.3.0 github.com/ccoveille/go-safecast v1.8.2 github.com/coreos/go-oidc/v3 v3.16.0 + github.com/coreos/go-systemd/v22 v22.6.0 github.com/dgraph-io/badger v1.6.2 github.com/dgraph-io/badger/v2 v2.2007.4 github.com/fxamacker/cbor/v2 v2.9.0 diff --git a/go.sum b/go.sum index c6ecbe89..659e248e 100644 --- a/go.sum +++ b/go.sum @@ -107,6 +107,8 @@ github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8Nz github.com/coreos/go-oidc/v3 v3.16.0 h1:qRQUCFstKpXwmEjDQTIbyY/5jF00+asXzSkmkoa/mow= github.com/coreos/go-oidc/v3 v3.16.0/go.mod h1:wqPbKFrVnE90vty060SB40FCJ8fTHTxSwyXJqZH+sI8= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd/v22 v22.6.0 h1:aGVa/v8B7hpb0TKl0MWoAavPDmHvobFe5R5zn0bCJWo= +github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=