-
Notifications
You must be signed in to change notification settings - Fork 41
/
wssd.go
112 lines (93 loc) · 3.06 KB
/
wssd.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
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache v2.0 License.
package kubernetes
import (
"context"
"fmt"
"github.com/microsoft/moc-proto/pkg/auth"
"github.com/microsoft/moc-sdk-for-go/services/cloud"
wssdcloudk8s "github.com/microsoft/moc-proto/rpc/cloudagent/cloud"
wssdcloudcommon "github.com/microsoft/moc-proto/rpc/common"
wssdcloudclient "github.com/microsoft/moc-sdk-for-go/pkg/client"
)
type client struct {
wssdcloudk8s.KubernetesAgentClient
}
// newClient - creates a client session with the backend wssdcloud agent
func newKubernetesClient(subID string, authorizer auth.Authorizer) (*client, error) {
c, err := wssdcloudclient.GetKubernetesClient(&subID, authorizer)
if err != nil {
return nil, err
}
return &client{c}, nil
}
// Get
func (c *client) Get(ctx context.Context, group, name string) (*[]cloud.Kubernetes, error) {
request, err := c.getKubernetesRequest(wssdcloudcommon.Operation_GET, group, name, nil)
if err != nil {
return nil, err
}
response, err := c.KubernetesAgentClient.Invoke(ctx, request)
if err != nil {
return nil, err
}
return c.getKubernetessFromResponse(response, group), nil
}
// CreateOrUpdate
func (c *client) CreateOrUpdate(ctx context.Context, group, name string, k8s *cloud.Kubernetes) (*cloud.Kubernetes, error) {
request, err := c.getKubernetesRequest(wssdcloudcommon.Operation_POST, group, name, k8s)
if err != nil {
return nil, err
}
response, err := c.KubernetesAgentClient.Invoke(ctx, request)
if err != nil {
return nil, err
}
k8ss := c.getKubernetessFromResponse(response, group)
if len(*k8ss) == 0 {
return nil, fmt.Errorf("[Kubernetes][Create] Unexpected error: Creating a cloud interface returned no result")
}
return &((*k8ss)[0]), nil
}
// Delete methods invokes create or update on the client
func (c *client) Delete(ctx context.Context, group, name string) error {
k8s, err := c.Get(ctx, group, name)
if err != nil {
return err
}
if len(*k8s) == 0 {
return fmt.Errorf("Kubernetes Cluster [%s] not found", name)
}
request, err := c.getKubernetesRequest(wssdcloudcommon.Operation_DELETE, group, name, &(*k8s)[0])
if err != nil {
return err
}
_, err = c.KubernetesAgentClient.Invoke(ctx, request)
return err
}
func (c *client) getKubernetesRequest(opType wssdcloudcommon.Operation, group, name string, cloud *cloud.Kubernetes) (*wssdcloudk8s.KubernetesRequest, error) {
request := &wssdcloudk8s.KubernetesRequest{
OperationType: opType,
Kubernetess: []*wssdcloudk8s.Kubernetes{},
}
var err error
wssdcloud := &wssdcloudk8s.Kubernetes{
GroupName: group,
Name: name,
}
if cloud != nil {
wssdcloud, err = c.getWssdKubernetes(cloud, group)
if err != nil {
return nil, err
}
}
request.Kubernetess = append(request.Kubernetess, wssdcloud)
return request, nil
}
func (c *client) getKubernetessFromResponse(response *wssdcloudk8s.KubernetesResponse, group string) *[]cloud.Kubernetes {
kubes := []cloud.Kubernetes{}
for _, k8s := range response.GetKubernetess() {
kubes = append(kubes, *(c.getKubernetes(k8s)))
}
return &kubes
}