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 2022/07/11 15:30:04 UTC
[camel-k] 09/17: Fix #2177: Create proper integration platform as part of the operator
This is an automated email from the ASF dual-hosted git repository.
astefanutti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit a3be4d23bb0d356d6d9795fb0815428dc7bbf09f
Author: Christoph Deppisch <cd...@redhat.com>
AuthorDate: Fri Jun 3 10:17:53 2022 +0200
Fix #2177: Create proper integration platform as part of the operator
- Make sure that each operator instance adds its integration platform if not already exists
- Automatically adds an integration platform in operator start-up
- Also adds integration platform viewer role so authenticated users can see the platform instance
- Required for kamel CLI to verify existing operator ids on the cluster when doing an operator install or running integrations
---
pkg/cmd/operator/operator.go | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/pkg/cmd/operator/operator.go b/pkg/cmd/operator/operator.go
index e87e41ebe..2ae7436e2 100644
--- a/pkg/cmd/operator/operator.go
+++ b/pkg/cmd/operator/operator.go
@@ -29,6 +29,7 @@ import (
"strings"
"time"
+ "github.com/pkg/errors"
"go.uber.org/automaxprocs/maxprocs"
appsv1 "k8s.io/api/apps/v1"
@@ -36,6 +37,7 @@ import (
coordination "k8s.io/api/coordination/v1"
corev1 "k8s.io/api/core/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/selection"
@@ -237,11 +239,41 @@ func Run(healthPort, monitoringPort int32, leaderElection bool, leaderElectionID
installCtx, installCancel := context.WithTimeout(context.Background(), 1*time.Minute)
defer installCancel()
install.OperatorStartupOptionalTools(installCtx, c, watchNamespace, operatorNamespace, log)
+ exitOnError(findOrCreateIntegrationPlatform(installCtx, c, operatorNamespace), "failed to create integration platform")
log.Info("Starting the manager")
exitOnError(mgr.Start(signals.SetupSignalHandler()), "manager exited non-zero")
}
+// findOrCreateIntegrationPlatform create default integration platform in operator namespace if not already exists
+func findOrCreateIntegrationPlatform(ctx context.Context, c client.Client, operatorNamespace string) error {
+ platformName := defaults.OperatorID()
+ if platformName == "" {
+ platformName = platform.DefaultPlatformName
+ }
+
+ if pl, err := kubernetes.GetIntegrationPlatform(ctx, c, platformName, operatorNamespace); pl == nil || k8serrors.IsNotFound(err) {
+ defaultPlatform := v1.NewIntegrationPlatform(operatorNamespace, platformName)
+ if defaultPlatform.Labels == nil {
+ defaultPlatform.Labels = make(map[string]string)
+ }
+ defaultPlatform.Labels["camel.apache.org/platform.generated"] = "true"
+
+ if _, err := c.CamelV1().IntegrationPlatforms(operatorNamespace).Create(ctx, &defaultPlatform, metav1.CreateOptions{}); err != nil {
+ return err
+ }
+
+ // Make sure that IntegrationPlatform installed in operator namespace can be seen by others
+ if err := install.IntegrationPlatformViewerRole(ctx, c, operatorNamespace); err != nil && !k8serrors.IsAlreadyExists(err) {
+ return errors.Wrap(err, "Error while installing global IntegrationPlatform viewer role")
+ }
+ } else {
+ return err
+ }
+
+ return nil
+}
+
// getWatchNamespace returns the Namespace the operator should be watching for changes.
func getWatchNamespace() (string, error) {
ns, found := os.LookupEnv(platform.OperatorWatchNamespaceEnvVariable)