b3ea68948b
Go 1.19 will forecefully format all your doc strings. To get this out of the way, here is one big commit with all the changes gofmt wants to make.
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package consul
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/hashicorp/go-version"
|
|
)
|
|
|
|
// Self represents the response body from Consul /v1/agent/self API endpoint.
|
|
// Care must always be taken to do type checks when casting, as structure could
|
|
// potentially change over time.
|
|
type Self = map[string]map[string]interface{}
|
|
|
|
func SKU(info Self) (string, bool) {
|
|
v, ok := info["Config"]["Version"].(string)
|
|
if !ok {
|
|
return "", ok
|
|
}
|
|
|
|
ver, vErr := version.NewVersion(v)
|
|
if vErr != nil {
|
|
return "", false
|
|
}
|
|
if strings.Contains(ver.Metadata(), "ent") {
|
|
return "ent", true
|
|
}
|
|
return "oss", true
|
|
}
|
|
|
|
// Namespaces returns true if the "Namespaces" feature is enabled in Consul, and
|
|
// false otherwise. Consul OSS will always return false, and Consul ENT will return
|
|
// false if the license file does not contain the necessary feature.
|
|
func Namespaces(info Self) bool {
|
|
return feature("Namespaces", info)
|
|
}
|
|
|
|
// feature returns whether the indicated feature is enabled by Consul and the
|
|
// associated License.
|
|
// possible values as of v1.9.5+ent:
|
|
//
|
|
// Automated Backups, Automated Upgrades, Enhanced Read Scalability,
|
|
// Network Segments, Redundancy Zone, Advanced Network Federation,
|
|
// Namespaces, SSO, Audit Logging
|
|
func feature(name string, info Self) bool {
|
|
lic, licOK := info["Stats"]["license"].(map[string]interface{})
|
|
if !licOK {
|
|
return false
|
|
}
|
|
|
|
features, exists := lic["features"].(string)
|
|
if !exists {
|
|
return false
|
|
}
|
|
|
|
return strings.Contains(features, name)
|
|
}
|