Agent systemd notify added similar to Consul. Resolves: #7028
This commit is contained in:
parent
534142ff46
commit
35650c9b96
|
@ -0,0 +1,3 @@
|
|||
```release-note:improvement
|
||||
agent: Send notifications to systemd on start and stop.
|
||||
```
|
|
@ -16,6 +16,7 @@ import (
|
|||
"sync"
|
||||
"time"
|
||||
|
||||
systemd "github.com/coreos/go-systemd/daemon"
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
"github.com/hashicorp/go-secure-stdlib/gatedwriter"
|
||||
"github.com/hashicorp/vault/api"
|
||||
|
@ -802,6 +803,8 @@ func (c *AgentCommand) Run(args []string) int {
|
|||
select {
|
||||
case <-c.ShutdownCh:
|
||||
c.UI.Output("==> Vault agent shutdown triggered")
|
||||
// Notify systemd that the server is shutting down
|
||||
c.notifySystemd(systemd.SdNotifyStopping)
|
||||
// Let the lease cache know this is a shutdown; no need to evict
|
||||
// everything
|
||||
if leaseCache != nil {
|
||||
|
@ -809,6 +812,7 @@ func (c *AgentCommand) Run(args []string) int {
|
|||
}
|
||||
return nil
|
||||
case <-ctx.Done():
|
||||
c.notifySystemd(systemd.SdNotifyStopping)
|
||||
return nil
|
||||
case <-winsvc.ShutdownChannel():
|
||||
return nil
|
||||
|
@ -940,6 +944,9 @@ func (c *AgentCommand) Run(args []string) int {
|
|||
return 1
|
||||
}
|
||||
|
||||
// Notify systemd that the server is ready (if applicable)
|
||||
c.notifySystemd(systemd.SdNotifyReady)
|
||||
|
||||
defer func() {
|
||||
if err := c.removePidFile(config.PidFile); err != nil {
|
||||
c.UI.Error(fmt.Sprintf("Error deleting the PID file: %s", err))
|
||||
|
@ -970,6 +977,19 @@ func verifyRequestHeader(handler http.Handler) http.Handler {
|
|||
})
|
||||
}
|
||||
|
||||
func (c *AgentCommand) notifySystemd(status string) {
|
||||
sent, err := systemd.SdNotify(false, status)
|
||||
if err != nil {
|
||||
c.logger.Error("error notifying systemd", "error", err)
|
||||
} else {
|
||||
if sent {
|
||||
c.logger.Debug("sent systemd notification", "notification", status)
|
||||
} else {
|
||||
c.logger.Debug("would have sent systemd notification (systemd not present)", "notification", status)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (c *AgentCommand) setStringFlag(f *FlagSets, configVal string, fVar *StringVar) {
|
||||
var isFlagSet bool
|
||||
f.Visit(func(f *flag.Flag) {
|
||||
|
|
Loading…
Reference in New Issue