github.com/kubeshop/testkube@v1.17.23/cmd/kubectl-testkube/commands/tests/renderer/test_obj.go (about)

     1  package renderer
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/kubeshop/testkube/cmd/kubectl-testkube/commands/renderer"
     8  	"github.com/kubeshop/testkube/pkg/api/v1/client"
     9  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
    10  	"github.com/kubeshop/testkube/pkg/ui"
    11  )
    12  
    13  type mountParams struct {
    14  	name string
    15  	path string
    16  }
    17  
    18  func TestRenderer(client client.Client, ui *ui.UI, obj interface{}) error {
    19  	test, ok := obj.(testkube.Test)
    20  	if !ok {
    21  		return fmt.Errorf("can't use '%T' as testkube.Test in RenderObj for test", obj)
    22  	}
    23  
    24  	ui.Warn("Name:     ", test.Name)
    25  	ui.Warn("Namespace:", test.Namespace)
    26  	ui.Warn("Created:  ", test.Created.String())
    27  	if test.Description != "" {
    28  		ui.NL()
    29  		ui.Warn("Description: ", test.Description)
    30  	}
    31  	if len(test.Labels) > 0 {
    32  		ui.NL()
    33  		ui.Warn("Labels:   ", testkube.MapToString(test.Labels))
    34  	}
    35  	if test.Schedule != "" {
    36  		ui.NL()
    37  		ui.Warn("Schedule: ", test.Schedule)
    38  	}
    39  
    40  	if test.Content != nil {
    41  		ui.NL()
    42  		ui.Info("Content")
    43  		ui.Warn("Type", test.Content.Type_)
    44  		if test.Content.Uri != "" {
    45  			ui.Warn("Uri: ", test.Content.Uri)
    46  		}
    47  
    48  		if test.Content.Repository != nil {
    49  			ui.Warn("Repository:    ")
    50  			ui.Warn("  Uri:         ", test.Content.Repository.Uri)
    51  			ui.Warn("  Branch:      ", test.Content.Repository.Branch)
    52  			ui.Warn("  Commit:      ", test.Content.Repository.Commit)
    53  			ui.Warn("  Path:        ", test.Content.Repository.Path)
    54  			if test.Content.Repository.UsernameSecret != nil {
    55  				ui.Warn("  Username:    ", fmt.Sprintf("[secret:%s key:%s]", test.Content.Repository.UsernameSecret.Name,
    56  					test.Content.Repository.UsernameSecret.Key))
    57  			}
    58  
    59  			if test.Content.Repository.TokenSecret != nil {
    60  				ui.Warn("  Token:       ", fmt.Sprintf("[secret:%s key:%s]", test.Content.Repository.TokenSecret.Name,
    61  					test.Content.Repository.TokenSecret.Key))
    62  			}
    63  
    64  			if test.Content.Repository.CertificateSecret != "" {
    65  				ui.Warn("  Certificate: ", test.Content.Repository.CertificateSecret)
    66  			}
    67  
    68  			ui.Warn("  Working dir: ", test.Content.Repository.WorkingDir)
    69  			ui.Warn("  Auth type:   ", test.Content.Repository.AuthType)
    70  		}
    71  
    72  		if test.Content.Data != "" {
    73  			ui.Warn("Data: ", "\n", test.Content.Data)
    74  		}
    75  	}
    76  
    77  	if test.Source != "" {
    78  		ui.NL()
    79  		ui.Warn("Source: ", test.Source)
    80  	}
    81  
    82  	if test.ExecutionRequest != nil {
    83  		ui.Warn("Execution request: ")
    84  		if test.ExecutionRequest.Name != "" {
    85  			ui.Warn("  Name:                   ", test.ExecutionRequest.Name)
    86  		}
    87  
    88  		if len(test.ExecutionRequest.Variables) > 0 {
    89  			renderer.RenderVariables(test.ExecutionRequest.Variables)
    90  		}
    91  
    92  		if len(test.ExecutionRequest.Command) > 0 {
    93  			ui.Warn("  Command:                ", test.ExecutionRequest.Command...)
    94  		}
    95  
    96  		if len(test.ExecutionRequest.Args) > 0 {
    97  			ui.Warn("  Args:                   ", test.ExecutionRequest.Args...)
    98  		}
    99  
   100  		if test.ExecutionRequest.ArgsMode != "" {
   101  			ui.Warn("  Args mode:              ", test.ExecutionRequest.ArgsMode)
   102  		}
   103  
   104  		if len(test.ExecutionRequest.Envs) > 0 {
   105  			ui.NL()
   106  			ui.Warn("(deprecated) Envs:        ", testkube.MapToString(test.ExecutionRequest.Envs))
   107  		}
   108  
   109  		if len(test.ExecutionRequest.SecretEnvs) > 0 {
   110  			ui.NL()
   111  			ui.Warn("(deprecated) Secret Envs: ", testkube.MapToString(test.ExecutionRequest.SecretEnvs))
   112  		}
   113  
   114  		if test.ExecutionRequest.VariablesFile != "" {
   115  			ui.Warn("  Variables file:         ", "\n", test.ExecutionRequest.VariablesFile)
   116  			ui.Warn("  Is file uploaded:       ", "\n", fmt.Sprintf("%t", test.ExecutionRequest.IsVariablesFileUploaded))
   117  		}
   118  
   119  		if test.ExecutionRequest.HttpProxy != "" {
   120  			ui.Warn("  Http proxy:             ", test.ExecutionRequest.HttpProxy)
   121  		}
   122  
   123  		if test.ExecutionRequest.HttpsProxy != "" {
   124  			ui.Warn("  Https proxy:            ", test.ExecutionRequest.HttpsProxy)
   125  		}
   126  
   127  		if test.ExecutionRequest.ArtifactRequest != nil {
   128  			ui.Warn("  Artifact request:                 ")
   129  			ui.Warn("    Storage class name:             ", test.ExecutionRequest.ArtifactRequest.StorageClassName)
   130  			ui.Warn("    Volume mount path:              ", test.ExecutionRequest.ArtifactRequest.VolumeMountPath)
   131  			ui.Warn("    Dirs:                           ", strings.Join(test.ExecutionRequest.ArtifactRequest.Dirs, ","))
   132  			ui.Warn("    Masks:                          ", strings.Join(test.ExecutionRequest.ArtifactRequest.Masks, ","))
   133  			ui.Warn("    Storage bucket:                 ", test.ExecutionRequest.ArtifactRequest.StorageBucket)
   134  			ui.Warn("    Omit folder per execution:      ", fmt.Sprint(test.ExecutionRequest.ArtifactRequest.OmitFolderPerExecution))
   135  			ui.Warn("    Shared between pods:            ", fmt.Sprint(test.ExecutionRequest.ArtifactRequest.SharedBetweenPods))
   136  			ui.Warn("    Use default storage class name: ", fmt.Sprint(test.ExecutionRequest.ArtifactRequest.UseDefaultStorageClassName))
   137  		}
   138  
   139  		if test.ExecutionRequest.JobTemplate != "" {
   140  			ui.Warn("  Job template:                ", "\n", test.ExecutionRequest.JobTemplate)
   141  		}
   142  
   143  		if test.ExecutionRequest.JobTemplateReference != "" {
   144  			ui.Warn("  Job template reference:      ", test.ExecutionRequest.JobTemplateReference)
   145  		}
   146  
   147  		if test.ExecutionRequest.CronJobTemplate != "" {
   148  			ui.Warn("  Cron job template:           ", "\n", test.ExecutionRequest.CronJobTemplate)
   149  		}
   150  
   151  		if test.ExecutionRequest.CronJobTemplateReference != "" {
   152  			ui.Warn("  Cron job template reference: ", test.ExecutionRequest.CronJobTemplateReference)
   153  		}
   154  
   155  		if test.ExecutionRequest.PreRunScript != "" {
   156  			ui.Warn("  Pre run script:              ", "\n", test.ExecutionRequest.PreRunScript)
   157  		}
   158  
   159  		if test.ExecutionRequest.PostRunScript != "" {
   160  			ui.Warn("  Post run script:             ", "\n", test.ExecutionRequest.PostRunScript)
   161  		}
   162  
   163  		if test.ExecutionRequest.ExecutePostRunScriptBeforeScraping {
   164  			ui.Warn("  Execute postrun script before scraping: ", fmt.Sprint(test.ExecutionRequest.ExecutePostRunScriptBeforeScraping))
   165  		}
   166  
   167  		if test.ExecutionRequest.SourceScripts {
   168  			ui.Warn("  Source scripts:              ", fmt.Sprint(test.ExecutionRequest.SourceScripts))
   169  		}
   170  
   171  		if test.ExecutionRequest.ScraperTemplate != "" {
   172  			ui.Warn("  Scraper template:            ", "\n", test.ExecutionRequest.ScraperTemplate)
   173  		}
   174  
   175  		if test.ExecutionRequest.ScraperTemplateReference != "" {
   176  			ui.Warn("  Scraper template reference:  ", test.ExecutionRequest.ScraperTemplateReference)
   177  		}
   178  
   179  		if test.ExecutionRequest.PvcTemplate != "" {
   180  			ui.Warn("  PVC template:                ", "\n", test.ExecutionRequest.PvcTemplate)
   181  		}
   182  
   183  		if test.ExecutionRequest.PvcTemplateReference != "" {
   184  			ui.Warn("  PVC template reference:      ", test.ExecutionRequest.PvcTemplateReference)
   185  		}
   186  
   187  		if test.ExecutionRequest.ExecutionNamespace != "" {
   188  			ui.Warn("  Execution namespace:         ", test.ExecutionRequest.ExecutionNamespace)
   189  		}
   190  
   191  		if test.ExecutionRequest.SlavePodRequest != nil {
   192  			ui.Warn("  Slave pod request:           ")
   193  			if test.ExecutionRequest.SlavePodRequest.Resources != nil {
   194  				ui.Warn("    Resources:                 ")
   195  				if test.ExecutionRequest.SlavePodRequest.Resources.Requests != nil {
   196  					ui.Warn("      Requests:                ")
   197  					ui.Warn("        Cpu:                   ", test.ExecutionRequest.SlavePodRequest.Resources.Requests.Cpu)
   198  					ui.Warn("        Memory:                ", test.ExecutionRequest.SlavePodRequest.Resources.Requests.Memory)
   199  				}
   200  
   201  				if test.ExecutionRequest.SlavePodRequest.Resources.Limits != nil {
   202  					ui.Warn("      Limits:                  ")
   203  					ui.Warn("        Cpu:                   ", test.ExecutionRequest.SlavePodRequest.Resources.Limits.Cpu)
   204  					ui.Warn("        Memory:                ", test.ExecutionRequest.SlavePodRequest.Resources.Limits.Memory)
   205  				}
   206  			}
   207  
   208  			if test.ExecutionRequest.SlavePodRequest.PodTemplate != "" {
   209  				ui.Warn("    Pod template:              ", "\n", test.ExecutionRequest.SlavePodRequest.PodTemplate)
   210  			}
   211  
   212  			if test.ExecutionRequest.SlavePodRequest.PodTemplateReference != "" {
   213  				ui.Warn("    Pod template reference:      ", test.ExecutionRequest.SlavePodRequest.PodTemplateReference)
   214  			}
   215  		}
   216  
   217  		var mountConfigMaps, mountSecrets []mountParams
   218  		var variableConfigMaps, variableSecrets []string
   219  		for _, configMap := range test.ExecutionRequest.EnvConfigMaps {
   220  			if configMap.Reference == nil {
   221  				continue
   222  			}
   223  
   224  			if configMap.Mount {
   225  				mountConfigMaps = append(mountConfigMaps, mountParams{
   226  					name: configMap.Reference.Name,
   227  					path: configMap.MountPath,
   228  				})
   229  			}
   230  
   231  			if configMap.MapToVariables {
   232  				variableConfigMaps = append(variableConfigMaps, configMap.Reference.Name)
   233  			}
   234  		}
   235  
   236  		for _, secret := range test.ExecutionRequest.EnvSecrets {
   237  			if secret.Reference == nil {
   238  				continue
   239  			}
   240  
   241  			if secret.Mount {
   242  				mountSecrets = append(mountSecrets, mountParams{
   243  					name: secret.Reference.Name,
   244  					path: secret.MountPath,
   245  				})
   246  			}
   247  
   248  			if secret.MapToVariables {
   249  				variableSecrets = append(variableSecrets, secret.Reference.Name)
   250  			}
   251  		}
   252  
   253  		if len(mountConfigMaps) > 0 {
   254  			ui.NL()
   255  			ui.Warn("  Mount config maps:      ")
   256  			for _, mount := range mountConfigMaps {
   257  				ui.Warn("    - name      :         ", mount.name)
   258  				ui.Warn("    - mount path:         ", mount.path)
   259  			}
   260  		}
   261  
   262  		if len(variableConfigMaps) > 0 {
   263  			ui.NL()
   264  			ui.Warn("  Variable config maps:   ", variableConfigMaps...)
   265  		}
   266  
   267  		if len(mountSecrets) > 0 {
   268  			ui.NL()
   269  			ui.Warn("  Mount secrets:          ")
   270  			for _, mount := range mountSecrets {
   271  				ui.Warn("    - name      :         ", mount.name)
   272  				ui.Warn("    - mount path:         ", mount.path)
   273  			}
   274  		}
   275  
   276  		if len(variableSecrets) > 0 {
   277  			ui.NL()
   278  			ui.Warn("  Variable secrets:       ", variableSecrets...)
   279  		}
   280  	}
   281  
   282  	return nil
   283  
   284  }