1package manifest
2
3import (
4	"strings"
5
6	birelsetmanifest "github.com/cloudfoundry/bosh-cli/release/set/manifest"
7	bosherr "github.com/cloudfoundry/bosh-utils/errors"
8	boshlog "github.com/cloudfoundry/bosh-utils/logger"
9)
10
11type Validator interface {
12	Validate(Manifest, birelsetmanifest.Manifest) error
13}
14
15type validator struct {
16	logger boshlog.Logger
17}
18
19func NewValidator(logger boshlog.Logger) Validator {
20	return &validator{
21		logger: logger,
22	}
23}
24
25func (v *validator) Validate(manifest Manifest, releaseSetManifest birelsetmanifest.Manifest) error {
26	errs := []error{}
27
28	cpiJobName := manifest.Template.Name
29	if v.isBlank(cpiJobName) {
30		errs = append(errs, bosherr.Error("cloud_provider.template.name must be provided"))
31	}
32
33	cpiReleaseName := manifest.Template.Release
34	if v.isBlank(cpiReleaseName) {
35		errs = append(errs, bosherr.Error("cloud_provider.template.release must be provided"))
36	}
37
38	_, found := releaseSetManifest.FindByName(cpiReleaseName)
39	if !found {
40		errs = append(errs, bosherr.Errorf("cloud_provider.template.release '%s' must refer to a release in releases", cpiReleaseName))
41	}
42
43	if len(errs) > 0 {
44		return bosherr.NewMultiError(errs...)
45	}
46
47	return nil
48}
49
50func (v *validator) isBlank(str string) bool {
51	return str == "" || strings.TrimSpace(str) == ""
52}
53