This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/main by this push:
new 164300192 feat(runtime): enable plain Quarkus runtime
164300192 is described below
commit 16430019203871b4d083a1b21f3ced263d5cb95c
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Thu Dec 12 08:17:43 2024 +0100
feat(runtime): enable plain Quarkus runtime
Added the support for plain Quarkus runtime. Trait `camel.runtime-provider`
is in charge to control the possibility to use `plain-quarkus`.
---
.github/workflows/native.yml | 5 -
.github/workflows/nightly-latest-runtime.yml | 2 +-
.../workflows/nightly-quarkus-plain-runtime.yml | 140 +++++++++++++++++++++
docs/modules/ROOT/partials/apis/camel-k-crds.adoc | 11 +-
docs/modules/traits/pages/camel.adoc | 8 +-
helm/camel-k/crds/camel-k-crds.yaml | 88 ++++++++++---
pkg/apis/camel/v1/camelcatalog_types_support.go | 5 +
pkg/apis/camel/v1/common_types.go | 11 +-
pkg/apis/camel/v1/trait/camel.go | 7 +-
pkg/builder/quarkus.go | 41 ++++--
pkg/builder/quarkus_test.go | 2 +-
pkg/controller/integrationplatform/monitor.go | 80 ++++++++++++
.../bases/camel.apache.org_integrationkits.yaml | 11 +-
.../camel.apache.org_integrationplatforms.yaml | 22 +++-
.../camel.apache.org_integrationprofiles.yaml | 22 +++-
.../crd/bases/camel.apache.org_integrations.yaml | 22 +++-
.../config/crd/bases/camel.apache.org_pipes.yaml | 11 +-
pkg/trait/camel.go | 19 ++-
pkg/trait/environment.go | 5 +
pkg/trait/mount.go | 66 +++++-----
pkg/trait/telemetry.go | 9 +-
pkg/util/camel/camel_dependencies.go | 2 +-
pkg/util/camel/camel_runtime_catalog.go | 4 +-
pkg/util/camel/camel_util.go | 2 +-
24 files changed, 497 insertions(+), 98 deletions(-)
diff --git a/.github/workflows/native.yml b/.github/workflows/native.yml
index 6bbac51b4..622b3ba82 100644
--- a/.github/workflows/native.yml
+++ b/.github/workflows/native.yml
@@ -73,11 +73,6 @@ jobs:
- name: Infra setting
uses: ./.github/actions/infra-setting
- - name: Install Knative
- shell: bash
- run: |
- ./e2e/knative/files/setup.sh
-
- name: Install operator
shell: bash
run: |
diff --git a/.github/workflows/nightly-latest-runtime.yml
b/.github/workflows/nightly-latest-runtime.yml
index dd31c340e..d4faf7836 100644
--- a/.github/workflows/nightly-latest-runtime.yml
+++ b/.github/workflows/nightly-latest-runtime.yml
@@ -32,7 +32,7 @@ on:
workflow_dispatch:
jobs:
- release:
+ smoke-tests:
strategy:
fail-fast: false
matrix:
diff --git a/.github/workflows/nightly-quarkus-plain-runtime.yml
b/.github/workflows/nightly-quarkus-plain-runtime.yml
new file mode 100644
index 000000000..624a8d86f
--- /dev/null
+++ b/.github/workflows/nightly-quarkus-plain-runtime.yml
@@ -0,0 +1,140 @@
+--- #
---------------------------------------------------------------------------
+
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+name: Nightly check against plain Quarkus runtime
+
+env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ CAMEL_K_TEST_TIMEOUT_SHORT: 2m
+ CAMEL_K_TEST_TIMEOUT_MEDIUM: 5m
+ CAMEL_K_TEST_TIMEOUT_LONG: 10m
+ CAMEL_K_TEST_TIMEOUT_VERY_LONG: 30m
+
+on:
+ schedule:
+ - cron: "30 3 * * *"
+ workflow_dispatch:
+
+jobs:
+ common:
+ strategy:
+ matrix:
+ # We want to check this on latest development branch only
+ ref-branch: [main]
+
+ if: github.repository == 'apache/camel-k'
+ runs-on: ubuntu-latest
+ steps:
+
+ - name: "Checkout code"
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ matrix.ref-branch }}
+ persist-credentials: false
+ submodules: recursive
+
+ - name: Infra setting
+ uses: ./.github/actions/infra-setting
+
+ - name: Install operator
+ shell: bash
+ run: |
+ kubectl create ns camel-k
+ make install-k8s-global
+ kubectl wait --for=jsonpath='{.status.phase}'=Ready itp camel-k -n
camel-k --timeout=60s
+ kubectl patch itp camel-k -n camel-k -p
'{"spec":{"traits":{"camel":{"runtimeProvider":"plain-quarkus"}}}}' --type=merge
+ kubectl wait --for=jsonpath='{.status.phase}'=Ready itp camel-k -n
camel-k --timeout=60s
+
+ - name: Run test
+ shell: bash
+ run: |
+ DO_TEST_PREBUILD=false GOTESTFMT="-json 2>&1 | gotestfmt" make
test-common
+
+ quarkus-native:
+ strategy:
+ matrix:
+ # We want to check this on latest development branch only
+ ref-branch: [main]
+
+ if: github.repository == 'apache/camel-k'
+ runs-on: ubuntu-latest
+ steps:
+
+ - name: "Checkout code"
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ matrix.ref-branch }}
+ persist-credentials: false
+ submodules: recursive
+
+ - name: Infra setting
+ uses: ./.github/actions/infra-setting
+
+ - name: Install operator
+ shell: bash
+ run: |
+ kubectl create ns camel-k
+ make install-k8s-global
+ kubectl wait --for=jsonpath='{.status.phase}'=Ready itp camel-k -n
camel-k --timeout=60s
+ kubectl patch itp camel-k -n camel-k -p
'{"spec":{"traits":{"camel":{"runtimeProvider":"plain-quarkus"}}}}' --type=merge
+ kubectl wait --for=jsonpath='{.status.phase}'=Ready itp camel-k -n
camel-k --timeout=60s
+
+ - name: Run test
+ shell: bash
+ run: |
+ DO_TEST_PREBUILD=false GOTESTFMT="-json 2>&1 | gotestfmt" make
test-quarkus-native
+
+ knative:
+ strategy:
+ matrix:
+ # We want to check this on latest development branch only
+ ref-branch: [main]
+
+ if: github.repository == 'apache/camel-k'
+ runs-on: ubuntu-latest
+ steps:
+
+ - name: "Checkout code"
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ matrix.ref-branch }}
+ persist-credentials: false
+ submodules: recursive
+
+ - name: Infra setting
+ uses: ./.github/actions/infra-setting
+
+ - name: Install Knative
+ shell: bash
+ run: |
+ ./e2e/knative/files/setup.sh
+
+ - name: Install operator
+ shell: bash
+ run: |
+ kubectl create ns camel-k
+ make install-k8s-global
+ kubectl wait --for=jsonpath='{.status.phase}'=Ready itp camel-k -n
camel-k --timeout=60s
+ kubectl patch itp camel-k -n camel-k -p
'{"spec":{"traits":{"camel":{"runtimeProvider":"plain-quarkus"}}}}' --type=merge
+ kubectl wait --for=jsonpath='{.status.phase}'=Ready itp camel-k -n
camel-k --timeout=60s
+
+ - name: Run test
+ shell: bash
+ run: |
+ DO_TEST_PREBUILD=false GOTESTFMT="-json 2>&1 | gotestfmt" make
test-knative
diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
index c92a62aec..8cb076f6d 100644
--- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
+++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
@@ -6497,14 +6497,21 @@ The Camel trait can be used to configure versions of
Apache Camel K runtime and
+|`runtimeProvider` +
+string
+|
+
+
+The runtime provider to use for the integration. (Default, Camel K Runtime).
+
|`runtimeVersion` +
string
|
-The camel-k-runtime version to use for the integration. It overrides the
default version set in the Integration Platform.
+The runtime version to use for the integration. It overrides the default
version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or a semantic version (for
example "3.x") which will try to resolve
-to the best matching Catalog existing on the cluster.
+to the best matching Catalog existing on the cluster (Default, the one
provided by the operator version).
|`properties` +
[]string
diff --git a/docs/modules/traits/pages/camel.adoc
b/docs/modules/traits/pages/camel.adoc
index 82f381043..415b0b1e8 100755
--- a/docs/modules/traits/pages/camel.adoc
+++ b/docs/modules/traits/pages/camel.adoc
@@ -29,11 +29,15 @@ The following configuration options are available:
| bool
| Deprecated: no longer in use.
+| camel.runtime-provider
+| string
+| The runtime provider to use for the integration. (Default, Camel K Runtime).
+
| camel.runtime-version
| string
-| The camel-k-runtime version to use for the integration. It overrides the
default version set in the Integration Platform.
+| The runtime version to use for the integration. It overrides the default
version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or a semantic version (for
example "3.x") which will try to resolve
-to the best matching Catalog existing on the cluster.
+to the best matching Catalog existing on the cluster (Default, the one
provided by the operator version).
| camel.properties
| []string
diff --git a/helm/camel-k/crds/camel-k-crds.yaml
b/helm/camel-k/crds/camel-k-crds.yaml
index f2dde79cc..42a7f1da5 100644
--- a/helm/camel-k/crds/camel-k-crds.yaml
+++ b/helm/camel-k/crds/camel-k-crds.yaml
@@ -3023,11 +3023,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
quarkus:
@@ -3965,11 +3972,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
@@ -6154,11 +6168,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
@@ -8246,11 +8267,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
@@ -10314,11 +10342,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
@@ -18763,11 +18798,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
@@ -20758,11 +20800,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
@@ -30582,11 +30631,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration.
It overrides the default version set in the Integration Platform.
You can use a fixed version (for example
"3.2.3") or a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the
cluster.
+ to the best matching Catalog existing on the
cluster (Default, the one provided by the operator version).
type: string
type: object
container:
diff --git a/pkg/apis/camel/v1/camelcatalog_types_support.go
b/pkg/apis/camel/v1/camelcatalog_types_support.go
index 98a016170..97c8808d5 100644
--- a/pkg/apis/camel/v1/camelcatalog_types_support.go
+++ b/pkg/apis/camel/v1/camelcatalog_types_support.go
@@ -182,6 +182,11 @@ func (c *CamelCatalogSpec) GetRuntimeVersion() string {
return c.Runtime.Version
}
+// GetRuntimeVersion returns the Camel K runtime version of the catalog.
+func (c *CamelCatalogSpec) GetRuntimeProvider() RuntimeProvider {
+ return c.Runtime.Provider
+}
+
// GetCamelVersion returns the Camel version the runtime is based on.
func (c *CamelCatalogSpec) GetCamelVersion() string {
return c.Runtime.Metadata["camel.version"]
diff --git a/pkg/apis/camel/v1/common_types.go
b/pkg/apis/camel/v1/common_types.go
index b5d7cb8a2..d181b1e92 100644
--- a/pkg/apis/camel/v1/common_types.go
+++ b/pkg/apis/camel/v1/common_types.go
@@ -18,10 +18,9 @@ limitations under the License.
package v1
import (
+ "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-
- "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait"
)
const (
@@ -433,10 +432,16 @@ type Flow struct {
type RuntimeProvider string
const (
- // RuntimeProviderQuarkus Camel Quarkus runtime.
+ // RuntimeProviderQuarkus Camel K runtime (Quarkus based).
RuntimeProviderQuarkus RuntimeProvider = "quarkus"
+ // RuntimeProviderPlainQuarkus Camel Quarkus plain runtime.
+ RuntimeProviderPlainQuarkus RuntimeProvider = "plain-quarkus"
)
+func (rt RuntimeProvider) IsQuarkusBased() bool {
+ return rt == RuntimeProviderQuarkus || rt == RuntimeProviderPlainQuarkus
+}
+
// SourceSpec defines the configuration for one or more routes to be executed
in a certain Camel DSL language.
type SourceSpec struct {
// contains configuration related to the source code
diff --git a/pkg/apis/camel/v1/trait/camel.go b/pkg/apis/camel/v1/trait/camel.go
index 97603d359..a08e1943f 100644
--- a/pkg/apis/camel/v1/trait/camel.go
+++ b/pkg/apis/camel/v1/trait/camel.go
@@ -22,9 +22,12 @@ package trait
// +camel-k:trait=camel.
type CamelTrait struct {
PlatformBaseTrait `property:",squash" json:",inline"`
- // The camel-k-runtime version to use for the integration. It overrides
the default version set in the Integration Platform.
+ // The runtime provider to use for the integration. (Default, Camel K
Runtime).
+ // +kubebuilder:validation:Enum=quarkus;plain-quarkus
+ RuntimeProvider string `property:"runtime-provider"
json:"runtimeProvider,omitempty"`
+ // The runtime version to use for the integration. It overrides the
default version set in the Integration Platform.
// You can use a fixed version (for example "3.2.3") or a semantic
version (for example "3.x") which will try to resolve
- // to the best matching Catalog existing on the cluster.
+ // to the best matching Catalog existing on the cluster (Default, the
one provided by the operator version).
RuntimeVersion string `property:"runtime-version"
json:"runtimeVersion,omitempty"`
// A list of properties to be provided to the Integration runtime
Properties []string `property:"properties" json:"properties,omitempty"`
diff --git a/pkg/builder/quarkus.go b/pkg/builder/quarkus.go
index 2a0b7b77a..65a09ac70 100644
--- a/pkg/builder/quarkus.go
+++ b/pkg/builder/quarkus.go
@@ -119,6 +119,7 @@ func loadCamelQuarkusCatalog(ctx *builderContext) error {
func generateQuarkusProject(ctx *builderContext) error {
p := generateQuarkusProjectCommon(
+ ctx.Build.Runtime.Provider,
ctx.Build.Runtime.Version,
ctx.Build.Runtime.Metadata["quarkus.version"],
)
@@ -132,7 +133,7 @@ func generateQuarkusProject(ctx *builderContext) error {
return nil
}
-func generateQuarkusProjectCommon(runtimeVersion string,
quarkusPlatformVersion string) maven.Project {
+func generateQuarkusProjectCommon(runtimeProvider v1.RuntimeProvider,
runtimeVersion string, quarkusPlatformVersion string) maven.Project {
p := maven.NewProjectWithGAV("org.apache.camel.k.integration",
"camel-k-integration", defaults.Version)
p.DependencyManagement = &maven.DependencyManagement{Dependencies:
make([]maven.Dependency, 0)}
p.Dependencies = make([]maven.Dependency, 0)
@@ -143,15 +144,35 @@ func generateQuarkusProjectCommon(runtimeVersion string,
quarkusPlatformVersion
// Reproducible builds:
https://maven.apache.org/guides/mini/guide-reproducible-builds.html
p.Properties.Add("project.build.outputTimestamp",
time.Now().Format(time.RFC3339))
// DependencyManagement
- p.DependencyManagement.Dependencies =
append(p.DependencyManagement.Dependencies,
- maven.Dependency{
- GroupID: "org.apache.camel.k",
- ArtifactID: "camel-k-runtime-bom",
- Version: runtimeVersion,
- Type: "pom",
- Scope: "import",
- },
- )
+ if runtimeProvider == v1.RuntimeProviderPlainQuarkus {
+ p.DependencyManagement.Dependencies =
append(p.DependencyManagement.Dependencies,
+ maven.Dependency{
+ GroupID: "io.quarkus.platform",
+ ArtifactID: "quarkus-camel-bom",
+ Version: runtimeVersion,
+ Type: "pom",
+ Scope: "import",
+ },
+ maven.Dependency{
+ GroupID: "io.quarkus.platform",
+ ArtifactID: "quarkus-bom",
+ Version: runtimeVersion,
+ Type: "pom",
+ Scope: "import",
+ },
+ )
+ } else {
+ // Camel K Runtime (Quarkus based) default
+ p.DependencyManagement.Dependencies =
append(p.DependencyManagement.Dependencies,
+ maven.Dependency{
+ GroupID: "org.apache.camel.k",
+ ArtifactID: "camel-k-runtime-bom",
+ Version: runtimeVersion,
+ Type: "pom",
+ Scope: "import",
+ },
+ )
+ }
// Plugins
p.Build.Plugins = append(p.Build.Plugins,
diff --git a/pkg/builder/quarkus_test.go b/pkg/builder/quarkus_test.go
index 42db8bdfc..44ddad33e 100644
--- a/pkg/builder/quarkus_test.go
+++ b/pkg/builder/quarkus_test.go
@@ -37,7 +37,7 @@ import (
)
func TestGenerateQuarkusProjectCommon(t *testing.T) {
- p := generateQuarkusProjectCommon("1.2.3", "4.5.6")
+ p := generateQuarkusProjectCommon(v1.RuntimeProviderQuarkus, "1.2.3",
"4.5.6")
assert.Equal(t, "org.apache.camel.k.integration", p.GroupID)
assert.Equal(t, "camel-k-integration", p.ArtifactID)
assert.Equal(t, defaults.Version, p.Version)
diff --git a/pkg/controller/integrationplatform/monitor.go
b/pkg/controller/integrationplatform/monitor.go
index 34ceff647..32df55387 100644
--- a/pkg/controller/integrationplatform/monitor.go
+++ b/pkg/controller/integrationplatform/monitor.go
@@ -27,6 +27,7 @@ import (
"github.com/apache/camel-k/v2/pkg/util/defaults"
"github.com/apache/camel-k/v2/pkg/util/openshift"
corev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// NewMonitorAction returns an action that monitors the integration platform
after it's fully initialized.
@@ -112,6 +113,13 @@ func (action *monitorAction) Handle(ctx context.Context,
platform *v1.Integratio
}
}
action.checkTraitAnnotationsDeprecatedNotice(platform)
+ if err = action.addPlainQuarkusCatalog(ctx, catalog); err != nil {
+ // Only warn the user, we don't want to fail
+ action.L.Infof(
+ "WARN: the operator wasn't able to clone %s catalog.
You won't be able to run a plain Quarkus runtime provider.",
+ catalog.Name,
+ )
+ }
return platform, nil
}
@@ -143,3 +151,75 @@ func specOrDefault(runtimeVersionSpec string) string {
}
return runtimeVersionSpec
}
+
+// addPlainQuarkusCatalog is a workaround while a CamelCatalog custom resource
is required. The goal is to clone any existing
+// Camel K Runtime catalog and adjust to make it work with plain Quarkus
runtime provider.
+func (action *monitorAction) addPlainQuarkusCatalog(ctx context.Context,
catalog *v1.CamelCatalog) error {
+ runtimeSpec := v1.RuntimeSpec{
+ Version: catalog.Spec.GetRuntimeVersion(),
+ Provider: v1.RuntimeProviderPlainQuarkus,
+ }
+ cat, err := loadCatalog(ctx, action.client, catalog.Namespace,
runtimeSpec)
+ if err != nil {
+ return err
+ }
+ if cat == nil {
+ // Clone the catalog to enable Quarkus Plain runtime
+ clonedCatalog := catalog.DeepCopy()
+ clonedCatalog.Status = v1.CamelCatalogStatus{}
+ clonedCatalog.ObjectMeta = metav1.ObjectMeta{
+ Namespace: catalog.Namespace,
+ Name: strings.ReplaceAll(catalog.Name,
"camel-catalog", "camel-catalog-quarkus"),
+ Labels: catalog.Labels,
+ Annotations: catalog.Annotations,
+ }
+ clonedCatalog.Spec.Runtime.Provider =
v1.RuntimeProviderPlainQuarkus
+ clonedCatalog.Spec.Runtime.Dependencies = []v1.MavenArtifact{
+ {
+ GroupID: "org.apache.camel.quarkus",
+ ArtifactID: "camel-quarkus-core",
+ },
+ }
+ if clonedCatalog.Spec.Runtime.Capabilities != nil {
+ clonedCatalog.Spec.Runtime.Capabilities["cron"] =
v1.Capability{
+ Dependencies: []v1.MavenArtifact{},
+ }
+ clonedCatalog.Spec.Runtime.Capabilities["knative"] =
v1.Capability{
+ Dependencies: []v1.MavenArtifact{
+ {
+ GroupID:
"org.apache.camel.quarkus",
+ ArtifactID:
"camel-quarkus-knative",
+ },
+ },
+ }
+ clonedCatalog.Spec.Runtime.Capabilities["master"] =
v1.Capability{
+ Dependencies: []v1.MavenArtifact{},
+ }
+ clonedCatalog.Spec.Runtime.Capabilities["resume-kafka"]
= v1.Capability{
+ Dependencies: []v1.MavenArtifact{},
+ }
+ clonedCatalog.Spec.Runtime.Capabilities["jolokia"] =
v1.Capability{
+ Dependencies: []v1.MavenArtifact{
+ {
+ GroupID:
"org.apache.camel.quarkus",
+ ArtifactID:
"camel-quarkus-jaxb",
+ },
+ {
+ GroupID:
"org.apache.camel.quarkus",
+ ArtifactID:
"camel-quarkus-jaxb",
+ },
+ {
+ GroupID: "org.jolokia",
+ ArtifactID: "jolokia-agent-jvm",
+ Classifier: "javaagent",
+ Version: "2.1.1",
+ },
+ },
+ }
+ }
+
+ return action.client.Create(ctx, clonedCatalog)
+ }
+
+ return nil
+}
diff --git
a/pkg/resources/config/crd/bases/camel.apache.org_integrationkits.yaml
b/pkg/resources/config/crd/bases/camel.apache.org_integrationkits.yaml
index ca19be988..e6190a4f3 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_integrationkits.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationkits.yaml
@@ -360,11 +360,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
quarkus:
diff --git
a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
index fb199688e..a5c62d97a 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
@@ -735,11 +735,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
@@ -2924,11 +2931,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
diff --git
a/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml
b/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml
index 79425e775..84efe5230 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml
@@ -604,11 +604,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
@@ -2672,11 +2679,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
diff --git a/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml
b/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml
index 2169dc54f..5baf4779a 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml
@@ -6964,11 +6964,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
@@ -8959,11 +8966,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration. It
overrides the default version set in the Integration Platform.
You can use a fixed version (for example "3.2.3") or
a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the cluster.
+ to the best matching Catalog existing on the cluster
(Default, the one provided by the operator version).
type: string
type: object
container:
diff --git a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
index 16d1270da..e71202e95 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
@@ -7027,11 +7027,18 @@ spec:
items:
type: string
type: array
+ runtimeProvider:
+ description: The runtime provider to use for the
integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
runtimeVersion:
description: |-
- The camel-k-runtime version to use for the
integration. It overrides the default version set in the Integration Platform.
+ The runtime version to use for the integration.
It overrides the default version set in the Integration Platform.
You can use a fixed version (for example
"3.2.3") or a semantic version (for example "3.x") which will try to resolve
- to the best matching Catalog existing on the
cluster.
+ to the best matching Catalog existing on the
cluster (Default, the one provided by the operator version).
type: string
type: object
container:
diff --git a/pkg/trait/camel.go b/pkg/trait/camel.go
index 6e2db3cdb..530d5a8bc 100644
--- a/pkg/trait/camel.go
+++ b/pkg/trait/camel.go
@@ -43,7 +43,8 @@ type camelTrait struct {
BasePlatformTrait
traitv1.CamelTrait `property:",squash"`
// private configuration used only internally
- runtimeVersion string
+ runtimeVersion string
+ runtimeProvider string
}
func newCamelTrait() Trait {
@@ -81,6 +82,12 @@ func (t *camelTrait) Configure(e *Environment) (bool,
*TraitCondition, error) {
t.runtimeVersion = t.RuntimeVersion
}
+ if t.RuntimeProvider == "" {
+ t.runtimeProvider = "quarkus"
+ } else {
+ t.runtimeProvider = t.RuntimeProvider
+ }
+
var cond *TraitCondition
//nolint: staticcheck
if (e.Integration != nil && !e.Integration.IsManagedBuild()) ||
(e.IntegrationKit != nil && e.IntegrationKit.IsSynthetic()) {
@@ -106,7 +113,7 @@ func (t *camelTrait) Apply(e *Environment) error {
// expects a CamelCatalog to be loaded regardless it's a managed or
// non managed build Integration
if e.CamelCatalog == nil {
- if err := t.loadOrCreateCatalog(e, t.runtimeVersion); err !=
nil {
+ if err := t.loadOrCreateCatalog(e); err != nil {
return err
}
}
@@ -140,15 +147,15 @@ func (t *camelTrait) Apply(e *Environment) error {
return nil
}
-func (t *camelTrait) loadOrCreateCatalog(e *Environment, runtimeVersion
string) error {
+func (t *camelTrait) loadOrCreateCatalog(e *Environment) error {
catalogNamespace := e.DetermineCatalogNamespace()
if catalogNamespace == "" {
return errors.New("unable to determine namespace")
}
runtime := v1.RuntimeSpec{
- Version: runtimeVersion,
- Provider: v1.RuntimeProviderQuarkus,
+ Version: t.runtimeVersion,
+ Provider: v1.RuntimeProvider(t.runtimeProvider),
}
catalog, err := camel.LoadCatalog(e.Ctx, e.Client, catalogNamespace,
runtime)
@@ -160,7 +167,7 @@ func (t *camelTrait) loadOrCreateCatalog(e *Environment,
runtimeVersion string)
// if the catalog is not found in the cluster, try to create it
if
// the required versions (camel and runtime) are not expressed
as
// semver constraints
- if exactVersionRegexp.MatchString(runtimeVersion) {
+ if exactVersionRegexp.MatchString(t.runtimeVersion) {
catalog, err = camel.CreateCatalog(e.Ctx, e.Client,
catalogNamespace, e.Platform, runtime)
if err != nil {
return err
diff --git a/pkg/trait/environment.go b/pkg/trait/environment.go
index d50b22fd9..6ce36ac3f 100644
--- a/pkg/trait/environment.go
+++ b/pkg/trait/environment.go
@@ -18,6 +18,7 @@ limitations under the License.
package trait
import (
+ "fmt"
"os"
"k8s.io/utils/ptr"
@@ -79,6 +80,10 @@ func (t *environmentTrait) Apply(e *Environment) error {
envvar.SetVal(&e.EnvVars, envVarCamelKRuntimeVersion,
e.Integration.Status.RuntimeVersion)
envvar.SetVal(&e.EnvVars, envVarMountPathConfigMaps,
camel.ConfigConfigmapsMountPath)
envvar.SetVal(&e.EnvVars, envVarMountPathSecrets,
camel.ConfigSecretsMountPath)
+ if e.CamelCatalog.GetRuntimeProvider() ==
v1.RuntimeProviderPlainQuarkus {
+ envvar.SetVal(&e.EnvVars, "QUARKUS_CONFIG_LOCATIONS",
+
fmt.Sprintf("%s/application.properties,%s/user.properties", camel.BasePath,
camel.ConfDPath))
+ }
if ptr.Deref(t.ContainerMeta, true) {
envvar.SetValFrom(&e.EnvVars, envVarNamespace,
"metadata.namespace")
diff --git a/pkg/trait/mount.go b/pkg/trait/mount.go
index fe87b5db2..dfa350530 100644
--- a/pkg/trait/mount.go
+++ b/pkg/trait/mount.go
@@ -433,43 +433,51 @@ func (t *mountTrait) computeApplicationProperties(e
*Environment) (*corev1.Confi
}
// addSourcesProperties is in charge to add the sources in the
application.properties required by Camel K Runtime.
+//
+//nolint:nestif
func (t *mountTrait) addSourcesProperties(e *Environment) {
if e.ApplicationProperties == nil {
e.ApplicationProperties = make(map[string]string)
}
- idx := 0
- for _, s := range e.Integration.AllSources() {
- // We don't process routes embedded (native) or Kamelets
- if e.isEmbedded(s) || s.IsGeneratedFromKamelet() {
- continue
- }
- srcName := strings.TrimPrefix(filepath.ToSlash(s.Name), "/")
- src := "file:" +
path.Join(filepath.ToSlash(camel.SourcesMountPath), srcName)
-
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].location", idx)] = src
+ if e.CamelCatalog.GetRuntimeProvider() ==
v1.RuntimeProviderPlainQuarkus {
+ e.ApplicationProperties["camel.main.source-location-enabled"] =
boolean.TrueString
+ e.ApplicationProperties["camel.main.routes-include-pattern"] =
fmt.Sprintf("file:%s/**", camel.SourcesMountPath)
+ } else {
+ idx := 0
+ for _, s := range e.Integration.AllSources() {
+ // We don't process routes embedded (native) or Kamelets
+ if e.isEmbedded(s) || s.IsGeneratedFromKamelet() {
+ continue
+ }
+ srcName := strings.TrimPrefix(filepath.ToSlash(s.Name),
"/")
+ src := "file:" +
path.Join(filepath.ToSlash(camel.SourcesMountPath), srcName)
+
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].location", idx)] = src
- simpleName := srcName
- if strings.Contains(srcName, ".") {
- simpleName = srcName[0:strings.Index(srcName, ".")]
- }
- e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].name",
idx)] = simpleName
+ simpleName := srcName
+ if strings.Contains(srcName, ".") {
+ simpleName = srcName[0:strings.Index(srcName,
".")]
+ }
+
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].name", idx)] =
simpleName
- for pid, p := range s.PropertyNames {
-
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].property-names[%d]",
idx, pid)] = p
- }
+ for pid, p := range s.PropertyNames {
+
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].property-names[%d]",
idx, pid)] = p
+ }
- if s.Type != "" {
-
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].type", idx)] =
string(s.Type)
- }
- if s.InferLanguage() != "" {
-
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].language", idx)] =
string(s.InferLanguage())
- }
- if s.Loader != "" {
-
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].loader", idx)] =
s.Loader
- }
- if s.Compression {
-
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].compressed", idx)] =
boolean.TrueString
+ if s.Type != "" {
+
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].type", idx)] =
string(s.Type)
+ }
+ if s.InferLanguage() != "" {
+
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].language", idx)] =
string(s.InferLanguage())
+ }
+ if s.Loader != "" {
+
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].loader", idx)] =
s.Loader
+ }
+ if s.Compression {
+
e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].compressed", idx)] =
boolean.TrueString
+ }
+
+ idx++
}
- idx++
}
}
diff --git a/pkg/trait/telemetry.go b/pkg/trait/telemetry.go
index 3eb820e89..e4ab41ec8 100644
--- a/pkg/trait/telemetry.go
+++ b/pkg/trait/telemetry.go
@@ -52,6 +52,13 @@ var (
propSamplerRatio:
"quarkus.opentelemetry.tracer.sampler.ratio",
propSamplerParentBased:
"quarkus.opentelemetry.tracer.sampler.parent-based",
},
+ v1.RuntimeProviderPlainQuarkus: {
+ propEndpoint:
"quarkus.opentelemetry.tracer.exporter.otlp.endpoint",
+ propServiceName:
"quarkus.opentelemetry.tracer.resource-attributes",
+ propSampler:
"quarkus.opentelemetry.tracer.sampler",
+ propSamplerRatio:
"quarkus.opentelemetry.tracer.sampler.ratio",
+ propSamplerParentBased:
"quarkus.opentelemetry.tracer.sampler.parent-based",
+ },
}
)
@@ -124,7 +131,7 @@ func (t *telemetryTrait) Apply(e *Environment) error {
util.StringSliceUniqueAdd(&e.Integration.Status.Capabilities,
v1.CapabilityTelemetry)
// Hack for camel-k-runtime 3.15.0
- if e.CamelCatalog.CamelCatalogSpec.Runtime.Provider ==
v1.RuntimeProviderQuarkus &&
+ if e.CamelCatalog.CamelCatalogSpec.Runtime.Provider.IsQuarkusBased() &&
e.CamelCatalog.CamelCatalogSpec.Runtime.Version == "3.15.0" {
t.setRuntimeProviderQuarkus315Properties(e)
return nil
diff --git a/pkg/util/camel/camel_dependencies.go
b/pkg/util/camel/camel_dependencies.go
index 3053d34e3..ccca746bf 100644
--- a/pkg/util/camel/camel_dependencies.go
+++ b/pkg/util/camel/camel_dependencies.go
@@ -163,7 +163,7 @@ func addBOM(project *maven.Project, dependency string)
error {
func addCamelComponent(project *maven.Project, catalog *RuntimeCatalog,
dependency string) {
artifactID := strings.TrimPrefix(dependency, "camel:")
- if catalog != nil && catalog.Runtime.Provider ==
v1.RuntimeProviderQuarkus {
+ if catalog != nil && catalog.Runtime.Provider.IsQuarkusBased() {
if !strings.HasPrefix(artifactID, "camel-") {
artifactID = "camel-quarkus-" + artifactID
}
diff --git a/pkg/util/camel/camel_runtime_catalog.go
b/pkg/util/camel/camel_runtime_catalog.go
index b98103fcc..c16972ee1 100644
--- a/pkg/util/camel/camel_runtime_catalog.go
+++ b/pkg/util/camel/camel_runtime_catalog.go
@@ -89,7 +89,7 @@ type RuntimeCatalog struct {
func (c *RuntimeCatalog) HasArtifact(artifact string) bool {
a := artifact
if !strings.HasPrefix(a, "camel-") {
- if c.Runtime.Provider == v1.RuntimeProviderQuarkus {
+ if c.Runtime.Provider.IsQuarkusBased() {
a = "camel-quarkus-" + a
} else {
a = "camel-" + a
@@ -105,7 +105,7 @@ func (c *RuntimeCatalog) HasArtifact(artifact string) bool {
func (c *RuntimeCatalog) HasLoaderByArtifact(artifact string) bool {
a := artifact
if !strings.HasPrefix(a, "camel-") {
- if c.Runtime.Provider == v1.RuntimeProviderQuarkus {
+ if c.Runtime.Provider.IsQuarkusBased() {
a = "camel-quarkus-" + a
} else {
a = "camel-" + a
diff --git a/pkg/util/camel/camel_util.go b/pkg/util/camel/camel_util.go
index 321ab9ad1..dcf8e2020 100644
--- a/pkg/util/camel/camel_util.go
+++ b/pkg/util/camel/camel_util.go
@@ -105,7 +105,7 @@ func newCatalogVersionCollection(catalogs
[]v1.CamelCatalog) CatalogVersionColle
}
func getDependency(artifact v1.CamelArtifact, runtimeProvider
v1.RuntimeProvider) string {
- if runtimeProvider == v1.RuntimeProviderQuarkus {
+ if runtimeProvider.IsQuarkusBased() {
return strings.Replace(artifact.ArtifactID, "camel-quarkus-",
"camel:", 1)
}
return strings.Replace(artifact.ArtifactID, "camel-", "camel:", 1)