github.com/dahs81/otto@v0.2.1-0.20160126165905-6400716cf085/appfile/validate.go (about) 1 package appfile 2 3 import ( 4 "fmt" 5 6 "github.com/hashicorp/go-multierror" 7 ) 8 9 // Validate validates the Appfile 10 func (f *File) Validate() error { 11 var result error 12 13 // Basic checking for stanzas 14 if f.Application == nil { 15 result = multierror.Append(result, fmt.Errorf( 16 "'application' stanza required for Appfile")) 17 } 18 if f.Project == nil { 19 result = multierror.Append(result, fmt.Errorf( 20 "'project' stanza required for Appfile")) 21 } 22 if f.Infrastructure == nil { 23 result = multierror.Append(result, fmt.Errorf( 24 "'infrastructure' stanza required for Appfile")) 25 } 26 27 // Verify the application itself 28 if f.Application != nil { 29 if f.Application.Name == "" { 30 result = multierror.Append(result, fmt.Errorf( 31 "application: name is required")) 32 } 33 if f.Application.Type == "" { 34 result = multierror.Append(result, fmt.Errorf( 35 "application: type is required")) 36 } 37 } 38 39 // Validate the project 40 if f.Project != nil { 41 if f.Project.Name == "" { 42 result = multierror.Append(result, fmt.Errorf( 43 "project: name is required")) 44 } 45 if f.Project.Infrastructure == "" { 46 result = multierror.Append(result, fmt.Errorf( 47 "project: infrastructure is required")) 48 } else { 49 found := false 50 for _, i := range f.Infrastructure { 51 if i.Name == f.Project.Infrastructure { 52 found = true 53 break 54 } 55 } 56 if !found { 57 result = multierror.Append(result, fmt.Errorf( 58 "project: infra '%s' has no corresponding infrastructure stanza", 59 f.Project.Infrastructure)) 60 } 61 } 62 } 63 64 return result 65 }