7921f044e5
Nomad's original autopilot was importing from a private package in Consul. It has been moved out to a shared library. Switch Nomad to use this library so that we can eliminate the import of Consul, which is necessary to build Nomad ENT with the current version of the Consul SDK. This also will let us pick up autopilot improvements shared with Consul more easily.
83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package structs
|
|
|
|
import (
|
|
"time"
|
|
|
|
autopilot "github.com/hashicorp/raft-autopilot"
|
|
"github.com/hashicorp/serf/serf"
|
|
)
|
|
|
|
// OperatorHealthReply is a representation of the overall health of the cluster
|
|
type OperatorHealthReply struct {
|
|
// Healthy is true if all the servers in the cluster are healthy.
|
|
Healthy bool
|
|
|
|
// FailureTolerance is the number of healthy servers that could be lost without
|
|
// an outage occurring.
|
|
FailureTolerance int
|
|
|
|
// Servers holds the health of each server.
|
|
Servers []ServerHealth
|
|
}
|
|
|
|
// ServerHealth is the health (from the leader's point of view) of a server.
|
|
type ServerHealth struct {
|
|
// ID is the raft ID of the server.
|
|
ID string
|
|
|
|
// Name is the node name of the server.
|
|
Name string
|
|
|
|
// Address is the address of the server.
|
|
Address string
|
|
|
|
// The status of the SerfHealth check for the server.
|
|
SerfStatus serf.MemberStatus
|
|
|
|
// Version is the Nomad version of the server.
|
|
Version string
|
|
|
|
// Leader is whether this server is currently the leader.
|
|
Leader bool
|
|
|
|
// LastContact is the time since this node's last contact with the leader.
|
|
LastContact time.Duration
|
|
|
|
// LastTerm is the highest leader term this server has a record of in its Raft log.
|
|
LastTerm uint64
|
|
|
|
// LastIndex is the last log index this server has a record of in its Raft log.
|
|
LastIndex uint64
|
|
|
|
// Healthy is whether or not the server is healthy according to the current
|
|
// Autopilot config.
|
|
Healthy bool
|
|
|
|
// Voter is whether this is a voting server.
|
|
Voter bool
|
|
|
|
// StableSince is the last time this server's Healthy value changed.
|
|
StableSince time.Time
|
|
}
|
|
|
|
// RaftStats holds miscellaneous Raft metrics for a server, used by autopilot.
|
|
type RaftStats struct {
|
|
// LastContact is the time since this node's last contact with the leader.
|
|
LastContact string
|
|
|
|
// LastTerm is the highest leader term this server has a record of in its Raft log.
|
|
LastTerm uint64
|
|
|
|
// LastIndex is the last log index this server has a record of in its Raft log.
|
|
LastIndex uint64
|
|
}
|
|
|
|
func (s *RaftStats) ToAutopilotServerStats() *autopilot.ServerStats {
|
|
duration, _ := time.ParseDuration(s.LastContact)
|
|
return &autopilot.ServerStats{
|
|
LastContact: duration,
|
|
LastTerm: s.LastTerm,
|
|
LastIndex: s.LastIndex,
|
|
}
|
|
}
|