github.com/gabrielperezs/terraform@v0.7.0-rc2.0.20160715084931-f7da2612946f/builtin/providers/scaleway/resource_scaleway_ip.go (about) 1 package scaleway 2 3 import ( 4 "log" 5 6 "github.com/hashicorp/terraform/helper/schema" 7 "github.com/scaleway/scaleway-cli/pkg/api" 8 ) 9 10 func resourceScalewayIP() *schema.Resource { 11 return &schema.Resource{ 12 Create: resourceScalewayIPCreate, 13 Read: resourceScalewayIPRead, 14 Update: resourceScalewayIPUpdate, 15 Delete: resourceScalewayIPDelete, 16 Schema: map[string]*schema.Schema{ 17 "server": &schema.Schema{ 18 Type: schema.TypeString, 19 Optional: true, 20 }, 21 "ip": &schema.Schema{ 22 Type: schema.TypeString, 23 Computed: true, 24 }, 25 }, 26 } 27 } 28 29 func resourceScalewayIPCreate(d *schema.ResourceData, m interface{}) error { 30 scaleway := m.(*Client).scaleway 31 resp, err := scaleway.NewIP() 32 if err != nil { 33 return err 34 } 35 36 d.SetId(resp.IP.ID) 37 return resourceScalewayIPUpdate(d, m) 38 } 39 40 func resourceScalewayIPRead(d *schema.ResourceData, m interface{}) error { 41 scaleway := m.(*Client).scaleway 42 log.Printf("[DEBUG] Reading IP\n") 43 44 resp, err := scaleway.GetIP(d.Id()) 45 if err != nil { 46 log.Printf("[DEBUG] Error reading ip: %q\n", err) 47 if serr, ok := err.(api.ScalewayAPIError); ok { 48 if serr.StatusCode == 404 { 49 d.SetId("") 50 return nil 51 } 52 } 53 return err 54 } 55 56 d.Set("ip", resp.IP.Address) 57 d.Set("server", resp.IP.Server.Identifier) 58 return nil 59 } 60 61 func resourceScalewayIPUpdate(d *schema.ResourceData, m interface{}) error { 62 scaleway := m.(*Client).scaleway 63 if d.HasChange("server") { 64 if d.Get("server").(string) != "" { 65 log.Printf("[DEBUG] Attaching IP %q to server %q\n", d.Id(), d.Get("server").(string)) 66 if err := scaleway.AttachIP(d.Id(), d.Get("server").(string)); err != nil { 67 return err 68 } 69 } else { 70 log.Printf("[DEBUG] Detaching IP %q\n", d.Id()) 71 return DetachIP(scaleway, d.Id()) 72 } 73 } 74 75 return resourceScalewayIPRead(d, m) 76 } 77 78 func resourceScalewayIPDelete(d *schema.ResourceData, m interface{}) error { 79 scaleway := m.(*Client).scaleway 80 err := scaleway.DeleteIP(d.Id()) 81 if err != nil { 82 return err 83 } 84 d.SetId("") 85 return nil 86 }