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) } //