func readRancherCompose(relativePath string, newTemplate *model.Template) { composeBytes := readFile(catalogRoot+relativePath, "rancher-compose.yml") 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", "rancher-compose.yml", relativePath, err) } else { newTemplate.Questions = RC[".catalog"].Questions newTemplate.Name = RC[".catalog"].Name newTemplate.UUID = RC[".catalog"].UUID newTemplate.Description = RC[".catalog"].Description newTemplate.Version = RC[".catalog"].Version if newTemplate.UUID != "" { //store uuid -> path map UUIDToPath[newTemplate.UUID] = relativePath log.Debugf("UUIDToPath map: %v", UUIDToPath) } } }
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"] } } } }
func readRancherCompose(relativePath string, newTemplate *model.Template) error { composeBytes, err := readFile(relativePath, "rancher-compose.yml") if err != nil { return err } catalogConfig, err := lookup.ParseCatalogConfig(*composeBytes) if err != nil { return err } newTemplate.Questions = catalogConfig.Questions newTemplate.Name = catalogConfig.Name newTemplate.Description = catalogConfig.Description newTemplate.Version = catalogConfig.Version newTemplate.MinimumRancherVersion = catalogConfig.MinimumRancherVersion newTemplate.Output = catalogConfig.Output newTemplate.Labels = catalogConfig.Labels binding, err := model.CreateBindings(relativePath) if err != nil { return err } newTemplate.Bindings = binding newTemplate.MaximumRancherVersion = catalogConfig.MaximumRancherVersion newTemplate.UpgradeFrom = catalogConfig.UpgradeFrom return nil }
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 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 }