func (cat *Catalog) walkCatalog(filePath string, f os.FileInfo, err error) error { //log.Debugf("Reading folder for template:%s %v", filePath, f) if f != nil && f.IsDir() && metadataFolder.MatchString(filePath) { //matches ./DATA/catalogID/templates/ElasticSearch or ./DATA/catalogID/k8s-templates/ElasticSearch // get the prefix like 'k8s' if any prefix := metadataFolder.ReplaceAllString(filePath, "$2") prefixWithSeparator := prefix if prefix != "" { prefixWithSeparator = prefix + "*" } log.Debugf("Reading metadata folder for template:%s, path: %v", f.Name(), filePath) newTemplate := model.Template{ Resource: client.Resource{ Id: cat.CatalogID + ":" + prefixWithSeparator + f.Name(), Type: "template", }, Path: cat.CatalogID + "/" + prefixWithSeparator + f.Name(), //catalogRoot + prefix + f.Name() TemplateBase: prefix, } //read the root level config.yml readTemplateConfig(filePath, &newTemplate) //list the folders under the root level newTemplate.VersionLinks = make(map[string]string) newTemplate.CatalogID = cat.CatalogID newTemplate.TemplateVersionRancherVersion = make(map[string]string) newTemplate.TemplateVersionRancherVersionGte = make(map[string]string) dirList, err := ioutil.ReadDir(filePath) if err != nil { log.Errorf("Error reading directories at path: %s, error: %v", f.Name(), err) } else { for _, subfile := range dirList { if subfile.IsDir() { //read the subversion config.yml file into a template subTemplate := model.Template{} err := readRancherCompose(path.Join(filePath, subfile.Name()), &subTemplate) if err == nil { newTemplate.VersionLinks[subTemplate.Version] = newTemplate.Id + ":" + subfile.Name() newTemplate.TemplateVersionRancherVersion[subTemplate.Version] = subTemplate.MinimumRancherVersion newTemplate.TemplateVersionRancherVersionGte[subTemplate.Version] = subTemplate.MaximumRancherVersion } else { subfilePath := path.Join(f.Name(), subfile.Name()) if ValidationMode { log.Fatalf("Error processing the template version: %s, error: %v", subfilePath, err) } log.Infof("Skipping the template version: %s, error: %v", subfilePath, err) } } else if strings.HasPrefix(subfile.Name(), "catalogIcon") { newTemplate.IconLink = newTemplate.Id + "?image" PathToImage[newTemplate.Path] = subfile.Name() } else if strings.HasPrefix(strings.ToLower(subfile.Name()), "readme") { newTemplate.ReadmeLink = newTemplate.Id + "?readme" PathToReadme[newTemplate.Path] = subfile.Name() } } } cat.metadata[newTemplate.Path] = newTemplate } return nil }