github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/edge/pkg/metamanager/client/persistentvolumeclaim.go (about) 1 package client 2 3 import ( 4 "encoding/json" 5 "fmt" 6 7 api "k8s.io/api/core/v1" 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 10 "github.com/kubeedge/beehive/pkg/core/model" 11 "github.com/kubeedge/kubeedge/edge/pkg/common/message" 12 "github.com/kubeedge/kubeedge/edge/pkg/common/modules" 13 "github.com/kubeedge/kubeedge/edge/pkg/metamanager" 14 ) 15 16 // PersistentVolumeClaimsGetter is interface to get client PersistentVolumeClaims 17 type PersistentVolumeClaimsGetter interface { 18 PersistentVolumeClaims(namespace string) PersistentVolumeClaimsInterface 19 } 20 21 // PersistentVolumeClaimsInterface is interface for client PersistentVolumeClaims 22 type PersistentVolumeClaimsInterface interface { 23 Create(*api.PersistentVolumeClaim) (*api.PersistentVolumeClaim, error) 24 Update(*api.PersistentVolumeClaim) error 25 Delete(name string) error 26 Get(name string, options metav1.GetOptions) (*api.PersistentVolumeClaim, error) 27 } 28 29 type persistentvolumeclaims struct { 30 namespace string 31 send SendInterface 32 } 33 34 func newPersistentVolumeClaims(n string, s SendInterface) *persistentvolumeclaims { 35 return &persistentvolumeclaims{ 36 namespace: n, 37 send: s, 38 } 39 } 40 41 func (c *persistentvolumeclaims) Create(pvc *api.PersistentVolumeClaim) (*api.PersistentVolumeClaim, error) { 42 return nil, nil 43 } 44 45 func (c *persistentvolumeclaims) Update(pvc *api.PersistentVolumeClaim) error { 46 return nil 47 } 48 49 func (c *persistentvolumeclaims) Delete(name string) error { 50 return nil 51 } 52 53 func (c *persistentvolumeclaims) Get(name string, options metav1.GetOptions) (*api.PersistentVolumeClaim, error) { 54 resource := fmt.Sprintf("%s/%s/%s", c.namespace, "persistentvolumeclaim", name) 55 pvcMsg := message.BuildMsg(modules.MetaGroup, "", modules.EdgedModuleName, resource, model.QueryOperation, nil) 56 msg, err := c.send.SendSync(pvcMsg) 57 if err != nil { 58 return nil, fmt.Errorf("get persistentvolumeclaim from metaManager failed, err: %v", err) 59 } 60 61 var content []byte 62 switch msg.Content.(type) { 63 case []byte: 64 content = msg.GetContent().([]byte) 65 default: 66 content, err = json.Marshal(msg.GetContent()) 67 if err != nil { 68 return nil, fmt.Errorf("marshal message to persistentvolumeclaim failed, err: %v", err) 69 } 70 } 71 72 if msg.GetOperation() == model.ResponseOperation && msg.GetSource() == metamanager.MetaManagerModuleName { 73 return handlePersistentVolumeClaimFromMetaDB(content) 74 } 75 return handlePersistentVolumeClaimFromMetaManager(content) 76 } 77 78 func handlePersistentVolumeClaimFromMetaDB(content []byte) (*api.PersistentVolumeClaim, error) { 79 var lists []string 80 err := json.Unmarshal(content, &lists) 81 if err != nil { 82 return nil, fmt.Errorf("unmarshal message to persistentvolumeclaim list from db failed, err: %v", err) 83 } 84 85 if len(lists) != 1 { 86 return nil, fmt.Errorf("persistentvolumeclaim length from meta db is %d", len(lists)) 87 } 88 89 var pvc *api.PersistentVolumeClaim 90 err = json.Unmarshal([]byte(lists[0]), &pvc) 91 if err != nil { 92 return nil, fmt.Errorf("unmarshal message to persistentvolumeclaim from db failed, err: %v", err) 93 } 94 return pvc, nil 95 } 96 97 func handlePersistentVolumeClaimFromMetaManager(content []byte) (*api.PersistentVolumeClaim, error) { 98 var pvc *api.PersistentVolumeClaim 99 err := json.Unmarshal(content, &pvc) 100 if err != nil { 101 return nil, fmt.Errorf("unmarshal message to persistentvolumeclaim failed, err: %v", err) 102 } 103 return pvc, nil 104 }