You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2020/11/17 08:01:47 UTC
[camel-k] 01/02: chore(doc): Add documentation to PDB trait
parameters
This is an automated email from the ASF dual-hosted git repository.
astefanutti pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 7e71966d16762330a37e86fe3aef85f557fb3d65
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Mon Nov 16 09:50:12 2020 +0100
chore(doc): Add documentation to PDB trait parameters
---
pkg/trait/pdb.go | 68 +++++++++++++++++++++++++++++---------------------------
1 file changed, 35 insertions(+), 33 deletions(-)
diff --git a/pkg/trait/pdb.go b/pkg/trait/pdb.go
index 7b273ce..de1131f 100644
--- a/pkg/trait/pdb.go
+++ b/pkg/trait/pdb.go
@@ -19,19 +19,27 @@ package trait
import (
"fmt"
- v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+
"k8s.io/api/policy/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
+
+ v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
)
-// The Pdb trait allows to configure the PodDisruptionBudget resource.
+// The PDB trait allows to configure the PodDisruptionBudget resource for the Integration pods.
//
// +camel-k:trait=pdb
type pdbTrait struct {
- BaseTrait `property:",squash"`
+ BaseTrait `property:",squash"`
+ // The number of pods for the Integration that must still be available after an eviction.
+ // It can be either an absolute number or a percentage.
+ // Only one of `min-available` and `max-unavailable` can be specified.
+ MinAvailable string `property:"min-available" json:"minAvailable,omitempty"`
+ // The number of pods for the Integration that can be unavailable after an eviction.
+ // It can be either an absolute number or a percentage (default `1` if `min-available` is also not set).
+ // Only one of `max-unavailable` and `min-available` can be specified.
MaxUnavailable string `property:"max-unavailable" json:"maxUnavailable,omitempty"`
- MinAvailable string `property:"min-available" json:"minAvailable,omitempty"`
}
func newPdbTrait() Trait {
@@ -65,45 +73,39 @@ func (t *pdbTrait) Configure(e *Environment) (bool, error) {
}
func (t *pdbTrait) Apply(e *Environment) error {
- if pdb, err := t.generatePodDisruptionBudget(e); err == nil {
- e.Resources.Add(pdb)
- } else {
- return err
- }
- return nil
-}
-
-func (t *pdbTrait) generatePodDisruptionBudget(e *Environment) (*v1beta1.PodDisruptionBudget, error) {
if t.MaxUnavailable == "" && t.MinAvailable == "" {
t.MaxUnavailable = "1"
}
- integration := e.Integration
- spec := v1beta1.PodDisruptionBudgetSpec{
- Selector: &metav1.LabelSelector{
- MatchLabels: map[string]string{
- v1.IntegrationLabel: integration.Name,
+ pdb := t.podDisruptionBudgetFor(e.Integration)
+ e.Resources.Add(pdb)
+
+ return nil
+}
+
+func (t *pdbTrait) podDisruptionBudgetFor(integration *v1.Integration) *v1beta1.PodDisruptionBudget {
+ pdb := &v1beta1.PodDisruptionBudget{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: integration.Name,
+ Namespace: integration.Namespace,
+ Labels: integration.Labels,
+ },
+ Spec: v1beta1.PodDisruptionBudgetSpec{
+ Selector: &metav1.LabelSelector{
+ MatchLabels: map[string]string{
+ v1.IntegrationLabel: integration.Name,
+ },
},
},
}
- var min, max intstr.IntOrString
-
if t.MaxUnavailable != "" {
- max = intstr.Parse(t.MaxUnavailable)
- spec.MaxUnavailable = &max
-
+ max := intstr.Parse(t.MaxUnavailable)
+ pdb.Spec.MaxUnavailable = &max
} else {
- min = intstr.Parse(t.MinAvailable)
- spec.MinAvailable = &min
+ min := intstr.Parse(t.MinAvailable)
+ pdb.Spec.MinAvailable = &min
}
- return &v1beta1.PodDisruptionBudget{
- ObjectMeta: metav1.ObjectMeta{
- Name: integration.Name,
- Namespace: integration.Namespace,
- Labels: integration.Labels,
- },
- Spec: spec,
- }, nil
+ return pdb
}