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  }