Add lazy client init
This commit is contained in:
60
provider/lazy_client.go
Normal file
60
provider/lazy_client.go
Normal 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)
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user