This is an automated email from the ASF dual-hosted git repository.

pcongiusti pushed a commit to branch release-1.10.x
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit cf1d62bd6d004ff5178bcf889e4cb397b17ffd32
Author: Pasquale Congiusti <pasquale.congiu...@gmail.com>
AuthorDate: Thu Sep 29 17:15:55 2022 +0200

    chore: replace properly the resources
---
 .../install/cli/files/promote-route-edited.groovy  | 22 ++++++++++++++++++++++
 e2e/namespace/install/cli/promote_test.go          | 19 ++++++++++++++++---
 pkg/cmd/promote.go                                 | 20 ++++----------------
 3 files changed, 42 insertions(+), 19 deletions(-)

diff --git a/e2e/namespace/install/cli/files/promote-route-edited.groovy 
b/e2e/namespace/install/cli/files/promote-route-edited.groovy
new file mode 100644
index 000000000..ab680d7bb
--- /dev/null
+++ b/e2e/namespace/install/cli/files/promote-route-edited.groovy
@@ -0,0 +1,22 @@
+// camel-k: language=groovy
+/*
+ * 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.
+ */
+
+from('timer:configmap')
+    .setBody()
+        .simple("resource:classpath:my-configmap-key")
+    .log('configmap: ${body}')
\ No newline at end of file
diff --git a/e2e/namespace/install/cli/promote_test.go 
b/e2e/namespace/install/cli/promote_test.go
index bc95fc010..ac941ace7 100644
--- a/e2e/namespace/install/cli/promote_test.go
+++ b/e2e/namespace/install/cli/promote_test.go
@@ -108,16 +108,21 @@ func TestKamelCLIPromote(t *testing.T) {
                        })
 
                        t.Run("plain integration promotion update", func(t 
*testing.T) {
-                               // Update the configmap
+                               // We need to update the Integration CR in 
order the operator to restart it both in dev and prod envs
+                               Expect(KamelRunWithID(operatorDevID, nsDev, 
"./files/promote-route-edited.groovy", "--name", "promote-route",
+                                       "--config", 
"configmap:my-cm").Execute()).To(Succeed())
+                               Eventually(IntegrationPodPhase(nsDev, 
"promote-route"), TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+                               Eventually(IntegrationConditionStatus(nsDev, 
"promote-route", v1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+                               Eventually(IntegrationLogs(nsDev, 
"promote-route"), TestTimeoutShort).Should(ContainSubstring("I am development 
configmap!"))
+                               // Update the configmap only in prod
                                var cmData = make(map[string]string)
                                cmData["my-configmap-key"] = "I am production, 
but I was updated!"
                                UpdatePlainTextConfigmap(nsProd, "my-cm", 
cmData)
-
+                               // Promote the edited Integration
                                Expect(Kamel("promote", "-n", nsDev, 
"promote-route", "--to", nsProd).Execute()).To(Succeed())
                                Eventually(IntegrationPodPhase(nsProd, 
"promote-route"), TestTimeoutMedium).Should(Equal(corev1.PodRunning))
                                Eventually(IntegrationConditionStatus(nsProd, 
"promote-route", v1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
                                Eventually(IntegrationLogs(nsProd, 
"promote-route"), TestTimeoutShort).Should(ContainSubstring("I am production, 
but I was updated!"))
-                               Eventually(IntegrationLogs(nsProd, 
"promote-route"), TestTimeoutShort).Should(ContainSubstring("very top secret 
production"))
                                // They must use the same image
                                Expect(IntegrationPodImage(nsProd, 
"promote-route")()).Should(Equal(IntegrationPodImage(nsDev, "promote-route")()))
                        })
@@ -146,6 +151,14 @@ func TestKamelCLIPromote(t *testing.T) {
                                Eventually(IntegrationLogs(nsProd, 
"kb-timer-source-to-log"), 
TestTimeoutShort).Should(ContainSubstring("my-kamelet-binding-rocks"))
                                // They must use the same image
                                Expect(IntegrationPodImage(nsProd, 
"kb-timer-source-to-log")()).Should(Equal(IntegrationPodImage(nsDev, 
"kb-timer-source-to-log")()))
+
+                               // Kamelet Binding update
+                               Expect(KamelBindWithID(operatorDevID, nsDev, 
"kb-timer-source", "log:info", "-p", 
"source.message=my-kamelet-binding-rocks-again").Execute()).To(Succeed())
+                               Eventually(IntegrationPodPhase(nsDev, 
"kb-timer-source-to-log"), TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+                               Eventually(IntegrationLogs(nsDev, 
"kb-timer-source-to-log"), 
TestTimeoutShort).Should(ContainSubstring("my-kamelet-binding-rocks-again"))
+                               Expect(Kamel("promote", "-n", nsDev, 
"kb-timer-source-to-log", "--to", nsProd).Execute()).To(Succeed())
+                               Eventually(IntegrationPodPhase(nsProd, 
"kb-timer-source-to-log"), TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+                               Eventually(IntegrationLogs(nsProd, 
"kb-timer-source-to-log"), 
TestTimeoutShort).Should(ContainSubstring("my-kamelet-binding-rocks-again"))
                        })
                })
        })
diff --git a/pkg/cmd/promote.go b/pkg/cmd/promote.go
index 5d2e53723..17839810f 100644
--- a/pkg/cmd/promote.go
+++ b/pkg/cmd/promote.go
@@ -127,7 +127,7 @@ func (o *promoteCmdOptions) run(cmd *cobra.Command, args 
[]string) error {
                // KameletBinding promotion
                destKameletBinding := 
o.editKameletBinding(sourceKameletBinding, sourceIntegration)
 
-               return o.saveKameletBinding(destKameletBinding)
+               return o.replaceResource(destKameletBinding)
        }
        // Plain Integration promotion
        destIntegration := o.editIntegration(sourceIntegration)
@@ -138,7 +138,7 @@ func (o *promoteCmdOptions) run(cmd *cobra.Command, args 
[]string) error {
                return err
        }
 
-       return o.saveIntegration(destIntegration)
+       return o.replaceResource(destIntegration)
 }
 
 func checkOpsCompatibility(cmd *cobra.Command, source, dest map[string]string) 
error {
@@ -423,14 +423,6 @@ func (o *promoteCmdOptions) editIntegration(it 
*v1.Integration) *v1.Integration
        return &dst
 }
 
-func (o *promoteCmdOptions) saveIntegration(it *v1.Integration) error {
-       err := o._client.Create(o.Context, it)
-       if err != nil && !k8serrors.IsAlreadyExists(err) {
-               return o._client.Update(o.Context, it)
-       }
-       return err
-}
-
 func (o *promoteCmdOptions) editKameletBinding(kb *v1alpha1.KameletBinding, it 
*v1.Integration) *v1alpha1.KameletBinding {
        dst := v1alpha1.NewKameletBinding(o.To, kb.Name)
        dst.Spec = *kb.Spec.DeepCopy()
@@ -458,12 +450,8 @@ func (o *promoteCmdOptions) editKameletBinding(kb 
*v1alpha1.KameletBinding, it *
        return &dst
 }
 
-func (o *promoteCmdOptions) saveKameletBinding(kb *v1alpha1.KameletBinding) 
error {
-       err := o._client.Create(o.Context, kb)
-       if err != nil && !k8serrors.IsAlreadyExists(err) {
-               return o._client.Update(o.Context, kb)
-       }
-       return err
+func (o *promoteCmdOptions) replaceResource(res k8sclient.Object) error {
+       return kubernetes.ReplaceResource(o.Context, o._client, res)
 }
 
 //

Reply via email to