mirror of
https://github.com/niusmallnan/steve.git
synced 2025-07-05 18:56:17 +00:00
Move reserved fields to _
This commit is contained in:
parent
c7ac7f35af
commit
10418db494
@ -47,6 +47,13 @@ func modelToSchema(modelName string, k *proto.Kind) *types.APISchema {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range s.ResourceFields {
|
||||||
|
if types.ReservedFields[k] {
|
||||||
|
s.ResourceFields["_"+k] = v
|
||||||
|
delete(s.ResourceFields, k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return &s
|
return &s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,13 @@ func modelV3ToSchema(name string, k *v1beta1.JSONSchemaProps, schemasMap map[str
|
|||||||
schemasMap[s.ID] = &s
|
schemasMap[s.ID] = &s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range s.ResourceFields {
|
||||||
|
if types.ReservedFields[k] {
|
||||||
|
s.ResourceFields["_"+k] = v
|
||||||
|
delete(s.ResourceFields, k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return &s
|
return &s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,6 +59,13 @@ type NamedResourceCollection struct {
|
|||||||
Data []NamedResource `json:"data,omitempty"`
|
Data []NamedResource `json:"data,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ReservedFields = map[string]bool{
|
||||||
|
"id": true,
|
||||||
|
"type": true,
|
||||||
|
"links": true,
|
||||||
|
"actions": true,
|
||||||
|
}
|
||||||
|
|
||||||
type APISchema struct {
|
type APISchema struct {
|
||||||
*schemas.Schema
|
*schemas.Schema
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package proxy
|
package proxy
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -57,6 +58,10 @@ func toAPI(schema *types.APISchema, obj runtime.Object) types.APIObject {
|
|||||||
return types.APIObject{}
|
return types.APIObject{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if unstr, ok := obj.(*unstructured.Unstructured); ok {
|
||||||
|
obj = moveToUnderscore(unstr)
|
||||||
|
}
|
||||||
|
|
||||||
gvr := attributes.GVR(schema)
|
gvr := attributes.GVR(schema)
|
||||||
|
|
||||||
t := fmt.Sprintf("%s/%s/%s", gvr.Group, gvr.Version, gvr.Resource)
|
t := fmt.Sprintf("%s/%s/%s", gvr.Group, gvr.Version, gvr.Resource)
|
||||||
@ -94,6 +99,37 @@ func (s *Store) byID(apiOp *types.APIRequest, schema *types.APISchema, id string
|
|||||||
return k8sClient.Get(id, opts)
|
return k8sClient.Get(id, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func moveFromUnderscore(obj map[string]interface{}) map[string]interface{} {
|
||||||
|
if obj == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
for k := range types.ReservedFields {
|
||||||
|
v, ok := obj["_"+k]
|
||||||
|
delete(obj, "_"+k)
|
||||||
|
delete(obj, k)
|
||||||
|
if ok {
|
||||||
|
obj[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
|
func moveToUnderscore(obj *unstructured.Unstructured) *unstructured.Unstructured {
|
||||||
|
if obj == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k := range types.ReservedFields {
|
||||||
|
v, ok := obj.Object[k]
|
||||||
|
if ok {
|
||||||
|
delete(obj.Object, k)
|
||||||
|
obj.Object["_"+k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Store) List(apiOp *types.APIRequest, schema *types.APISchema) (types.APIObjectList, error) {
|
func (s *Store) List(apiOp *types.APIRequest, schema *types.APISchema) (types.APIObjectList, error) {
|
||||||
k8sClient, err := s.clientGetter.Client(apiOp, schema, apiOp.Namespace)
|
k8sClient, err := s.clientGetter.Client(apiOp, schema, apiOp.Namespace)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -270,6 +306,18 @@ func (s *Store) Update(apiOp *types.APIRequest, schema *types.APISchema, params
|
|||||||
return types.APIObject{}, err
|
return types.APIObject{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if pType == apitypes.StrategicMergePatchType {
|
||||||
|
data := map[string]interface{}{}
|
||||||
|
if err := json.Unmarshal(bytes, &data); err != nil {
|
||||||
|
return types.APIObject{}, err
|
||||||
|
}
|
||||||
|
data = moveFromUnderscore(data)
|
||||||
|
bytes, err = json.Marshal(data)
|
||||||
|
if err != nil {
|
||||||
|
return types.APIObject{}, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := k8sClient.Patch(id, pType, bytes, opts)
|
resp, err := k8sClient.Patch(id, pType, bytes, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.APIObject{}, err
|
return types.APIObject{}, err
|
||||||
@ -288,7 +336,7 @@ func (s *Store) Update(apiOp *types.APIRequest, schema *types.APISchema, params
|
|||||||
return types.APIObject{}, err
|
return types.APIObject{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := k8sClient.Update(&unstructured.Unstructured{Object: input}, metav1.UpdateOptions{})
|
resp, err := k8sClient.Update(&unstructured.Unstructured{Object: moveFromUnderscore(input)}, metav1.UpdateOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.APIObject{}, err
|
return types.APIObject{}, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user