diff --git a/e2e/common/config/config_test.go b/e2e/common/config/config_test.go index fe3904fa73..dc6f146407 100644 --- a/e2e/common/config/config_test.go +++ b/e2e/common/config/config_test.go @@ -71,18 +71,6 @@ func TestRunConfigProperties(t *testing.T) { g.Eventually(IntegrationLogs(t, ctx, ns, "property-route"), TestTimeoutShort).Should(ContainSubstring("my-configmap-property-value")) }) - t.Run("Property from ConfigMap as property file", func(t *testing.T) { - var cmData = make(map[string]string) - cmData["my.properties"] = "my.message=my-configmap-property-entry" - err := CreatePlainTextConfigmap(t, ctx, ns, "my-cm-test-properties", cmData) - g.Expect(err).To(BeNil()) - - g.Expect(KamelRun(t, ctx, ns, "./files/property-route.yaml", "-p", "configmap:my-cm-test-properties").Execute()).To(Succeed()) - g.Eventually(IntegrationPodPhase(t, ctx, ns, "property-route"), TestTimeoutLong).Should(Equal(corev1.PodRunning)) - g.Eventually(IntegrationConditionStatus(t, ctx, ns, "property-route", v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue)) - g.Eventually(IntegrationLogs(t, ctx, ns, "property-route"), TestTimeoutShort).Should(ContainSubstring("my-configmap-property-entry")) - }) - t.Run("Property from Secret", func(t *testing.T) { var secData = make(map[string]string) secData["my.message"] = "my-secret-property-value" @@ -95,18 +83,6 @@ func TestRunConfigProperties(t *testing.T) { g.Eventually(IntegrationLogs(t, ctx, ns, "property-route"), TestTimeoutShort).Should(ContainSubstring("my-secret-property-value")) }) - t.Run("Property from Secret as property file", func(t *testing.T) { - var secData = make(map[string]string) - secData["my.properties"] = "my.message=my-secret-property-entry" - err := CreatePlainTextSecret(t, ctx, ns, "my-sec-test-properties", secData) - g.Expect(err).To(BeNil()) - - g.Expect(KamelRun(t, ctx, ns, "./files/property-route.yaml", "--name", "property-route-secret", "-p", "secret:my-sec-test-properties").Execute()).To(Succeed()) - g.Eventually(IntegrationPodPhase(t, ctx, ns, "property-route-secret"), TestTimeoutLong).Should(Equal(corev1.PodRunning)) - g.Eventually(IntegrationConditionStatus(t, ctx, ns, "property-route-secret", v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue)) - g.Eventually(IntegrationLogs(t, ctx, ns, "property-route-secret"), TestTimeoutShort).Should(ContainSubstring("my-secret-property-entry")) - }) - t.Run("Property from Secret inlined", func(t *testing.T) { var secData = make(map[string]string) secData["my-message"] = "my-secret-external-value" @@ -172,19 +148,6 @@ func TestRunConfigConfigmaps(t *testing.T) { g.Eventually(IntegrationLogs(t, ctx, ns, "resource-configmap-key-location-route"), TestTimeoutShort).ShouldNot(ContainSubstring(cmDataMulti["my-configmap-key"])) g.Eventually(IntegrationLogs(t, ctx, ns, "resource-configmap-key-location-route"), TestTimeoutShort).Should(ContainSubstring(cmDataMulti["my-configmap-key-2"])) }) - - t.Run("Config configmap as property file", func(t *testing.T) { - // Store a configmap as property file - var cmDataProps = make(map[string]string) - cmDataProps["my.properties"] = "my.key.1=hello\nmy.key.2=world" - err = CreatePlainTextConfigmap(t, ctx, ns, "my-cm-properties", cmDataProps) - g.Expect(err).To(BeNil()) - - g.Expect(KamelRun(t, ctx, ns, "./files/config-configmap-properties-route.yaml", "--config", "configmap:my-cm-properties").Execute()).To(Succeed()) - g.Eventually(IntegrationPodPhase(t, ctx, ns, "config-configmap-properties-route"), TestTimeoutLong).Should(Equal(corev1.PodRunning)) - g.Eventually(IntegrationConditionStatus(t, ctx, ns, "config-configmap-properties-route", v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue)) - g.Eventually(IntegrationLogs(t, ctx, ns, "config-configmap-properties-route"), TestTimeoutShort).Should(ContainSubstring("hello world")) - }) }) } diff --git a/e2e/common/traits/builder_test.go b/e2e/common/traits/builder_test.go index d2aab88592..12b40aa346 100644 --- a/e2e/common/traits/builder_test.go +++ b/e2e/common/traits/builder_test.go @@ -191,7 +191,7 @@ func TestBuilderTrait(t *testing.T) { // Check logs g.Eventually(Logs(t, ctx, integrationKitNamespace, builderKitName, corev1.PodLogOptions{Container: "custom1"})).Should(ContainSubstring(`generated-bytecode.jar`)) - g.Eventually(Logs(t, ctx, integrationKitNamespace, builderKitName, corev1.PodLogOptions{Container: "custom2"})).Should(ContainSubstring(`camel-k-runtime-bom`)) + g.Eventually(Logs(t, ctx, integrationKitNamespace, builderKitName, corev1.PodLogOptions{Container: "custom2"})).Should(ContainSubstring(`camel-k-integration`)) }) t.Run("Run custom pipeline task error", func(t *testing.T) { diff --git a/pkg/controller/integrationplatform/monitor.go b/pkg/controller/integrationplatform/monitor.go index 32df553879..816c9f4541 100644 --- a/pkg/controller/integrationplatform/monitor.go +++ b/pkg/controller/integrationplatform/monitor.go @@ -192,8 +192,10 @@ func (action *monitorAction) addPlainQuarkusCatalog(ctx context.Context, catalog }, }, } + runtimesProps := clonedCatalog.Spec.Runtime.Capabilities["master"].RuntimeProperties clonedCatalog.Spec.Runtime.Capabilities["master"] = v1.Capability{ - Dependencies: []v1.MavenArtifact{}, + Dependencies: []v1.MavenArtifact{}, + RuntimeProperties: runtimesProps, } clonedCatalog.Spec.Runtime.Capabilities["resume-kafka"] = v1.Capability{ Dependencies: []v1.MavenArtifact{}, @@ -206,7 +208,7 @@ func (action *monitorAction) addPlainQuarkusCatalog(ctx context.Context, catalog }, { GroupID: "org.apache.camel.quarkus", - ArtifactID: "camel-quarkus-jaxb", + ArtifactID: "camel-quarkus-management", }, { GroupID: "org.jolokia", diff --git a/pkg/trait/mount.go b/pkg/trait/mount.go index dfa350530b..b1a3d3034e 100644 --- a/pkg/trait/mount.go +++ b/pkg/trait/mount.go @@ -439,7 +439,13 @@ func (t *mountTrait) addSourcesProperties(e *Environment) { if e.ApplicationProperties == nil { e.ApplicationProperties = make(map[string]string) } - if e.CamelCatalog.GetRuntimeProvider() == v1.RuntimeProviderPlainQuarkus { + isQuarkusNative := false + if qt := e.Catalog.GetTrait(quarkusTraitID); qt != nil { + if quarkus, ok := qt.(*quarkusTrait); ok && quarkus.isNativeIntegration(e) { + isQuarkusNative = true + } + } + if e.CamelCatalog.GetRuntimeProvider() == v1.RuntimeProviderPlainQuarkus && !isQuarkusNative { e.ApplicationProperties["camel.main.source-location-enabled"] = boolean.TrueString e.ApplicationProperties["camel.main.routes-include-pattern"] = fmt.Sprintf("file:%s/**", camel.SourcesMountPath) } else { diff --git a/pkg/util/source/inspector.go b/pkg/util/source/inspector.go index 1c697b9a45..8d58602a21 100644 --- a/pkg/util/source/inspector.go +++ b/pkg/util/source/inspector.go @@ -50,6 +50,7 @@ var ( camelTypeRegexp = regexp.MustCompile(`.*(org.apache.camel.*Component|DataFormat|Language)`) jsonLibraryRegexp = regexp.MustCompile(`.*JsonLibrary\.Jackson.*`) jsonLanguageRegexp = regexp.MustCompile(`.*\.json\(\).*`) + beanRegexp = regexp.MustCompile(`.*\.bean\(.*\).*`) circuitBreakerRegexp = regexp.MustCompile(`.*\.circuitBreaker\(\).*`) restConfigurationRegexp = regexp.MustCompile(`.*restConfiguration\(\).*`) restRegexp = regexp.MustCompile(`.*rest\s*\([^)]*\).*`) @@ -70,6 +71,13 @@ var ( } sourceDependencies = map[*regexp.Regexp]catalog2deps{ + beanRegexp: func(catalog *camel.RuntimeCatalog) []string { + res := make([]string, 0) + if bean := catalog.GetArtifactByScheme("bean"); bean != nil { + res = append(res, bean.GetDependencyID()) + } + return res + }, jsonLibraryRegexp: func(catalog *camel.RuntimeCatalog) []string { res := make([]string, 0) if jsonDF := catalog.GetArtifactByDataFormat(defaultJSONDataFormat); jsonDF != nil { diff --git a/pkg/util/source/inspector_java_source_test.go b/pkg/util/source/inspector_java_source_test.go index 33e4722ba6..4d52c9864f 100644 --- a/pkg/util/source/inspector_java_source_test.go +++ b/pkg/util/source/inspector_java_source_test.go @@ -190,3 +190,19 @@ public void configure() throws Exception { require.NoError(t, err) assert.Contains(t, meta.Dependencies.List(), "camel:rest-openapi") } + +func TestJavaBeanDependencies(t *testing.T) { + inspector := newTestJavaSourceInspector(t) + + sourceSpec := &v1.SourceSpec{ + DataSpec: v1.DataSpec{ + Name: "test.java", + Content: "from(\"timer:foo\").bean(\"myBean\").to(\"log:bar\")", + }, + } + assertExtract(t, inspector, sourceSpec.Content, func(meta *Metadata) { + assert.Contains(t, meta.Dependencies.List(), "camel:timer") + assert.Contains(t, meta.Dependencies.List(), "camel:bean") + assert.Contains(t, meta.Dependencies.List(), "camel:log") + }) +} diff --git a/pkg/util/source/inspector_xml_test.go b/pkg/util/source/inspector_xml_test.go index 98f326ced0..a8de694771 100644 --- a/pkg/util/source/inspector_xml_test.go +++ b/pkg/util/source/inspector_xml_test.go @@ -228,3 +228,13 @@ func TestXMLRestOpenapiFirst(t *testing.T) { require.NoError(t, err) assert.Contains(t, meta.Dependencies.List(), "camel:rest-openapi") } + +func TestXMLBeanDependencies(t *testing.T) { + inspector := newTestXMLInspector(t) + + assertExtract(t, inspector, "something", func(meta *Metadata) { + assert.Contains(t, meta.Dependencies.List(), "camel:timer") + assert.Contains(t, meta.Dependencies.List(), "camel:bean") + assert.Contains(t, meta.Dependencies.List(), "camel:log") + }) +} diff --git a/pkg/util/source/inspector_yaml.go b/pkg/util/source/inspector_yaml.go index dac9165c06..3b280fc7f0 100644 --- a/pkg/util/source/inspector_yaml.go +++ b/pkg/util/source/inspector_yaml.go @@ -88,6 +88,10 @@ func (i YAMLInspector) parseDefinition(def map[string]interface{}, meta *Metadat //nolint:nestif func (i YAMLInspector) parseStep(key string, content interface{}, meta *Metadata) error { switch key { + case "bean": + if bean := i.catalog.GetArtifactByScheme("bean"); bean != nil { + meta.AddDependency(bean.GetDependencyID()) + } case "rest": meta.ExposesHTTPServices = true meta.RequiredCapabilities.Add(v1.CapabilityRest) diff --git a/pkg/util/source/inspector_yaml_test.go b/pkg/util/source/inspector_yaml_test.go index 03cd991788..fbe8c286ee 100644 --- a/pkg/util/source/inspector_yaml_test.go +++ b/pkg/util/source/inspector_yaml_test.go @@ -757,3 +757,22 @@ func TestYAMLRESTContractFirst(t *testing.T) { }) }) } + +const yamlBean = ` +- from: + uri: "timer:foo" + steps: + - bean: + type: "#xyz" + - to: "log:bar" +` + +func TestYamlBeanDependencies(t *testing.T) { + inspector := newTestYAMLInspector(t) + + assertExtract(t, inspector, yamlBean, func(meta *Metadata) { + assert.Contains(t, meta.Dependencies.List(), "camel:timer") + assert.Contains(t, meta.Dependencies.List(), "camel:bean") + assert.Contains(t, meta.Dependencies.List(), "camel:log") + }) +} diff --git a/pkg/util/util.go b/pkg/util/util.go index 3a53b21caa..d043591f1e 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -43,53 +43,6 @@ import ( yaml2 "gopkg.in/yaml.v2" ) -// Directories and file names: - -// DefaultDependenciesDirectoryName --. -const DefaultDependenciesDirectoryName = "dependencies" - -// DefaultPropertiesDirectoryName --. -const DefaultPropertiesDirectoryName = "properties" - -// DefaultRoutesDirectoryName --. -const DefaultRoutesDirectoryName = "routes" - -// DefaultWorkingDirectoryName --. -const DefaultWorkingDirectoryName = "workspace" - -// CustomQuarkusDirectoryName --. -const CustomQuarkusDirectoryName = "quarkus" - -// CustomAppDirectoryName --. -const CustomAppDirectoryName = "app" - -// CustomLibDirectoryName --. -const CustomLibDirectoryName = "lib/main" - -// ContainerDependenciesDirectory --. -var ContainerDependenciesDirectory = "/deployments/dependencies" - -// ContainerPropertiesDirectory --. -var ContainerPropertiesDirectory = "/etc/camel/conf.d" - -// ContainerRoutesDirectory --. -var ContainerRoutesDirectory = "/etc/camel/sources" - -// ContainerResourcesDirectory --. -var ContainerResourcesDirectory = "/etc/camel/resources.d" - -// ContainerQuarkusDirectoryName --. -const ContainerQuarkusDirectoryName = "/quarkus" - -// ContainerAppDirectoryName --. -const ContainerAppDirectoryName = "/app" - -// ContainerLibDirectoryName --. -const ContainerLibDirectoryName = "/lib/main" - -// QuarkusDependenciesBaseDirectory --. -var QuarkusDependenciesBaseDirectory = "/quarkus-app" - // ListOfLazyEvaluatedEnvVars -- List of unevaluated environment variables. // These are sensitive values or values that may have different values depending on // where the integration is run (locally vs. the cloud). These environment variables