From 572184f0af9a09fed674931e2cca375c42964b28 Mon Sep 17 00:00:00 2001 From: Paul Tyng Date: Thu, 26 Dec 2019 12:08:53 -0500 Subject: [PATCH] Move site to provider level --- README.md | 1 - provider/provider.go | 20 ++++++++++++++------ provider/provider_test.go | 17 ++++++++++++++++- provider/resource_network.go | 24 ++++++------------------ provider/resource_network_test.go | 3 ++- provider/resource_wlan.go | 28 ++++++++-------------------- provider/resource_wlan_test.go | 3 ++- 7 files changed, 48 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 35b2f78..285aa36 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,5 @@ resource "unifi_wlan" "test" { ## TODO -* [ ] Move site to provider level? (or use 2 value IDs?) * [ ] WLAN Groups (data source for default?) * [ ] User Groups (data source for default?) diff --git a/provider/provider.go b/provider/provider.go index 7a327b2..06e6201 100644 --- a/provider/provider.go +++ b/provider/provider.go @@ -27,11 +27,16 @@ func Provider() terraform.ResourceProvider { Required: true, DefaultFunc: schema.EnvDefaultFunc("UNIFI_API", ""), }, - "allow_insecure": { - Type: schema.TypeBool, - Optional: true, - Default: false, + "site": { + Type: schema.TypeString, + Required: true, + DefaultFunc: schema.EnvDefaultFunc("UNIFI_SITE", "default"), }, + // "allow_insecure": { + // Type: schema.TypeBool, + // Optional: true, + // Default: false, + // }, }, DataSourcesMap: map[string]*schema.Resource{ // "scaffolding_data_source": dataSourceScaffolding(), @@ -50,10 +55,12 @@ func configure(p *schema.Provider) schema.ConfigureFunc { user := d.Get("username").(string) pass := d.Get("password").(string) baseURL := d.Get("api_url").(string) + site := d.Get("site").(string) //insecure := d.Get("allow_insecure").(bool) c := &client{ - c: &unifi.Client{}, + c: &unifi.Client{}, + site: site, } c.c.SetBaseURL(baseURL) @@ -69,5 +76,6 @@ func configure(p *schema.Provider) schema.ConfigureFunc { } type client struct { - c *unifi.Client + c *unifi.Client + site string } diff --git a/provider/provider_test.go b/provider/provider_test.go index 9fbc3e2..aa4db45 100644 --- a/provider/provider_test.go +++ b/provider/provider_test.go @@ -1,8 +1,8 @@ package provider import ( - "testing" "os" + "testing" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" @@ -38,3 +38,18 @@ func importStep(name string, ignore ...string) resource.TestStep { return step } + +func preCheck(t *testing.T) { + variables := []string{ + "UNIFI_USERNAME", + "UNIFI_PASSWORD", + "UNIFI_API", + } + + for _, variable := range variables { + value := os.Getenv(variable) + if value == "" { + t.Fatalf("`%s` must be set for acceptance tests!", variable) + } + } +} diff --git a/provider/resource_network.go b/provider/resource_network.go index 39a8274..155abca 100644 --- a/provider/resource_network.go +++ b/provider/resource_network.go @@ -14,19 +14,11 @@ func resourceNetwork() *schema.Resource { Read: resourceNetworkRead, Update: resourceNetworkUpdate, Delete: resourceNetworkDelete, - - // TODO: handle site + ID (or name) - // Importer: &schema.ResourceImporter{ - // State: schema.ImportStatePassthrough, - // }, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, Schema: map[string]*schema.Schema{ - "site": { - Type: schema.TypeString, - Optional: true, - Default: "default", - ForceNew: true, - }, "name": { Type: schema.TypeString, Required: true, @@ -75,8 +67,6 @@ func resourceNetwork() *schema.Resource { func resourceNetworkCreate(d *schema.ResourceData, meta interface{}) error { c := meta.(*client) - site := d.Get("site").(string) - req := &unifi.Network{ Name: d.Get("name").(string), Purpose: d.Get("purpose").(string), @@ -96,7 +86,7 @@ func resourceNetworkCreate(d *schema.ResourceData, meta interface{}) error { // IPV6PDStop string `json:"ipv6_pd_stop"` // "::7d1" } - resp, err := c.c.CreateNetwork(site, req) + resp, err := c.c.CreateNetwork(c.site, req) if err != nil { return err } @@ -109,10 +99,9 @@ func resourceNetworkCreate(d *schema.ResourceData, meta interface{}) error { func resourceNetworkRead(d *schema.ResourceData, meta interface{}) error { c := meta.(*client) - site := d.Get("site").(string) id := d.Id() - _, err := c.c.GetNetwork(site, id) + _, err := c.c.GetNetwork(c.site, id) if _, ok := err.(*unifi.NotFoundError); ok { d.SetId("") return nil @@ -131,11 +120,10 @@ func resourceNetworkUpdate(d *schema.ResourceData, meta interface{}) error { func resourceNetworkDelete(d *schema.ResourceData, meta interface{}) error { c := meta.(*client) - site := d.Get("site").(string) name := d.Get("name").(string) id := d.Id() - err := c.c.DeleteNetwork(site, id, name) + err := c.c.DeleteNetwork(c.site, id, name) if _, ok := err.(*unifi.NotFoundError); ok { return nil } diff --git a/provider/resource_network_test.go b/provider/resource_network_test.go index ffb8891..52fe97f 100644 --- a/provider/resource_network_test.go +++ b/provider/resource_network_test.go @@ -8,6 +8,7 @@ import ( func TestAccNetwork_basic(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { preCheck(t) }, Providers: providers, // TODO: CheckDestroy: , Steps: []resource.TestStep{ @@ -17,7 +18,7 @@ func TestAccNetwork_basic(t *testing.T) { // testCheckNetworkExists(t, "name"), ), }, - // importStep("unifi_network.test"), + importStep("unifi_network.test"), }, }) } diff --git a/provider/resource_wlan.go b/provider/resource_wlan.go index 8f1c0b8..05a1bcd 100644 --- a/provider/resource_wlan.go +++ b/provider/resource_wlan.go @@ -14,19 +14,11 @@ func resourceWLAN() *schema.Resource { Read: resourceWLANRead, Update: resourceWLANUpdate, Delete: resourceWLANDelete, - - // TODO: handle site + ID (or name) - // Importer: &schema.ResourceImporter{ - // State: schema.ImportStatePassthrough, - // }, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, Schema: map[string]*schema.Schema{ - "site": { - Type: schema.TypeString, - Optional: true, - Default: "default", - ForceNew: true, - }, "name": { Type: schema.TypeString, Required: true, @@ -48,10 +40,8 @@ func resourceWLAN() *schema.Resource { func resourceWLANCreate(d *schema.ResourceData, meta interface{}) error { c := meta.(*client) - site := d.Get("site").(string) - // TODO: allow passing these defaults - wlanGroups, err := c.c.ListWLANGroup(site) + wlanGroups, err := c.c.ListWLANGroup(c.site) if err != nil { return err } @@ -66,7 +56,7 @@ func resourceWLANCreate(d *schema.ResourceData, meta interface{}) error { return fmt.Errorf("unable to find default WLAN group") } - userGroups, err := c.c.ListUserGroup(site) + userGroups, err := c.c.ListUserGroup(c.site) if err != nil { return err } @@ -107,7 +97,7 @@ func resourceWLANCreate(d *schema.ResourceData, meta interface{}) error { MinrateNgMgmtRateKbps: 1000, } - resp, err := c.c.CreateWLAN(site, req) + resp, err := c.c.CreateWLAN(c.site, req) if err != nil { return err } @@ -120,10 +110,9 @@ func resourceWLANCreate(d *schema.ResourceData, meta interface{}) error { func resourceWLANRead(d *schema.ResourceData, meta interface{}) error { c := meta.(*client) - site := d.Get("site").(string) id := d.Id() - _, err := c.c.GetWLAN(site, id) + _, err := c.c.GetWLAN(c.site, id) if _, ok := err.(*unifi.NotFoundError); ok { d.SetId("") return nil @@ -142,10 +131,9 @@ func resourceWLANUpdate(d *schema.ResourceData, meta interface{}) error { func resourceWLANDelete(d *schema.ResourceData, meta interface{}) error { c := meta.(*client) - site := d.Get("site").(string) id := d.Id() - err := c.c.DeleteWLAN(site, id) + err := c.c.DeleteWLAN(c.site, id) if _, ok := err.(*unifi.NotFoundError); ok { return nil } diff --git a/provider/resource_wlan_test.go b/provider/resource_wlan_test.go index cb7dc3e..90dbc9c 100644 --- a/provider/resource_wlan_test.go +++ b/provider/resource_wlan_test.go @@ -8,6 +8,7 @@ import ( func TestAccWLAN_basic(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { preCheck(t) }, Providers: providers, // TODO: CheckDestroy: , Steps: []resource.TestStep{ @@ -17,7 +18,7 @@ func TestAccWLAN_basic(t *testing.T) { // testCheckNetworkExists(t, "name"), ), }, - // importStep("unifi_wlan.test"), + importStep("unifi_wlan.test"), }, }) }