41 lines
1.3 KiB
Go
41 lines
1.3 KiB
Go
// Package policy provides a policy checker for the helmfile state.
|
|
package policy
|
|
|
|
import (
|
|
"errors"
|
|
"path/filepath"
|
|
|
|
"github.com/helmfile/helmfile/pkg/runtime"
|
|
)
|
|
|
|
var (
|
|
EnvironmentsAndReleasesWithinSameYamlPartErr = errors.New("environments and releases cannot be defined within the same YAML part. Use --- to extract the environments into a dedicated part")
|
|
)
|
|
|
|
// checkerFunc is a function that checks the helmState.
|
|
type checkerFunc func(string, map[string]any) (bool, error)
|
|
|
|
func forbidEnvironmentsWithReleases(filePath string, releaseState map[string]any) (bool, error) {
|
|
// forbid environments and releases to be defined at the same yaml part
|
|
_, hasEnvironments := releaseState["environments"]
|
|
_, hasReleases := releaseState["releases"]
|
|
if hasEnvironments && hasReleases && (filepath.Ext(filePath) == ".gotmpl" || !runtime.V1Mode) {
|
|
return runtime.V1Mode, EnvironmentsAndReleasesWithinSameYamlPartErr
|
|
}
|
|
return false, nil
|
|
}
|
|
|
|
var checkerFuncs = []checkerFunc{
|
|
forbidEnvironmentsWithReleases,
|
|
}
|
|
|
|
// Checker is a policy checker for the helmfile state.
|
|
func Checker(filePath string, helmState map[string]any) (bool, error) {
|
|
for _, fn := range checkerFuncs {
|
|
if isStrict, err := fn(filePath, helmState); err != nil {
|
|
return isStrict, err
|
|
}
|
|
}
|
|
return false, nil
|
|
}
|