in pkg/webhook/package_webhook.go [95:137]
func (v *packageValidator) isPackageValid(p *v1alpha1.Package, activeBundle *v1alpha1.PackageBundle) (bool, error) {
packageInBundle, err := activeBundle.FindPackage(p.Spec.PackageName)
if err != nil {
return false, err
}
version := p.Spec.PackageVersion
if version == "" {
version = v1alpha1.Latest
}
packageVersion, err := activeBundle.FindVersion(packageInBundle, version)
if err != nil {
return false, err
}
if packageInBundle.WorkloadOnly && !p.IsInstalledOnWorkload() {
return false, fmt.Errorf("package %s should only be installed on a workload cluster", p.Name)
}
jsonSchema, err := packageInBundle.GetJsonSchema(&packageVersion)
if err != nil {
return false, err
}
result, err := validatePackage(p, jsonSchema)
if err != nil {
return false, err
}
if p.Status.Spec.TargetNamespace != "" && p.Status.Spec.TargetNamespace != p.Spec.TargetNamespace {
return false, fmt.Errorf("package %s targetNamespace is immutable", p.Name)
}
b := new(bytes.Buffer)
if !result.Valid() {
for _, e := range result.Errors() {
fmt.Fprintf(b, "- %s\n", e)
}
return false, fmt.Errorf("error validating configurations %s", b.String())
}
return true, nil
}