func GetNewTemplateVersions(templateUUID string) model.Template {
	templateMetadata := model.Template{}
	path := UUIDToPath[templateUUID]
	if path != "" {
		//refresh the catalog and sync any new changes
		RefreshCatalog()

		//find the base template metadata name
		tokens := strings.Split(path, "/")
		parentPath := tokens[0]
		cVersion := tokens[1]
		currentVersion, err := strconv.Atoi(cVersion)

		if err != nil {
			log.Debugf("Error %v reading Current Version from path: %s for uuid: %s", err, path, templateUUID)
		} else {
			templateMetadata, ok := Catalog[parentPath]
			if ok {
				log.Debugf("Template found by uuid: %s", templateUUID)
				copyOfversionLinks := make(map[string]string)
				for key, value := range templateMetadata.VersionLinks {
					if value != path {
						otherVersionTokens := strings.Split(value, "/")
						oVersion := otherVersionTokens[1]
						otherVersion, err := strconv.Atoi(oVersion)

						if err == nil && otherVersion > currentVersion {
							copyOfversionLinks[key] = value
						}
					} else {
						templateMetadata.Version = key
					}
				}
				templateMetadata.VersionLinks = copyOfversionLinks
				return templateMetadata
			} else {
				log.Debugf("Template metadata not found by uuid: %s", templateUUID)
			}
		}
	} else {
		log.Debugf("Template  path not found by uuid: %s", templateUUID)
	}

	return templateMetadata
}
func walkCatalog(path string, f os.FileInfo, err error) error {

	if f.IsDir() && metadataFolder.MatchString(path) {

		log.Debugf("Reading metadata folder for template:%s", f.Name())
		newTemplate := model.Template{}
		newTemplate.Path = f.Name()

		//read the root level config.yml
		readTemplateConfig(path, &newTemplate)

		//list the folders under the root level
		newTemplate.VersionLinks = make(map[string]string)
		dirList, err := ioutil.ReadDir(path)
		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{}
					readRancherCompose(f.Name()+"/"+subfile.Name(), &subTemplate)
					if subTemplate.UUID != "" {
						UUIDToPath[subTemplate.UUID] = f.Name() + "/" + subfile.Name()
						log.Debugf("UUIDToPath map: %v", UUIDToPath)
					}
					newTemplate.VersionLinks[subTemplate.Version] = f.Name() + "/" + subfile.Name()
				} else if strings.HasPrefix(subfile.Name(), "catalogIcon") {
					newTemplate.IconLink = f.Name() + "/" + subfile.Name()
				}
			}
		}

		Catalog[f.Name()] = newTemplate
	}
	return nil
}
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
}