kubeconform/main.go
2020-05-30 06:10:58 +02:00

74 lines
No EOL
1.5 KiB
Go

package main
import (
"fmt"
"io"
"io/ioutil"
"log"
"os"
"github.com/yannh/kubeconform/pkg/cache"
"github.com/yannh/kubeconform/pkg/registry"
"github.com/yannh/kubeconform/pkg/resource"
"github.com/yannh/kubeconform/pkg/validator"
)
func validateFile(f io.Reader, regs []*registry.KubernetesRegistry, k8sVersion string) error {
rawResource, err := ioutil.ReadAll(f)
if err != nil {
return fmt.Errorf("failed reading file: %s", err)
}
sig, err := resource.SignatureFromBytes(rawResource)
if err != nil {
return fmt.Errorf("error while parsing: %s", err)
}
var schema []byte
for _, reg := range regs {
downloadSchema := cache.WithCache(reg.DownloadSchema)
schema, err = downloadSchema(sig.Kind, sig.Version, k8sVersion)
if err == nil {
break
}
}
if err != nil {
return fmt.Errorf("failed downloading schema for resource")
}
if err = validator.Validate(rawResource, schema); err != nil {
return err
}
return nil
}
func realMain() int {
const k8sVersion = "1.18.0"
filename := "fixtures/valid_1.yaml"
f, err := os.Open(filename)
if err != nil {
log.Fatalf("failed opening %s", filename)
return 1
}
defer f.Close()
r := registry.NewKubernetesRegistry()
if err = validateFile(f, []*registry.KubernetesRegistry{r}, k8sVersion); err != nil {
if _, ok := err.(validator.InvalidResourceError); ok {
log.Printf("invalid resource: %s", err)
return 1
}
log.Printf("failed validating resource: %s", err)
return 1
}
log.Printf("resource is valid: %s", filename)
return 0
}
func main() {
os.Exit(realMain())
}