1
0
mirror of https://github.com/rancher/norman.git synced 2025-09-17 23:59:36 +00:00

Add offspring controller

This commit is contained in:
Darren Shepherd
2017-12-19 21:39:57 -07:00
parent 2825fdb9c3
commit 2550f12a9a
11 changed files with 629 additions and 9 deletions

View File

@@ -0,0 +1,45 @@
package mapper
import (
"encoding/json"
"github.com/rancher/norman/types"
"github.com/rancher/norman/types/convert"
"github.com/rancher/norman/types/values"
)
type AnnotationField struct {
Field string
Object bool
}
func (e AnnotationField) FromInternal(data map[string]interface{}) {
v, ok := values.RemoveValue(data, "annotations", "field.cattle.io/"+e.Field)
if ok {
if e.Object {
data := map[string]interface{}{}
//ignore error
if err := json.Unmarshal([]byte(convert.ToString(v)), &data); err == nil {
v = data
}
}
data[e.Field] = v
}
}
func (e AnnotationField) ToInternal(data map[string]interface{}) {
v, ok := data[e.Field]
if ok {
if e.Object {
if bytes, err := json.Marshal(v); err == nil {
v = string(bytes)
}
}
values.PutValue(data, v, "annotations", "field.cattle.io/"+e.Field)
}
}
func (e AnnotationField) ModifySchema(schema *types.Schema, schemas *types.Schemas) error {
return validateField(e.Field, schema)
}

View File

@@ -26,6 +26,10 @@ func (e *Embed) FromInternal(data map[string]interface{}) {
}
func (e *Embed) ToInternal(data map[string]interface{}) {
if data == nil {
return
}
sub := map[string]interface{}{}
for _, fieldName := range e.embeddedFields {
if v, ok := data[fieldName]; ok {

View File

@@ -10,7 +10,7 @@ type LabelField struct {
}
func (e LabelField) FromInternal(data map[string]interface{}) {
v, ok := values.RemoveValue(data, "labels", "io.cattle.field."+e.Field)
v, ok := values.RemoveValue(data, "labels", "field.cattle.io/"+e.Field)
if ok {
data[e.Field] = v
}
@@ -19,7 +19,7 @@ func (e LabelField) FromInternal(data map[string]interface{}) {
func (e LabelField) ToInternal(data map[string]interface{}) {
v, ok := data[e.Field]
if ok {
values.PutValue(data, v, "labels", "io.cattle.field."+e.Field)
values.PutValue(data, v, "labels", "field.cattle.io/"+e.Field)
}
}