api.go raw

   1  package client
   2  
   3  import (
   4  	lwApi "github.com/liquidweb/liquidweb-go/lib/legacy"
   5  
   6  	"github.com/liquidweb/liquidweb-go/asset"
   7  	network "github.com/liquidweb/liquidweb-go/network"
   8  	"github.com/liquidweb/liquidweb-go/storage"
   9  	"github.com/liquidweb/liquidweb-go/storm"
  10  )
  11  
  12  // API is the structure that houses all of our various API clients that interact with various Storm resources.
  13  type API struct {
  14  	NetworkDNS          network.DNSBackend
  15  	NetworkDNSZone      network.DNSZoneBackend
  16  	NetworkLoadBalancer network.LoadBalancerBackend
  17  	NetworkVIP          network.VIPBackend
  18  	NetworkZone         network.ZoneBackend
  19  	StorageBlockVolume  storage.BlockVolumeBackend
  20  
  21  	StormConfig storm.ConfigBackend
  22  	StormServer storm.ServerBackend
  23  	Asset       asset.AssetBackend
  24  }
  25  
  26  // NewAPI is the API client for interacting with Storm.
  27  func NewAPI(username string, password string, url string, timeout int) (*API, error) {
  28  	// TODO support auth token. go-lwApi already supports this.
  29  	clientArgs := lwApi.LWAPIConfig{
  30  		Username: &username,
  31  		Password: &password,
  32  		Url:      url,
  33  		Timeout:  uint(timeout),
  34  		Insecure: false, // disable HTTPS validation?
  35  	}
  36  	client, err := NewClient(&clientArgs)
  37  	if err != nil {
  38  		return nil, err
  39  	}
  40  
  41  	api := &API{
  42  		NetworkDNSZone:      &network.DNSZoneClient{Backend: client.httpClient},
  43  		NetworkDNS:          &network.DNSClient{Backend: client.httpClient},
  44  		NetworkLoadBalancer: &network.LoadBalancerClient{Backend: client.httpClient},
  45  		NetworkVIP:          &network.VIPClient{Backend: client.httpClient},
  46  		NetworkZone:         &network.ZoneClient{Backend: client.httpClient},
  47  		StorageBlockVolume:  &storage.BlockVolumeClient{Backend: client.httpClient},
  48  		StormConfig:         &storm.ConfigClient{Backend: client.httpClient},
  49  		StormServer:         &storm.ServerClient{Backend: client.httpClient},
  50  		Asset:               &asset.AssetClient{Backend: client.httpClient},
  51  	}
  52  
  53  	return api, nil
  54  }
  55