github.com/kubeshop/testkube@v1.17.23/cmd/kubectl-testkube/commands/testsources/common.go (about) 1 package testsources 2 3 import ( 4 "fmt" 5 6 "github.com/spf13/cobra" 7 8 "github.com/kubeshop/testkube/cmd/kubectl-testkube/commands/common" 9 apiclientv1 "github.com/kubeshop/testkube/pkg/api/v1/client" 10 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 11 ) 12 13 func newSourceFromFlags(cmd *cobra.Command) (source *testkube.TestSource, err error) { 14 sourceType := cmd.Flag("source-type").Value.String() 15 uri := cmd.Flag("uri").Value.String() 16 gitUri := cmd.Flag("git-uri").Value.String() 17 18 data, err := common.NewDataFromFlags(cmd) 19 if err != nil { 20 return nil, err 21 } 22 23 fileContent := "" 24 if data != nil { 25 fileContent = *data 26 } 27 28 // content is correct when is passed from file, by uri, ur by git repo 29 if len(fileContent) == 0 && uri == "" && gitUri == "" { 30 return nil, fmt.Errorf("empty test source, please pass some data to create test source") 31 } 32 33 if uri != "" && sourceType == "" { 34 sourceType = string(testkube.TestContentTypeFileURI) 35 } 36 37 if len(fileContent) > 0 && sourceType == "" { 38 sourceType = string(testkube.TestContentTypeString) 39 } 40 41 repository, err := common.NewRepositoryFromFlags(cmd) 42 if err != nil { 43 return nil, err 44 } 45 46 if repository != nil && sourceType == "" { 47 sourceType = string(testkube.TestContentTypeGit) 48 } 49 50 source = &testkube.TestSource{ 51 Type_: sourceType, 52 Data: string(fileContent), 53 Repository: repository, 54 Uri: uri, 55 } 56 57 return source, nil 58 } 59 60 // NewUpsertTestSourceOptionsFromFlags creates test source options from command flags 61 func NewUpsertTestSourceOptionsFromFlags(cmd *cobra.Command) (options apiclientv1.UpsertTestSourceOptions, err error) { 62 source, err := newSourceFromFlags(cmd) 63 if err != nil { 64 return options, fmt.Errorf("creating source from passed parameters %w", err) 65 } 66 67 name := cmd.Flag("name").Value.String() 68 labels, err := cmd.Flags().GetStringToString("label") 69 if err != nil { 70 return options, err 71 } 72 73 options = apiclientv1.UpsertTestSourceOptions{ 74 Name: name, 75 Type_: source.Type_, 76 Data: source.Data, 77 Repository: source.Repository, 78 Uri: source.Uri, 79 Labels: labels, 80 } 81 82 return options, nil 83 } 84 85 func newSourceUpdateFromFlags(cmd *cobra.Command) (source *testkube.TestSourceUpdate, err error) { 86 source = &testkube.TestSourceUpdate{} 87 88 var fields = []struct { 89 name string 90 destination **string 91 }{ 92 { 93 "source-type", 94 &source.Name, 95 }, 96 { 97 "uri", 98 &source.Uri, 99 }, 100 } 101 102 var nonEmpty bool 103 for _, field := range fields { 104 if cmd.Flag(field.name).Changed { 105 value := cmd.Flag(field.name).Value.String() 106 *field.destination = &value 107 nonEmpty = true 108 } 109 } 110 111 data, err := common.NewDataFromFlags(cmd) 112 if err != nil { 113 return nil, err 114 } 115 116 if data != nil { 117 source.Data = data 118 nonEmpty = true 119 } 120 121 repository, err := common.NewRepositoryUpdateFromFlags(cmd) 122 if err != nil { 123 return nil, err 124 } 125 126 if repository != nil { 127 source.Repository = &repository 128 nonEmpty = true 129 } 130 131 if nonEmpty { 132 return source, nil 133 } 134 135 return nil, nil 136 } 137 138 // NewUpdateTestSourceOptionsFromFlags creates test update source options from command flags 139 func NewUpdateTestSourceOptionsFromFlags(cmd *cobra.Command) (options apiclientv1.UpdateTestSourceOptions, err error) { 140 source, err := newSourceUpdateFromFlags(cmd) 141 if err != nil { 142 return options, fmt.Errorf("creating source from passed parameters %w", err) 143 } 144 145 if cmd.Flag("name").Changed { 146 name := cmd.Flag("name").Value.String() 147 options.Name = &name 148 } 149 150 if cmd.Flag("label").Changed { 151 labels, err := cmd.Flags().GetStringToString("label") 152 if err != nil { 153 return options, err 154 } 155 156 options.Labels = &labels 157 } 158 159 if source != nil { 160 options.Type_ = source.Type_ 161 var emptyValue string 162 var emptyRepository = &testkube.RepositoryUpdate{} 163 switch { 164 case source.Data != nil: 165 options.Data = source.Data 166 options.Repository = &emptyRepository 167 options.Uri = &emptyValue 168 case source.Repository != nil: 169 options.Data = &emptyValue 170 options.Repository = source.Repository 171 options.Uri = &emptyValue 172 case source.Uri != nil: 173 options.Data = &emptyValue 174 options.Repository = &emptyRepository 175 options.Uri = source.Uri 176 } 177 } 178 179 return options, nil 180 }