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 2019/11/28 07:41:06 UTC
[camel-k] 06/13: chore: Rely on generic patching to reconcile
deployment replicas for running integrations
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 f7581782ac09a4e472deb45d561cab89f5d6aa31
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Tue Nov 26 11:28:51 2019 +0100
chore: Rely on generic patching to reconcile deployment replicas for running integrations
---
pkg/trait/deployment.go | 42 +++++++++++++-----------------------------
pkg/trait/deployment_test.go | 10 ++++------
2 files changed, 17 insertions(+), 35 deletions(-)
diff --git a/pkg/trait/deployment.go b/pkg/trait/deployment.go
index 1375dfd..818fc9f 100644
--- a/pkg/trait/deployment.go
+++ b/pkg/trait/deployment.go
@@ -18,14 +18,10 @@ limitations under the License.
package trait
import (
- "context"
-
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "sigs.k8s.io/controller-runtime/pkg/client"
-
"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
)
@@ -97,7 +93,6 @@ func (t *deploymentTrait) Configure(e *Environment) (bool, error) {
func (t *deploymentTrait) Apply(e *Environment) error {
if e.IntegrationKitInPhase(v1alpha1.IntegrationKitPhaseReady) &&
e.IntegrationInPhase(v1alpha1.IntegrationPhaseBuildingKit, v1alpha1.IntegrationPhaseResolvingKit) {
-
e.PostProcessors = append(e.PostProcessors, func(environment *Environment) error {
// trigger integration deploy
e.Integration.Status.Phase = v1alpha1.IntegrationPhaseDeploying
@@ -110,41 +105,30 @@ func (t *deploymentTrait) Apply(e *Environment) error {
if e.InPhase(v1alpha1.IntegrationKitPhaseReady, v1alpha1.IntegrationPhaseDeploying) ||
e.InPhase(v1alpha1.IntegrationKitPhaseReady, v1alpha1.IntegrationPhaseRunning) {
maps := e.ComputeConfigMaps()
- depl := t.getDeploymentFor(e)
+ deployment := t.getDeploymentFor(e)
e.Resources.AddAll(maps)
- e.Resources.Add(depl)
+ e.Resources.Add(deployment)
e.Integration.Status.SetCondition(
v1alpha1.IntegrationConditionDeploymentAvailable,
corev1.ConditionTrue,
v1alpha1.IntegrationConditionDeploymentAvailableReason,
- depl.Name,
+ deployment.Name,
)
- }
- if e.IntegrationInPhase(v1alpha1.IntegrationPhaseRunning) {
- // Reconcile the deployment replicas
- deployment := &appsv1.Deployment{}
- err := t.client.Get(context.TODO(), client.ObjectKey{Namespace: e.Integration.Namespace, Name: e.Integration.Name}, deployment)
- if err != nil {
- return err
- }
- replicas := e.Integration.Spec.Replicas
- // Deployment replicas defaults to 1, so we avoid forcing
- // an update to nil that will result to another update cycle
- // back to that default value by the Deployment controller.
- if replicas == nil && *deployment.Spec.Replicas != 1 ||
- replicas != nil && *deployment.Spec.Replicas != *replicas {
- target := deployment.DeepCopy()
- target.Spec.Replicas = replicas
- err := t.client.Patch(context.TODO(), target, client.MergeFrom(deployment))
- if err != nil {
- return err
+ if e.IntegrationInPhase(v1alpha1.IntegrationPhaseRunning) {
+ // Reconcile the deployment replicas
+ replicas := e.Integration.Spec.Replicas
+ // Deployment replicas defaults to 1, so we avoid forcing
+ // an update to nil that will result to another update cycle
+ // back to that default value by the Deployment controller.
+ if replicas == nil {
+ one := int32(1)
+ replicas = &one
}
+ deployment.Spec.Replicas = replicas
}
-
- return nil
}
return nil
diff --git a/pkg/trait/deployment_test.go b/pkg/trait/deployment_test.go
index 7fa8450..15a30df 100644
--- a/pkg/trait/deployment_test.go
+++ b/pkg/trait/deployment_test.go
@@ -24,9 +24,8 @@ import (
"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
"github.com/apache/camel-k/pkg/util/kubernetes"
"github.com/apache/camel-k/pkg/util/test"
- "github.com/stretchr/testify/assert"
- "sigs.k8s.io/controller-runtime/pkg/client"
+ "github.com/stretchr/testify/assert"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
@@ -132,14 +131,13 @@ func TestApplyDeploymentTraitWhileRunningIntegrationDoesSucceed(t *testing.T) {
assert.Nil(t, err)
- deployment := &appsv1.Deployment{}
- err = deploymentTrait.client.Get(context.TODO(), client.ObjectKey{Namespace: "namespace", Name: "integration-name"}, deployment)
- assert.Nil(t, err)
+ deployment := environment.Resources.GetDeployment(func(deployment *appsv1.Deployment) bool { return true })
+ assert.NotNil(t, deployment)
+ assert.Equal(t, "integration-name", deployment.Name)
assert.Equal(t, int32(3), *deployment.Spec.Replicas)
}
func createNominalDeploymentTest() (*deploymentTrait, *Environment) {
-
trait := newDeploymentTrait()
enabled := true
trait.Enabled = &enabled