You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by GitBox <gi...@apache.org> on 2021/02/17 09:24:30 UTC

[GitHub] [camel-k] squakez opened a new pull request #2040: feat(trait): toleration trait

squakez opened a new pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040


   <!-- Description -->
   With this PR we introduce a new trait to include Tolerations configuration for an integration
   
   <!--
   Enter your extended release note in the below block. If the PR requires
   additional action from users switching to the new release, include the string
   "action required". If no release note is required, write "NONE". 
   
   You can (optionally) mark this PR with labels "kind/bug" or "kind/feature" to make sure
   the text is added to the right section of the release notes. 
   -->
   
   **Release Note**
   ```release-note
   feat(trait): toleration trait
   ```
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] astefanutti commented on a change in pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
astefanutti commented on a change in pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040#discussion_r577542059



##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,121 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	corev1 "k8s.io/api/core/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait will enable a Toleration.
+// Tolerations are applied to pods, and allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// It's disabled by default.
+//
+// +camel-k:trait=toleration
+type tolerationTrait struct {

Review comment:
       I agree that, currently, mapping from CLI options to trait configuration is too limited to support structuring multi-valued options, and the best approach is to take the serialized form.
   
   Anyway, I find it also more concise, and it's what the `kubectl taint` command takes as input: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/.
   
   So I'd be inclined toward `-t toleration.expr=key1:Exists:NoExecute`, and maybe changing `expr` by `taint`.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] astefanutti commented on a change in pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
astefanutti commented on a change in pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040#discussion_r577551324



##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,121 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	corev1 "k8s.io/api/core/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait will enable a Toleration.
+// Tolerations are applied to pods, and allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// It's disabled by default.
+//
+// +camel-k:trait=toleration
+type tolerationTrait struct {
+	BaseTrait `property:",squash"`
+	// The key to match the Taint
+	Key string `property:"key" json:"key,omitempty"`
+	// The operator (Equal | Exists)
+	Operator string `property:"operator" json:"operator,omitempty"`
+	// The value to match if Equal operator selected
+	Value string `property:"value" json:"value,omitempty"`
+	// The effect that will be set on the Pod (NoExecute | NoSchedule | PreferNoSchedule)
+	Effect string `property:"effect" json:"effect,omitempty"`
+	// How long that Pod stays bound to a failing or unresponsive Node
+	TolerationSeconds string `property:"seconds" json:"seconds,omitempty"`
+}
+
+func newTolerationTrait() Trait {
+	return &tolerationTrait{
+		BaseTrait: NewBaseTrait("toleration", 1200),
+	}
+}
+
+func (t *tolerationTrait) Configure(e *Environment) (bool, error) {
+	if util.IsNilOrFalse(t.Enabled) {
+		return false, nil
+	}
+
+	if t.Key == "" {
+		return false, fmt.Errorf("missing key for toleration trait")
+	}
+
+	if t.Operator != "Equal" && t.Operator != "Exists" {
+		return false, fmt.Errorf("expected Equal or Exists for operator toleration trait, got %v", t.Operator)
+	}
+
+	if t.Operator == "Equal" && t.Value == "" {
+		return false, fmt.Errorf("missing value for equal operator toleration trait")
+	}
+
+	if t.Effect != "NoExecute" && t.Effect != "NoSchedule" && t.Effect != "PreferNoSchedule" {
+		return false, fmt.Errorf("expected NoExecute, NoSchedule or PreferNoSchedule for effect toleration trait, got %v", t.Effect)
+	}
+
+	return e.IntegrationInPhase(v1.IntegrationPhaseDeploying, v1.IntegrationPhaseRunning), nil
+}
+
+func (t *tolerationTrait) Apply(e *Environment) (err error) {
+	var deployment *appsv1.Deployment
+	e.Resources.VisitDeployment(func(d *appsv1.Deployment) {

Review comment:
       Right, I think the Affinity trait pre-dates the CronJob strategy, and possibly miss to integrate with the KnativeService one.
   
   From a functional standpoint, I think tolerations work for both the KnativeService and the CronJob strategies. So technically, it is a matter of visiting also the KnativeService and CronJob resources, and add the tolerations to their PodTemplateSpec. You can find an example in the Container trait.
   
   That should probably be done for the Affinity trait as well. We may find a better mechanism to avoid that visiting thing being spread in multiple places.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] astefanutti commented on a change in pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
astefanutti commented on a change in pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040#discussion_r578995319



##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,154 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"regexp"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	"k8s.io/api/batch/v1beta1"
+	corev1 "k8s.io/api/core/v1"
+	serving "knative.dev/serving/pkg/apis/serving/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait will set a Toleration over an integration pod. Tolerations allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// The toleration should be expressed in a similar manner of taints *_Key[=Value]:Effect[:Seconds]_* where values in square brackets are optional. Examples:
+//
+// my-key:NoExecute
+// com.example/my-key:NoExecute
+// com.example/my-key=my-val:NoSchedule
+// com.example/my-key=my-val:NoSchedule:120
+//
+// It's disabled by default.
+//
+// +camel-k:trait=toleration
+type tolerationTrait struct {
+	BaseTrait `property:",squash"`
+	// The taint to tolerate in the form Key[=Value]:Effect[:Seconds]

Review comment:
       Nit: "taint" -> "taints"

##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,154 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"regexp"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	"k8s.io/api/batch/v1beta1"
+	corev1 "k8s.io/api/core/v1"
+	serving "knative.dev/serving/pkg/apis/serving/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait will set a Toleration over an integration pod. Tolerations allow (but do not require) the pods to schedule onto nodes with matching taints.

Review comment:
       Nit: I'd suggest "This trait sets Tolerations over Integration pods".

##########
File path: docs/modules/traits/pages/toleration.adoc
##########
@@ -0,0 +1,44 @@
+= Toleration Trait
+
+// Start of autogenerated code - DO NOT EDIT! (description)
+This trait will set a Toleration over an integration pod. Tolerations allow (but do not require) the pods to schedule onto nodes with matching taints.
+See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+
+The toleration should be expressed in a similar manner of taints *_Key[=Value]:Effect[:Seconds]_* where values in square brackets are optional. Examples:
+
+my-key:NoExecute

Review comment:
       I'd suggest to add actual examples, like adding toleration to schedule pods on master nodes, e.g. `node-role.kubernetes.io/master:NoSchedule`.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] squakez commented on a change in pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
squakez commented on a change in pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040#discussion_r577537816



##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,121 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	corev1 "k8s.io/api/core/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait will enable a Toleration.
+// Tolerations are applied to pods, and allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// It's disabled by default.
+//
+// +camel-k:trait=toleration
+type tolerationTrait struct {

Review comment:
       or even better
   ```
   kamel run ... -t toleration.expr=key1:NoExecute -toleration.expr=key2=val2:NoExecute
   ```
   assuming that if the `=` operator exists, then it's an `Equal`, otherwise an `Exists` operator




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] astefanutti merged pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
astefanutti merged pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] astefanutti commented on a change in pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
astefanutti commented on a change in pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040#discussion_r577524022



##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,121 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	corev1 "k8s.io/api/core/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait will enable a Toleration.
+// Tolerations are applied to pods, and allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// It's disabled by default.
+//
+// +camel-k:trait=toleration
+type tolerationTrait struct {
+	BaseTrait `property:",squash"`
+	// The key to match the Taint
+	Key string `property:"key" json:"key,omitempty"`
+	// The operator (Equal | Exists)
+	Operator string `property:"operator" json:"operator,omitempty"`
+	// The value to match if Equal operator selected
+	Value string `property:"value" json:"value,omitempty"`
+	// The effect that will be set on the Pod (NoExecute | NoSchedule | PreferNoSchedule)
+	Effect string `property:"effect" json:"effect,omitempty"`
+	// How long that Pod stays bound to a failing or unresponsive Node
+	TolerationSeconds string `property:"seconds" json:"seconds,omitempty"`
+}
+
+func newTolerationTrait() Trait {
+	return &tolerationTrait{
+		BaseTrait: NewBaseTrait("toleration", 1200),
+	}
+}
+
+func (t *tolerationTrait) Configure(e *Environment) (bool, error) {
+	if util.IsNilOrFalse(t.Enabled) {
+		return false, nil
+	}
+
+	if t.Key == "" {
+		return false, fmt.Errorf("missing key for toleration trait")
+	}
+
+	if t.Operator != "Equal" && t.Operator != "Exists" {
+		return false, fmt.Errorf("expected Equal or Exists for operator toleration trait, got %v", t.Operator)
+	}
+
+	if t.Operator == "Equal" && t.Value == "" {
+		return false, fmt.Errorf("missing value for equal operator toleration trait")
+	}
+
+	if t.Effect != "NoExecute" && t.Effect != "NoSchedule" && t.Effect != "PreferNoSchedule" {
+		return false, fmt.Errorf("expected NoExecute, NoSchedule or PreferNoSchedule for effect toleration trait, got %v", t.Effect)
+	}
+
+	return e.IntegrationInPhase(v1.IntegrationPhaseDeploying, v1.IntegrationPhaseRunning), nil
+}
+
+func (t *tolerationTrait) Apply(e *Environment) (err error) {
+	var deployment *appsv1.Deployment
+	e.Resources.VisitDeployment(func(d *appsv1.Deployment) {

Review comment:
       What about the other deployment strategies, like Knative Service or CronJob?

##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,121 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	corev1 "k8s.io/api/core/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait will enable a Toleration.
+// Tolerations are applied to pods, and allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// It's disabled by default.
+//
+// +camel-k:trait=toleration
+type tolerationTrait struct {

Review comment:
       Would there be a way to specify multiple tolerations?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] squakez commented on a change in pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
squakez commented on a change in pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040#discussion_r579089188



##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,156 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"regexp"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	"k8s.io/api/batch/v1beta1"
+	corev1 "k8s.io/api/core/v1"
+	serving "knative.dev/serving/pkg/apis/serving/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait sets Tolerations over Integration pods. Tolerations allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// The toleration should be expressed in a similar manner of taints *_Key[=Value]:Effect[:Seconds]_* where values in square brackets are optional. Examples:
+//
+// node-role.kubernetes.io/master:NoSchedule
+// node.kubernetes.io/network-unavailable:NoExecute:3000
+// disktype=ssd:PreferNoSchedule
+// com.example/my-key:NoExecute
+// com.example/my-key=my-val:NoSchedule
+// com.example/my-key=my-val:NoSchedule:120

Review comment:
       sure, I forgot the doc regen... thanks!




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] squakez commented on a change in pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
squakez commented on a change in pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040#discussion_r577536736



##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,121 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	corev1 "k8s.io/api/core/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait will enable a Toleration.
+// Tolerations are applied to pods, and allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// It's disabled by default.
+//
+// +camel-k:trait=toleration
+type tolerationTrait struct {
+	BaseTrait `property:",squash"`
+	// The key to match the Taint
+	Key string `property:"key" json:"key,omitempty"`
+	// The operator (Equal | Exists)
+	Operator string `property:"operator" json:"operator,omitempty"`
+	// The value to match if Equal operator selected
+	Value string `property:"value" json:"value,omitempty"`
+	// The effect that will be set on the Pod (NoExecute | NoSchedule | PreferNoSchedule)
+	Effect string `property:"effect" json:"effect,omitempty"`
+	// How long that Pod stays bound to a failing or unresponsive Node
+	TolerationSeconds string `property:"seconds" json:"seconds,omitempty"`
+}
+
+func newTolerationTrait() Trait {
+	return &tolerationTrait{
+		BaseTrait: NewBaseTrait("toleration", 1200),
+	}
+}
+
+func (t *tolerationTrait) Configure(e *Environment) (bool, error) {
+	if util.IsNilOrFalse(t.Enabled) {
+		return false, nil
+	}
+
+	if t.Key == "" {
+		return false, fmt.Errorf("missing key for toleration trait")
+	}
+
+	if t.Operator != "Equal" && t.Operator != "Exists" {
+		return false, fmt.Errorf("expected Equal or Exists for operator toleration trait, got %v", t.Operator)
+	}
+
+	if t.Operator == "Equal" && t.Value == "" {
+		return false, fmt.Errorf("missing value for equal operator toleration trait")
+	}
+
+	if t.Effect != "NoExecute" && t.Effect != "NoSchedule" && t.Effect != "PreferNoSchedule" {
+		return false, fmt.Errorf("expected NoExecute, NoSchedule or PreferNoSchedule for effect toleration trait, got %v", t.Effect)
+	}
+
+	return e.IntegrationInPhase(v1.IntegrationPhaseDeploying, v1.IntegrationPhaseRunning), nil
+}
+
+func (t *tolerationTrait) Apply(e *Environment) (err error) {
+	var deployment *appsv1.Deployment
+	e.Resources.VisitDeployment(func(d *appsv1.Deployment) {

Review comment:
       Honestly I am not familiar with that. I mimicked the logic from `Affinity` trait.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] astefanutti commented on pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
astefanutti commented on pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040#issuecomment-782056732


   Thanks!


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] squakez commented on a change in pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
squakez commented on a change in pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040#discussion_r577536075



##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,121 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	corev1 "k8s.io/api/core/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait will enable a Toleration.
+// Tolerations are applied to pods, and allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// It's disabled by default.
+//
+// +camel-k:trait=toleration
+type tolerationTrait struct {

Review comment:
       Yeah, I tried to implement that as multiple tolerations but the problem I see is that a toleration have more than 1 attribute, so, something like this
   ```
   kamel run ... -t toleration.key=key1 -t toleration.operator=Exists -t toleration.effect=NoExecute -t toleration.key=key2 -t toleration.operator=Equal -t toleration.value=val2 -t toleration.effect=NoExecute 
   ```
   May mix the values and it does not result user friendly imo. Maybe a regex to selfcontain a toleration could be better, like:
   ```
   kamel run ... -t toleration.expr=key1:Exists:NoExecute -toleration.expr=key2:Equal:val2:NoExecute
   ```
   Wdyt?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] squakez commented on a change in pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
squakez commented on a change in pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040#discussion_r577537816



##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,121 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	corev1 "k8s.io/api/core/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait will enable a Toleration.
+// Tolerations are applied to pods, and allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// It's disabled by default.
+//
+// +camel-k:trait=toleration
+type tolerationTrait struct {

Review comment:
       or even better
   ```
   kamel run ... -t toleration.expr=key1:NoExecute -t toleration.expr=key2=val2:NoExecute
   ```
   assuming that if the `=` operator exists, then it's an `Equal`, otherwise an `Exists` operator

##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,121 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	corev1 "k8s.io/api/core/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait will enable a Toleration.
+// Tolerations are applied to pods, and allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// It's disabled by default.
+//
+// +camel-k:trait=toleration
+type tolerationTrait struct {

Review comment:
       Yeah, I tried to implement that as multiple tolerations but the problem I see is that a toleration have more than 1 attribute, so, something like this
   ```
   kamel run ... -t toleration.key=key1 -t toleration.operator=Exists -t toleration.effect=NoExecute -t toleration.key=key2 -t toleration.operator=Equal -t toleration.value=val2 -t toleration.effect=NoExecute 
   ```
   May mix the values and it does not result user friendly imo. Maybe a regex to selfcontain a toleration could be better, like:
   ```
   kamel run ... -t toleration.expr=key1:Exists:NoExecute -t toleration.expr=key2:Equal:val2:NoExecute
   ```
   Wdyt?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [camel-k] astefanutti commented on a change in pull request #2040: feat(trait): toleration trait

Posted by GitBox <gi...@apache.org>.
astefanutti commented on a change in pull request #2040:
URL: https://github.com/apache/camel-k/pull/2040#discussion_r579081890



##########
File path: pkg/trait/toleration.go
##########
@@ -0,0 +1,156 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 trait
+
+import (
+	"fmt"
+	"regexp"
+	"strconv"
+
+	appsv1 "k8s.io/api/apps/v1"
+	"k8s.io/api/batch/v1beta1"
+	corev1 "k8s.io/api/core/v1"
+	serving "knative.dev/serving/pkg/apis/serving/v1"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util"
+)
+
+// This trait sets Tolerations over Integration pods. Tolerations allow (but do not require) the pods to schedule onto nodes with matching taints.
+// See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ for more details.
+//
+// The toleration should be expressed in a similar manner of taints *_Key[=Value]:Effect[:Seconds]_* where values in square brackets are optional. Examples:
+//
+// node-role.kubernetes.io/master:NoSchedule
+// node.kubernetes.io/network-unavailable:NoExecute:3000
+// disktype=ssd:PreferNoSchedule
+// com.example/my-key:NoExecute
+// com.example/my-key=my-val:NoSchedule
+// com.example/my-key=my-val:NoSchedule:120

Review comment:
       I'd just remove these, regen the doc and we're go to go 👍🏼 




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org