github.com/sarguru/terraform@v0.6.17-0.20160525232901-8fcdfd7e3dc9/builtin/providers/nsone/resource_zone.go (about)

     1  package nsone
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/bobtfish/go-nsone-api"
     7  	"github.com/hashicorp/terraform/helper/schema"
     8  )
     9  
    10  func zoneResource() *schema.Resource {
    11  	return &schema.Resource{
    12  		Schema: map[string]*schema.Schema{
    13  			"id": &schema.Schema{
    14  				Type:     schema.TypeString,
    15  				Computed: true,
    16  			},
    17  			"zone": &schema.Schema{
    18  				Type:     schema.TypeString,
    19  				Required: true,
    20  				ForceNew: true,
    21  			},
    22  			"link": &schema.Schema{
    23  				Type:     schema.TypeString,
    24  				Optional: true,
    25  				ForceNew: true,
    26  			},
    27  			"ttl": &schema.Schema{
    28  				Type:     schema.TypeInt,
    29  				Optional: true,
    30  				Computed: true,
    31  			},
    32  			"nx_ttl": &schema.Schema{
    33  				Type:     schema.TypeInt,
    34  				Optional: true,
    35  				Computed: true,
    36  			},
    37  			"refresh": &schema.Schema{
    38  				Type:     schema.TypeInt,
    39  				Optional: true,
    40  				Computed: true,
    41  			},
    42  			"retry": &schema.Schema{
    43  				Type:     schema.TypeInt,
    44  				Optional: true,
    45  				Computed: true,
    46  			},
    47  			"expiry": &schema.Schema{
    48  				Type:     schema.TypeInt,
    49  				Optional: true,
    50  				Computed: true,
    51  			},
    52  			"hostmaster": &schema.Schema{
    53  				Type:     schema.TypeString,
    54  				Optional: true,
    55  				Computed: true,
    56  			},
    57  			"dns_servers": &schema.Schema{
    58  				Type:     schema.TypeString,
    59  				Optional: true,
    60  				Computed: true,
    61  			},
    62  			"primary": &schema.Schema{
    63  				Type:     schema.TypeString,
    64  				Optional: true,
    65  				ForceNew: true,
    66  			},
    67  		},
    68  		Create: ZoneCreate,
    69  		Read:   ZoneRead,
    70  		Update: ZoneUpdate,
    71  		Delete: ZoneDelete,
    72  	}
    73  }
    74  
    75  func zoneToResourceData(d *schema.ResourceData, z *nsone.Zone) {
    76  	d.SetId(z.Id)
    77  	d.Set("hostmaster", z.Hostmaster)
    78  	d.Set("ttl", z.Ttl)
    79  	d.Set("nx_ttl", z.Nx_ttl)
    80  	d.Set("refresh", z.Refresh)
    81  	d.Set("retry", z.Retry)
    82  	d.Set("expiry", z.Expiry)
    83  	d.Set("dns_servers", strings.Join(z.Dns_servers[:], ","))
    84  	if z.Secondary != nil && z.Secondary.Enabled {
    85  		d.Set("primary", z.Secondary.Primary_ip)
    86  	}
    87  	if z.Link != "" {
    88  		d.Set("link", z.Link)
    89  	}
    90  }
    91  
    92  func resourceToZoneData(z *nsone.Zone, d *schema.ResourceData) {
    93  	z.Id = d.Id()
    94  	if v, ok := d.GetOk("hostmaster"); ok {
    95  		z.Hostmaster = v.(string)
    96  	}
    97  	if v, ok := d.GetOk("ttl"); ok {
    98  		z.Ttl = v.(int)
    99  	}
   100  	if v, ok := d.GetOk("nx_ttl"); ok {
   101  		z.Nx_ttl = v.(int)
   102  	}
   103  	if v, ok := d.GetOk("refresh"); ok {
   104  		z.Refresh = v.(int)
   105  	}
   106  	if v, ok := d.GetOk("retry"); ok {
   107  		z.Retry = v.(int)
   108  	}
   109  	if v, ok := d.GetOk("expiry"); ok {
   110  		z.Expiry = v.(int)
   111  	}
   112  	if v, ok := d.GetOk("primary"); ok {
   113  		z.MakeSecondary(v.(string))
   114  	}
   115  	if v, ok := d.GetOk("link"); ok {
   116  		z.LinkTo(v.(string))
   117  	}
   118  }
   119  
   120  // ZoneCreate creates the given zone in ns1
   121  func ZoneCreate(d *schema.ResourceData, meta interface{}) error {
   122  	client := meta.(*nsone.APIClient)
   123  	z := nsone.NewZone(d.Get("zone").(string))
   124  	resourceToZoneData(z, d)
   125  	if err := client.CreateZone(z); err != nil {
   126  		return err
   127  	}
   128  	zoneToResourceData(d, z)
   129  	return nil
   130  }
   131  
   132  // ZoneRead reads the given zone data from ns1
   133  func ZoneRead(d *schema.ResourceData, meta interface{}) error {
   134  	client := meta.(*nsone.APIClient)
   135  	z, err := client.GetZone(d.Get("zone").(string))
   136  	if err != nil {
   137  		return err
   138  	}
   139  	zoneToResourceData(d, z)
   140  	return nil
   141  }
   142  
   143  // ZoneDelete deteles the given zone from ns1
   144  func ZoneDelete(d *schema.ResourceData, meta interface{}) error {
   145  	client := meta.(*nsone.APIClient)
   146  	err := client.DeleteZone(d.Get("zone").(string))
   147  	d.SetId("")
   148  	return err
   149  }
   150  
   151  // ZoneUpdate updates the zone with given params in ns1
   152  func ZoneUpdate(d *schema.ResourceData, meta interface{}) error {
   153  	client := meta.(*nsone.APIClient)
   154  	z := nsone.NewZone(d.Get("zone").(string))
   155  	resourceToZoneData(z, d)
   156  	if err := client.UpdateZone(z); err != nil {
   157  		return err
   158  	}
   159  	zoneToResourceData(d, z)
   160  	return nil
   161  }