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  }