Fix profile updates and validate configuration before apply
This commit is contained in:
parent
b552ec49cb
commit
2bf14948d7
1 changed files with 372 additions and 12 deletions
61
internal/budget/validate.go
Normal file
61
internal/budget/validate.go
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
package budget
|
||||
|
||||
import "fmt"
|
||||
|
||||
func (c config) validate() error {
|
||||
for _, name := range keys(c.Profiles) {
|
||||
if _, err := c.properties(name); err != nil {
|
||||
return fmt.Errorf("profiles.%s: %w", name, err)
|
||||
}
|
||||
}
|
||||
check := func(field, name string) error {
|
||||
if _, err := c.getProfile(name); err != nil {
|
||||
return fmt.Errorf("%s: %w", field, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
for _, field := range []struct {
|
||||
name string
|
||||
groups map[string][]string
|
||||
}{
|
||||
{"apps", c.Apps}, {"units", c.Units}, {"prefixes", c.Prefixes},
|
||||
} {
|
||||
for _, name := range keys(field.groups) {
|
||||
if err := check(field.name+"."+name, name); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, field := range []struct {
|
||||
name string
|
||||
refs map[string]string
|
||||
}{
|
||||
{"commands", c.Commands}, {"shared", c.Shared},
|
||||
} {
|
||||
for _, key := range keys(field.refs) {
|
||||
if err := check(field.name+"."+key, field.refs[key]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
if c.Python != "" {
|
||||
if err := check("python", c.Python); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for i, device := range c.Devices {
|
||||
for _, name := range keys(device.Limits) {
|
||||
if err := check(fmt.Sprintf("devices[%d].limits.%s", i, name), name); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, name := range keys(c.Prefixes) {
|
||||
for _, directory := range c.Prefixes[name] {
|
||||
if _, err := dropSection(directory); err != nil {
|
||||
return fmt.Errorf("prefixes.%s: %w", name, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Loading…
Reference in a new issue