github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/edge/pkg/metamanager/client/secret.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 //SecretsGetter is interface to get client secrets 16 type SecretsGetter interface { 17 Secrets(namespace string) SecretsInterface 18 } 19 20 //SecretsInterface is interface for client secret 21 type SecretsInterface interface { 22 Create(*api.Secret) (*api.Secret, error) 23 Update(*api.Secret) error 24 Delete(name string) error 25 Get(name string) (*api.Secret, error) 26 } 27 28 type secrets struct { 29 namespace string 30 send SendInterface 31 } 32 33 func newSecrets(namespace string, s SendInterface) *secrets { 34 return &secrets{ 35 send: s, 36 namespace: namespace, 37 } 38 } 39 40 func (c *secrets) Create(cm *api.Secret) (*api.Secret, error) { 41 return nil, nil 42 } 43 44 func (c *secrets) Update(cm *api.Secret) error { 45 return nil 46 } 47 48 func (c *secrets) Delete(name string) error { 49 return nil 50 } 51 52 func (c *secrets) Get(name string) (*api.Secret, error) { 53 54 resource := fmt.Sprintf("%s/%s/%s", c.namespace, model.ResourceTypeSecret, name) 55 secretMsg := message.BuildMsg(modules.MetaGroup, "", modules.EdgedModuleName, resource, model.QueryOperation, nil) 56 msg, err := c.send.SendSync(secretMsg) 57 if err != nil { 58 return nil, fmt.Errorf("get secret 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 secret failed, err: %v", err) 69 } 70 } 71 72 //op := msg.GetOperation() 73 if msg.GetOperation() == model.ResponseOperation && msg.GetSource() == metamanager.MetaManagerModuleName { 74 return handleSecretFromMetaDB(content) 75 } 76 //else 77 return handleSecretFromMetaManager(content) 78 79 } 80 81 func handleSecretFromMetaDB(content []byte) (*api.Secret, error) { 82 var lists []string 83 err := json.Unmarshal(content, &lists) 84 if err != nil { 85 return nil, fmt.Errorf("unmarshal message to secret list from db failed, err: %v", err) 86 } 87 88 if len(lists) != 1 { 89 return nil, fmt.Errorf("secret length from meta db is %d", len(lists)) 90 } 91 92 var secret api.Secret 93 err = json.Unmarshal([]byte(lists[0]), &secret) 94 if err != nil { 95 return nil, fmt.Errorf("unmarshal message to secret from db failed, err: %v", err) 96 } 97 return &secret, nil 98 } 99 100 func handleSecretFromMetaManager(content []byte) (*api.Secret, error) { 101 var secret api.Secret 102 err := json.Unmarshal(content, &secret) 103 if err != nil { 104 return nil, fmt.Errorf("unmarshal message to secret failed, err: %v", err) 105 } 106 return &secret, nil 107 }