Skip to content

Commit 46e26c7

Browse files
authored
Improve exception message for bad environment variable placeholders in settings (#114552)
Closes #110858
1 parent a9b9172 commit 46e26c7

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

docs/changelog/114552.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 114552
2+
summary: Improve exception message for bad environment variable placeholders in settings
3+
area: Infra/Settings
4+
type: enhancement
5+
issues: [110858]

server/src/main/java/org/elasticsearch/node/InternalSettingsPreparer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,11 @@ public static Environment prepareEnvironment(
5454
loadOverrides(output, properties);
5555
output.put(input);
5656
replaceForcedSettings(output);
57-
output.replacePropertyPlaceholders();
57+
try {
58+
output.replacePropertyPlaceholders();
59+
} catch (Exception e) {
60+
throw new SettingsException("Failed to replace property placeholders from [" + configFile.getFileName() + "]", e);
61+
}
5862
ensureSpecialSettingsExist(output, defaultNodeName);
5963

6064
return new Environment(output.build(), configDir);

server/src/test/java/org/elasticsearch/node/InternalSettingsPreparerTests.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,20 @@ public void testGarbageIsNotSwallowed() throws IOException {
8686
}
8787
}
8888

89+
public void testReplacePlaceholderFailure() {
90+
try {
91+
InternalSettingsPreparer.prepareEnvironment(
92+
Settings.builder().put(baseEnvSettings).put("cluster.name", "${ES_CLUSTER_NAME}").build(),
93+
emptyMap(),
94+
null,
95+
() -> "default_node_name"
96+
);
97+
fail("Expected SettingsException");
98+
} catch (SettingsException e) {
99+
assertEquals("Failed to replace property placeholders from [elasticsearch.yml]", e.getMessage());
100+
}
101+
}
102+
89103
public void testSecureSettings() {
90104
MockSecureSettings secureSettings = new MockSecureSettings();
91105
secureSettings.setString("foo", "secret");

0 commit comments

Comments
 (0)