/
persistentvolumeclaim.go
97 lines (80 loc) · 3.07 KB
/
persistentvolumeclaim.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
package client
import (
"encoding/json"
"fmt"
api "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/kubeedge/beehive/pkg/core/model"
"github.com/kubeedge/kubeedge/edge/pkg/common/message"
"github.com/kubeedge/kubeedge/edge/pkg/common/modules"
)
// PersistentVolumeClaimsGetter is interface to get client PersistentVolumeClaims
type PersistentVolumeClaimsGetter interface {
PersistentVolumeClaims(namespace string) PersistentVolumeClaimsInterface
}
// PersistentVolumeClaimsInterface is interface for client PersistentVolumeClaims
type PersistentVolumeClaimsInterface interface {
Create(*api.PersistentVolumeClaim) (*api.PersistentVolumeClaim, error)
Update(*api.PersistentVolumeClaim) error
Delete(name string) error
Get(name string, options metav1.GetOptions) (*api.PersistentVolumeClaim, error)
}
type persistentvolumeclaims struct {
namespace string
send SendInterface
}
func newPersistentVolumeClaims(n string, s SendInterface) *persistentvolumeclaims {
return &persistentvolumeclaims{
namespace: n,
send: s,
}
}
func (c *persistentvolumeclaims) Create(pvc *api.PersistentVolumeClaim) (*api.PersistentVolumeClaim, error) {
return nil, nil
}
func (c *persistentvolumeclaims) Update(pvc *api.PersistentVolumeClaim) error {
return nil
}
func (c *persistentvolumeclaims) Delete(name string) error {
return nil
}
func (c *persistentvolumeclaims) Get(name string, options metav1.GetOptions) (*api.PersistentVolumeClaim, error) {
resource := fmt.Sprintf("%s/%s/%s", c.namespace, "persistentvolumeclaim", name)
pvcMsg := message.BuildMsg(modules.MetaGroup, "", modules.EdgedModuleName, resource, model.QueryOperation, nil)
msg, err := c.send.SendSync(pvcMsg)
if err != nil {
return nil, fmt.Errorf("get persistentvolumeclaim from metaManager failed, err: %v", err)
}
content, err := msg.GetContentData()
if err != nil {
return nil, fmt.Errorf("parse message to persistentvolumeclaim failed, err: %v", err)
}
if msg.GetOperation() == model.ResponseOperation && msg.GetSource() == modules.MetaManagerModuleName {
return handlePersistentVolumeClaimFromMetaDB(content)
}
return handlePersistentVolumeClaimFromMetaManager(content)
}
func handlePersistentVolumeClaimFromMetaDB(content []byte) (*api.PersistentVolumeClaim, error) {
var lists []string
err := json.Unmarshal(content, &lists)
if err != nil {
return nil, fmt.Errorf("unmarshal message to persistentvolumeclaim list from db failed, err: %v", err)
}
if len(lists) != 1 {
return nil, fmt.Errorf("persistentvolumeclaim length from meta db is %d", len(lists))
}
var pvc api.PersistentVolumeClaim
err = json.Unmarshal([]byte(lists[0]), &pvc)
if err != nil {
return nil, fmt.Errorf("unmarshal message to persistentvolumeclaim from db failed, err: %v", err)
}
return &pvc, nil
}
func handlePersistentVolumeClaimFromMetaManager(content []byte) (*api.PersistentVolumeClaim, error) {
var pvc api.PersistentVolumeClaim
err := json.Unmarshal(content, &pvc)
if err != nil {
return nil, fmt.Errorf("unmarshal message to persistentvolumeclaim failed, err: %v", err)
}
return &pvc, nil
}