github.com/kubeshop/testkube@v1.17.23/cmd/kubectl-testkube/commands/templates/common.go (about)

     1  package templates
     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  	"github.com/kubeshop/testkube/pkg/ui"
    12  )
    13  
    14  // NewCreateTemplateOptionsFromFlags creates create template options from command flags
    15  func NewCreateTemplateOptionsFromFlags(cmd *cobra.Command) (options apiv1.CreateTemplateOptions, err error) {
    16  	name := cmd.Flag("name").Value.String()
    17  	namespace := cmd.Flag("namespace").Value.String()
    18  	if err != nil {
    19  		return options, err
    20  	}
    21  
    22  	templateType := testkube.TemplateType(cmd.Flag("template-type").Value.String())
    23  
    24  	if templateType != testkube.JOB_TemplateType && templateType != testkube.CRONJOB_TemplateType &&
    25  		templateType != testkube.SCRAPER_TemplateType && templateType != testkube.PVC_TemplateType &&
    26  		templateType != testkube.WEBHOOK_TemplateType && templateType != testkube.POD_TemplateType {
    27  		ui.Failf("invalid template type: %s. use one of job|container|cronjob|scraper|pvc|webhook|pod", templateType)
    28  	}
    29  
    30  	body := cmd.Flag("body").Value.String()
    31  	bodyContent := ""
    32  	if body != "" {
    33  		b, err := os.ReadFile(body)
    34  		ui.ExitOnError("reading template body", err)
    35  		bodyContent = string(b)
    36  	}
    37  
    38  	labels, err := cmd.Flags().GetStringToString("label")
    39  	if err != nil {
    40  		return options, err
    41  	}
    42  
    43  	options = apiv1.CreateTemplateOptions{
    44  		Name:      name,
    45  		Namespace: namespace,
    46  		Type_:     &templateType,
    47  		Labels:    labels,
    48  		Body:      bodyContent,
    49  	}
    50  
    51  	return options, nil
    52  }
    53  
    54  // NewUpdateTemplateOptionsFromFlags creates update template options from command flags
    55  func NewUpdateTemplateOptionsFromFlags(cmd *cobra.Command) (options apiv1.UpdateTemplateOptions, err error) {
    56  	var fields = []struct {
    57  		name        string
    58  		destination **string
    59  	}{
    60  		{
    61  			"name",
    62  			&options.Name,
    63  		},
    64  	}
    65  
    66  	for _, field := range fields {
    67  		if cmd.Flag(field.name).Changed {
    68  			value := cmd.Flag(field.name).Value.String()
    69  			*field.destination = &value
    70  		}
    71  	}
    72  
    73  	if cmd.Flag("template-type").Changed {
    74  		templateType := testkube.TemplateType(cmd.Flag("template-type").Value.String())
    75  		if templateType != testkube.JOB_TemplateType && templateType != testkube.CRONJOB_TemplateType &&
    76  			templateType != testkube.SCRAPER_TemplateType && templateType != testkube.PVC_TemplateType &&
    77  			templateType != testkube.WEBHOOK_TemplateType && templateType != testkube.POD_TemplateType {
    78  			ui.Failf("invalid template type: %s. use one of job|container|cronjob|scraper|pvc|webhook|pod", templateType)
    79  		}
    80  		options.Type_ = &templateType
    81  	}
    82  
    83  	if cmd.Flag("body").Changed {
    84  		body := cmd.Flag("body").Value.String()
    85  		b, err := os.ReadFile(body)
    86  		if err != nil {
    87  			return options, fmt.Errorf("reading template body %w", err)
    88  		}
    89  
    90  		value := string(b)
    91  		options.Body = &value
    92  	}
    93  
    94  	if cmd.Flag("label").Changed {
    95  		labels, err := cmd.Flags().GetStringToString("label")
    96  		if err != nil {
    97  			return options, err
    98  		}
    99  
   100  		options.Labels = &labels
   101  	}
   102  
   103  	return options, nil
   104  }