VAULT-11830: Expand NodeStatusReporter with new fields (#18302)
* expand NodeStatusReporter with new fields * only call IsRaftVoter if using raft storage * add changelog entry * fix listeners * return LogLevel as enum * update github.com/hashicorp/vault/vault/hcp_link/proto * add changelog entry * bump github.com/hashicorp/vault/vault/hcp_link/proto * go mod tidy
This commit is contained in:
parent
bb0c92afe7
commit
25d0afae23
|
@ -0,0 +1,3 @@
|
||||||
|
```release-note:improvement
|
||||||
|
hcp/status: Expand node-level status information
|
||||||
|
```
|
10
go.sum
10
go.sum
|
@ -1171,16 +1171,6 @@ github.com/hashicorp/vault-plugin-secrets-terraform v0.6.0/go.mod h1:GzYAJYytgbN
|
||||||
github.com/hashicorp/vault-testing-stepwise v0.1.1/go.mod h1:3vUYn6D0ZadvstNO3YQQlIcp7u1a19MdoOC0NQ0yaOE=
|
github.com/hashicorp/vault-testing-stepwise v0.1.1/go.mod h1:3vUYn6D0ZadvstNO3YQQlIcp7u1a19MdoOC0NQ0yaOE=
|
||||||
github.com/hashicorp/vault-testing-stepwise v0.1.2 h1:3obC/ziAPGnsz2IQxr5e4Ayb7tu7WL6pm6mmZ5gwhhs=
|
github.com/hashicorp/vault-testing-stepwise v0.1.2 h1:3obC/ziAPGnsz2IQxr5e4Ayb7tu7WL6pm6mmZ5gwhhs=
|
||||||
github.com/hashicorp/vault-testing-stepwise v0.1.2/go.mod h1:TeU6B+5NqxUjto+Zey+QQEH1iywuHn0ciHZNYh4q3uI=
|
github.com/hashicorp/vault-testing-stepwise v0.1.2/go.mod h1:TeU6B+5NqxUjto+Zey+QQEH1iywuHn0ciHZNYh4q3uI=
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20221209165735-a2eed407e08d h1:U692VbDl6ww5GQsNFClJVFJDaPeuqtDt1Mwqf21KYek=
|
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20221209165735-a2eed407e08d/go.mod h1:a2crHoMWwY6aiL8GWT8hYj7vKD64uX0EdRPbnsHF5wU=
|
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20221213220056-b0613b59f419 h1:yl6f//YTaTTGKJwyOpRe7v1DDPrzP+NErwgnef6qx7A=
|
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20221213220056-b0613b59f419/go.mod h1:a2crHoMWwY6aiL8GWT8hYj7vKD64uX0EdRPbnsHF5wU=
|
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20230103211812-c28545e74f94 h1:Rx4Q2/mOPqJuanzwZYttDkWjdibPv3UpvsvKmOkl6h4=
|
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20230103211812-c28545e74f94/go.mod h1:a2crHoMWwY6aiL8GWT8hYj7vKD64uX0EdRPbnsHF5wU=
|
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20230105183308-048241517ffb h1:PgXcBszV61BvxD0wZzm4QCz9btgTWX74NO4be6S2afU=
|
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20230105183308-048241517ffb/go.mod h1:a2crHoMWwY6aiL8GWT8hYj7vKD64uX0EdRPbnsHF5wU=
|
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20230106184443-96cfe11e7051 h1:cMQoRbIUMhbM0NsmP6hH3S3ZmAPVgic3g3L8Z55rXCI=
|
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20230106184443-96cfe11e7051/go.mod h1:a2crHoMWwY6aiL8GWT8hYj7vKD64uX0EdRPbnsHF5wU=
|
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20230106203127-9eaf26716342 h1:9cMwZnaAV/lKs8EZsvBF00wPt350wD3sg/xqWGeN4gM=
|
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20230106203127-9eaf26716342 h1:9cMwZnaAV/lKs8EZsvBF00wPt350wD3sg/xqWGeN4gM=
|
||||||
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20230106203127-9eaf26716342/go.mod h1:a2crHoMWwY6aiL8GWT8hYj7vKD64uX0EdRPbnsHF5wU=
|
github.com/hashicorp/vault/vault/hcp_link/proto v0.0.0-20230106203127-9eaf26716342/go.mod h1:a2crHoMWwY6aiL8GWT8hYj7vKD64uX0EdRPbnsHF5wU=
|
||||||
github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443 h1:O/pT5C1Q3mVXMyuqg7yuAWUg/jMZR1/0QTzTRdNR6Uw=
|
github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443 h1:O/pT5C1Q3mVXMyuqg7yuAWUg/jMZR1/0QTzTRdNR6Uw=
|
||||||
|
|
|
@ -3082,6 +3082,11 @@ func (c *Core) LogFormat() string {
|
||||||
return conf.(*server.Config).LogFormat
|
return conf.(*server.Config).LogFormat
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LogLevel returns the log level provided by level provided by config, CLI flag, or env
|
||||||
|
func (c *Core) LogLevel() string {
|
||||||
|
return c.logLevel
|
||||||
|
}
|
||||||
|
|
||||||
// MetricsHelper returns the global metrics helper which allows external
|
// MetricsHelper returns the global metrics helper which allows external
|
||||||
// packages to access Vault's internal metrics.
|
// packages to access Vault's internal metrics.
|
||||||
func (c *Core) MetricsHelper() *metricsutil.MetricsHelper {
|
func (c *Core) MetricsHelper() *metricsutil.MetricsHelper {
|
||||||
|
@ -3707,6 +3712,39 @@ func (c *Core) GetHCPLinkStatus() (string, string) {
|
||||||
return status, resourceID
|
return status, resourceID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListenerAddresses provides a slice of configured listener addresses
|
||||||
|
func (c *Core) ListenerAddresses() ([]string, error) {
|
||||||
|
addresses := make([]string, 0)
|
||||||
|
|
||||||
|
conf := c.rawConfig.Load()
|
||||||
|
if conf == nil {
|
||||||
|
return nil, fmt.Errorf("failed to load core raw config")
|
||||||
|
}
|
||||||
|
|
||||||
|
listeners := conf.(*server.Config).Listeners
|
||||||
|
if listeners == nil {
|
||||||
|
return nil, fmt.Errorf("no listener configured")
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, listener := range listeners {
|
||||||
|
addresses = append(addresses, listener.Address)
|
||||||
|
}
|
||||||
|
|
||||||
|
return addresses, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsRaftVoter specifies whether the node is a raft voter which is
|
||||||
|
// always false if raft storage is not in use.
|
||||||
|
func (c *Core) IsRaftVoter() bool {
|
||||||
|
raftInfo := c.raftInfo.Load().(*raftInformation)
|
||||||
|
|
||||||
|
if raftInfo == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return !raftInfo.nonVoter
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Core) HAEnabled() bool {
|
func (c *Core) HAEnabled() bool {
|
||||||
return c.ha != nil && c.ha.HAEnabled()
|
return c.ha != nil && c.ha.HAEnabled()
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,11 @@ import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/hashicorp/hcp-link/pkg/nodestatus"
|
"github.com/hashicorp/hcp-link/pkg/nodestatus"
|
||||||
|
"github.com/hashicorp/vault/helper/logging"
|
||||||
"github.com/hashicorp/vault/vault/hcp_link/internal"
|
"github.com/hashicorp/vault/vault/hcp_link/internal"
|
||||||
"github.com/hashicorp/vault/vault/hcp_link/proto/node_status"
|
"github.com/hashicorp/vault/vault/hcp_link/proto/node_status"
|
||||||
|
"github.com/shirou/gopsutil/v3/host"
|
||||||
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -26,6 +29,25 @@ func (c *NodeStatusReporter) GetNodeStatus(ctx context.Context) (nodestatus.Node
|
||||||
}
|
}
|
||||||
|
|
||||||
replState := c.NodeStatusGetter.ReplicationState()
|
replState := c.NodeStatusGetter.ReplicationState()
|
||||||
|
hostInfo, err := host.InfoWithContext(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
listenerAddresses, err := c.NodeStatusGetter.ListenerAddresses()
|
||||||
|
if err != nil {
|
||||||
|
return status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
logLevel, err := logging.ParseLogLevel(c.NodeStatusGetter.LogLevel())
|
||||||
|
if err != nil {
|
||||||
|
return status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
raftStatus := &node_status.RaftStatus{}
|
||||||
|
if sealStatus.StorageType == "raft" {
|
||||||
|
raftStatus.IsVoter = c.NodeStatusGetter.IsRaftVoter()
|
||||||
|
}
|
||||||
|
|
||||||
protoRes := &node_status.LinkedClusterNodeStatusResponse{
|
protoRes := &node_status.LinkedClusterNodeStatusResponse{
|
||||||
Type: sealStatus.Type,
|
Type: sealStatus.Type,
|
||||||
|
@ -43,12 +65,17 @@ func (c *NodeStatusReporter) GetNodeStatus(ctx context.Context) (nodestatus.Node
|
||||||
RecoverySeal: sealStatus.RecoverySeal,
|
RecoverySeal: sealStatus.RecoverySeal,
|
||||||
StorageType: sealStatus.StorageType,
|
StorageType: sealStatus.StorageType,
|
||||||
ReplicationState: replState.StateStrings(),
|
ReplicationState: replState.StateStrings(),
|
||||||
|
Hostname: hostInfo.Hostname,
|
||||||
|
ListenerAddresses: listenerAddresses,
|
||||||
|
OperatingSystem: hostInfo.OS,
|
||||||
|
OperatingSystemVersion: hostInfo.PlatformVersion,
|
||||||
|
LogLevel: node_status.LogLevel(logLevel),
|
||||||
|
ActiveTime: timestamppb.New(c.NodeStatusGetter.ActiveTime()),
|
||||||
|
RaftStatus: raftStatus,
|
||||||
}
|
}
|
||||||
|
|
||||||
ns := nodestatus.NodeStatus{
|
status.StatusVersion = uint32(Version)
|
||||||
StatusVersion: uint32(Version),
|
status.Status = protoRes
|
||||||
Status: protoRes,
|
|
||||||
}
|
|
||||||
|
|
||||||
return ns, nil
|
return status, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package internal
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/vault/helper/namespace"
|
"github.com/hashicorp/vault/helper/namespace"
|
||||||
"github.com/hashicorp/vault/physical/raft"
|
"github.com/hashicorp/vault/physical/raft"
|
||||||
|
@ -11,7 +12,11 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type WrappedCoreNodeStatus interface {
|
type WrappedCoreNodeStatus interface {
|
||||||
|
ActiveTime() time.Time
|
||||||
GetSealStatus(ctx context.Context) (*vault.SealStatusResponse, error)
|
GetSealStatus(ctx context.Context) (*vault.SealStatusResponse, error)
|
||||||
|
IsRaftVoter() bool
|
||||||
|
ListenerAddresses() ([]string, error)
|
||||||
|
LogLevel() string
|
||||||
ReplicationState() consts.ReplicationState
|
ReplicationState() consts.ReplicationState
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue