From f050b19c876af9cd833d468e6fe13e91fc4a8d53 Mon Sep 17 00:00:00 2001 From: Paul Tyng Date: Sat, 28 Dec 2019 19:49:09 -0500 Subject: [PATCH] Fix import/read for networks --- provider/resource_network.go | 42 +++++++++++++++++++++++++------ provider/resource_network_test.go | 11 ++------ 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/provider/resource_network.go b/provider/resource_network.go index 155abca..7c46f27 100644 --- a/provider/resource_network.go +++ b/provider/resource_network.go @@ -2,8 +2,10 @@ package provider import ( "fmt" + "strconv" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/helper/validation" "github.com/paultyng/terraform-provider-unifi/unifi" ) @@ -24,10 +26,10 @@ func resourceNetwork() *schema.Resource { Required: true, }, "purpose": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - //"corporate", "guest", "vlan-only" + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringInSlice([]string{"corporate", "guest", "vlan-only"}, false), }, "vlan_id": { Type: schema.TypeInt, @@ -67,6 +69,8 @@ func resourceNetwork() *schema.Resource { func resourceNetworkCreate(d *schema.ResourceData, meta interface{}) error { c := meta.(*client) + vlan := d.Get("vlan_id").(int) + req := &unifi.Network{ Name: d.Get("name").(string), Purpose: d.Get("purpose").(string), @@ -78,8 +82,9 @@ func resourceNetworkCreate(d *schema.ResourceData, meta interface{}) error { DHCPDEnabled: d.Get("dhcp_enabled").(bool), DHCPDLeaseTime: d.Get("dhcp_lease").(int), + VLANEnabled: vlan != 0, + Enabled: true, - VLANEnabled: true, IPV6InterfaceType: "none", // IPV6InterfaceType string `json:"ipv6_interface_type"` // "none" // IPV6PDStart string `json:"ipv6_pd_start"` // "::2" @@ -93,6 +98,29 @@ func resourceNetworkCreate(d *schema.ResourceData, meta interface{}) error { d.SetId(resp.ID) + return resourceNetworkSetResourceData(resp, d) +} + +func resourceNetworkSetResourceData(resp *unifi.Network, d *schema.ResourceData) error { + var err error + vlan := 0 + if resp.VLANEnabled { + vlan, err = strconv.Atoi(resp.VLAN) + if err != nil { + return err + } + } + + d.Set("name", resp.Name) + d.Set("purpose", resp.Purpose) + d.Set("vlan_id", vlan) + d.Set("subnet", resp.IPSubnet) + d.Set("network_group", resp.NetworkGroup) + d.Set("dhcp_start", resp.DHCPDStart) + d.Set("dhcp_stop", resp.DHCPDStop) + d.Set("dhcp_enabled", resp.DHCPDEnabled) + d.Set("dhcp_lease", resp.DHCPDLeaseTime) + return nil } @@ -101,7 +129,7 @@ func resourceNetworkRead(d *schema.ResourceData, meta interface{}) error { id := d.Id() - _, err := c.c.GetNetwork(c.site, id) + resp, err := c.c.GetNetwork(c.site, id) if _, ok := err.(*unifi.NotFoundError); ok { d.SetId("") return nil @@ -110,7 +138,7 @@ func resourceNetworkRead(d *schema.ResourceData, meta interface{}) error { return err } - return nil + return resourceNetworkSetResourceData(resp, d) } func resourceNetworkUpdate(d *schema.ResourceData, meta interface{}) error { diff --git a/provider/resource_network_test.go b/provider/resource_network_test.go index 7b7c382..af97e2c 100644 --- a/provider/resource_network_test.go +++ b/provider/resource_network_test.go @@ -6,17 +6,10 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) -func networkImportStep() resource.TestStep { - return importStep("unifi_network.test", - "dhcp_enabled", "dhcp_lease", "dhcp_start", "dhcp_stop", "name", - "network_group", "purpose", "subnet", "vlan_id", - ) -} - func TestAccNetwork_basic(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { preCheck(t) }, Providers: providers, + PreCheck: func() { preCheck(t) }, // TODO: CheckDestroy: , Steps: []resource.TestStep{ { @@ -25,7 +18,7 @@ func TestAccNetwork_basic(t *testing.T) { // testCheckNetworkExists(t, "name"), ), }, - networkImportStep(), + importStep("unifi_network.test"), }, }) }