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  }