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

     1  package testsources
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"strings"
     7  
     8  	"github.com/spf13/cobra"
     9  
    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/testsources/renderer"
    13  	"github.com/kubeshop/testkube/pkg/crd"
    14  	"github.com/kubeshop/testkube/pkg/ui"
    15  )
    16  
    17  func NewGetTestSourceCmd() *cobra.Command {
    18  	var name string
    19  	var selectors []string
    20  	var crdOnly bool
    21  
    22  	cmd := &cobra.Command{
    23  		Use:     "testsource <testSourceName>",
    24  		Aliases: []string{"testsources", "tsc"},
    25  		Short:   "Get test source details",
    26  		Long:    `Get test source, you can change output format, to get single details pass name as first arg`,
    27  		Run: func(cmd *cobra.Command, args []string) {
    28  			client, _, err := common.GetClient(cmd)
    29  			ui.ExitOnError("getting client", err)
    30  
    31  			firstEntry := true
    32  			if len(args) > 0 {
    33  				name := args[0]
    34  				testSource, err := client.GetTestSource(name)
    35  				ui.ExitOnError("getting test source: "+name, err)
    36  
    37  				if crdOnly {
    38  					if testSource.Data != "" {
    39  						testSource.Data = fmt.Sprintf("%q", testSource.Data)
    40  					}
    41  
    42  					common.UIPrintCRD(crd.TemplateTestSource, testSource, &firstEntry)
    43  					return
    44  				}
    45  
    46  				err = render.Obj(cmd, testSource, os.Stdout, renderer.TestSourceRenderer)
    47  				ui.ExitOnError("rendering obj", err)
    48  			} else {
    49  				testSources, err := client.ListTestSources(strings.Join(selectors, ","))
    50  				ui.ExitOnError("getting test sources", err)
    51  
    52  				if crdOnly {
    53  					for _, testSource := range testSources {
    54  						if testSource.Data != "" {
    55  							testSource.Data = fmt.Sprintf("%q", testSource.Data)
    56  						}
    57  
    58  						common.UIPrintCRD(crd.TemplateTestSource, testSource, &firstEntry)
    59  					}
    60  
    61  					return
    62  				}
    63  
    64  				err = render.List(cmd, testSources, os.Stdout)
    65  				ui.ExitOnError("rendering list", err)
    66  			}
    67  		},
    68  	}
    69  
    70  	cmd.Flags().StringVarP(&name, "name", "n", "", "unique test source name, you can also pass it as argument")
    71  	cmd.Flags().StringSliceVarP(&selectors, "label", "l", nil, "label key value pair: --label key1=value1")
    72  	cmd.Flags().BoolVar(&crdOnly, "crd-only", false, "show only test crd")
    73  
    74  	return cmd
    75  }