func runCompletion(cmd *types.Command, args []string) { if completionHelp { cmd.PrintUsage() } if len(args) != 1 { cmd.PrintShortUsage() } category := args[0] elements := []string{} switch category { case "servers-all": for identifier, name := range cmd.API.Cache.Servers { elements = append(elements, identifier, wordifyName(name, "server")) } case "servers-names": for _, name := range cmd.API.Cache.Servers { elements = append(elements, wordifyName(name, "server")) } case "images-all": for identifier, name := range cmd.API.Cache.Images { elements = append(elements, identifier, wordifyName(name, "image")) } case "images-names": for _, name := range cmd.API.Cache.Images { elements = append(elements, wordifyName(name, "image")) } case "volumes-all": for identifier, name := range cmd.API.Cache.Volumes { elements = append(elements, identifier, wordifyName(name, "volume")) } case "volumes-names": for _, name := range cmd.API.Cache.Volumes { elements = append(elements, wordifyName(name, "volume")) } case "snapshots-all": for identifier, name := range cmd.API.Cache.Snapshots { elements = append(elements, identifier, wordifyName(name, "snapshot")) } case "snapshots-names": for _, name := range cmd.API.Cache.Snapshots { elements = append(elements, wordifyName(name, "snapshot")) } case "bootscripts-all": for identifier, name := range cmd.API.Cache.Bootscripts { elements = append(elements, identifier, wordifyName(name, "bootscript")) } case "bootscripts-names": for _, name := range cmd.API.Cache.Bootscripts { elements = append(elements, wordifyName(name, "bootscript")) } default: log.Fatalf("Unhandled category of completion: %s", category) } sort.Strings(elements) fmt.Println(strings.Join(utils.RemoveDuplicates(elements), "\n")) }
// LookUpServers attempts to return identifiers matching a pattern func (c *ScalewayCache) LookUpServers(needle string, acceptUUID bool) []string { c.Lock.Lock() defer c.Lock.Unlock() var res []string var exactMatches []string if acceptUUID && uuid.Parse(needle) != nil { res = append(res, needle) } nameRegex := regexp.MustCompile(`(?i)` + regexp.MustCompile(`[_-]`).ReplaceAllString(needle, ".*")) for identifier, name := range c.Servers { if name == needle { exactMatches = append(exactMatches, identifier) } if strings.HasPrefix(identifier, needle) || nameRegex.MatchString(name) { res = append(res, identifier) } } if len(exactMatches) == 1 { return exactMatches } return utils.RemoveDuplicates(res) }