in cloudstack/resources.go [62:110]
func retrieveID(cs *cloudstack.CloudStackClient, name string, value string, opts ...cloudstack.OptionFunc) (id string, e *retrieveError) {
// If the supplied value isn't a ID, try to retrieve the ID ourselves
if cloudstack.IsID(value) {
return value, nil
}
log.Printf("[DEBUG] Retrieving ID of %s: %s", name, value)
// Ignore counts, since an error is returned if there is no exact match
var err error
switch name {
case "disk_offering":
id, _, err = cs.DiskOffering.GetDiskOfferingID(value)
case "kubernetes_version":
id, _, err = cs.Kubernetes.GetKubernetesSupportedVersionID(value)
case "network_offering":
id, _, err = cs.NetworkOffering.GetNetworkOfferingID(value)
case "project":
id, _, err = cs.Project.GetProjectID(value)
case "service_offering":
id, _, err = cs.ServiceOffering.GetServiceOfferingID(value)
case "vpc_offering":
id, _, err = cs.VPC.GetVPCOfferingID(value)
case "zone":
id, _, err = cs.Zone.GetZoneID(value)
case "os_type":
p := cs.GuestOS.NewListOsTypesParams()
p.SetDescription(value)
l, e := cs.GuestOS.ListOsTypes(p)
if e != nil {
err = e
break
}
if l.Count == 1 {
id = l.OsTypes[0].Id
break
}
err = fmt.Errorf("Could not find ID of OS Type: %s", value)
default:
return id, &retrieveError{name: name, value: value,
err: fmt.Errorf("Unknown request: %s", name)}
}
if err != nil {
return id, &retrieveError{name: name, value: value, err: err}
}
return id, nil
}