github.com/ottenhoff/terraform@v0.7.0-rc1.0.20160607213102-ac2d195cc560/builtin/providers/cloudstack/resource_cloudstack_vpn_connection.go (about) 1 package cloudstack 2 3 import ( 4 "errors" 5 "fmt" 6 "log" 7 "strings" 8 9 "github.com/hashicorp/terraform/helper/schema" 10 "github.com/xanzy/go-cloudstack/cloudstack" 11 ) 12 13 func resourceCloudStackVPNConnection() *schema.Resource { 14 return &schema.Resource{ 15 Create: resourceCloudStackVPNConnectionCreate, 16 Read: resourceCloudStackVPNConnectionRead, 17 Delete: resourceCloudStackVPNConnectionDelete, 18 19 Schema: map[string]*schema.Schema{ 20 "customer_gateway_id": &schema.Schema{ 21 Type: schema.TypeString, 22 Optional: true, 23 Computed: true, 24 ForceNew: true, 25 }, 26 27 "customergatewayid": &schema.Schema{ 28 Type: schema.TypeString, 29 Optional: true, 30 ForceNew: true, 31 Deprecated: "Please use the `customer_gateway_id` field instead", 32 }, 33 34 "vpn_gateway_id": &schema.Schema{ 35 Type: schema.TypeString, 36 Optional: true, 37 Computed: true, 38 ForceNew: true, 39 }, 40 41 "vpngatewayid": &schema.Schema{ 42 Type: schema.TypeString, 43 Optional: true, 44 ForceNew: true, 45 Deprecated: "Please use the `vpn_gateway_id` field instead", 46 }, 47 }, 48 } 49 } 50 51 func resourceCloudStackVPNConnectionCreate(d *schema.ResourceData, meta interface{}) error { 52 cs := meta.(*cloudstack.CloudStackClient) 53 54 customergatewayid, ok := d.GetOk("customer_gateway_id") 55 if !ok { 56 customergatewayid, ok = d.GetOk("customergatewayid") 57 } 58 if !ok { 59 return errors.New( 60 "Either `customer_gateway_id` or [deprecated] `customergatewayid` must be provided.") 61 } 62 63 vpngatewayid, ok := d.GetOk("vpn_gateway_id") 64 if !ok { 65 vpngatewayid, ok = d.GetOk("vpngatewayid") 66 } 67 if !ok { 68 return errors.New("Either `vpn_gateway_id` or [deprecated] `vpngatewayid` must be provided.") 69 } 70 71 // Create a new parameter struct 72 p := cs.VPN.NewCreateVpnConnectionParams( 73 customergatewayid.(string), 74 vpngatewayid.(string), 75 ) 76 77 // Create the new VPN Connection 78 v, err := cs.VPN.CreateVpnConnection(p) 79 if err != nil { 80 return fmt.Errorf("Error creating VPN Connection: %s", err) 81 } 82 83 d.SetId(v.Id) 84 85 return resourceCloudStackVPNConnectionRead(d, meta) 86 } 87 88 func resourceCloudStackVPNConnectionRead(d *schema.ResourceData, meta interface{}) error { 89 cs := meta.(*cloudstack.CloudStackClient) 90 91 // Get the VPN Connection details 92 v, count, err := cs.VPN.GetVpnConnectionByID(d.Id()) 93 if err != nil { 94 if count == 0 { 95 log.Printf("[DEBUG] VPN Connection does no longer exist") 96 d.SetId("") 97 return nil 98 } 99 100 return err 101 } 102 103 d.Set("customer_gateway_id", v.S2scustomergatewayid) 104 d.Set("vpn_gateway_id", v.S2svpngatewayid) 105 106 return nil 107 } 108 109 func resourceCloudStackVPNConnectionDelete(d *schema.ResourceData, meta interface{}) error { 110 cs := meta.(*cloudstack.CloudStackClient) 111 112 // Create a new parameter struct 113 p := cs.VPN.NewDeleteVpnConnectionParams(d.Id()) 114 115 // Delete the VPN Connection 116 _, err := cs.VPN.DeleteVpnConnection(p) 117 if err != nil { 118 // This is a very poor way to be told the ID does no longer exist :( 119 if strings.Contains(err.Error(), fmt.Sprintf( 120 "Invalid parameter id value=%s due to incorrect long value format, "+ 121 "or entity does not exist", d.Id())) { 122 return nil 123 } 124 125 return fmt.Errorf("Error deleting VPN Connection: %s", err) 126 } 127 128 return nil 129 }