github.com/rancher/types@v0.0.0-20220328215343-4370ff10ecd5/mapper/cross_version_object.go (about) 1 package mapper 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/rancher/norman/types/values" 8 9 "github.com/rancher/norman/types" 10 "github.com/rancher/norman/types/convert" 11 ) 12 13 var ( 14 kindMap = map[string]string{ 15 "deployment": "Deployment", 16 "replicationcontroller": "ReplicationController", 17 "statefulset": "StatefulSet", 18 "daemonset": "DaemonSet", 19 "job": "Job", 20 "cronjob": "CronJob", 21 "replicaset": "ReplicaSet", 22 } 23 groupVersionMap = map[string]string{ 24 "deployment": "apps/v1beta2", 25 "replicationcontroller": "core/v1", 26 "statefulset": "apps/v1beta2", 27 "daemonset": "apps/v1beta2", 28 "job": "batch/v1", 29 "cronjob": "batch/v1beta1", 30 "replicaset": "apps/v1beta2", 31 } 32 ) 33 34 type CrossVersionObjectToWorkload struct { 35 Field string 36 } 37 38 func (c CrossVersionObjectToWorkload) ToInternal(data map[string]interface{}) error { 39 obj, ok := values.GetValue(data, strings.Split(c.Field, "/")...) 40 if !ok { 41 return nil 42 } 43 workloadID := convert.ToString(obj) 44 parts := strings.SplitN(workloadID, ":", 3) 45 newObj := map[string]interface{}{ 46 "kind": getKind(parts[0]), 47 "apiVersion": groupVersionMap[parts[0]], 48 "name": parts[2], 49 } 50 values.PutValue(data, newObj, strings.Split(c.Field, "/")...) 51 return nil 52 } 53 54 func (c CrossVersionObjectToWorkload) FromInternal(data map[string]interface{}) { 55 obj, ok := values.GetValue(data, strings.Split(c.Field, "/")...) 56 if !ok { 57 return 58 } 59 cvo := convert.ToMapInterface(obj) 60 ns := convert.ToString(data["namespaceId"]) 61 values.PutValue(data, 62 fmt.Sprintf("%s:%s:%s", 63 strings.ToLower(convert.ToString(cvo["kind"])), 64 ns, 65 convert.ToString(cvo["name"])), 66 strings.Split(c.Field, "/")..., 67 ) 68 } 69 70 func (c CrossVersionObjectToWorkload) ModifySchema(schema *types.Schema, schemas *types.Schemas) error { 71 return nil 72 } 73 74 func getKind(i string) string { 75 return kindMap[i] 76 }