code: func (p *Project) Open() error {
  	p.defaults()
  
  	configFile := "project.json"
  	if p.Environment != "" {
  		configFile = fmt.Sprintf("project.%s.json", p.Environment)
  	}
  
  	f, err := os.Open(filepath.Join(p.Path, configFile))
  	if err != nil {
  		return err
  	}
  
  	if err := json.NewDecoder(f).Decode(&p.Config); err != nil {
  		return err
  	}
  
  	if p.InfraEnvironment == "" {
  		p.InfraEnvironment = p.Config.DefaultEnvironment
  	}
  
  	if p.Role == "" {
  		p.Role = p.readInfraRole()
  	}
  
  	if err := validator.Validate(&p.Config); err != nil {
  		return err
  	}
  
  	t, err := template.New("nameTemplate").Parse(p.NameTemplate)
  	if err != nil {
  		return err
  	}
  	p.nameTemplate = t
  
  	ignoreFile, err := utils.ReadIgnoreFile(p.Path)
  	if err != nil {
  		return err
  	}
  	p.IgnoreFile = append(p.IgnoreFile, ignoreFile...)
  
  	return nil
  }
docs: // Open the project.json file and prime the config.