func readTemplateConfig(relativePath string, template *model.Template) { filename, err := filepath.Abs(relativePath + "/config.yml") if err != nil { log.Errorf("Error forming path to config file at path: %s, error: %v", relativePath, err) } yamlFile, err := ioutil.ReadFile(filename) if err != nil { log.Errorf("Error reading config file under template: %s, error: %v", relativePath, err) } else { config := make(map[string]string) //Read the config.yml file err = yaml.Unmarshal(yamlFile, &config) if err != nil { log.Errorf("Error unmarshalling config.yml under template: %s, error: %v", relativePath, err) } else { template.Name = config["name"] template.Category = config["category"] template.Description = config["description"] template.Version = config["version"] if config["uuid"] != "" { template.UUID = config["uuid"] } } } }
//ReadTemplateVersion reads the template version details func (cat *Catalog) ReadTemplateVersion(templateID string, versionID string) (*model.Template, bool) { prefix, templateName := ExtractTemplatePrefixAndName(templateID) path := cat.CatalogID + "/" + prefix + "/" + templateName + "/" + versionID parentPath := cat.CatalogID + "/" + templateID parentMetadata, ok := cat.metadata[parentPath] if ok { newTemplate := model.Template{} newTemplate.Path = cat.CatalogID + "/" + templateID + "/" + versionID newTemplate.TemplateBase = parentMetadata.TemplateBase newTemplate.Id = cat.CatalogID + ":" + templateID + ":" + versionID newTemplate.CatalogID = cat.CatalogID newTemplate.DefaultVersion = parentMetadata.DefaultVersion newTemplate.Category = parentMetadata.Category newTemplate.IsSystem = parentMetadata.IsSystem newTemplate.Files = make(map[string]string) foundIcon, foundReadme, err := walkVersion(CatalogRootDir+path, &newTemplate) if err != nil { log.Errorf("Error reading template at path: %s, error: %v", path, err) return nil, false } if !foundIcon { //use the parent icon newTemplate.IconLink = parentMetadata.IconLink } if !foundReadme { //use the parent readme newTemplate.ReadmeLink = parentMetadata.ReadmeLink } return &newTemplate, true } return nil, false }
func ReadTemplateVersion(path string) model.Template { dirList, err := ioutil.ReadDir(catalogRoot + path) newTemplate := model.Template{} newTemplate.Path = path if err != nil { log.Errorf("Error reading template at path: %s, error: %v", path, err) } else { var foundConfig, foundIcon bool for _, subfile := range dirList { if strings.HasPrefix(subfile.Name(), "config.yml") { foundConfig = true readTemplateConfig(catalogRoot+path, &newTemplate) if newTemplate.UUID != "" { //store uuid -> path map UUIDToPath[newTemplate.UUID] = path log.Debugf("UUIDToPath map: %v", UUIDToPath) } } else if strings.HasPrefix(subfile.Name(), "catalogIcon") { newTemplate.IconLink = path + "/" + subfile.Name() foundIcon = true } else if strings.HasPrefix(subfile.Name(), "docker-compose") { newTemplate.DockerCompose = string(*(readFile(catalogRoot+path, subfile.Name()))) } else if strings.HasPrefix(subfile.Name(), "rancher-compose") { composeBytes := readFile(catalogRoot+path, subfile.Name()) newTemplate.RancherCompose = string(*composeBytes) //read the questions section RC := make(map[string]model.RancherCompose) err := yaml.Unmarshal(*composeBytes, &RC) if err != nil { log.Errorf("Error unmarshalling %s under template: %s, error: %v", subfile.Name(), path, err) } else { newTemplate.Questions = RC[".stack"].Questions } } } if !foundConfig { //use the parent config tokens := strings.Split(path, "/") parentPath := tokens[0] parentMetadata, ok := Catalog[parentPath] if ok { newTemplate.Name = parentMetadata.Name newTemplate.Category = parentMetadata.Category newTemplate.Description = parentMetadata.Description newTemplate.Version = parentMetadata.Version } else { log.Debugf("Could not find the parent metadata %s", parentPath) } } if !foundIcon { //use the parent icon tokens := strings.Split(path, "/") parentPath := tokens[0] parentMetadata, ok := Catalog[parentPath] if ok { newTemplate.IconLink = parentMetadata.IconLink } else { log.Debugf("Could not find the parent metadata %s", parentPath) } } } return newTemplate }