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