From 75d62cb6381bfccddc9d43f1b3d0cbee7c9f6e7b Mon Sep 17 00:00:00 2001 From: Quan Zhang Date: Wed, 7 Jun 2023 15:32:55 -0400 Subject: [PATCH] TEP-0135: Introduce coscheduling feature flags Part of [#6740][#6740]. [TEP-0135][tep-0135] introduces a feature that allows a cluster operator to ensure that all of a PipelineRun's pods are scheduled to the same node. This commit introduces a new feature flag `coscheduling` which works together with the `disable-affinity-assistant` feature flag to determine the Affinity Assistant behavior. The usage of the new feature flag will be added in the follow-up PRs. The details of the `coscheduling` feature flag can be found in the [Configuration][configuration] section of TEP-0135. The details of the `disable-affinity-assistant` feature flag can be found in the [Upgrade and Migration Strategy][strategy] section of TEP-0135. NOTE: this feature is WIP, please do not use on this feature. /kind feature [#6740]: https://github.com/tektoncd/pipeline/issues/6740 [tep-0135]: https://github.com/tektoncd/community/blob/main/teps/0135-coscheduling-pipelinerun-pods.md [configuration]: https://github.com/tektoncd/community/blob/main/teps/0135-coscheduling-pipelinerun-pods.md#configuration [strategy]: https://github.com/tektoncd/community/blob/main/teps/0135-coscheduling-pipelinerun-pods.md#configuration --- config/config-feature-flags.yaml | 12 +++ pkg/apis/config/feature_flags.go | 38 ++++++++++ pkg/apis/config/feature_flags_test.go | 14 ++++ .../testdata/feature-flags-all-flags-set.yaml | 1 + ...-coscheduling-affinity-assistant-comb.yaml | 22 ++++++ .../feature-flags-invalid-coscheduling.yaml | 21 +++++ pkg/apis/config/testing/featureflags.go | 40 ++++++++++ .../affinityassistant_types.go | 53 +++++++++++++ .../affinityassistant_types_test.go | 76 +++++++++++++++++++ .../pipelinerun/affinity_assistant.go | 2 + .../pipelinerun/pipelinerun_test.go | 17 +++++ pkg/reconciler/taskrun/taskrun_test.go | 3 + 12 files changed, 299 insertions(+) create mode 100644 pkg/apis/config/testdata/feature-flags-invalid-coscheduling-affinity-assistant-comb.yaml create mode 100644 pkg/apis/config/testdata/feature-flags-invalid-coscheduling.yaml create mode 100644 pkg/apis/config/testing/featureflags.go create mode 100644 pkg/internal/affinityassistant/affinityassistant_types.go create mode 100644 pkg/internal/affinityassistant/affinityassistant_types_test.go diff --git a/config/config-feature-flags.yaml b/config/config-feature-flags.yaml index 62d9b8d28d1..24d8756f594 100644 --- a/config/config-feature-flags.yaml +++ b/config/config-feature-flags.yaml @@ -30,6 +30,18 @@ data: # https://github.com/tektoncd/pipeline/blob/main/docs/workspaces.md#affinity-assistant-and-specifying-workspace-order-in-a-pipeline # or https://github.com/tektoncd/pipeline/pull/2630 for more info. disable-affinity-assistant: "false" + # Setting this flag will determine how PipelineRun Pods are scheduled with Affinity Assistant. + # Acceptable values are "coschedule-workspaces" (default), "coschedule-pipelineruns", "isolate-pipelineruns", or "disabled" . + # + # Setting it to "coschedule-workspaces" will schedule all the taskruns sharing the same PVC-based workspace in a pipelinerun to the same node. + # Setting it to "coschedule-pipelineruns" will schedule all the taskruns in a pipelinerun to the same node. + # Setting it to "isolate-pipelineruns" will schedule all the taskruns in a pipelinerun to the same node, + # and only allows one pipelinerun to run on a node at a time. + # Setting it to "disabled" will not apply any coscheduling policy. + # + # TODO: add links to documentation and migration strategy + # NOTE: this feature is still under development and not yet functional. + coscheduling: "coschedule-workspaces" # Setting this flag to "true" will prevent Tekton scanning attached # service accounts and injecting any credentials it finds into your # Steps. diff --git a/pkg/apis/config/feature_flags.go b/pkg/apis/config/feature_flags.go index 06892784da9..104885e36f3 100644 --- a/pkg/apis/config/feature_flags.go +++ b/pkg/apis/config/feature_flags.go @@ -42,6 +42,14 @@ const ( // IgnoreNoMatchPolicy is the value used for "trusted-resources-verification-no-match-policy" to skip verification // when no matching policies are found IgnoreNoMatchPolicy = "ignore" + // CosheduleWorkspaces is the value used for "coscheduling" to coschedule PipelineRun Pods sharing the same PVC workspaces to the same node + CoscheduleWorkspaces = "coschedule-workspaces" + // CoshedulePipelineRuns is the value used for "coscheduling" to coschedule all PipelineRun Pods to the same node + CoschedulePipelineRuns = "coschedule-pipelineruns" + // CoscheduleIsolatePipelineRuns is the value used for "coscheduling" to coschedule all PipelineRun Pods to the same node, and only allows one PipelineRun to run on a node at a time + CoscheduleIsolatePipelineRuns = "isolate-pipelineruns" + // CoscheduleDisabled is the value used for "coscheduling" to disabled PipelineRun Pods coscheduling + CoscheduleDisabled = "disabled" // ResultExtractionMethodTerminationMessage is the value used for "results-from" as a way to extract results from tasks using kubernetes termination message. ResultExtractionMethodTerminationMessage = "termination-message" // ResultExtractionMethodSidecarLogs is the value used for "results-from" as a way to extract results from tasks using sidecar logs. @@ -78,6 +86,8 @@ const ( DefaultMaxResultSize = 4096 // DefaultSetSecurityContext is the default value for "set-security-context" DefaultSetSecurityContext = false + // DefaultCoscheduling is the default value for coscheduling + DefaultCoscheduling = CoscheduleWorkspaces disableAffinityAssistantKey = "disable-affinity-assistant" disableCredsInitKey = "disable-creds-init" @@ -93,6 +103,7 @@ const ( resultExtractionMethod = "results-from" maxResultSize = "max-result-size" setSecurityContextKey = "set-security-context" + coschedulingKey = "coscheduling" ) // DefaultFeatureFlags holds all the default configurations for the feature flags configmap. @@ -123,6 +134,7 @@ type FeatureFlags struct { ResultExtractionMethod string MaxResultSize int SetSecurityContext bool + Coscheduling string } // GetFeatureFlagsConfigName returns the name of the configmap containing all @@ -190,6 +202,9 @@ func NewFeatureFlagsFromMap(cfgMap map[string]string) (*FeatureFlags, error) { return nil, err } + if err := setCoscheduling(cfgMap, DefaultCoscheduling, tc.DisableAffinityAssistant, &tc.Coscheduling); err != nil { + return nil, err + } // Given that they are alpha features, Tekton Bundles and Custom Tasks should be switched on if // enable-api-fields is "alpha". If enable-api-fields is not "alpha" then fall back to the value of // each feature's individual flag. @@ -222,6 +237,29 @@ func setEnabledAPIFields(cfgMap map[string]string, defaultValue string, feature return nil } +// setCoscheduling sets the "coscheduling" flag based on the content of a given map. +// If the feature gate is invalid or incompatible with `disable-affinity-assistant`, then an error is returned. +func setCoscheduling(cfgMap map[string]string, defaultValue string, disabledAffinityAssistant bool, feature *string) error { + value := defaultValue + if cfg, ok := cfgMap[coschedulingKey]; ok { + value = strings.ToLower(cfg) + } + + switch value { + case CoscheduleDisabled, CoscheduleWorkspaces, CoschedulePipelineRuns, CoscheduleIsolatePipelineRuns: + // validate that "coscheduling" is compatible with "disable-affinity-assistant" + // "coscheduling" must be set to "coschedule-workspaces" when "disable-affinity-assistant" is false + if !disabledAffinityAssistant && value != CoscheduleWorkspaces { + return fmt.Errorf("coscheduling value %v is incompatible with %v setting to false", value, disableAffinityAssistantKey) + } + *feature = value + default: + return fmt.Errorf("invalid value for feature flag %q: %q", coschedulingKey, value) + } + + return nil +} + // setEnforceNonFalsifiability sets the "enforce-nonfalsifiability" flag based on the content of a given map. // If the feature gate is invalid, then an error is returned. func setEnforceNonFalsifiability(cfgMap map[string]string, enableAPIFields string, feature *string) error { diff --git a/pkg/apis/config/feature_flags_test.go b/pkg/apis/config/feature_flags_test.go index 84081bf056d..918986bd729 100644 --- a/pkg/apis/config/feature_flags_test.go +++ b/pkg/apis/config/feature_flags_test.go @@ -52,6 +52,7 @@ func TestNewFeatureFlagsFromConfigMap(t *testing.T) { ResultExtractionMethod: config.DefaultResultExtractionMethod, MaxResultSize: config.DefaultMaxResultSize, SetSecurityContext: config.DefaultSetSecurityContext, + Coscheduling: config.DefaultCoscheduling, }, fileName: config.GetFeatureFlagsConfigName(), }, @@ -70,6 +71,7 @@ func TestNewFeatureFlagsFromConfigMap(t *testing.T) { ResultExtractionMethod: "termination-message", MaxResultSize: 4096, SetSecurityContext: true, + Coscheduling: config.CoscheduleDisabled, }, fileName: "feature-flags-all-flags-set", }, @@ -91,6 +93,7 @@ func TestNewFeatureFlagsFromConfigMap(t *testing.T) { ResultExtractionMethod: config.DefaultResultExtractionMethod, MaxResultSize: config.DefaultMaxResultSize, SetSecurityContext: config.DefaultSetSecurityContext, + Coscheduling: config.DefaultCoscheduling, }, fileName: "feature-flags-enable-api-fields-overrides-bundles-and-custom-tasks", }, @@ -110,6 +113,7 @@ func TestNewFeatureFlagsFromConfigMap(t *testing.T) { ResultExtractionMethod: config.DefaultResultExtractionMethod, MaxResultSize: config.DefaultMaxResultSize, SetSecurityContext: config.DefaultSetSecurityContext, + Coscheduling: config.DefaultCoscheduling, }, fileName: "feature-flags-bundles-and-custom-tasks", }, @@ -129,6 +133,7 @@ func TestNewFeatureFlagsFromConfigMap(t *testing.T) { ResultExtractionMethod: config.DefaultResultExtractionMethod, MaxResultSize: config.DefaultMaxResultSize, SetSecurityContext: config.DefaultSetSecurityContext, + Coscheduling: config.DefaultCoscheduling, }, fileName: "feature-flags-beta-api-fields", }, @@ -144,6 +149,7 @@ func TestNewFeatureFlagsFromConfigMap(t *testing.T) { ResultExtractionMethod: config.DefaultResultExtractionMethod, MaxResultSize: config.DefaultMaxResultSize, SetSecurityContext: config.DefaultSetSecurityContext, + Coscheduling: config.DefaultCoscheduling, }, fileName: "feature-flags-enforce-nonfalsifiability-spire", }, @@ -157,6 +163,7 @@ func TestNewFeatureFlagsFromConfigMap(t *testing.T) { ResultExtractionMethod: config.ResultExtractionMethodSidecarLogs, MaxResultSize: 8192, SetSecurityContext: config.DefaultSetSecurityContext, + Coscheduling: config.DefaultCoscheduling, }, fileName: "feature-flags-results-via-sidecar-logs", }, @@ -188,6 +195,7 @@ func TestNewFeatureFlagsFromEmptyConfigMap(t *testing.T) { ResultExtractionMethod: config.DefaultResultExtractionMethod, MaxResultSize: config.DefaultMaxResultSize, SetSecurityContext: config.DefaultSetSecurityContext, + Coscheduling: config.DefaultCoscheduling, } verifyConfigFileWithExpectedFeatureFlagsConfig(t, FeatureFlagsConfigEmptyName, expectedConfig) } @@ -247,6 +255,12 @@ func TestNewFeatureFlagsConfigMapErrors(t *testing.T) { }, { fileName: "feature-flags-spire-with-stable", want: `"enforce-nonfalsifiability" can be set to non-default values ("spire") only in alpha`, + }, { + fileName: "feature-flags-invalid-coscheduling-affinity-assistant-comb", + want: `coscheduling value coschedule-pipelineruns is incompatible with disable-affinity-assistant setting to false`, + }, { + fileName: "feature-flags-invalid-coscheduling", + want: `invalid value for feature flag "coscheduling": "invalid"`, }} { t.Run(tc.fileName, func(t *testing.T) { cm := test.ConfigMapFromTestFile(t, tc.fileName) diff --git a/pkg/apis/config/testdata/feature-flags-all-flags-set.yaml b/pkg/apis/config/testdata/feature-flags-all-flags-set.yaml index f3395baf4f7..3951283c527 100644 --- a/pkg/apis/config/testdata/feature-flags-all-flags-set.yaml +++ b/pkg/apis/config/testdata/feature-flags-all-flags-set.yaml @@ -19,6 +19,7 @@ metadata: namespace: tekton-pipelines data: disable-affinity-assistant: "true" + coscheduling: "disabled" running-in-environment-with-injected-sidecars: "false" await-sidecar-readiness: "false" require-git-ssh-secret-known-hosts: "true" diff --git a/pkg/apis/config/testdata/feature-flags-invalid-coscheduling-affinity-assistant-comb.yaml b/pkg/apis/config/testdata/feature-flags-invalid-coscheduling-affinity-assistant-comb.yaml new file mode 100644 index 00000000000..03defa25686 --- /dev/null +++ b/pkg/apis/config/testdata/feature-flags-invalid-coscheduling-affinity-assistant-comb.yaml @@ -0,0 +1,22 @@ +# Copyright 2023 The Tekton Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: feature-flags + namespace: tekton-pipelines +data: + coscheduling: "coschedule-pipelineruns" + disable-affinity-assistant: "false" diff --git a/pkg/apis/config/testdata/feature-flags-invalid-coscheduling.yaml b/pkg/apis/config/testdata/feature-flags-invalid-coscheduling.yaml new file mode 100644 index 00000000000..102078bd771 --- /dev/null +++ b/pkg/apis/config/testdata/feature-flags-invalid-coscheduling.yaml @@ -0,0 +1,21 @@ +# Copyright 2023 The Tekton Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: feature-flags + namespace: tekton-pipelines +data: + coscheduling: "invalid" diff --git a/pkg/apis/config/testing/featureflags.go b/pkg/apis/config/testing/featureflags.go new file mode 100644 index 00000000000..9a1885b1fc4 --- /dev/null +++ b/pkg/apis/config/testing/featureflags.go @@ -0,0 +1,40 @@ +/* +Copyright 2023 The Tekton Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package testing + +import ( + "context" + "testing" + + "github.com/tektoncd/pipeline/pkg/apis/config" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "knative.dev/pkg/logging" +) + +// SetFeatureFlags sets the feature-flags ConfigMap values in an existing context (for use in testing) +func SetFeatureFlags(ctx context.Context, t *testing.T, data map[string]string) context.Context { + t.Helper() + s := config.NewStore(logging.FromContext(ctx).Named("config-store")) + s.OnConfigChanged(&corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: config.GetFeatureFlagsConfigName(), + }, + Data: data, + }) + return s.ToContext(ctx) +} diff --git a/pkg/internal/affinityassistant/affinityassistant_types.go b/pkg/internal/affinityassistant/affinityassistant_types.go new file mode 100644 index 00000000000..5163eec9dc2 --- /dev/null +++ b/pkg/internal/affinityassistant/affinityassistant_types.go @@ -0,0 +1,53 @@ +/* +Copyright 2023 The Tekton Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package affinityassistant + +import ( + "context" + + "github.com/tektoncd/pipeline/pkg/apis/config" +) + +type AffinityAssitantBehavior string + +const ( + AffinityAssistantDisabled = AffinityAssitantBehavior("AffinityAssistantDisabled") + AffinityAssistantPerWorkspace = AffinityAssitantBehavior("AffinityAssistantPerWorkspace") + AffinityAssistantPerPipelineRun = AffinityAssitantBehavior("AffinityAssistantPerPipelineRun") + AffinityAssistantPerPipelineRunWithIsolation = AffinityAssitantBehavior("AffinityAssistantPerPipelineRunWithIsolation") +) + +// GetAffinityAssistantBehavior returns an AffinityAssitantBehavior based on the +// combination of "disable-affinity-assistant" and "coscheduling" feature flags +// TODO(#6740)(WIP): consume this function in the PipelineRun reconciler to determine Affinity Assistant behavior. +func GetAffinityAssistantBehavior(ctx context.Context) AffinityAssitantBehavior { + cfg := config.FromContextOrDefaults(ctx) + + // at this point, we have validated that "coscheduling" can only be "coschedule-workspaces" + // when "disable-affinity-assistant" is false + if !cfg.FeatureFlags.DisableAffinityAssistant { + return AffinityAssistantPerWorkspace + } + + switch cfg.FeatureFlags.Coscheduling { + case config.CoschedulePipelineRuns: + return AffinityAssistantPerPipelineRun + case config.CoscheduleIsolatePipelineRuns: + return AffinityAssistantPerPipelineRunWithIsolation + case config.CoscheduleDisabled, config.CoscheduleWorkspaces: + return AffinityAssistantDisabled + } + + return "" +} diff --git a/pkg/internal/affinityassistant/affinityassistant_types_test.go b/pkg/internal/affinityassistant/affinityassistant_types_test.go new file mode 100644 index 00000000000..311b3c9c6f3 --- /dev/null +++ b/pkg/internal/affinityassistant/affinityassistant_types_test.go @@ -0,0 +1,76 @@ +/* +Copyright 2023 The Tekton Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package affinityassistant + +import ( + "context" + "testing" + + "github.com/google/go-cmp/cmp" + cfgtesting "github.com/tektoncd/pipeline/pkg/apis/config/testing" + "github.com/tektoncd/pipeline/test/diff" + + "github.com/tektoncd/pipeline/pkg/apis/config" +) + +func Test_GetAffinityAssistantBehavior(t *testing.T) { + tcs := []struct { + name string + configMap map[string]string + expect AffinityAssitantBehavior + }{{ + name: "affinity-assistant-enabled", + configMap: map[string]string{ + "disable-affinity-assistant": "false", + }, + expect: AffinityAssistantPerWorkspace, + }, { + name: "affinity-assistant-disabled-coscheduling-workspaces", + configMap: map[string]string{ + "disable-affinity-assistant": "true", + "coscheduling": config.CoscheduleWorkspaces, + }, + expect: AffinityAssistantDisabled, + }, { + name: "affinity-assistant-disabled-coscheduling-pipelineruns", + configMap: map[string]string{ + "disable-affinity-assistant": "true", + "coscheduling": config.CoschedulePipelineRuns, + }, + expect: AffinityAssistantPerPipelineRun, + }, { + name: "affinity-assistant-disabled-coscheduling-isolate-pipelineruns", + configMap: map[string]string{ + "disable-affinity-assistant": "true", + "coscheduling": config.CoscheduleIsolatePipelineRuns, + }, + expect: AffinityAssistantPerPipelineRunWithIsolation, + }, { + name: "affinity-assistant-disabled-coscheduling-disabled", + configMap: map[string]string{ + "disable-affinity-assistant": "true", + "coscheduling": config.CoscheduleDisabled, + }, + expect: AffinityAssistantDisabled, + }} + + for _, tc := range tcs { + ctx := cfgtesting.SetFeatureFlags(context.Background(), t, tc.configMap) + get := GetAffinityAssistantBehavior(ctx) + + if d := cmp.Diff(tc.expect, get); d != "" { + t.Errorf("AffinityAssitantBehavior mismatch: %v", diff.PrintWantGot(d)) + } + } +} diff --git a/pkg/reconciler/pipelinerun/affinity_assistant.go b/pkg/reconciler/pipelinerun/affinity_assistant.go index 9e2a51f49b5..6f76ab639b7 100644 --- a/pkg/reconciler/pipelinerun/affinity_assistant.go +++ b/pkg/reconciler/pipelinerun/affinity_assistant.go @@ -278,6 +278,8 @@ func affinityAssistantStatefulSet(name string, pr *v1beta1.PipelineRun, claimTem // be created for each PipelineRun that use workspaces with PersistentVolumeClaims // as volume source. The default behaviour is to enable the Affinity Assistant to // provide Node Affinity for TaskRuns that share a PVC workspace. +// +// TODO(#6740)(WIP): replace this function with GetAffinityAssistantBehavior func (c *Reconciler) isAffinityAssistantDisabled(ctx context.Context) bool { cfg := config.FromContextOrDefaults(ctx) return cfg.FeatureFlags.DisableAffinityAssistant diff --git a/pkg/reconciler/pipelinerun/pipelinerun_test.go b/pkg/reconciler/pipelinerun/pipelinerun_test.go index 593fb099b39..4658b735ebe 100644 --- a/pkg/reconciler/pipelinerun/pipelinerun_test.go +++ b/pkg/reconciler/pipelinerun/pipelinerun_test.go @@ -4780,6 +4780,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `) expectedPr := expectedPrStatus @@ -4937,6 +4938,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `) expectedPr := expectedPrStatus @@ -8181,6 +8183,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), }, { name: "p-finally", @@ -8345,6 +8348,8 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" + `), }} for _, tt := range tests { @@ -8551,6 +8556,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), }} for _, tt := range tests { @@ -8959,6 +8965,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), }, { name: "p-finally", @@ -9161,6 +9168,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), }} for _, tt := range tests { @@ -9393,6 +9401,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), }, } @@ -9833,6 +9842,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), }, { name: "p-finally", @@ -10008,6 +10018,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), }} for _, tt := range tests { @@ -10230,6 +10241,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), }, { name: "indexing results in matrix.params", @@ -10392,6 +10404,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), }} for _, tt := range tests { @@ -10608,6 +10621,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), expectedTaskRuns: []*v1beta1.TaskRun{ mustParseTaskRunWithObjectMeta(t, @@ -10804,6 +10818,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), expectedTaskRuns: []*v1beta1.TaskRun{ mustParseTaskRunWithObjectMeta(t, @@ -11217,6 +11232,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), }, { name: "p-finally", @@ -11382,6 +11398,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `), }} for _, tt := range tests { diff --git a/pkg/reconciler/taskrun/taskrun_test.go b/pkg/reconciler/taskrun/taskrun_test.go index 9f47f46ad14..285efe9f9bc 100644 --- a/pkg/reconciler/taskrun/taskrun_test.go +++ b/pkg/reconciler/taskrun/taskrun_test.go @@ -1673,6 +1673,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" provenance: featureFlags: RunningInEnvWithInjectedSidecars: true @@ -1683,6 +1684,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `) reconciliatonError = fmt.Errorf("1 error occurred:\n\t* Provided results don't match declared results; may be invalid JSON or missing result declaration: \"aResult\": task result is expected to be \"array\" type but was initialized to a different type \"string\"") toBeRetriedTaskRun = parse.MustParseV1beta1TaskRun(t, ` @@ -1734,6 +1736,7 @@ status: EnableProvenanceInStatus: true ResultExtractionMethod: "termination-message" MaxResultSize: 4096 + Coscheduling: "coschedule-workspaces" `) )