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  }