github.com/kubeshop/testkube@v1.17.23/cmd/kubectl-testkube/commands/webhooks/common.go (about) 1 package webhooks 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/spf13/cobra" 8 9 apiv1 "github.com/kubeshop/testkube/pkg/api/v1/client" 10 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 11 webhooksmapper "github.com/kubeshop/testkube/pkg/mapper/webhooks" 12 "github.com/kubeshop/testkube/pkg/ui" 13 ) 14 15 // NewCreateWebhookOptionsFromFlags creates create webhook options from command flags 16 func NewCreateWebhookOptionsFromFlags(cmd *cobra.Command) (options apiv1.CreateWebhookOptions, err error) { 17 name := cmd.Flag("name").Value.String() 18 namespace := cmd.Flag("namespace").Value.String() 19 events, err := cmd.Flags().GetStringArray("events") 20 if err != nil { 21 return options, err 22 } 23 24 payloadObjectField := cmd.Flag("payload-field").Value.String() 25 payloadTemplate := cmd.Flag("payload-template").Value.String() 26 payloadTemplateContent := "" 27 if payloadTemplate != "" { 28 b, err := os.ReadFile(payloadTemplate) 29 ui.ExitOnError("reading payload template", err) 30 payloadTemplateContent = string(b) 31 } 32 33 uri := cmd.Flag("uri").Value.String() 34 selector := cmd.Flag("selector").Value.String() 35 labels, err := cmd.Flags().GetStringToString("label") 36 if err != nil { 37 return options, err 38 } 39 40 headers, err := cmd.Flags().GetStringToString("header") 41 if err != nil { 42 return options, err 43 } 44 45 payloadTemplateReference := cmd.Flag("payload-template-reference").Value.String() 46 options = apiv1.CreateWebhookOptions{ 47 Name: name, 48 Namespace: namespace, 49 Events: webhooksmapper.MapStringArrayToCRDEvents(events), 50 Uri: uri, 51 Selector: selector, 52 Labels: labels, 53 PayloadObjectField: payloadObjectField, 54 PayloadTemplate: payloadTemplateContent, 55 Headers: headers, 56 PayloadTemplateReference: payloadTemplateReference, 57 } 58 59 return options, nil 60 } 61 62 // NewUpdateWebhookOptionsFromFlags creates update webhook options from command flags 63 func NewUpdateWebhookOptionsFromFlags(cmd *cobra.Command) (options apiv1.UpdateWebhookOptions, err error) { 64 var fields = []struct { 65 name string 66 destination **string 67 }{ 68 { 69 "name", 70 &options.Name, 71 }, 72 { 73 "uri", 74 &options.Uri, 75 }, 76 { 77 "selector", 78 &options.Selector, 79 }, 80 { 81 "payload-field", 82 &options.PayloadObjectField, 83 }, 84 { 85 "payload-template-reference", 86 &options.PayloadTemplateReference, 87 }, 88 } 89 90 for _, field := range fields { 91 if cmd.Flag(field.name).Changed { 92 value := cmd.Flag(field.name).Value.String() 93 *field.destination = &value 94 } 95 } 96 97 if cmd.Flag("payload-template").Changed { 98 payloadTemplate := cmd.Flag("payload-template").Value.String() 99 b, err := os.ReadFile(payloadTemplate) 100 if err != nil { 101 return options, fmt.Errorf("reading payload template %w", err) 102 } 103 104 value := string(b) 105 options.PayloadTemplate = &value 106 } 107 108 if cmd.Flag("events").Changed { 109 events, err := cmd.Flags().GetStringArray("events") 110 if err != nil { 111 return options, err 112 } 113 114 var eventTypes []testkube.EventType 115 for _, event := range events { 116 eventTypes = append(eventTypes, testkube.EventType(event)) 117 } 118 119 options.Events = &eventTypes 120 } 121 122 if cmd.Flag("label").Changed { 123 labels, err := cmd.Flags().GetStringToString("label") 124 if err != nil { 125 return options, err 126 } 127 128 options.Labels = &labels 129 } 130 131 if cmd.Flag("header").Changed { 132 headers, err := cmd.Flags().GetStringToString("header") 133 if err != nil { 134 return options, err 135 } 136 137 options.Headers = &headers 138 } 139 140 return options, nil 141 }