func handleListAutoscaleMembers(c *cli.Context) { name := c.String("name") //prefix := c.String("prefix") //suffix := c.String("suffix") format := c.String("format") chomp := c.String("chomp") //joinSeparator := c.String("join-separator") outputFilePath := c.String("out") // sanitize everything format = sanitize(format) chomp = sanitize(chomp) // parse format as golang template tmpl, err := template.New("format").Parse(format) if err != nil { log.Fatal(err) } // for now, just AWS provider var provider providers.Provider = aws.New() // retrieve cluster members var clusterMembersByName map[string]string = nil if name == "" { clusterMembersByName, err = provider.GetClusterMembers() if err != nil { log.Fatal(err) } } else { clusterMembersByName, err = provider.GetClusterMembersByName(name) if err != nil { log.Fatal(err) } } // create intermediate key map sortedNames := make([]string, 0) for name := range clusterMembersByName { sortedNames = append(sortedNames, name) } // do string sorting sort.Strings(sortedNames) // create final sorted array of Name & Addresses sortedNameAndAddresses := make([]NameAndAddress, 0) for _, name := range sortedNames { nameAndAddress := NameAndAddress{name, clusterMembersByName[name]} sortedNameAndAddresses = append(sortedNameAndAddresses, nameAndAddress) } // loop over sorted name (which are the keys in the map) data, err := executeTemplate(tmpl, sortedNameAndAddresses) if err != nil { log.Fatal(err) } // chomp if necessary if chomp != "" { if last := len(data) - 1; last >= 0 && strings.Contains(chomp, string([]rune(data)[last])) { data = string([]rune(data)[:last]) } } if outputFilePath == "" { printToStdout(data) } else { printToFile(outputFilePath, data) } }