mirror of https://github.com/status-im/consul.git
agent: Adding new ACL flags
This commit is contained in:
parent
09a1c40444
commit
7e5fdeb64b
|
@ -194,6 +194,30 @@ type Config struct {
|
||||||
CheckUpdateInterval time.Duration `mapstructure:"-"`
|
CheckUpdateInterval time.Duration `mapstructure:"-"`
|
||||||
CheckUpdateIntervalRaw string `mapstructure:"check_update_interval" json:"-"`
|
CheckUpdateIntervalRaw string `mapstructure:"check_update_interval" json:"-"`
|
||||||
|
|
||||||
|
// ACLToken is the default token used to make requests if a per-request
|
||||||
|
// token is not provided. If not configured the 'anonymous' token is used.
|
||||||
|
ACLToken string `mapstructure:"acl_token" json:"-"`
|
||||||
|
|
||||||
|
// ACLDatacenter is the central datacenter that holds authoritative
|
||||||
|
// ACL records. This must be the same for the entire cluster.
|
||||||
|
// If this is not set, ACLs are not enabled. Off by default.
|
||||||
|
ACLDatacenter string `mapstructure:"acl_datacenter"`
|
||||||
|
|
||||||
|
// ACLCacheInterval is used to control how long ACLs are cached. This has
|
||||||
|
// a major impact on performance. By default, it is set to 30 seconds.
|
||||||
|
ACLCacheInterval time.Duration `mapstructure:"-"`
|
||||||
|
ACLCacheIntervalRaw string `mapstructure:"acl_cache_interval"`
|
||||||
|
|
||||||
|
// ACLDownPolicy is used to control the ACL interaction when we cannot
|
||||||
|
// reach the ACLDatacenter and the token is not in the cache.
|
||||||
|
// There are two modes:
|
||||||
|
// * deny - Deny all requests
|
||||||
|
// * extend-cache - Ignore the cache expiration, and allow cached
|
||||||
|
// ACL's to be used to service requests. This
|
||||||
|
// is the default. If the ACL is not in the cache,
|
||||||
|
// this acts like deny.
|
||||||
|
ACLDownPolicy string `mapstructure:"acl_down_policy"`
|
||||||
|
|
||||||
// AEInterval controls the anti-entropy interval. This is how often
|
// AEInterval controls the anti-entropy interval. This is how often
|
||||||
// the agent attempts to reconcile it's local state with the server'
|
// the agent attempts to reconcile it's local state with the server'
|
||||||
// representation of our state. Defaults to every 60s.
|
// representation of our state. Defaults to every 60s.
|
||||||
|
@ -246,6 +270,8 @@ func DefaultConfig() *Config {
|
||||||
Protocol: consul.ProtocolVersionMax,
|
Protocol: consul.ProtocolVersionMax,
|
||||||
CheckUpdateInterval: 5 * time.Minute,
|
CheckUpdateInterval: 5 * time.Minute,
|
||||||
AEInterval: time.Minute,
|
AEInterval: time.Minute,
|
||||||
|
ACLCacheInterval: 30 * time.Second,
|
||||||
|
ACLDownPolicy: "extend-cache",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,6 +367,14 @@ func DecodeConfig(r io.Reader) (*Config, error) {
|
||||||
result.CheckUpdateInterval = dur
|
result.CheckUpdateInterval = dur
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if raw := result.ACLCacheIntervalRaw; raw != "" {
|
||||||
|
dur, err := time.ParseDuration(raw)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("ACLCacheInterval invalid: %v", err)
|
||||||
|
}
|
||||||
|
result.ACLCacheInterval = dur
|
||||||
|
}
|
||||||
|
|
||||||
return &result, nil
|
return &result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -583,6 +617,19 @@ func MergeConfig(a, b *Config) *Config {
|
||||||
if b.SyslogFacility != "" {
|
if b.SyslogFacility != "" {
|
||||||
result.SyslogFacility = b.SyslogFacility
|
result.SyslogFacility = b.SyslogFacility
|
||||||
}
|
}
|
||||||
|
if b.ACLToken != "" {
|
||||||
|
result.ACLToken = b.ACLToken
|
||||||
|
}
|
||||||
|
if b.ACLDatacenter != "" {
|
||||||
|
result.ACLDatacenter = b.ACLDatacenter
|
||||||
|
}
|
||||||
|
if b.ACLCacheIntervalRaw != "" {
|
||||||
|
result.ACLCacheInterval = b.ACLCacheInterval
|
||||||
|
result.ACLCacheIntervalRaw = b.ACLCacheIntervalRaw
|
||||||
|
}
|
||||||
|
if b.ACLDownPolicy != "" {
|
||||||
|
result.ACLDownPolicy = b.ACLDownPolicy
|
||||||
|
}
|
||||||
|
|
||||||
// Copy the start join addresses
|
// Copy the start join addresses
|
||||||
result.StartJoin = make([]string, 0, len(a.StartJoin)+len(b.StartJoin))
|
result.StartJoin = make([]string, 0, len(a.StartJoin)+len(b.StartJoin))
|
||||||
|
|
|
@ -356,6 +356,27 @@ func TestDecodeConfig(t *testing.T) {
|
||||||
if config.CheckUpdateInterval != 10*time.Minute {
|
if config.CheckUpdateInterval != 10*time.Minute {
|
||||||
t.Fatalf("bad: %#v", config)
|
t.Fatalf("bad: %#v", config)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ACLs
|
||||||
|
input = `{"acl_token": "1234", "acl_datacenter": "dc2",
|
||||||
|
"acl_cache_interval": "60s", "acl_down_policy": "deny"}`
|
||||||
|
config, err = DecodeConfig(bytes.NewReader([]byte(input)))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if config.ACLToken != "1234" {
|
||||||
|
t.Fatalf("bad: %#v", config)
|
||||||
|
}
|
||||||
|
if config.ACLDatacenter != "dc2" {
|
||||||
|
t.Fatalf("bad: %#v", config)
|
||||||
|
}
|
||||||
|
if config.ACLCacheInterval != 60*time.Second {
|
||||||
|
t.Fatalf("bad: %#v", config)
|
||||||
|
}
|
||||||
|
if config.ACLDownPolicy != "deny" {
|
||||||
|
t.Fatalf("bad: %#v", config)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDecodeConfig_Service(t *testing.T) {
|
func TestDecodeConfig_Service(t *testing.T) {
|
||||||
|
@ -503,6 +524,11 @@ func TestMergeConfig(t *testing.T) {
|
||||||
RejoinAfterLeave: true,
|
RejoinAfterLeave: true,
|
||||||
CheckUpdateInterval: 8 * time.Minute,
|
CheckUpdateInterval: 8 * time.Minute,
|
||||||
CheckUpdateIntervalRaw: "8m",
|
CheckUpdateIntervalRaw: "8m",
|
||||||
|
ACLToken: "1234",
|
||||||
|
ACLDatacenter: "dc2",
|
||||||
|
ACLCacheInterval: 15 * time.Second,
|
||||||
|
ACLCacheIntervalRaw: "15s",
|
||||||
|
ACLDownPolicy: "deny",
|
||||||
}
|
}
|
||||||
|
|
||||||
c := MergeConfig(a, b)
|
c := MergeConfig(a, b)
|
||||||
|
|
Loading…
Reference in New Issue