in cli/completer.go [111:167]
func buildArgOptions(response map[string]interface{}, hasID bool) []argOption {
argOptions := []argOption{}
for _, v := range response {
switch obj := v.(type) {
case []interface{}:
if obj == nil {
break
}
for _, item := range obj {
resource, ok := item.(map[string]interface{})
if !ok {
continue
}
var id, name, detail string
if resource["id"] != nil {
id = resource["id"].(string)
}
if resource["name"] != nil {
name = resource["name"].(string)
} else if resource["username"] != nil {
name = resource["username"].(string)
} else if resource["hypervisor"] != nil && resource["hypervisorversion"] != nil {
name = fmt.Sprintf("%s %s", resource["hypervisor"].(string), resource["hypervisorversion"].(string))
if resource["osdisplayname"] != nil {
name = fmt.Sprintf("%s; %s", resource["osdisplayname"].(string), name)
}
}
if resource["displaytext"] != nil {
detail = resource["displaytext"].(string)
}
if len(detail) == 0 && resource["description"] != nil {
detail = resource["description"].(string)
}
if len(detail) == 0 && resource["ipaddress"] != nil {
detail = resource["ipaddress"].(string)
}
var opt argOption
if hasID {
opt.Value = id
opt.Detail = name
if len(name) == 0 {
opt.Detail = detail
}
} else {
opt.Value = name
opt.Detail = detail
if len(name) == 0 {
opt.Value = detail
}
}
argOptions = append(argOptions, opt)
}
break
}
}
return argOptions
}