-
Notifications
You must be signed in to change notification settings - Fork 1
/
resource.go
113 lines (102 loc) · 3.22 KB
/
resource.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package clients
import (
"context"
"fmt"
"time"
"github.com/containerum/cherry"
kube_types "github.com/containerum/kube-client/pkg/model"
"github.com/containerum/utils/httputil"
utils "github.com/containerum/utils/httputil"
"github.com/go-resty/resty"
"github.com/json-iterator/go"
"github.com/sirupsen/logrus"
)
// ResourceClient is an interface to resource-service.
type ResourceClient interface {
CreateDeployment(ctx context.Context, namespace string, deployment kube_types.Deployment) error
CreateService(ctx context.Context, namespace string, service kube_types.Service) error
DeleteDeployments(ctx context.Context, namespace, solutionName string) error
DeleteServices(ctx context.Context, namespace, solutionName string) error
}
type httpResourceClient struct {
rest *resty.Client
log *logrus.Entry
}
// NewHTTPResourceClient returns client for resource-service working via restful api
func NewHTTPResourceClient(serverURL string, debug bool) ResourceClient {
log := logrus.WithField("component", "resource_client")
client := resty.New().
SetHostURL(serverURL).
SetLogger(log.WriterLevel(logrus.DebugLevel)).
SetDebug(debug).
SetTimeout(3*time.Second).
SetHeader("Content-Type", "application/json").
SetHeader("Accept", "application/json").
SetError(cherry.Err{})
client.JSONMarshal = jsoniter.Marshal
client.JSONUnmarshal = jsoniter.Unmarshal
return &httpResourceClient{
rest: client,
log: log,
}
}
func (c *httpResourceClient) CreateDeployment(ctx context.Context, namespace string, deployment kube_types.Deployment) error {
c.log.Info("Creating deployment")
resp, err := c.rest.R().SetContext(ctx).
SetBody(deployment).
SetHeaders(httputil.RequestXHeadersMap(ctx)).
SetPathParams(map[string]string{
"namespace": namespace,
}).
Post("/namespaces/{namespace}/deployments")
if err != nil {
return err
}
if resp.Error() != nil {
return resp.Error().(*cherry.Err)
}
return nil
}
func (c *httpResourceClient) CreateService(ctx context.Context, namespace string, service kube_types.Service) error {
c.log.Info("Creating service")
resp, err := c.rest.R().SetContext(ctx).
SetBody(service).
SetHeaders(httputil.RequestXHeadersMap(ctx)).
SetPathParams(map[string]string{
"namespace": namespace,
}).
Post("/namespaces/{namespace}/services")
if err != nil {
return err
}
if resp.Error() != nil {
return resp.Error().(*cherry.Err)
}
return nil
}
func (c *httpResourceClient) DeleteDeployments(ctx context.Context, namespace, solutionName string) error {
c.log.Info("Deleting deployments")
resp, err := c.rest.R().SetContext(ctx).
SetHeaders(utils.RequestHeadersMap(ctx)).
Delete(fmt.Sprintf("/namespaces/%s/solutions/%s/deployments", namespace, solutionName))
if err != nil {
return err
}
if resp.Error() != nil {
return resp.Error().(*cherry.Err)
}
return nil
}
func (c *httpResourceClient) DeleteServices(ctx context.Context, namespace, solutionName string) error {
c.log.Info("Deleting services")
resp, err := c.rest.R().SetContext(ctx).
SetHeaders(utils.RequestHeadersMap(ctx)).
Delete(fmt.Sprintf("/namespaces/%s/solutions/%s/services", namespace, solutionName))
if err != nil {
return err
}
if resp.Error() != nil {
return resp.Error().(*cherry.Err)
}
return nil
}