github.com/ndarilek/terraform@v0.3.8-0.20150320140257-d3135c1b2bac/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 "network": 44 uuid, err = cs.Network.GetNetworkID(value) 45 case "zone": 46 uuid, err = cs.Zone.GetZoneID(value) 47 case "ipaddress": 48 p := cs.Address.NewListPublicIpAddressesParams() 49 p.SetIpaddress(value) 50 l, e := cs.Address.ListPublicIpAddresses(p) 51 if e != nil { 52 err = e 53 break 54 } 55 if l.Count == 1 { 56 uuid = l.PublicIpAddresses[0].Id 57 break 58 } 59 err = fmt.Errorf("Could not find UUID of IP address: %s", value) 60 default: 61 return uuid, &retrieveError{name: name, value: value, 62 err: fmt.Errorf("Unknown request: %s", name)} 63 } 64 65 if err != nil { 66 return uuid, &retrieveError{name: name, value: value, err: err} 67 } 68 69 return uuid, nil 70 } 71 72 func retrieveTemplateUUID(cs *cloudstack.CloudStackClient, zoneid, value string) (uuid string, e *retrieveError) { 73 // If the supplied value isn't a UUID, try to retrieve the UUID ourselves 74 if isUUID(value) { 75 return value, nil 76 } 77 78 log.Printf("[DEBUG] Retrieving UUID of template: %s", value) 79 80 uuid, err := cs.Template.GetTemplateID(value, "executable", zoneid) 81 if err != nil { 82 return uuid, &retrieveError{name: "template", value: value, err: err} 83 } 84 85 return uuid, nil 86 } 87 88 func isUUID(s string) bool { 89 re := regexp.MustCompile(`^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`) 90 return re.MatchString(s) 91 }