github.com/kubeshop/testkube@v1.17.23/pkg/mapper/testtriggers/kube_openapi.go (about) 1 package testtriggers 2 3 import ( 4 v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 5 6 testsv1 "github.com/kubeshop/testkube-operator/api/testtriggers/v1" 7 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 8 ) 9 10 // MapTestTriggerListKubeToAPI maps TestTriggerList CRD to list of OpenAPI spec TestTrigger 11 func MapTestTriggerListKubeToAPI(crd *testsv1.TestTriggerList) (testTriggers []testkube.TestTrigger) { 12 testTriggers = make([]testkube.TestTrigger, len(crd.Items)) 13 for i := range crd.Items { 14 testTriggers[i] = MapCRDToAPI(&crd.Items[i]) 15 } 16 17 return 18 } 19 20 // MapCRDToAPI maps TestTrigger CRD to OpenAPI spec TestTrigger 21 func MapCRDToAPI(crd *testsv1.TestTrigger) testkube.TestTrigger { 22 resource := testkube.TestTriggerResources(crd.Spec.Resource) 23 action := testkube.TestTriggerActions(crd.Spec.Action) 24 execution := testkube.TestTriggerExecutions(crd.Spec.Execution) 25 concurrencyPolicy := testkube.TestTriggerConcurrencyPolicies(crd.Spec.ConcurrencyPolicy) 26 27 return testkube.TestTrigger{ 28 Name: crd.Name, 29 Namespace: crd.Namespace, 30 Labels: crd.Labels, 31 Resource: &resource, 32 ResourceSelector: mapSelectorFromCRD(crd.Spec.ResourceSelector), 33 Event: string(crd.Spec.Event), 34 ConditionSpec: mapConditionSpecFromCRD(crd.Spec.ConditionSpec), 35 ProbeSpec: mapProbeSpecFromCRD(crd.Spec.ProbeSpec), 36 Action: &action, 37 Execution: &execution, 38 TestSelector: mapSelectorFromCRD(crd.Spec.TestSelector), 39 ConcurrencyPolicy: &concurrencyPolicy, 40 } 41 } 42 43 func mapSelectorFromCRD(selector testsv1.TestTriggerSelector) *testkube.TestTriggerSelector { 44 var labelSelector *testkube.IoK8sApimachineryPkgApisMetaV1LabelSelector 45 if selector.LabelSelector != nil { 46 labelSelector = mapLabelSelectorFromCRD(selector.LabelSelector) 47 } 48 return &testkube.TestTriggerSelector{ 49 Name: selector.Name, 50 NameRegex: selector.NameRegex, 51 Namespace: selector.Namespace, 52 LabelSelector: labelSelector, 53 } 54 } 55 56 func mapLabelSelectorFromCRD(labelSelector *v1.LabelSelector) *testkube.IoK8sApimachineryPkgApisMetaV1LabelSelector { 57 var matchExpressions []testkube.IoK8sApimachineryPkgApisMetaV1LabelSelectorRequirement 58 for _, e := range labelSelector.MatchExpressions { 59 expression := testkube.IoK8sApimachineryPkgApisMetaV1LabelSelectorRequirement{ 60 Key: e.Key, 61 Operator: string(e.Operator), 62 Values: e.Values, 63 } 64 matchExpressions = append(matchExpressions, expression) 65 } 66 67 return &testkube.IoK8sApimachineryPkgApisMetaV1LabelSelector{ 68 MatchExpressions: matchExpressions, 69 MatchLabels: labelSelector.MatchLabels, 70 } 71 } 72 73 func mapConditionSpecFromCRD(conditionSpec *testsv1.TestTriggerConditionSpec) *testkube.TestTriggerConditionSpec { 74 if conditionSpec == nil { 75 return nil 76 } 77 78 var conditions []testkube.TestTriggerCondition 79 for _, condition := range conditionSpec.Conditions { 80 conditions = append(conditions, testkube.TestTriggerCondition{ 81 Type_: condition.Type_, 82 Status: (*testkube.TestTriggerConditionStatuses)(condition.Status), 83 Reason: condition.Reason, 84 Ttl: condition.Ttl, 85 }) 86 } 87 88 return &testkube.TestTriggerConditionSpec{ 89 Timeout: conditionSpec.Timeout, 90 Delay: conditionSpec.Delay, 91 Conditions: conditions, 92 } 93 } 94 95 func MapTestTriggerCRDToTestTriggerUpsertRequest(request testsv1.TestTrigger) testkube.TestTriggerUpsertRequest { 96 return testkube.TestTriggerUpsertRequest{ 97 Name: request.Name, 98 Namespace: request.Namespace, 99 Labels: request.Labels, 100 Resource: (*testkube.TestTriggerResources)(&request.Spec.Resource), 101 ResourceSelector: mapSelectorFromCRD(request.Spec.ResourceSelector), 102 Event: string(request.Spec.Event), 103 ConditionSpec: mapConditionSpecFromCRD(request.Spec.ConditionSpec), 104 ProbeSpec: mapProbeSpecFromCRD(request.Spec.ProbeSpec), 105 Action: (*testkube.TestTriggerActions)(&request.Spec.Action), 106 Execution: (*testkube.TestTriggerExecutions)(&request.Spec.Execution), 107 TestSelector: mapSelectorFromCRD(request.Spec.TestSelector), 108 ConcurrencyPolicy: (*testkube.TestTriggerConcurrencyPolicies)(&request.Spec.ConcurrencyPolicy), 109 } 110 } 111 112 func mapProbeSpecFromCRD(probeSpec *testsv1.TestTriggerProbeSpec) *testkube.TestTriggerProbeSpec { 113 if probeSpec == nil { 114 return nil 115 } 116 117 var probes []testkube.TestTriggerProbe 118 for _, probe := range probeSpec.Probes { 119 var headers map[string]string 120 if len(probe.Headers) != 0 { 121 headers = make(map[string]string, len(probe.Headers)) 122 for key, value := range probe.Headers { 123 headers[key] = value 124 } 125 } 126 127 probes = append(probes, testkube.TestTriggerProbe{ 128 Scheme: probe.Scheme, 129 Host: probe.Host, 130 Path: probe.Path, 131 Port: probe.Port, 132 Headers: headers, 133 }) 134 } 135 136 return &testkube.TestTriggerProbeSpec{ 137 Timeout: probeSpec.Timeout, 138 Delay: probeSpec.Delay, 139 Probes: probes, 140 } 141 }