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  }