github.com/jrasell/terraform@v0.6.17-0.20160523115548-2652f5232949/builtin/providers/cloudstack/resource_cloudstack_vpn_gateway.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 resourceCloudStackVPNGateway() *schema.Resource { 14 return &schema.Resource{ 15 Create: resourceCloudStackVPNGatewayCreate, 16 Read: resourceCloudStackVPNGatewayRead, 17 Delete: resourceCloudStackVPNGatewayDelete, 18 19 Schema: map[string]*schema.Schema{ 20 "vpc_id": &schema.Schema{ 21 Type: schema.TypeString, 22 Optional: true, 23 Computed: true, 24 ForceNew: true, 25 }, 26 27 "vpc": &schema.Schema{ 28 Type: schema.TypeString, 29 Optional: true, 30 ForceNew: true, 31 Deprecated: "Please use the `vpc_id` field instead", 32 }, 33 34 "public_ip": &schema.Schema{ 35 Type: schema.TypeString, 36 Computed: true, 37 }, 38 }, 39 } 40 } 41 42 func resourceCloudStackVPNGatewayCreate(d *schema.ResourceData, meta interface{}) error { 43 cs := meta.(*cloudstack.CloudStackClient) 44 45 vpc, ok := d.GetOk("vpc_id") 46 if !ok { 47 vpc, ok = d.GetOk("vpc") 48 } 49 if !ok { 50 return errors.New("Either `vpc_id` or [deprecated] `vpc` must be provided.") 51 } 52 53 // Retrieve the VPC ID 54 vpcid, e := retrieveID(cs, "vpc", vpc.(string)) 55 if e != nil { 56 return e.Error() 57 } 58 59 // Create a new parameter struct 60 p := cs.VPN.NewCreateVpnGatewayParams(vpcid) 61 62 // Create the new VPN Gateway 63 v, err := cs.VPN.CreateVpnGateway(p) 64 if err != nil { 65 return fmt.Errorf("Error creating VPN Gateway for VPC ID %s: %s", vpcid, err) 66 } 67 68 d.SetId(v.Id) 69 70 return resourceCloudStackVPNGatewayRead(d, meta) 71 } 72 73 func resourceCloudStackVPNGatewayRead(d *schema.ResourceData, meta interface{}) error { 74 cs := meta.(*cloudstack.CloudStackClient) 75 76 // Get the VPN Gateway details 77 v, count, err := cs.VPN.GetVpnGatewayByID(d.Id()) 78 if err != nil { 79 if count == 0 { 80 log.Printf( 81 "[DEBUG] VPN Gateway for VPC ID %s does no longer exist", d.Get("vpc_id").(string)) 82 d.SetId("") 83 return nil 84 } 85 86 return err 87 } 88 89 d.Set("vpc_id", v.Vpcid) 90 d.Set("public_ip", v.Publicip) 91 92 return nil 93 } 94 95 func resourceCloudStackVPNGatewayDelete(d *schema.ResourceData, meta interface{}) error { 96 cs := meta.(*cloudstack.CloudStackClient) 97 98 // Create a new parameter struct 99 p := cs.VPN.NewDeleteVpnGatewayParams(d.Id()) 100 101 // Delete the VPN Gateway 102 _, err := cs.VPN.DeleteVpnGateway(p) 103 if err != nil { 104 // This is a very poor way to be told the ID does no longer exist :( 105 if strings.Contains(err.Error(), fmt.Sprintf( 106 "Invalid parameter id value=%s due to incorrect long value format, "+ 107 "or entity does not exist", d.Id())) { 108 return nil 109 } 110 111 return fmt.Errorf("Error deleting VPN Gateway for VPC %s: %s", d.Get("vpc_id").(string), err) 112 } 113 114 return nil 115 }