This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 171a84be717 CAMEL-21276: camel-core: Lookup ENV variable should use
IOHelper to be consistent, and also support camelCase style to have more human
readable keys and still match ENV variables that are UPPER_CASE with
underscores only. (#15744)
171a84be717 is described below
commit 171a84be7173eb053c06529793732523978e2f87
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Sep 27 18:03:22 2024 +0200
CAMEL-21276: camel-core: Lookup ENV variable should use IOHelper to be
consistent, and also support camelCase style to have more human readable keys
and still match ENV variables that are UPPER_CASE with underscores only.
(#15744)
---
.../impl/debugger/DefaultBacklogDebugger.java | 3 ++-
.../properties/EnvPropertiesFunction.java | 11 ++---------
.../properties/ServiceHostPropertiesFunction.java | 9 ++-------
.../properties/ServicePortPropertiesFunction.java | 9 ++-------
.../properties/ServicePropertiesFunction.java | 5 +++--
.../java/org/apache/camel/main/MainHelper.java | 2 +-
.../org/apache/camel/support/LanguageHelper.java | 14 ++------------
core/camel-util/pom.xml | 1 +
.../org/apache/camel/util/FilePathResolver.java | 4 ++--
.../main/java/org/apache/camel/util/IOHelper.java | 22 ++++++++++++++++++++++
.../java/org/apache/camel/util/IOHelperTest.java | 4 ++++
11 files changed, 43 insertions(+), 41 deletions(-)
diff --git
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
index be0c939544e..57bad2b4e6b 100644
---
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
+++
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
@@ -52,6 +52,7 @@ import org.apache.camel.support.LoggerHelper;
import org.apache.camel.support.MessageHelper;
import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StopWatch;
import org.apache.camel.util.json.JsonObject;
import org.slf4j.Logger;
@@ -258,7 +259,7 @@ public final class DefaultBacklogDebugger extends
ServiceSupport implements Back
* the value of the system property {@link
#SUSPEND_MODE_SYSTEM_PROP_NAME}, {@code false} by default.
*/
private static boolean resolveSuspendMode() {
- final String value = System.getenv(SUSPEND_MODE_ENV_VAR_NAME);
+ final String value =
IOHelper.lookupEnvironmentVariable(SUSPEND_MODE_ENV_VAR_NAME);
return value == null ?
Boolean.getBoolean(SUSPEND_MODE_SYSTEM_PROP_NAME) : Boolean.parseBoolean(value);
}
diff --git
a/core/camel-base/src/main/java/org/apache/camel/component/properties/EnvPropertiesFunction.java
b/core/camel-base/src/main/java/org/apache/camel/component/properties/EnvPropertiesFunction.java
index 1d94cbd26b4..8bf0ff9f122 100644
---
a/core/camel-base/src/main/java/org/apache/camel/component/properties/EnvPropertiesFunction.java
+++
b/core/camel-base/src/main/java/org/apache/camel/component/properties/EnvPropertiesFunction.java
@@ -17,6 +17,7 @@
package org.apache.camel.component.properties;
import org.apache.camel.spi.PropertiesFunction;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StringHelper;
/**
@@ -39,15 +40,7 @@ public class EnvPropertiesFunction implements
PropertiesFunction {
defaultValue = StringHelper.after(remainder, ":");
}
- // lookup OS environment variable using upper case key
- key = key.toUpperCase();
-
- String value = System.getenv(key);
- // some OS do not support dashes in keys, so replace with underscore
- if (value == null) {
- String noDashKey = key.replace('-', '_');
- value = System.getenv(noDashKey);
- }
+ String value = IOHelper.lookupEnvironmentVariable(key);
return value != null ? value : defaultValue;
}
diff --git
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServiceHostPropertiesFunction.java
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServiceHostPropertiesFunction.java
index 45336fd60d3..4c10798a671 100644
---
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServiceHostPropertiesFunction.java
+++
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServiceHostPropertiesFunction.java
@@ -16,9 +16,8 @@
*/
package org.apache.camel.component.properties;
-import java.util.Locale;
-
import org.apache.camel.spi.PropertiesFunction;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StringHelper;
/**
@@ -57,12 +56,8 @@ public class ServiceHostPropertiesFunction implements
PropertiesFunction {
// make sure to use upper case
if (key != null) {
- // make sure to use underscore as dash is not supported as ENV
variables
- key = key.toUpperCase(Locale.ENGLISH).replace('-', '_');
-
// a service should have both the host and port defined
- String host = System.getenv(key + HOST_PREFIX);
-
+ String host = IOHelper.lookupEnvironmentVariable(key +
HOST_PREFIX);
if (host != null) {
return host;
} else {
diff --git
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePortPropertiesFunction.java
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePortPropertiesFunction.java
index 70d300c3776..6a9a12bed9b 100644
---
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePortPropertiesFunction.java
+++
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePortPropertiesFunction.java
@@ -16,9 +16,8 @@
*/
package org.apache.camel.component.properties;
-import java.util.Locale;
-
import org.apache.camel.spi.PropertiesFunction;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StringHelper;
/**
@@ -57,12 +56,8 @@ public class ServicePortPropertiesFunction implements
PropertiesFunction {
// make sure to use upper case
if (key != null) {
- // make sure to use underscore as dash is not supported as ENV
variables
- key = key.toUpperCase(Locale.ENGLISH).replace('-', '_');
-
// a service should have both the host and port defined
- String port = System.getenv(key + PORT_PREFIX);
-
+ String port = IOHelper.lookupEnvironmentVariable(key +
PORT_PREFIX);
if (port != null) {
return port;
} else {
diff --git
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePropertiesFunction.java
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePropertiesFunction.java
index fb2f3d137c9..4c59acbdc11 100644
---
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePropertiesFunction.java
+++
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePropertiesFunction.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.properties;
import java.util.Locale;
import org.apache.camel.spi.PropertiesFunction;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StringHelper;
/**
@@ -57,8 +58,8 @@ public class ServicePropertiesFunction implements
PropertiesFunction {
key = key.toUpperCase(Locale.ENGLISH).replace('-', '_');
// a service should have both the host and port defined
- String host = System.getenv(key + HOST_PREFIX);
- String port = System.getenv(key + PORT_PREFIX);
+ String host = IOHelper.lookupEnvironmentVariable(key +
HOST_PREFIX);
+ String port = IOHelper.lookupEnvironmentVariable(key +
PORT_PREFIX);
if (host != null && port != null) {
return host + ":" + port;
diff --git
a/core/camel-main/src/main/java/org/apache/camel/main/MainHelper.java
b/core/camel-main/src/main/java/org/apache/camel/main/MainHelper.java
index c4647e982c2..d3fbddf00c4 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/MainHelper.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/MainHelper.java
@@ -111,7 +111,7 @@ public final class MainHelper {
public static Optional<String> lookupPropertyFromSysOrEnv(String name) {
String answer = System.getProperty(name);
if (answer == null) {
- answer = System.getenv(toEnvVar(name));
+ answer = IOHelper.lookupEnvironmentVariable(name);
}
return Optional.ofNullable(answer);
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
b/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
index 03fd5350720..f9cc5123e57 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
@@ -32,6 +32,7 @@ import org.apache.camel.ExchangePropertyKey;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.ExchangeFormatter;
import org.apache.camel.support.processor.DefaultExchangeFormatter;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.TimeUtils;
public final class LanguageHelper {
@@ -169,18 +170,7 @@ public final class LanguageHelper {
* @return the environment variable value
*/
public static String sysenv(String name) {
- String answer = null;
- if (name != null) {
- // lookup OS env with upper case key
- name = name.toUpperCase();
- answer = System.getenv(name);
- // some OS do not support dashes in keys, so replace with
underscore
- if (answer == null) {
- String noDashKey = name.replace('-', '_');
- answer = System.getenv(noDashKey);
- }
- }
- return answer;
+ return IOHelper.lookupEnvironmentVariable(name);
}
public static String escapeQuotes(String text) {
diff --git a/core/camel-util/pom.xml b/core/camel-util/pom.xml
index cde6fcb8ac0..43bcb1dd82f 100644
--- a/core/camel-util/pom.xml
+++ b/core/camel-util/pom.xml
@@ -266,6 +266,7 @@
<environmentVariables>
<FOO_SERVICE_HOST>myserver</FOO_SERVICE_HOST>
<FOO_SERVICE_PORT>8081</FOO_SERVICE_PORT>
+
<CAMEL_KAMELET_AWS_S3_SOURCE_BUCKET_NAME_OR_ARN>mys3arn</CAMEL_KAMELET_AWS_S3_SOURCE_BUCKET_NAME_OR_ARN>
</environmentVariables>
</configuration>
</plugin>
diff --git
a/core/camel-util/src/main/java/org/apache/camel/util/FilePathResolver.java
b/core/camel-util/src/main/java/org/apache/camel/util/FilePathResolver.java
index 04672fdc9ec..bfc8d156f70 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/FilePathResolver.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/FilePathResolver.java
@@ -49,7 +49,7 @@ public final class FilePathResolver {
int pos = fun.indexOf("${env:");
if (pos != -1) {
String key = fun.substring(pos + 6);
- String value = System.getenv(key);
+ String value = IOHelper.lookupEnvironmentVariable(key);
if (value != null) {
path = path.replace("${env:" + key + "}", value);
}
@@ -57,7 +57,7 @@ public final class FilePathResolver {
pos = fun.indexOf("${env.");
if (pos != -1) {
String key = fun.substring(pos + 6);
- String value = System.getenv(key);
+ String value = IOHelper.lookupEnvironmentVariable(key);
if (value != null) {
path = path.replace("${env." + key + "}", value);
}
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
b/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
index d57ae4d50b2..a1bbd9f4a3b 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
@@ -668,6 +668,15 @@ public final class IOHelper {
/**
* Lookup the OS environment variable in a safe manner by using upper case
keys and underscore instead of dash.
+ *
+ * At first lookup attempt is made without considering camelCase keys. The
second lookup is converting camelCase to
+ * underscores.
+ *
+ * For example given an ENV variable in either format: -
CAMEL_KAMELET_AWS_S3_SOURCE_BUCKETNAMEORARN=myArn -
+ * CAMEL_KAMELET_AWS_S3_SOURCE_BUCKET_NAME_OR_ARN=myArn
+ *
+ * Then the following keys can lookup both ENV formats above: -
camel.kamelet.awsS3Source.bucketNameOrArn -
+ * camel.kamelet.aws-s3-source.bucketNameOrArn -
camel.kamelet.aws-s3-source.bucket-name-or-arn
*/
public static String lookupEnvironmentVariable(String key) {
// lookup OS env with upper case key
@@ -684,6 +693,19 @@ public final class IOHelper {
value = System.getenv(normalizedKey);
}
+ if (value == null) {
+ // camelCase keys should use underscore as separator
+ String caseKey = StringHelper.camelCaseToDash(key);
+ caseKey = caseKey.toUpperCase();
+ // some OS do not support dashes in keys, so replace with
underscore
+ String normalizedKey = caseKey.replace('-', '_');
+
+ // and replace dots with underscores so keys like my.key are
+ // translated to MY_KEY
+ normalizedKey = normalizedKey.replace('.', '_');
+
+ value = System.getenv(normalizedKey);
+ }
return value;
}
diff --git
a/core/camel-util/src/test/java/org/apache/camel/util/IOHelperTest.java
b/core/camel-util/src/test/java/org/apache/camel/util/IOHelperTest.java
index 997907a978c..c7c820ef041 100644
--- a/core/camel-util/src/test/java/org/apache/camel/util/IOHelperTest.java
+++ b/core/camel-util/src/test/java/org/apache/camel/util/IOHelperTest.java
@@ -28,6 +28,10 @@ public class IOHelperTest {
assertEquals("8081",
IOHelper.lookupEnvironmentVariable("foo-service.port"));
assertEquals("8081",
IOHelper.lookupEnvironmentVariable("foo-service-port"));
assertEquals("8081",
IOHelper.lookupEnvironmentVariable("foo.service.port"));
+
+ assertEquals("mys3arn",
IOHelper.lookupEnvironmentVariable("camel.kamelet.aws-s3-source.bucketNameOrArn"));
+ assertEquals("mys3arn",
IOHelper.lookupEnvironmentVariable("camel.kamelet.aws-s3-source.bucket-name-or-arn"));
+ assertEquals("mys3arn",
IOHelper.lookupEnvironmentVariable("camel.kamelet.awsS3Source.bucketNameOrArn"));
}
@Test