github.com/chalford/terraform@v0.3.7-0.20150113080010-a78c69a8c81f/builtin/providers/cloudstack/resources.go (about) 1 package cloudstack 2 3 import ( 4 "fmt" 5 "log" 6 "regexp" 7 8 "github.com/xanzy/go-cloudstack/cloudstack" 9 ) 10 11 type retrieveError struct { 12 name string 13 value string 14 err error 15 } 16 17 func (e *retrieveError) Error() error { 18 return fmt.Errorf("Error retrieving UUID of %s %s: %s", e.name, e.value, e.err) 19 } 20 21 func retrieveUUID(cs *cloudstack.CloudStackClient, name, value string) (uuid string, e *retrieveError) { 22 // If the supplied value isn't a UUID, try to retrieve the UUID ourselves 23 if isUUID(value) { 24 return value, nil 25 } 26 27 log.Printf("[DEBUG] Retrieving UUID of %s: %s", name, value) 28 29 var err error 30 switch name { 31 case "disk_offering": 32 uuid, err = cs.DiskOffering.GetDiskOfferingID(value) 33 case "virtual_machine": 34 uuid, err = cs.VirtualMachine.GetVirtualMachineID(value) 35 case "service_offering": 36 uuid, err = cs.ServiceOffering.GetServiceOfferingID(value) 37 case "network_offering": 38 uuid, err = cs.NetworkOffering.GetNetworkOfferingID(value) 39 case "vpc_offering": 40 uuid, err = cs.VPC.GetVPCOfferingID(value) 41 case "vpc": 42 uuid, err = cs.VPC.GetVPCID(value) 43 case "template": 44 uuid, err = cs.Template.GetTemplateID(value, "executable") 45 case "network": 46 uuid, err = cs.Network.GetNetworkID(value) 47 case "zone": 48 uuid, err = cs.Zone.GetZoneID(value) 49 case "ipaddress": 50 p := cs.Address.NewListPublicIpAddressesParams() 51 p.SetIpaddress(value) 52 l, e := cs.Address.ListPublicIpAddresses(p) 53 if e != nil { 54 err = e 55 break 56 } 57 if l.Count == 1 { 58 uuid = l.PublicIpAddresses[0].Id 59 break 60 } 61 err = fmt.Errorf("Could not find UUID of IP address: %s", value) 62 default: 63 return uuid, &retrieveError{name: name, value: value, 64 err: fmt.Errorf("Unknown request: %s", name)} 65 } 66 67 if err != nil { 68 return uuid, &retrieveError{name: name, value: value, err: err} 69 } 70 71 return uuid, nil 72 } 73 74 func isUUID(s string) bool { 75 re := regexp.MustCompile(`^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`) 76 return re.MatchString(s) 77 }