...
1 package server
2
3 import (
4 "encoding/json"
5 "fmt"
6 "net/http"
7 "net/url"
8 )
9
10 const ClusterLocalSvcHost = "ipranger.ipranger.svc.cluster.local"
11
12 type Client struct {
13 http.Client
14 host string
15 }
16
17
18
19 func NewClient(host string) *Client {
20 return &Client{
21 Client: *http.DefaultClient,
22 host: host,
23 }
24 }
25
26 func (c *Client) GetNetcfg(project, region, cluster string) (NetcfgResp, error) {
27 u, err := c.netCfgURL(project, region, cluster)
28 if err != nil {
29 return NetcfgResp{}, err
30 }
31 req, err := http.NewRequest("GET", u, nil)
32 if err != nil {
33 return NetcfgResp{}, err
34 }
35 req.Header.Add("accept", "application/json")
36
37 resp, err := c.Do(req)
38 if err != nil {
39 return NetcfgResp{}, err
40 }
41 defer resp.Body.Close()
42 d := json.NewDecoder(resp.Body)
43
44
45 if resp.StatusCode >= 400 {
46 var errresp ErrResp
47 err = d.Decode(&errresp)
48 if err != nil {
49 return NetcfgResp{}, err
50 }
51 return NetcfgResp{}, fmt.Errorf("failed to get netcfg. message: %v", errresp.Message)
52 }
53
54
55 var netcfg NetcfgResp
56 err = d.Decode(&netcfg)
57 if err != nil {
58 return NetcfgResp{}, err
59 }
60
61 return netcfg, nil
62 }
63
64 func (c *Client) netCfgURL(project, region, cluster string) (string, error) {
65 raw := fmt.Sprintf("http://%s%s?project=%s®ion=%s&cluster=%s", c.host, NetcfgEndpoint,
66 url.QueryEscape(project),
67 url.QueryEscape(region),
68 url.QueryEscape(cluster),
69 )
70 u, err := url.Parse(raw)
71 if err != nil {
72 return "", err
73 }
74 return u.String(), nil
75 }
76
View as plain text