func()

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
}