mirror of
https://github.com/yannh/kubeconform.git
synced 2026-04-15 16:59:51 +00:00
fail early when a broken -schema-location template is given
This commit is contained in:
parent
905f5e7417
commit
651d3b2c50
5 changed files with 32 additions and 8 deletions
|
|
@ -2,6 +2,7 @@ package registry
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"strings"
|
||||
"text/template"
|
||||
)
|
||||
|
|
@ -67,14 +68,19 @@ func schemaPath(tpl, resourceKind, resourceAPIVersion, k8sVersion string, strict
|
|||
return buf.String(), nil
|
||||
}
|
||||
|
||||
func New(schemaLocation string, strict bool, skipTLS bool) Registry {
|
||||
func New(schemaLocation string, strict bool, skipTLS bool) (Registry, error) {
|
||||
if !strings.HasSuffix(schemaLocation, "json") { // If we dont specify a full templated path, we assume the paths of kubernetesjsonschema.dev
|
||||
schemaLocation += "/{{ .NormalizedKubernetesVersion }}-standalone{{ .StrictSuffix }}/{{ .ResourceKind }}{{ .KindSuffix }}.json"
|
||||
}
|
||||
|
||||
// We try a fake compilation of the schemaLocation template to ensure it is valid
|
||||
if _, err := schemaPath(schemaLocation, "Deployment", "v1", "1.18.0", true); err != nil {
|
||||
return nil, fmt.Errorf("failed initialising schema location registry: %s", err)
|
||||
}
|
||||
|
||||
if strings.HasPrefix(schemaLocation, "http") {
|
||||
return newHTTPRegistry(schemaLocation, strict, skipTLS)
|
||||
return newHTTPRegistry(schemaLocation, strict, skipTLS), nil
|
||||
} else {
|
||||
return newLocalRegistry(schemaLocation, strict)
|
||||
return newLocalRegistry(schemaLocation, strict), nil
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ type Opts struct {
|
|||
}
|
||||
|
||||
// New returns a new Validator
|
||||
func New(schemaLocations []string, opts Opts) Validator {
|
||||
func New(schemaLocations []string, opts Opts) (Validator, error) {
|
||||
// Default to kubernetesjsonschema.dev
|
||||
if schemaLocations == nil || len(schemaLocations) == 0 {
|
||||
schemaLocations = []string{"https://kubernetesjsonschema.dev"}
|
||||
|
|
@ -59,7 +59,11 @@ func New(schemaLocations []string, opts Opts) Validator {
|
|||
|
||||
registries := []registry.Registry{}
|
||||
for _, schemaLocation := range schemaLocations {
|
||||
registries = append(registries, registry.New(schemaLocation, opts.Strict, opts.SkipTLS))
|
||||
reg, err := registry.New(schemaLocation, opts.Strict, opts.SkipTLS)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
registries = append(registries, reg)
|
||||
}
|
||||
|
||||
if opts.KubernetesVersion == "" {
|
||||
|
|
@ -78,7 +82,7 @@ func New(schemaLocations []string, opts Opts) Validator {
|
|||
schemaDownload: downloadSchema,
|
||||
schemaCache: cache.New(),
|
||||
regs: registries,
|
||||
}
|
||||
}, nil
|
||||
}
|
||||
|
||||
type v struct {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue