github.com/kubeshop/testkube@v1.17.23/pkg/mapper/webhooks/mapper.go (about)

     1  package webhooks
     2  
     3  import (
     4  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     5  
     6  	executorv1 "github.com/kubeshop/testkube-operator/api/executor/v1"
     7  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
     8  )
     9  
    10  // MapCRDToAPI maps Webhook CRD to OpenAPI spec Webhook
    11  func MapCRDToAPI(item executorv1.Webhook) testkube.Webhook {
    12  	return testkube.Webhook{
    13  		Name:                     item.Name,
    14  		Namespace:                item.Namespace,
    15  		Uri:                      item.Spec.Uri,
    16  		Events:                   MapEventArrayToCRDEvents(item.Spec.Events),
    17  		Selector:                 item.Spec.Selector,
    18  		Labels:                   item.Labels,
    19  		PayloadObjectField:       item.Spec.PayloadObjectField,
    20  		PayloadTemplate:          item.Spec.PayloadTemplate,
    21  		PayloadTemplateReference: item.Spec.PayloadTemplateReference,
    22  		Headers:                  item.Spec.Headers,
    23  	}
    24  }
    25  
    26  // MapStringArrayToCRDEvents maps string array of event types to OpenAPI spec list of EventType
    27  func MapStringArrayToCRDEvents(items []string) (events []testkube.EventType) {
    28  	for _, e := range items {
    29  		events = append(events, testkube.EventType(e))
    30  	}
    31  	return
    32  }
    33  
    34  // MapEventArrayToCRDEvents maps event array of event types to OpenAPI spec list of EventType
    35  func MapEventArrayToCRDEvents(items []executorv1.EventType) (events []testkube.EventType) {
    36  	for _, e := range items {
    37  		events = append(events, testkube.EventType(e))
    38  	}
    39  	return
    40  }
    41  
    42  // MapAPIToCRD maps OpenAPI spec WebhookCreateRequest to CRD Webhook
    43  func MapAPIToCRD(request testkube.WebhookCreateRequest) executorv1.Webhook {
    44  	return executorv1.Webhook{
    45  		ObjectMeta: metav1.ObjectMeta{
    46  			Name:      request.Name,
    47  			Namespace: request.Namespace,
    48  			Labels:    request.Labels,
    49  		},
    50  		Spec: executorv1.WebhookSpec{
    51  			Uri:                      request.Uri,
    52  			Events:                   MapEventTypesToStringArray(request.Events),
    53  			Selector:                 request.Selector,
    54  			PayloadObjectField:       request.PayloadObjectField,
    55  			PayloadTemplate:          request.PayloadTemplate,
    56  			PayloadTemplateReference: request.PayloadTemplateReference,
    57  			Headers:                  request.Headers,
    58  		},
    59  	}
    60  }
    61  
    62  // MapEventTypesToStringArray maps OpenAPI spec list of EventType to string array
    63  func MapEventTypesToStringArray(eventTypes []testkube.EventType) (arr []executorv1.EventType) {
    64  	for _, et := range eventTypes {
    65  		arr = append(arr, executorv1.EventType(et))
    66  	}
    67  	return
    68  }
    69  
    70  // MapUpdateToSpec maps WebhookUpdateRequest to Wehook CRD spec
    71  func MapUpdateToSpec(request testkube.WebhookUpdateRequest, webhook *executorv1.Webhook) *executorv1.Webhook {
    72  	var fields = []struct {
    73  		source      *string
    74  		destination *string
    75  	}{
    76  		{
    77  			request.Name,
    78  			&webhook.Name,
    79  		},
    80  		{
    81  			request.Namespace,
    82  			&webhook.Namespace,
    83  		},
    84  		{
    85  			request.Uri,
    86  			&webhook.Spec.Uri,
    87  		},
    88  		{
    89  			request.Selector,
    90  			&webhook.Spec.Selector,
    91  		},
    92  		{
    93  			request.PayloadObjectField,
    94  			&webhook.Spec.PayloadObjectField,
    95  		},
    96  		{
    97  			request.PayloadTemplate,
    98  			&webhook.Spec.PayloadTemplate,
    99  		},
   100  		{
   101  			request.PayloadTemplateReference,
   102  			&webhook.Spec.PayloadTemplateReference,
   103  		},
   104  	}
   105  
   106  	for _, field := range fields {
   107  		if field.source != nil {
   108  			*field.destination = *field.source
   109  		}
   110  	}
   111  
   112  	if request.Events != nil {
   113  		webhook.Spec.Events = MapEventTypesToStringArray(*request.Events)
   114  	}
   115  
   116  	if request.Labels != nil {
   117  		webhook.Labels = *request.Labels
   118  	}
   119  
   120  	if request.Headers != nil {
   121  		webhook.Spec.Headers = *request.Headers
   122  	}
   123  
   124  	return webhook
   125  }
   126  
   127  // MapSpecToUpdate maps Webhook CRD to WebhookUpdate Request to spec
   128  func MapSpecToUpdate(webhook *executorv1.Webhook) (request testkube.WebhookUpdateRequest) {
   129  	var fields = []struct {
   130  		source      *string
   131  		destination **string
   132  	}{
   133  		{
   134  			&webhook.Name,
   135  			&request.Name,
   136  		},
   137  		{
   138  			&webhook.Namespace,
   139  			&request.Namespace,
   140  		},
   141  		{
   142  			&webhook.Spec.Uri,
   143  			&request.Uri,
   144  		},
   145  		{
   146  			&webhook.Spec.Selector,
   147  			&request.Selector,
   148  		},
   149  		{
   150  			&webhook.Spec.PayloadObjectField,
   151  			&request.PayloadObjectField,
   152  		},
   153  		{
   154  			&webhook.Spec.PayloadTemplate,
   155  			&request.PayloadTemplate,
   156  		},
   157  		{
   158  			&webhook.Spec.PayloadTemplateReference,
   159  			&request.PayloadTemplateReference,
   160  		},
   161  	}
   162  
   163  	for _, field := range fields {
   164  		*field.destination = field.source
   165  	}
   166  
   167  	events := MapEventArrayToCRDEvents(webhook.Spec.Events)
   168  	request.Events = &events
   169  
   170  	request.Labels = &webhook.Labels
   171  	request.Headers = &webhook.Spec.Headers
   172  
   173  	return request
   174  }