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

     1  package testworkflows
     2  
     3  import (
     4  	"os"
     5  	"strings"
     6  
     7  	"github.com/spf13/cobra"
     8  
     9  	testworkflowsv1 "github.com/kubeshop/testkube-operator/api/testworkflows/v1"
    10  	"github.com/kubeshop/testkube/cmd/kubectl-testkube/commands/common"
    11  	"github.com/kubeshop/testkube/cmd/kubectl-testkube/commands/common/render"
    12  	"github.com/kubeshop/testkube/cmd/kubectl-testkube/commands/testworkflows/renderer"
    13  	common2 "github.com/kubeshop/testkube/internal/common"
    14  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
    15  	"github.com/kubeshop/testkube/pkg/tcl/mapperstcl/testworkflows"
    16  	"github.com/kubeshop/testkube/pkg/ui"
    17  )
    18  
    19  func NewGetTestWorkflowsCmd() *cobra.Command {
    20  	var (
    21  		selectors []string
    22  		crdOnly   bool
    23  	)
    24  
    25  	cmd := &cobra.Command{
    26  		Use:     "testworkflow [name]",
    27  		Aliases: []string{"testworkflows", "tw"},
    28  		Args:    cobra.MaximumNArgs(1),
    29  		Short:   "Get all available test workflows",
    30  		Long:    `Getting all available test workflows from given namespace - if no namespace given "testkube" namespace is used`,
    31  
    32  		Run: func(cmd *cobra.Command, args []string) {
    33  			namespace := cmd.Flag("namespace").Value.String()
    34  			client, _, err := common.GetClient(cmd)
    35  			ui.ExitOnError("getting client", err)
    36  
    37  			if len(args) == 0 {
    38  				workflows, err := client.ListTestWorkflowWithExecutions(strings.Join(selectors, ","))
    39  				ui.ExitOnError("getting all test workflows in namespace "+namespace, err)
    40  
    41  				if crdOnly {
    42  					ui.PrintCRDs(common2.MapSlice(workflows, func(t testkube.TestWorkflowWithExecution) testworkflowsv1.TestWorkflow {
    43  						return *testworkflows.MapAPIToKube(t.Workflow)
    44  					}), "TestWorkflow", testworkflowsv1.GroupVersion)
    45  				} else {
    46  					err = render.List(cmd, workflows, os.Stdout)
    47  					ui.PrintOnError("Rendering list", err)
    48  				}
    49  				return
    50  			}
    51  
    52  			name := args[0]
    53  			workflow, err := client.GetTestWorkflowWithExecution(name)
    54  			ui.ExitOnError("getting test workflow in namespace "+namespace, err)
    55  
    56  			if crdOnly {
    57  				ui.PrintCRD(testworkflows.MapTestWorkflowAPIToKube(*workflow.Workflow), "TestWorkflow", testworkflowsv1.GroupVersion)
    58  			} else {
    59  				err = render.Obj(cmd, *workflow.Workflow, os.Stdout, renderer.TestWorkflowRenderer)
    60  				ui.ExitOnError("rendering obj", err)
    61  
    62  				if workflow.LatestExecution != nil {
    63  					ui.NL()
    64  					err = render.Obj(cmd, *workflow.LatestExecution, os.Stdout, renderer.TestWorkflowExecutionRenderer)
    65  					ui.ExitOnError("rendering obj", err)
    66  				}
    67  			}
    68  		},
    69  	}
    70  	cmd.Flags().StringSliceVarP(&selectors, "label", "l", nil, "label key value pair: --label key1=value1")
    71  	cmd.Flags().BoolVar(&crdOnly, "crd-only", false, "show only test workflow crd")
    72  
    73  	return cmd
    74  }