rules+rpcserver: handle unknown rules

This is to tolerate unknown rules sent from the autopilot for the
`autopilot features` command.

Otherwise, when trying to register a feature that requires an upgrade, a
more user friendly error is returned.
This commit is contained in:
bitromortac 2024-04-18 15:08:48 +02:00
parent 9e20dc4078
commit 5129b95fd5
No known key found for this signature in database
GPG key ID: 1965063FC13BEBE2
2 changed files with 12 additions and 6 deletions

View file

@ -31,7 +31,8 @@ func (m ManagerSet) InitEnforcer(cfg Config, name string,
mgr, ok := m[name]
if !ok {
return nil, ErrUnknownRule
return nil, fmt.Errorf("%w %s, please upgrade", ErrUnknownRule,
name)
}
return mgr.NewEnforcer(cfg, values)
@ -54,7 +55,8 @@ func (m ManagerSet) UnmarshalRuleValues(name string, proto *litrpc.RuleValue) (
mgr, ok := m[name]
if !ok {
return nil, ErrUnknownRule
return nil, fmt.Errorf("%w %s, please upgrade", ErrUnknownRule,
name)
}
return mgr.NewValueFromProto(proto)
@ -67,7 +69,8 @@ func (m ManagerSet) InitRuleValues(name string, valueBytes []byte) (Values,
mgr, ok := m[name]
if !ok {
return nil, ErrUnknownRule
return nil, fmt.Errorf("%w %s, please upgrade", ErrUnknownRule,
name)
}
v := mgr.EmptyValue()

View file

@ -1348,10 +1348,13 @@ func convertRules(ruleMgr rules.ManagerSet,
knownRules = ruleMgr.GetAllRules()
)
for name, rule := range ruleList {
known := true
if !knownRules[name] {
upgrade = true
known = false
res[name] = &litrpc.RuleValues{
Known: false,
}
continue
}
defaultVals, err := ruleMgr.InitRuleValues(name, rule.Default)
@ -1370,7 +1373,7 @@ func convertRules(ruleMgr rules.ManagerSet,
}
res[name] = &litrpc.RuleValues{
Known: known,
Known: true,
Defaults: defaultVals.ToProto(),
MinValue: minVals.ToProto(),
MaxValue: maxVals.ToProto(),