Add lazy client init

This commit is contained in:
Paul Tyng
2019-12-28 20:17:23 -05:00
parent ab915f7722
commit e910980a6e
2 changed files with 80 additions and 10 deletions

60
provider/lazy_client.go Normal file
View File

@@ -0,0 +1,60 @@
package provider
import (
"sync"
"github.com/paultyng/terraform-provider-unifi/unifi"
)
type lazyClient struct {
baseURL string
user string
pass string
once sync.Once
inner *unifi.Client
}
func (c *lazyClient) init() error {
var err error
c.once.Do(func() {
c.inner = &unifi.Client{}
c.inner.SetBaseURL(c.baseURL)
err = c.inner.Login(c.user, c.pass)
})
return err
}
func (c *lazyClient) ListUserGroup(site string) ([]unifi.UserGroup, error) {
c.init()
return c.inner.ListUserGroup(site)
}
func (c *lazyClient) ListWLANGroup(site string) ([]unifi.WLANGroup, error) {
c.init()
return c.inner.ListWLANGroup(site)
}
func (c *lazyClient) DeleteNetwork(site, id, name string) error {
c.init()
return c.inner.DeleteNetwork(site, id, name)
}
func (c *lazyClient) CreateNetwork(site string, d *unifi.Network) (*unifi.Network, error) {
c.init()
return c.inner.CreateNetwork(site, d)
}
func (c *lazyClient) GetNetwork(site, id string) (*unifi.Network, error) {
c.init()
return c.inner.GetNetwork(site, id)
}
func (c *lazyClient) DeleteWLAN(site, id string) error {
c.init()
return c.inner.DeleteWLAN(site, id)
}
func (c *lazyClient) CreateWLAN(site string, d *unifi.WLAN) (*unifi.WLAN, error) {
c.init()
return c.inner.CreateWLAN(site, d)
}
func (c *lazyClient) GetWLAN(site, id string) (*unifi.WLAN, error) {
c.init()
return c.inner.GetWLAN(site, id)
}

View File

@@ -60,23 +60,33 @@ func configure(p *schema.Provider) schema.ConfigureFunc {
//insecure := d.Get("allow_insecure").(bool)
c := &client{
c: &unifi.Client{},
c: &lazyClient{
user: user,
pass: pass,
baseURL: baseURL,
},
site: site,
}
c.c.SetBaseURL(baseURL)
// TODO: defer this to first call?
err := c.c.Login(user, pass)
if err != nil {
return nil, err
}
return c, nil
}
}
type unifiClient interface {
ListUserGroup(site string) ([]unifi.UserGroup, error)
ListWLANGroup(site string) ([]unifi.WLANGroup, error)
DeleteNetwork(site, id, name string) error
CreateNetwork(site string, d *unifi.Network) (*unifi.Network, error)
GetNetwork(site, id string) (*unifi.Network, error)
DeleteWLAN(site, id string) error
CreateWLAN(site string, d *unifi.WLAN) (*unifi.WLAN, error)
GetWLAN(site, id string) (*unifi.WLAN, error)
}
type client struct {
c *unifi.Client
c unifiClient
site string
}