diff --git a/api/v1/testkube.yaml b/api/v1/testkube.yaml index 18618dfc212..644a755769f 100644 --- a/api/v1/testkube.yaml +++ b/api/v1/testkube.yaml @@ -3850,7 +3850,11 @@ components: postRunScript: type: string description: script to run after test execution (not supported for container executors) - example: "sleep 30" + example: "sleep 30" + containerEntrypoint: + type: string + description: script to run as an entry point for container executors + example: "cypress run" runningContext: $ref: "#/components/schemas/RunningContext" description: running context for the test execution @@ -4354,6 +4358,10 @@ components: type: string description: script to run after test execution (not supported for container executors) example: "sleep 30" + containerEntrypoint: + type: string + description: script to run as an entry point for container executors + example: "cypress run" scraperTemplate: type: string description: scraper template extensions diff --git a/cmd/kubectl-testkube/commands/crds/tests_crds.go b/cmd/kubectl-testkube/commands/crds/tests_crds.go index 67ca9546562..d860376418c 100644 --- a/cmd/kubectl-testkube/commands/crds/tests_crds.go +++ b/cmd/kubectl-testkube/commands/crds/tests_crds.go @@ -97,7 +97,7 @@ func processPostmanFiles(cmd *cobra.Command, args []string) error { testEnvs := make(map[string]map[string]string, 0) testSecretEnvs := make(map[string]map[string]string, 0) - var preRunScript, postRunScript []byte + var preRunScript, postRunScript, containerEntrypoint []byte err := filepath.Walk(dir, func(path string, info fs.FileInfo, err error) error { if err != nil { @@ -153,6 +153,11 @@ func processPostmanFiles(cmd *cobra.Command, args []string) error { postRunScriptBody = fmt.Sprintf("%q", strings.TrimSpace(postRunScriptBody)) } + containerEntrypointBody := string(containerEntrypoint) + if containerEntrypointBody != "" { + containerEntrypointBody = fmt.Sprintf("%q", strings.TrimSpace(containerEntrypointBody)) + } + for key, value := range flags.Envs { if value != "" { flags.Envs[key] = fmt.Sprintf("%q", value) @@ -172,13 +177,14 @@ func processPostmanFiles(cmd *cobra.Command, args []string) error { } test.ExecutionRequest = &testkube.ExecutionRequest{ - Command: flags.Command, - Args: flags.ExecutorArgs, - ArgsMode: flags.ArgsMode, - Envs: flags.Envs, - Variables: vars, - PreRunScript: preRunScriptBody, - PostRunScript: postRunScriptBody, + Command: flags.Command, + Args: flags.ExecutorArgs, + ArgsMode: flags.ArgsMode, + Envs: flags.Envs, + Variables: vars, + PreRunScript: preRunScriptBody, + PostRunScript: postRunScriptBody, + ContainerEntrypoint: containerEntrypointBody, } detectedTests[testName] = test return nil diff --git a/cmd/kubectl-testkube/commands/tests/common.go b/cmd/kubectl-testkube/commands/tests/common.go index 0e79c1dd640..818a5b435b7 100644 --- a/cmd/kubectl-testkube/commands/tests/common.go +++ b/cmd/kubectl-testkube/commands/tests/common.go @@ -424,6 +424,17 @@ func newExecutionRequestFromFlags(cmd *cobra.Command) (request *testkube.Executi postRunScriptContent = string(b) } + containerEntrypoiintContent := "" + containerEntrypoint := cmd.Flag("container-entrypoint").Value.String() + if containerEntrypoint != "" { + b, err := os.ReadFile(containerEntrypoint) + if err != nil { + return nil, err + } + + containerEntrypoiintContent = string(b) + } + scraperTemplateContent := "" scraperTemplate := cmd.Flag("scraper-template").Value.String() if scraperTemplate != "" { @@ -457,6 +468,7 @@ func newExecutionRequestFromFlags(cmd *cobra.Command) (request *testkube.Executi CronJobTemplate: cronJobTemplateContent, PreRunScript: preRunScriptContent, PostRunScript: postRunScriptContent, + ContainerEntrypoint: containerEntrypoiintContent, ScraperTemplate: scraperTemplateContent, NegativeTest: negativeTest, EnvConfigMaps: envConfigMaps, @@ -968,6 +980,22 @@ func newExecutionUpdateRequestFromFlags(cmd *cobra.Command) (request *testkube.E nonEmpty = true } + if cmd.Flag("container-entrypoint").Changed { + containerEntrypoiintContent := "" + containerEntrypoint := cmd.Flag("container-entrypoint").Value.String() + if containerEntrypoint != "" { + b, err := os.ReadFile(containerEntrypoint) + if err != nil { + return nil, err + } + + containerEntrypoiintContent = string(b) + } + + request.ContainerEntrypoint = &containerEntrypoiintContent + nonEmpty = true + } + if cmd.Flag("scraper-template").Changed { scraperTemplateContent := "" scraperTemplate := cmd.Flag("scraper-template").Value.String() diff --git a/cmd/kubectl-testkube/commands/tests/create.go b/cmd/kubectl-testkube/commands/tests/create.go index 513c85dd64d..3c664386bf1 100644 --- a/cmd/kubectl-testkube/commands/tests/create.go +++ b/cmd/kubectl-testkube/commands/tests/create.go @@ -42,6 +42,7 @@ type CreateCommonFlags struct { CronJobTemplate string PreRunScript string PostRunScript string + ContainerEntrypoint string ScraperTemplate string NegativeTest bool MountConfigMaps map[string]string @@ -210,6 +211,7 @@ func AddCreateFlags(cmd *cobra.Command, flags *CreateCommonFlags) { cmd.Flags().StringVar(&flags.CronJobTemplate, "cronjob-template", "", "cron job template file path for extensions to cron job template") cmd.Flags().StringVarP(&flags.PreRunScript, "prerun-script", "", "", "path to script to be run before test execution") cmd.Flags().StringVarP(&flags.PostRunScript, "postrun-script", "", "", "path to script to be run after test execution") + cmd.Flags().StringVarP(&flags.ContainerEntrypoint, "container-entrypoint", "", "", "path to container entrypoint script to be run instead of default one") cmd.Flags().StringVar(&flags.ScraperTemplate, "scraper-template", "", "scraper template file path for extensions to scraper template") cmd.Flags().BoolVar(&flags.NegativeTest, "negative-test", false, "negative test, if enabled, makes failure an expected and correct test result. If the test fails the result will be set to success, and vice versa") cmd.Flags().StringToStringVarP(&flags.MountConfigMaps, "mount-configmap", "", map[string]string{}, "config map value pair for mounting it to executor pod: --mount-configmap configmap_name=configmap_mountpath") diff --git a/cmd/kubectl-testkube/commands/tests/renderer/test_obj.go b/cmd/kubectl-testkube/commands/tests/renderer/test_obj.go index 8dffc0c4cc3..e6e917f9788 100644 --- a/cmd/kubectl-testkube/commands/tests/renderer/test_obj.go +++ b/cmd/kubectl-testkube/commands/tests/renderer/test_obj.go @@ -142,6 +142,10 @@ func TestRenderer(ui *ui.UI, obj interface{}) error { ui.Warn(" Post run script: ", "\n", test.ExecutionRequest.PostRunScript) } + if test.ExecutionRequest.ContainerEntrypoint != "" { + ui.Warn(" Container entrypoint: ", "\n", test.ExecutionRequest.ContainerEntrypoint) + } + if test.ExecutionRequest.ScraperTemplate != "" { ui.Warn(" Scraper template: ", "\n", test.ExecutionRequest.ScraperTemplate) } diff --git a/cmd/kubectl-testkube/commands/tests/run.go b/cmd/kubectl-testkube/commands/tests/run.go index 2d6323b364b..9ef52ed9f05 100644 --- a/cmd/kubectl-testkube/commands/tests/run.go +++ b/cmd/kubectl-testkube/commands/tests/run.go @@ -48,6 +48,7 @@ func NewRunTestCmd() *cobra.Command { gitWorkingDir string preRunScript string postRunScript string + containerEntrypoint string scraperTemplate string negativeTest bool mountConfigMaps map[string]string @@ -101,6 +102,13 @@ func NewRunTestCmd() *cobra.Command { postRunScriptContent = string(b) } + containerEntrypointContent := "" + if containerEntrypoint != "" { + b, err := os.ReadFile(containerEntrypoint) + ui.ExitOnError("reading container entrypoint", err) + containerEntrypointContent = string(b) + } + scraperTemplateContent := "" if scraperTemplate != "" { b, err := os.ReadFile(scraperTemplate) @@ -131,6 +139,7 @@ func NewRunTestCmd() *cobra.Command { JobTemplate: jobTemplateContent, PreRunScriptContent: preRunScriptContent, PostRunScriptContent: postRunScriptContent, + ContainerEntrypointContent: containerEntrypointContent, ScraperTemplate: scraperTemplateContent, IsNegativeTestChangedOnRun: false, EnvConfigMaps: envConfigMaps, @@ -286,6 +295,7 @@ func NewRunTestCmd() *cobra.Command { cmd.Flags().StringVarP(&gitWorkingDir, "git-working-dir", "", "", "if repository contains multiple directories with tests (like monorepo) and one starting directory we can set working directory parameter") cmd.Flags().StringVarP(&preRunScript, "prerun-script", "", "", "path to script to be run before test execution") cmd.Flags().StringVarP(&postRunScript, "postrun-script", "", "", "path to script to be run after test execution") + cmd.Flags().StringVarP(&containerEntrypoint, "container-entrypoint", "", "", "path to container entrypoint script to be run instead of default one") cmd.Flags().StringVar(&scraperTemplate, "scraper-template", "", "scraper template file path for extensions to scraper template") cmd.Flags().BoolVar(&negativeTest, "negative-test", false, "negative test, if enabled, makes failure an expected and correct test result. If the test fails the result will be set to success, and vice versa") cmd.Flags().StringToStringVarP(&mountConfigMaps, "mount-configmap", "", map[string]string{}, "config map value pair for mounting it to executor pod: --mount-configmap configmap_name=configmap_mountpath") diff --git a/cmd/kubectl-testkube/commands/tests/update.go b/cmd/kubectl-testkube/commands/tests/update.go index f9628d1207c..c6032ab7b45 100644 --- a/cmd/kubectl-testkube/commands/tests/update.go +++ b/cmd/kubectl-testkube/commands/tests/update.go @@ -51,6 +51,7 @@ func NewUpdateTestsCmd() *cobra.Command { cronJobTemplate string preRunScript string postRunScript string + containerEntrypoint string scraperTemplate string negativeTest bool mountConfigMaps map[string]string @@ -132,6 +133,7 @@ func NewUpdateTestsCmd() *cobra.Command { cmd.Flags().StringVar(&cronJobTemplate, "cronjob-template", "", "cron job template file path for extensions to cron job template") cmd.Flags().StringVarP(&preRunScript, "prerun-script", "", "", "path to script to be run before test execution") cmd.Flags().StringVarP(&postRunScript, "postrun-script", "", "", "path to script to be run after test execution") + cmd.Flags().StringVarP(&containerEntrypoint, "container-entrypoint", "", "", "path to container entrypoint script to be run instead of default one") cmd.Flags().StringVar(&scraperTemplate, "scraper-template", "", "scraper template file path for extensions to scraper template") cmd.Flags().BoolVar(&negativeTest, "negative-test", false, "negative test, if enabled, makes failure an expected and correct test result. If the test fails the result will be set to success, and vice versa") cmd.Flags().StringToStringVarP(&mountConfigMaps, "mount-configmap", "", map[string]string{}, "config map value pair for mounting it to executor pod: --mount-configmap configmap_name=configmap_mountpath") diff --git a/contrib/executor/init/build/agent/Dockerfile b/contrib/executor/init/build/agent/Dockerfile index 4db029c7ffd..5686ed2ca8f 100644 --- a/contrib/executor/init/build/agent/Dockerfile +++ b/contrib/executor/init/build/agent/Dockerfile @@ -2,7 +2,7 @@ FROM ubuntu COPY init /bin/runner RUN apt-get update -RUN apt-get install ca-certificates git -y +RUN apt-get install ca-certificates git skopeo -y WORKDIR /root/ RUN git config --global user.name "testkube" RUN chmod a=rw /root/.gitconfig diff --git a/contrib/executor/init/pkg/runner/runner.go b/contrib/executor/init/pkg/runner/runner.go index 64ad407cf77..adbf538f68d 100755 --- a/contrib/executor/init/pkg/runner/runner.go +++ b/contrib/executor/init/pkg/runner/runner.go @@ -66,6 +66,25 @@ func (r *InitRunner) Run(ctx context.Context, execution testkube.Execution) (res return result, errors.Errorf("could not fetch test content: %v", err) } + if execution.PreRunScript != "" || execution.PostRunScript != "" || execution.ContainerEntrypoint != "" { + output.PrintLogf("%s Creating entrypoint script...", ui.IconWorld) + file := filepath.Join(r.dir, "entrypoint.sh") + scripts := []string{execution.PreRunScript, execution.ContainerEntrypoint, execution.PostRunScript} + var data string + for _, script := range scripts { + data += script + if script != "" { + data += "\n" + } + } + + if err = os.WriteFile(file, []byte(data), 0755); err != nil { + output.PrintLogf("%s Could not create entrypoint script %s: %s", ui.IconCross, file, err.Error()) + return result, errors.Errorf("could not create entrypoint script %s: %v", file, err) + } + output.PrintLogf("%s Entrypoint script created", ui.IconCheckMark) + } + // TODO: write a proper cloud implementation // add copy files in case object storage is set if r.Params.Endpoint != "" && !r.Params.CloudMode { diff --git a/docs/docs/cli/testkube_create_test.md b/docs/docs/cli/testkube_create_test.md index 87687442b07..72029b693bf 100644 --- a/docs/docs/cli/testkube_create_test.md +++ b/docs/docs/cli/testkube_create_test.md @@ -18,6 +18,7 @@ testkube create test [flags] --artifact-storage-class-name string artifact storage class name for container executor --artifact-volume-mount-path string artifact volume mount path for container executor --command stringArray command passed to image in executor + --container-entrypoint string path to container entrypoint script to be run instead of default one --copy-files stringArray file path mappings from host to pod of form source:destination --cronjob-template string cron job template file path for extensions to cron job template --env stringToString envs in a form of name1=val1 passed to executor (default []) diff --git a/docs/docs/cli/testkube_generate_tests-crds.md b/docs/docs/cli/testkube_generate_tests-crds.md index 31ec11fb7a6..304c93eb067 100644 --- a/docs/docs/cli/testkube_generate_tests-crds.md +++ b/docs/docs/cli/testkube_generate_tests-crds.md @@ -18,6 +18,7 @@ testkube generate tests-crds [flags] --artifact-storage-class-name string artifact storage class name for container executor --artifact-volume-mount-path string artifact volume mount path for container executor --command stringArray command passed to image in executor + --container-entrypoint string path to container entrypoint script to be run instead of default one --copy-files stringArray file path mappings from host to pod of form source:destination --cronjob-template string cron job template file path for extensions to cron job template --env stringToString envs in a form of name1=val1 passed to executor (default []) diff --git a/docs/docs/cli/testkube_run_test.md b/docs/docs/cli/testkube_run_test.md index a18c814fe32..af337d4f2d3 100644 --- a/docs/docs/cli/testkube_run_test.md +++ b/docs/docs/cli/testkube_run_test.md @@ -20,6 +20,7 @@ testkube run test [flags] --artifact-volume-mount-path string artifact volume mount path for container executor --command stringArray command passed to image in executor --concurrency int concurrency level for multiple test execution (default 10) + --container-entrypoint string path to container entrypoint script to be run instead of default one --context string running context description for test execution --copy-files stringArray file path mappings from host to pod of form source:destination -d, --download-artifacts downlaod artifacts automatically diff --git a/docs/docs/cli/testkube_update_test.md b/docs/docs/cli/testkube_update_test.md index fd51cb86d55..472964281b8 100644 --- a/docs/docs/cli/testkube_update_test.md +++ b/docs/docs/cli/testkube_update_test.md @@ -18,6 +18,7 @@ testkube update test [flags] --artifact-storage-class-name string artifact storage class name for container executor --artifact-volume-mount-path string artifact volume mount path for container executor --command stringArray command passed to image in executor + --container-entrypoint string path to container entrypoint script to be run instead of default one --copy-files stringArray file path mappings from host to pod of form source:destination --cronjob-template string cron job template file path for extensions to cron job template --execution-name string execution name, if empty will be autogenerated diff --git a/go.mod b/go.mod index 2c5e16cf0a8..a69b2648afc 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/gorilla/websocket v1.5.0 github.com/joshdk/go-junit v1.0.0 github.com/kelseyhightower/envconfig v1.4.0 - github.com/kubeshop/testkube-operator v1.10.8-0.20230706105320-8815bd839764 + github.com/kubeshop/testkube-operator v1.10.8-0.20230710121945-7485c5e73eca github.com/minio/minio-go/v7 v7.0.47 github.com/montanaflynn/stats v0.6.6 github.com/moogar0880/problems v0.1.1 diff --git a/go.sum b/go.sum index 891c1e95713..012ae406513 100644 --- a/go.sum +++ b/go.sum @@ -387,8 +387,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kubeshop/testkube-operator v1.10.8-0.20230706105320-8815bd839764 h1:r6JErrRK9Tpzi/JlwAKMeaBlJIkFyZVYtDbd2UA0QP4= -github.com/kubeshop/testkube-operator v1.10.8-0.20230706105320-8815bd839764/go.mod h1:6Rs8MugOzaMcthGzobf6GBlRzbOFiK/GJiuYN6MCfEw= +github.com/kubeshop/testkube-operator v1.10.8-0.20230710121945-7485c5e73eca h1:UggeVVvPvv0nt1mdbUMLcvI1kMAJJ5IYAAJnJLn9B3o= +github.com/kubeshop/testkube-operator v1.10.8-0.20230710121945-7485c5e73eca/go.mod h1:6Rs8MugOzaMcthGzobf6GBlRzbOFiK/GJiuYN6MCfEw= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4= diff --git a/pkg/api/v1/client/interface.go b/pkg/api/v1/client/interface.go index 9a318af2a65..d613a2f234d 100644 --- a/pkg/api/v1/client/interface.go +++ b/pkg/api/v1/client/interface.go @@ -172,6 +172,7 @@ type ExecuteTestOptions struct { ContentRequest *testkube.TestContentRequest PreRunScriptContent string PostRunScriptContent string + ContainerEntrypointContent string ScraperTemplate string NegativeTest bool IsNegativeTestChangedOnRun bool diff --git a/pkg/api/v1/client/test.go b/pkg/api/v1/client/test.go index 717c0207810..1e2f62a7fa9 100644 --- a/pkg/api/v1/client/test.go +++ b/pkg/api/v1/client/test.go @@ -151,6 +151,7 @@ func (c TestClient) ExecuteTest(id, executionName string, options ExecuteTestOpt ContentRequest: options.ContentRequest, PreRunScript: options.PreRunScriptContent, PostRunScript: options.PostRunScriptContent, + ContainerEntrypoint: options.ContainerEntrypointContent, ScraperTemplate: options.ScraperTemplate, NegativeTest: options.NegativeTest, IsNegativeTestChangedOnRun: options.IsNegativeTestChangedOnRun, @@ -189,6 +190,7 @@ func (c TestClient) ExecuteTests(selector string, concurrencyLevel int, options ContentRequest: options.ContentRequest, PreRunScript: options.PreRunScriptContent, PostRunScript: options.PostRunScriptContent, + ContainerEntrypoint: options.ContainerEntrypointContent, ScraperTemplate: options.ScraperTemplate, NegativeTest: options.NegativeTest, IsNegativeTestChangedOnRun: options.IsNegativeTestChangedOnRun, diff --git a/pkg/api/v1/testkube/model_execution.go b/pkg/api/v1/testkube/model_execution.go index 0297f3f0efc..9d9b59a44b3 100644 --- a/pkg/api/v1/testkube/model_execution.go +++ b/pkg/api/v1/testkube/model_execution.go @@ -67,6 +67,8 @@ type Execution struct { // script to run before test execution (not supported for container executors) PreRunScript string `json:"preRunScript,omitempty"` // script to run after test execution (not supported for container executors) - PostRunScript string `json:"postRunScript,omitempty"` - RunningContext *RunningContext `json:"runningContext,omitempty"` + PostRunScript string `json:"postRunScript,omitempty"` + // script to run as an entry point for container executors + ContainerEntrypoint string `json:"containerEntrypoint,omitempty"` + RunningContext *RunningContext `json:"runningContext,omitempty"` } diff --git a/pkg/api/v1/testkube/model_execution_request.go b/pkg/api/v1/testkube/model_execution_request.go index 23c5e1f223c..118fc6a15bd 100644 --- a/pkg/api/v1/testkube/model_execution_request.go +++ b/pkg/api/v1/testkube/model_execution_request.go @@ -74,6 +74,8 @@ type ExecutionRequest struct { PreRunScript string `json:"preRunScript,omitempty"` // script to run after test execution (not supported for container executors) PostRunScript string `json:"postRunScript,omitempty"` + // script to run as an entry point for container executors + ContainerEntrypoint string `json:"containerEntrypoint,omitempty"` // scraper template extensions ScraperTemplate string `json:"scraperTemplate,omitempty"` // config map references diff --git a/pkg/api/v1/testkube/model_execution_update_request.go b/pkg/api/v1/testkube/model_execution_update_request.go index 48089be07ce..4b9fe9c915e 100644 --- a/pkg/api/v1/testkube/model_execution_update_request.go +++ b/pkg/api/v1/testkube/model_execution_update_request.go @@ -74,6 +74,8 @@ type ExecutionUpdateRequest struct { PreRunScript *string `json:"preRunScript,omitempty"` // script to run after test execution (not supported for container executors) PostRunScript *string `json:"postRunScript,omitempty"` + // script to run as an entry point for container executors + ContainerEntrypoint *string `json:"containerEntrypoint,omitempty"` // scraper template extensions ScraperTemplate *string `json:"scraperTemplate,omitempty"` // config *map references diff --git a/pkg/api/v1/testkube/model_test_base_extended.go b/pkg/api/v1/testkube/model_test_base_extended.go index a895504a190..4a35b4ee6ec 100644 --- a/pkg/api/v1/testkube/model_test_base_extended.go +++ b/pkg/api/v1/testkube/model_test_base_extended.go @@ -79,6 +79,7 @@ func (test *Test) QuoteTestTextFields() { &test.ExecutionRequest.CronJobTemplate, &test.ExecutionRequest.PreRunScript, &test.ExecutionRequest.PostRunScript, + &test.ExecutionRequest.ContainerEntrypoint, &test.ExecutionRequest.ScraperTemplate, } diff --git a/pkg/api/v1/testkube/model_test_trigger_condition_spec.go b/pkg/api/v1/testkube/model_test_trigger_condition_spec.go index 3cba6901ec0..6ed61dcb9c5 100644 --- a/pkg/api/v1/testkube/model_test_trigger_condition_spec.go +++ b/pkg/api/v1/testkube/model_test_trigger_condition_spec.go @@ -14,6 +14,6 @@ type TestTriggerConditionSpec struct { Conditions []TestTriggerCondition `json:"conditions,omitempty"` // duration in seconds the test trigger waits for conditions, until its stopped Timeout int32 `json:"timeout,omitempty"` - // duration in seconds the test trigger waits between condition check + // duration in seconds the test trigger waits between condition checks Delay int32 `json:"delay,omitempty"` } diff --git a/pkg/api/v1/testkube/model_test_upsert_request_extended.go b/pkg/api/v1/testkube/model_test_upsert_request_extended.go index 742efad5fa4..a75cd4f340e 100644 --- a/pkg/api/v1/testkube/model_test_upsert_request_extended.go +++ b/pkg/api/v1/testkube/model_test_upsert_request_extended.go @@ -23,6 +23,7 @@ func (test *TestUpsertRequest) QuoteTestTextFields() { &test.ExecutionRequest.CronJobTemplate, &test.ExecutionRequest.PreRunScript, &test.ExecutionRequest.PostRunScript, + &test.ExecutionRequest.ContainerEntrypoint, &test.ExecutionRequest.ScraperTemplate, } diff --git a/pkg/crd/templates/test.tmpl b/pkg/crd/templates/test.tmpl index 225ebfb0178..edfa16ffe31 100644 --- a/pkg/crd/templates/test.tmpl +++ b/pkg/crd/templates/test.tmpl @@ -79,7 +79,7 @@ spec: schedule: {{ .Schedule }} {{- end }} {{- if .ExecutionRequest }} - {{- if or (.ExecutionRequest.Name) (.ExecutionRequest.NegativeTest) (.ExecutionRequest.VariablesFile) (.ExecutionRequest.HttpProxy) (.ExecutionRequest.HttpsProxy) (ne (len .ExecutionRequest.Variables) 0) (ne (len .ExecutionRequest.Args) 0) (ne (len .ExecutionRequest.Envs) 0) (ne (len .ExecutionRequest.SecretEnvs) 0) (.ExecutionRequest.Image) (ne (len .ExecutionRequest.Command) 0) (.ExecutionRequest.ArgsMode) (ne (len .ExecutionRequest.ImagePullSecrets) 0) (ne .ExecutionRequest.ActiveDeadlineSeconds 0) (.ExecutionRequest.ArtifactRequest) (.ExecutionRequest.JobTemplate) (.ExecutionRequest.CronJobTemplate) (.ExecutionRequest.PreRunScript) (.ExecutionRequest.PostRunScript) (.ExecutionRequest.ScraperTemplate) (ne (len .ExecutionRequest.EnvConfigMaps) 0) (ne (len .ExecutionRequest.EnvSecrets) 0) }} + {{- if or (.ExecutionRequest.Name) (.ExecutionRequest.NegativeTest) (.ExecutionRequest.VariablesFile) (.ExecutionRequest.HttpProxy) (.ExecutionRequest.HttpsProxy) (ne (len .ExecutionRequest.Variables) 0) (ne (len .ExecutionRequest.Args) 0) (ne (len .ExecutionRequest.Envs) 0) (ne (len .ExecutionRequest.SecretEnvs) 0) (.ExecutionRequest.Image) (ne (len .ExecutionRequest.Command) 0) (.ExecutionRequest.ArgsMode) (ne (len .ExecutionRequest.ImagePullSecrets) 0) (ne .ExecutionRequest.ActiveDeadlineSeconds 0) (.ExecutionRequest.ArtifactRequest) (.ExecutionRequest.JobTemplate) (.ExecutionRequest.CronJobTemplate) (.ExecutionRequest.PreRunScript) (.ExecutionRequest.PostRunScript) (.ExecutionRequest.ContainerEntrypoint) (.ExecutionRequest.ScraperTemplate) (ne (len .ExecutionRequest.EnvConfigMaps) 0) (ne (len .ExecutionRequest.EnvSecrets) 0) }} executionRequest: {{- if .ExecutionRequest.Name }} name: {{ .ExecutionRequest.Name }} @@ -198,6 +198,9 @@ spec: {{- if .ExecutionRequest.PostRunScript }} postRunScript: {{ .ExecutionRequest.PostRunScript }} {{- end }} + {{- if .ExecutionRequest.ContainerEntrypoint }} + containerEntrypoint: {{ .ExecutionRequest.ContainerEntrypoint }} + {{- end }} {{- if .ExecutionRequest.ScraperTemplate }} scraperTemplate: {{ .ExecutionRequest.ScraperTemplate }} {{- end }} diff --git a/pkg/mapper/tests/kube_openapi.go b/pkg/mapper/tests/kube_openapi.go index edcead54a6c..e7a18b44808 100644 --- a/pkg/mapper/tests/kube_openapi.go +++ b/pkg/mapper/tests/kube_openapi.go @@ -151,6 +151,7 @@ func MapExecutionRequestFromSpec(specExecutionRequest *testsv3.ExecutionRequest) CronJobTemplate: specExecutionRequest.CronJobTemplate, PreRunScript: specExecutionRequest.PreRunScript, PostRunScript: specExecutionRequest.PostRunScript, + ContainerEntrypoint: specExecutionRequest.ContainerEntrypoint, ScraperTemplate: specExecutionRequest.ScraperTemplate, NegativeTest: specExecutionRequest.NegativeTest, EnvConfigMaps: MapEnvReferences(specExecutionRequest.EnvConfigMaps), @@ -404,6 +405,10 @@ func MapSpecExecutionRequestToExecutionUpdateRequest( &request.PostRunScript, &executionRequest.PostRunScript, }, + { + &request.ContainerEntrypoint, + &executionRequest.ContainerEntrypoint, + }, { &request.CronJobTemplate, &executionRequest.CronJobTemplate, diff --git a/pkg/mapper/tests/openapi_kube.go b/pkg/mapper/tests/openapi_kube.go index e09c5539fe3..85ff058131a 100644 --- a/pkg/mapper/tests/openapi_kube.go +++ b/pkg/mapper/tests/openapi_kube.go @@ -163,6 +163,7 @@ func MapExecutionRequestToSpecExecutionRequest(executionRequest *testkube.Execut CronJobTemplate: executionRequest.CronJobTemplate, PreRunScript: executionRequest.PreRunScript, PostRunScript: executionRequest.PostRunScript, + ContainerEntrypoint: executionRequest.ContainerEntrypoint, ScraperTemplate: executionRequest.ScraperTemplate, NegativeTest: executionRequest.NegativeTest, EnvConfigMaps: mapEnvReferences(executionRequest.EnvConfigMaps), @@ -465,6 +466,10 @@ func MapExecutionUpdateRequestToSpecExecutionRequest(executionRequest *testkube. executionRequest.PostRunScript, &request.PostRunScript, }, + { + executionRequest.ContainerEntrypoint, + &request.ContainerEntrypoint, + }, { executionRequest.CronJobTemplate, &request.CronJobTemplate, diff --git a/pkg/scheduler/test_scheduler.go b/pkg/scheduler/test_scheduler.go index 95b33532248..f806c4b70e0 100644 --- a/pkg/scheduler/test_scheduler.go +++ b/pkg/scheduler/test_scheduler.go @@ -228,6 +228,7 @@ func newExecutionFromExecutionOptions(options client.ExecuteOptions) testkube.Ex execution.ArtifactRequest = options.Request.ArtifactRequest execution.PreRunScript = options.Request.PreRunScript execution.PostRunScript = options.Request.PostRunScript + execution.ContainerEntrypoint = options.Request.ContainerEntrypoint execution.RunningContext = options.Request.RunningContext return execution @@ -297,6 +298,10 @@ func (s *Scheduler) getExecuteOptions(namespace, id string, request testkube.Exe test.ExecutionRequest.PostRunScript, &request.PostRunScript, }, + { + test.ExecutionRequest.ContainerEntrypoint, + &request.ContainerEntrypoint, + }, { test.ExecutionRequest.ScraperTemplate, &request.ScraperTemplate, diff --git a/pkg/scheduler/test_scheduler_test.go b/pkg/scheduler/test_scheduler_test.go index 03f235c3c07..c6f27c968b8 100644 --- a/pkg/scheduler/test_scheduler_test.go +++ b/pkg/scheduler/test_scheduler_test.go @@ -134,6 +134,7 @@ func TestGetExecuteOptions(t *testing.T) { CronJobTemplate: "", PreRunScript: "", PostRunScript: "", + ContainerEntrypoint: "", ScraperTemplate: "", EnvConfigMaps: []testkube.EnvReference{ {