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 }