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  }