Skip to content

Commit 629e46b

Browse files
jfredenelasticsearchmachine
andauthored
[CI] Fix FC config issue for old versions RCS 2.0 BWC tests (#136537)
* [CI] Fix FC config issue for old versions RCS 2.0 BWC tests --------- Co-authored-by: elasticsearchmachine <[email protected]>
1 parent 2e62dab commit 629e46b

File tree

3 files changed

+39
-5
lines changed

3 files changed

+39
-5
lines changed

x-pack/plugin/security/qa/multi-cluster/src/javaRestTest/java/org/elasticsearch/xpack/remotecluster/AbstractRemoteClusterSecurityTestCase.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
package org.elasticsearch.xpack.remotecluster;
99

10+
import io.netty.handler.codec.http.HttpMethod;
11+
1012
import org.apache.http.HttpHost;
1113
import org.apache.http.client.methods.HttpPost;
1214
import org.elasticsearch.client.Request;
@@ -25,6 +27,7 @@
2527
import org.elasticsearch.test.cluster.util.resource.Resource;
2628
import org.elasticsearch.test.rest.ESRestTestCase;
2729
import org.elasticsearch.test.rest.ObjectPath;
30+
import org.elasticsearch.xpack.security.SecurityFeatures;
2831
import org.junit.AfterClass;
2932
import org.junit.BeforeClass;
3033

@@ -33,8 +36,11 @@
3336
import java.nio.charset.StandardCharsets;
3437
import java.util.Arrays;
3538
import java.util.Base64;
39+
import java.util.List;
3640
import java.util.Locale;
3741
import java.util.Map;
42+
import java.util.Set;
43+
import java.util.stream.Collectors;
3844

3945
import static org.hamcrest.Matchers.anEmptyMap;
4046
import static org.hamcrest.Matchers.equalTo;
@@ -78,6 +84,7 @@ public abstract class AbstractRemoteClusterSecurityTestCase extends ESRestTestCa
7884
.configFile("remote-cluster-client.key", Resource.fromClasspath("ssl/remote-cluster-client.key"))
7985
.configFile("remote-cluster-client.crt", Resource.fromClasspath("ssl/remote-cluster-client.crt"))
8086
.configFile("remote-cluster-client-ca.crt", Resource.fromClasspath("ssl/remote-cluster-client-ca.crt"))
87+
.configFile("signing.crt", Resource.fromClasspath("signing/signing.crt"))
8188
.module("reindex") // Needed for the role metadata migration
8289
.user(USER, PASS.toString());
8390

@@ -197,8 +204,10 @@ protected void configureRemoteCluster(
197204
boolean isProxyMode,
198205
boolean skipUnavailable
199206
) throws Exception {
207+
putFulfillingClusterSettings();
208+
200209
// For configurable remote cluster security, this method assumes the cross cluster access API key is already configured in keystore
201-
putRemoteClusterSettings(clusterAlias, targetFulfillingCluster, basicSecurity, isProxyMode, skipUnavailable);
210+
putQueryClusterSettings(clusterAlias, targetFulfillingCluster, basicSecurity, isProxyMode, skipUnavailable);
202211

203212
// Ensure remote cluster is connected
204213
checkRemoteConnection(clusterAlias, targetFulfillingCluster, basicSecurity, isProxyMode);
@@ -234,7 +243,18 @@ protected void reloadSecureSettings() throws IOException {
234243
}
235244
}
236245

237-
protected void putRemoteClusterSettings(
246+
protected void putFulfillingClusterSettings() throws IOException {
247+
if (getFulfillingClusterNodeFeatures().contains(SecurityFeatures.CERTIFICATE_IDENTITY_FIELD_FEATURE.id())) {
248+
final var request = newXContentRequest(HttpMethod.PUT, "/_cluster/settings", (builder, params) -> {
249+
builder.startObject("persistent");
250+
Settings.builder().put("cluster.remote.signing.certificate_authorities", "signing.crt").build().toXContent(builder, params);
251+
return builder.endObject();
252+
});
253+
assertOK(performRequestAgainstFulfillingCluster(request));
254+
}
255+
}
256+
257+
protected void putQueryClusterSettings(
238258
String clusterAlias,
239259
ElasticsearchCluster targetFulfillingCluster,
240260
boolean basicSecurity,
@@ -303,6 +323,22 @@ protected static String randomEncodedApiKey() {
303323
.encodeToString((UUIDs.base64UUID() + ":" + UUIDs.randomBase64UUIDSecureString()).getBytes(StandardCharsets.UTF_8));
304324
}
305325

326+
protected Set<String> getFulfillingClusterNodeFeatures() throws IOException {
327+
final Request request = new Request("GET", "_cluster/state");
328+
request.addParameter("filter_path", "nodes_features");
329+
final Response response = performRequestAgainstFulfillingCluster(request);
330+
331+
var responseData = responseAsMap(response);
332+
if (responseData.get("nodes_features") instanceof List<?> nodesFeatures) {
333+
return nodesFeatures.stream().map(Map.class::cast).flatMap(nodeFeatureMap -> {
334+
@SuppressWarnings("unchecked")
335+
List<String> features = (List<String>) nodeFeatureMap.get("features");
336+
return features.stream();
337+
}).collect(Collectors.toSet());
338+
}
339+
return Set.of();
340+
}
341+
306342
protected record TestClusterConfigProviders(LocalClusterConfigProvider server, LocalClusterConfigProvider client) {}
307343

308344
protected static TestClusterConfigProviders EMPTY_CONFIG_PROVIDERS = new TestClusterConfigProviders(cluster -> {}, cluster -> {});

x-pack/plugin/security/qa/multi-cluster/src/javaRestTest/java/org/elasticsearch/xpack/remotecluster/RemoteClusterSecurityBWCToRCS2ClusterRestIT.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ public class RemoteClusterSecurityBWCToRCS2ClusterRestIT extends AbstractRemoteC
4040
.setting("xpack.ml.enabled", "false")
4141
.setting("remote_cluster_server.enabled", "true")
4242
.setting("remote_cluster.port", "0")
43-
.setting("cluster.remote.signing.certificate_authorities", "signing.crt")
44-
.configFile("signing.crt", Resource.fromClasspath("signing/signing.crt"))
4543
.setting("xpack.security.remote_cluster_server.ssl.enabled", "true")
4644
.setting("xpack.security.remote_cluster_server.ssl.key", "remote-cluster.key")
4745
.setting("xpack.security.remote_cluster_server.ssl.certificate", "remote-cluster.crt")

x-pack/plugin/security/qa/multi-cluster/src/javaRestTest/java/org/elasticsearch/xpack/remotecluster/RemoteClusterSecurityReloadCredentialsRestIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ private void configureRcs2() throws Exception {
197197
final boolean configureSettingsFirst = randomBoolean();
198198
// it's valid to first configure remote cluster, then credentials
199199
if (configureSettingsFirst) {
200-
putRemoteClusterSettings("my_remote_cluster", fulfillingCluster, false, isProxyMode, randomBoolean());
200+
putQueryClusterSettings("my_remote_cluster", fulfillingCluster, false, isProxyMode, randomBoolean());
201201
}
202202

203203
configureRemoteClusterCredentials("my_remote_cluster", remoteClusterCredentials, keystoreSettings);

0 commit comments

Comments
 (0)