github.com/bradfeehan/terraform@v0.7.0-rc3.0.20170529055808-34b45c5ad841/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  		Importer: &schema.ResourceImporter{
    17  			State: schema.ImportStatePassthrough,
    18  		},
    19  
    20  		Schema: map[string]*schema.Schema{
    21  			"server": {
    22  				Type:     schema.TypeString,
    23  				Optional: true,
    24  				Computed: true,
    25  			},
    26  			"ip": {
    27  				Type:     schema.TypeString,
    28  				Computed: true,
    29  			},
    30  		},
    31  	}
    32  }
    33  
    34  func resourceScalewayIPCreate(d *schema.ResourceData, m interface{}) error {
    35  	scaleway := m.(*Client).scaleway
    36  
    37  	mu.Lock()
    38  	resp, err := scaleway.NewIP()
    39  	mu.Unlock()
    40  	if err != nil {
    41  		return err
    42  	}
    43  
    44  	d.SetId(resp.IP.ID)
    45  	return resourceScalewayIPUpdate(d, m)
    46  }
    47  
    48  func resourceScalewayIPRead(d *schema.ResourceData, m interface{}) error {
    49  	scaleway := m.(*Client).scaleway
    50  	log.Printf("[DEBUG] Reading IP\n")
    51  
    52  	resp, err := scaleway.GetIP(d.Id())
    53  	if err != nil {
    54  		log.Printf("[DEBUG] Error reading ip: %q\n", err)
    55  		if serr, ok := err.(api.ScalewayAPIError); ok {
    56  			if serr.StatusCode == 404 {
    57  				d.SetId("")
    58  				return nil
    59  			}
    60  		}
    61  		return err
    62  	}
    63  
    64  	d.Set("ip", resp.IP.Address)
    65  	if resp.IP.Server != nil {
    66  		d.Set("server", resp.IP.Server.Identifier)
    67  	}
    68  	return nil
    69  }
    70  
    71  func resourceScalewayIPUpdate(d *schema.ResourceData, m interface{}) error {
    72  	scaleway := m.(*Client).scaleway
    73  
    74  	mu.Lock()
    75  	defer mu.Unlock()
    76  
    77  	if d.HasChange("server") {
    78  		if d.Get("server").(string) != "" {
    79  			log.Printf("[DEBUG] Attaching IP %q to server %q\n", d.Id(), d.Get("server").(string))
    80  			if err := scaleway.AttachIP(d.Id(), d.Get("server").(string)); err != nil {
    81  				return err
    82  			}
    83  		} else {
    84  			log.Printf("[DEBUG] Detaching IP %q\n", d.Id())
    85  			return scaleway.DetachIP(d.Id())
    86  		}
    87  	}
    88  
    89  	return resourceScalewayIPRead(d, m)
    90  }
    91  
    92  func resourceScalewayIPDelete(d *schema.ResourceData, m interface{}) error {
    93  	scaleway := m.(*Client).scaleway
    94  
    95  	mu.Lock()
    96  	defer mu.Unlock()
    97  
    98  	err := scaleway.DeleteIP(d.Id())
    99  	if err != nil {
   100  		return err
   101  	}
   102  	d.SetId("")
   103  	return nil
   104  }