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