github.com/kubeshop/testkube@v1.17.23/pkg/mapper/testtriggers/openapi_kube.go (about) 1 package testtriggers 2 3 import ( 4 metav1 "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 func MapTestTriggerUpsertRequestToTestTriggerCRD(request testkube.TestTriggerUpsertRequest) testsv1.TestTrigger { 11 var concurrencyPolicy testsv1.TestTriggerConcurrencyPolicy 12 if request.ConcurrencyPolicy != nil { 13 concurrencyPolicy = testsv1.TestTriggerConcurrencyPolicy(*request.ConcurrencyPolicy) 14 } 15 16 return testsv1.TestTrigger{ 17 ObjectMeta: metav1.ObjectMeta{ 18 Name: request.Name, 19 Namespace: request.Namespace, 20 Labels: request.Labels, 21 }, 22 Spec: testsv1.TestTriggerSpec{ 23 Resource: testsv1.TestTriggerResource(*request.Resource), 24 ResourceSelector: mapSelectorToCRD(request.ResourceSelector), 25 Event: testsv1.TestTriggerEvent(request.Event), 26 ConditionSpec: mapConditionSpecCRD(request.ConditionSpec), 27 ProbeSpec: mapProbeSpecCRD(request.ProbeSpec), 28 Action: testsv1.TestTriggerAction(*request.Action), 29 Execution: testsv1.TestTriggerExecution(*request.Execution), 30 TestSelector: mapSelectorToCRD(request.TestSelector), 31 ConcurrencyPolicy: concurrencyPolicy, 32 }, 33 } 34 } 35 36 func mapSelectorToCRD(selector *testkube.TestTriggerSelector) testsv1.TestTriggerSelector { 37 var labelSelector *metav1.LabelSelector 38 if selector.LabelSelector != nil { 39 labelSelector = mapLabelSelectorToCRD(selector.LabelSelector) 40 } 41 return testsv1.TestTriggerSelector{ 42 Name: selector.Name, 43 NameRegex: selector.NameRegex, 44 Namespace: selector.Namespace, 45 LabelSelector: labelSelector, 46 } 47 } 48 49 func mapLabelSelectorToCRD(labelSelector *testkube.IoK8sApimachineryPkgApisMetaV1LabelSelector) *metav1.LabelSelector { 50 var matchExpressions []metav1.LabelSelectorRequirement 51 for _, e := range labelSelector.MatchExpressions { 52 expression := metav1.LabelSelectorRequirement{ 53 Key: e.Key, 54 Operator: metav1.LabelSelectorOperator(e.Operator), 55 Values: e.Values, 56 } 57 matchExpressions = append(matchExpressions, expression) 58 } 59 60 return &metav1.LabelSelector{ 61 MatchLabels: labelSelector.MatchLabels, 62 MatchExpressions: matchExpressions, 63 } 64 } 65 66 func mapConditionSpecCRD(conditionSpec *testkube.TestTriggerConditionSpec) *testsv1.TestTriggerConditionSpec { 67 if conditionSpec == nil { 68 return nil 69 } 70 71 var conditions []testsv1.TestTriggerCondition 72 for _, condition := range conditionSpec.Conditions { 73 conditions = append(conditions, testsv1.TestTriggerCondition{ 74 Type_: condition.Type_, 75 Status: (*testsv1.TestTriggerConditionStatuses)(condition.Status), 76 Reason: condition.Reason, 77 Ttl: condition.Ttl, 78 }) 79 } 80 81 return &testsv1.TestTriggerConditionSpec{ 82 Timeout: conditionSpec.Timeout, 83 Delay: conditionSpec.Delay, 84 Conditions: conditions, 85 } 86 } 87 88 func mapProbeSpecCRD(probeSpec *testkube.TestTriggerProbeSpec) *testsv1.TestTriggerProbeSpec { 89 if probeSpec == nil { 90 return nil 91 } 92 93 var probes []testsv1.TestTriggerProbe 94 for _, probe := range probeSpec.Probes { 95 var headers map[string]string 96 if len(probe.Headers) != 0 { 97 headers = make(map[string]string, len(probe.Headers)) 98 for key, value := range probe.Headers { 99 headers[key] = value 100 } 101 } 102 103 probes = append(probes, testsv1.TestTriggerProbe{ 104 Scheme: probe.Scheme, 105 Host: probe.Host, 106 Path: probe.Path, 107 Port: probe.Port, 108 Headers: headers, 109 }) 110 } 111 112 return &testsv1.TestTriggerProbeSpec{ 113 Timeout: probeSpec.Timeout, 114 Delay: probeSpec.Delay, 115 Probes: probes, 116 } 117 }