github.com/LINBIT/golinstor@v0.52.0/client/keyvaluestore.go (about) 1 package client 2 3 import ( 4 "context" 5 "fmt" 6 ) 7 8 type KV struct { 9 Name string `json:"name"` 10 Props map[string]string `json:"props"` 11 } 12 13 type KeyValueStoreProvider interface { 14 List(ctx context.Context) ([]KV, error) 15 Get(ctx context.Context, kv string) (*KV, error) 16 CreateOrModify(ctx context.Context, kv string, modify GenericPropsModify) error 17 Delete(ctx context.Context, kv string) error 18 } 19 20 var _ KeyValueStoreProvider = &KeyValueStoreService{} 21 22 type KeyValueStoreService struct { 23 client *Client 24 } 25 26 // List returns the name of key-value stores and their values 27 func (k *KeyValueStoreService) List(ctx context.Context) ([]KV, error) { 28 var ret []KV 29 30 _, err := k.client.doGET(ctx, "/v1/key-value-store", &ret) 31 if err != nil { 32 return nil, err 33 } 34 35 return ret, nil 36 } 37 38 func (k *KeyValueStoreService) Get(ctx context.Context, kv string) (*KV, error) { 39 var ret []KV 40 41 _, err := k.client.doGET(ctx, "/v1/key-value-store/"+kv, &ret) 42 if err != nil { 43 return nil, err 44 } 45 46 if len(ret) != 1 { 47 return nil, fmt.Errorf("expected exactly one KV, got %d", len(ret)) 48 } 49 50 return &ret[0], nil 51 } 52 53 func (k *KeyValueStoreService) CreateOrModify(ctx context.Context, kv string, modify GenericPropsModify) error { 54 _, err := k.client.doPUT(ctx, "/v1/key-value-store/"+kv, modify) 55 return err 56 } 57 58 func (k *KeyValueStoreService) Delete(ctx context.Context, kv string) error { 59 _, err := k.client.doDELETE(ctx, "/v1/key-value-store/"+kv, nil) 60 return err 61 }