github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/util/manifestparser/parser.go (about) 1 package manifestparser 2 3 import ( 4 "errors" 5 "io/ioutil" 6 7 yaml "gopkg.in/yaml.v2" 8 ) 9 10 type Application struct { 11 Name string `yaml:"name"` 12 } 13 14 type Parser struct { 15 PathToManifest string 16 17 Applications []Application 18 19 rawManifest []byte 20 } 21 22 func NewParser() *Parser { 23 return new(Parser) 24 } 25 26 func (parser *Parser) Parse(manifestPath string) error { 27 bytes, err := ioutil.ReadFile(manifestPath) 28 if err != nil { 29 return err 30 } 31 parser.rawManifest = bytes 32 33 var raw struct { 34 Applications []Application `yaml:"applications"` 35 } 36 37 err = yaml.Unmarshal(bytes, &raw) 38 if err != nil { 39 return err 40 } 41 42 parser.Applications = raw.Applications 43 44 if len(parser.Applications) == 0 { 45 return errors.New("must have at least one application") 46 } 47 48 for _, application := range parser.Applications { 49 if application.Name == "" { 50 return errors.New("Found an application with no name specified") 51 } 52 } 53 54 return nil 55 } 56 57 func (parser Parser) AppNames() []string { 58 var names []string 59 for _, app := range parser.Applications { 60 names = append(names, app.Name) 61 } 62 return names 63 } 64 65 func (parser Parser) RawManifest(_ string) ([]byte, error) { 66 return parser.rawManifest, nil 67 }