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 }