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