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  }