Skip to content

Commit

Permalink
Merge pull request #267 from klihub/devel/config-custom-validator
Browse files Browse the repository at this point in the history
apis/config,agent: add support for custom config validation.
  • Loading branch information
marquiz authored Feb 14, 2024
2 parents ca831f4 + 23e9b5b commit a3f05f7
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 11 deletions.
26 changes: 15 additions & 11 deletions pkg/agent/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -485,18 +485,8 @@ func (a *Agent) updateNodeConfig(obj runtime.Object) {
if cfg == nil {
cfg = a.groupCfg
}
if cfg == nil {
log.Warnf("node (%s) has no effective configuration", a.nodeName)
return
}

err := a.notifyFn(cfg)
if err != nil {
log.Errorf("failed to apply configuration: %v", err)
}

a.patchConfigStatus(a.currentCfg, cfg, err)
a.currentCfg = cfg
a.updateConfig(cfg)
}

func (a *Agent) updateGroupConfig(obj runtime.Object) {
Expand Down Expand Up @@ -535,11 +525,25 @@ func (a *Agent) updateGroupConfig(obj runtime.Object) {
return
}

a.updateConfig(cfg)
}

func (a *Agent) updateConfig(cfg metav1.Object) {
if cfg == nil {
log.Warnf("node (%s) has no effective configuration", a.nodeName)
return
}

if v, ok := cfg.(cfgapi.Validator); ok {
if err := v.Validate(); err != nil {
log.Errorf("failed to validate configuration: %v", err)

a.patchConfigStatus(a.currentCfg, cfg, err)
a.currentCfg = cfg
return
}
}

err := a.notifyFn(cfg)
if err != nil {
log.Errorf("failed to apply configuration: %v", err)
Expand Down
22 changes: 22 additions & 0 deletions pkg/apis/config/v1alpha1/validator.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright The NRI Plugins Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1alpha1

// Validator is an optional interface that top level configuration types
// can implement to provide extra custom validation of configuration data.
// +kubebuilder:object:generate=false
type Validator interface {
Validate() error
}

0 comments on commit a3f05f7

Please sign in to comment.