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 }