You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2022/10/03 09:02:21 UTC
[camel-k] 03/04: chore(cli): add a promote message
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 926e5788fcaa1e03467a5457daff3f93b1efd5ea
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Fri Sep 30 10:05:31 2022 +0200
chore(cli): add a promote message
Closes #3676
---
e2e/support/test_support.go | 3 ++-
pkg/cmd/bind.go | 9 ++-------
pkg/cmd/promote.go | 18 +++++++++++++++---
pkg/controller/kameletbinding/initialize.go | 2 +-
pkg/install/cluster.go | 3 ++-
pkg/install/common.go | 2 +-
pkg/trait/pull_secret.go | 2 +-
pkg/util/kubernetes/replace.go | 12 +++++++-----
8 files changed, 31 insertions(+), 20 deletions(-)
diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go
index c6074a096..7860c8bc6 100644
--- a/e2e/support/test_support.go
+++ b/e2e/support/test_support.go
@@ -1864,7 +1864,8 @@ func BindKameletToWithErrorHandler(ns string, name string, annotations map[strin
if errorHandler != nil {
kb.Spec.ErrorHandler = asErrorHandlerSpec(errorHandler)
}
- return kubernetes.ReplaceResource(TestContext, TestClient(), &kb)
+ _, err := kubernetes.ReplaceResource(TestContext, TestClient(), &kb)
+ return err
}
}
diff --git a/pkg/cmd/bind.go b/pkg/cmd/bind.go
index d92128cb6..d956bf271 100644
--- a/pkg/cmd/bind.go
+++ b/pkg/cmd/bind.go
@@ -260,17 +260,12 @@ func (o *bindCmdOptions) run(cmd *cobra.Command, args []string) error {
return showOutput(cmd, &binding, o.OutputFormat, client.GetScheme())
}
- existed := false
- err = client.Create(o.Context, &binding)
- if err != nil && k8serrors.IsAlreadyExists(err) {
- existed = true
- err = kubernetes.ReplaceResource(o.Context, client, &binding)
- }
+ replaced, err := kubernetes.ReplaceResource(o.Context, client, &binding)
if err != nil {
return err
}
- if !existed {
+ if !replaced {
fmt.Fprintln(cmd.OutOrStdout(), `kamelet binding "`+name+`" created`)
} else {
fmt.Fprintln(cmd.OutOrStdout(), `kamelet binding "`+name+`" updated`)
diff --git a/pkg/cmd/promote.go b/pkg/cmd/promote.go
index 17839810f..3ebd67bbc 100644
--- a/pkg/cmd/promote.go
+++ b/pkg/cmd/promote.go
@@ -127,7 +127,13 @@ func (o *promoteCmdOptions) run(cmd *cobra.Command, args []string) error {
// KameletBinding promotion
destKameletBinding := o.editKameletBinding(sourceKameletBinding, sourceIntegration)
- return o.replaceResource(destKameletBinding)
+ replaced, err := o.replaceResource(destKameletBinding)
+ if !replaced {
+ fmt.Fprintln(cmd.OutOrStdout(), `Promoted Integration "`+name+`" created`)
+ } else {
+ fmt.Fprintln(cmd.OutOrStdout(), `Promoted Integration "`+name+`" updated`)
+ }
+ return err
}
// Plain Integration promotion
destIntegration := o.editIntegration(sourceIntegration)
@@ -138,7 +144,13 @@ func (o *promoteCmdOptions) run(cmd *cobra.Command, args []string) error {
return err
}
- return o.replaceResource(destIntegration)
+ replaced, err := o.replaceResource(destIntegration)
+ if !replaced {
+ fmt.Fprintln(cmd.OutOrStdout(), `Promoted Integration "`+name+`" created`)
+ } else {
+ fmt.Fprintln(cmd.OutOrStdout(), `Promoted Integration "`+name+`" updated`)
+ }
+ return err
}
func checkOpsCompatibility(cmd *cobra.Command, source, dest map[string]string) error {
@@ -450,7 +462,7 @@ func (o *promoteCmdOptions) editKameletBinding(kb *v1alpha1.KameletBinding, it *
return &dst
}
-func (o *promoteCmdOptions) replaceResource(res k8sclient.Object) error {
+func (o *promoteCmdOptions) replaceResource(res k8sclient.Object) (bool, error) {
return kubernetes.ReplaceResource(o.Context, o._client, res)
}
diff --git a/pkg/controller/kameletbinding/initialize.go b/pkg/controller/kameletbinding/initialize.go
index 3f85198b5..0ff43d881 100644
--- a/pkg/controller/kameletbinding/initialize.go
+++ b/pkg/controller/kameletbinding/initialize.go
@@ -55,7 +55,7 @@ func (action *initializeAction) Handle(ctx context.Context, kameletbinding *v1al
return nil, err
}
- if err := kubernetes.ReplaceResource(ctx, action.client, it); err != nil {
+ if _, err := kubernetes.ReplaceResource(ctx, action.client, it); err != nil {
return nil, errors.Wrap(err, "could not create integration for kamelet binding")
}
diff --git a/pkg/install/cluster.go b/pkg/install/cluster.go
index b135b2d64..149e7df27 100644
--- a/pkg/install/cluster.go
+++ b/pkg/install/cluster.go
@@ -322,7 +322,8 @@ func installCRD(ctx context.Context, c client.Client, kind string, version strin
return nil
}
- return kubernetes.ReplaceResource(ctx, c, crd)
+ _, err = kubernetes.ReplaceResource(ctx, c, crd)
+ return err
}
func isClusterRoleInstalled(ctx context.Context, c client.Client, name string) (bool, error) {
diff --git a/pkg/install/common.go b/pkg/install/common.go
index a8606ed68..da4bc3e00 100644
--- a/pkg/install/common.go
+++ b/pkg/install/common.go
@@ -113,7 +113,7 @@ func ObjectOrCollect(ctx context.Context, c client.Client, namespace string, col
}
if force {
- if err := kubernetes.ReplaceResource(ctx, c, obj); err != nil {
+ if _, err := kubernetes.ReplaceResource(ctx, c, obj); err != nil {
return err
}
// For some resources, also reset the status
diff --git a/pkg/trait/pull_secret.go b/pkg/trait/pull_secret.go
index 55ff73e9d..a53db960a 100644
--- a/pkg/trait/pull_secret.go
+++ b/pkg/trait/pull_secret.go
@@ -109,7 +109,7 @@ func (t *pullSecretTrait) delegateImagePuller(e *Environment) error {
// Applying the RoleBinding directly because it's a resource in the operator namespace
// (different from the integration namespace when delegation is enabled).
rb := t.newImagePullerRoleBinding(e)
- if err := kubernetes.ReplaceResource(e.Ctx, e.Client, rb); err != nil {
+ if _, err := kubernetes.ReplaceResource(e.Ctx, e.Client, rb); err != nil {
return errors.Wrap(err, "error during the creation of the system:image-puller delegating role binding")
}
return nil
diff --git a/pkg/util/kubernetes/replace.go b/pkg/util/kubernetes/replace.go
index 9e047b3f9..b71b5a6ac 100644
--- a/pkg/util/kubernetes/replace.go
+++ b/pkg/util/kubernetes/replace.go
@@ -38,16 +38,18 @@ import (
)
// ReplaceResource allows to completely replace a resource on Kubernetes, taking care of immutable fields and resource versions.
-func ReplaceResource(ctx context.Context, c client.Client, res ctrl.Object) error {
+func ReplaceResource(ctx context.Context, c client.Client, res ctrl.Object) (bool, error) {
+ replaced := false
err := c.Create(ctx, res)
if err != nil && k8serrors.IsAlreadyExists(err) {
+ replaced = true
existing, ok := res.DeepCopyObject().(ctrl.Object)
if !ok {
- return fmt.Errorf("type assertion failed: %v", res.DeepCopyObject())
+ return replaced, fmt.Errorf("type assertion failed: %v", res.DeepCopyObject())
}
err = c.Get(ctx, ctrl.ObjectKeyFromObject(existing), existing)
if err != nil {
- return err
+ return replaced, err
}
mapRequiredMeta(existing, res)
mapRequiredServiceData(existing, res)
@@ -56,9 +58,9 @@ func ReplaceResource(ctx context.Context, c client.Client, res ctrl.Object) erro
err = c.Update(ctx, res)
}
if err != nil {
- return errors.Wrap(err, "could not create or replace "+findResourceDetails(res))
+ return replaced, errors.Wrap(err, "could not create or replace "+findResourceDetails(res))
}
- return nil
+ return replaced, nil
}
func mapRequiredMeta(from ctrl.Object, to ctrl.Object) {