Skip to content

Commit 7493250

Browse files
authored
Enroll Node API doesn't return a cluster name (#74514)
During implementation we discovered that the clusters should not necessarily have a unique name and thus we don't need to convey this information in the response of the Enroll Node API.
1 parent 49ca629 commit 7493250

File tree

8 files changed

+23
-57
lines changed

8 files changed

+23
-57
lines changed

client/rest-high-level/src/main/java/org/elasticsearch/client/security/NodeEnrollmentResponse.java

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,14 @@ public class NodeEnrollmentResponse {
2323
private final String httpCaCert;
2424
private final String transportKey;
2525
private final String transportCert;
26-
private final String clusterName;
2726
private final List<String> nodesAddresses;
2827

29-
public NodeEnrollmentResponse(String httpCaKey, String httpCaCert, String transportKey, String transportCert, String clusterName,
28+
public NodeEnrollmentResponse(String httpCaKey, String httpCaCert, String transportKey, String transportCert,
3029
List<String> nodesAddresses){
3130
this.httpCaKey = httpCaKey;
3231
this.httpCaCert = httpCaCert;
3332
this.transportKey = transportKey;
3433
this.transportCert = transportCert;
35-
this.clusterName = clusterName;
3634
this.nodesAddresses = Collections.unmodifiableList(nodesAddresses);
3735
}
3836

@@ -52,10 +50,6 @@ public String getTransportCert() {
5250
return transportCert;
5351
}
5452

55-
public String getClusterName() {
56-
return clusterName;
57-
}
58-
5953
public List<String> getNodesAddresses() {
6054
return nodesAddresses;
6155
}
@@ -64,7 +58,6 @@ public List<String> getNodesAddresses() {
6458
private static final ParseField HTTP_CA_CERT = new ParseField("http_ca_cert");
6559
private static final ParseField TRANSPORT_KEY = new ParseField("transport_key");
6660
private static final ParseField TRANSPORT_CERT = new ParseField("transport_cert");
67-
private static final ParseField CLUSTER_NAME = new ParseField("cluster_name");
6861
private static final ParseField NODES_ADDRESSES = new ParseField("nodes_addresses");
6962

7063
@SuppressWarnings("unchecked")
@@ -75,17 +68,15 @@ public List<String> getNodesAddresses() {
7568
final String httpCaCert = (String) a[1];
7669
final String transportKey = (String) a[2];
7770
final String transportCert = (String) a[3];
78-
final String clusterName = (String) a[4];
79-
final List<String> nodesAddresses = (List<String>) a[5];
80-
return new NodeEnrollmentResponse(httpCaKey, httpCaCert, transportKey, transportCert, clusterName, nodesAddresses);
71+
final List<String> nodesAddresses = (List<String>) a[4];
72+
return new NodeEnrollmentResponse(httpCaKey, httpCaCert, transportKey, transportCert, nodesAddresses);
8173
});
8274

8375
static {
8476
PARSER.declareString(ConstructingObjectParser.constructorArg(), HTTP_CA_KEY);
8577
PARSER.declareString(ConstructingObjectParser.constructorArg(), HTTP_CA_CERT);
8678
PARSER.declareString(ConstructingObjectParser.constructorArg(), TRANSPORT_KEY);
8779
PARSER.declareString(ConstructingObjectParser.constructorArg(), TRANSPORT_CERT);
88-
PARSER.declareString(ConstructingObjectParser.constructorArg(), CLUSTER_NAME);
8980
PARSER.declareStringArray(ConstructingObjectParser.constructorArg(), NODES_ADDRESSES);
9081
}
9182

@@ -98,11 +89,11 @@ public static NodeEnrollmentResponse fromXContent(XContentParser parser) throws
9889
if (o == null || getClass() != o.getClass()) return false;
9990
NodeEnrollmentResponse that = (NodeEnrollmentResponse) o;
10091
return httpCaKey.equals(that.httpCaKey) && httpCaCert.equals(that.httpCaCert) && transportKey.equals(that.transportKey)
101-
&& transportCert.equals(that.transportCert) && clusterName.equals(that.clusterName)
92+
&& transportCert.equals(that.transportCert)
10293
&& nodesAddresses.equals(that.nodesAddresses);
10394
}
10495

10596
@Override public int hashCode() {
106-
return Objects.hash(httpCaKey, httpCaCert, transportKey, transportCert, clusterName, nodesAddresses);
97+
return Objects.hash(httpCaKey, httpCaCert, transportKey, transportCert, nodesAddresses);
10798
}
10899
}

client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/SecurityDocumentationIT.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2881,8 +2881,7 @@ public void testNodeEnrollment() throws Exception {
28812881
String httpCaCert = response.getHttpCaCert(); // <2>
28822882
String transportKey = response.getTransportKey(); // <3>
28832883
String transportCert = response.getTransportCert(); // <4>
2884-
String clusterName = response.getClusterName(); // <5>
2885-
List<String> nodesAddresses = response.getNodesAddresses(); // <6>
2884+
List<String> nodesAddresses = response.getNodesAddresses(); // <5>
28862885
// end::node-enrollment-response
28872886
}
28882887

docs/java-rest/high-level/cluster/enroll_node.asciidoc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ for the HTTP layer, as a Base64 encoded string of the ASN.1 DER encoding of the
3737
encoded string of the ASN.1 DER encoding of the key.
3838
<4> The certificate that the node can use for TLS for its transport layer, as a Base64
3939
encoded string of the ASN.1 DER encoding of the certificate.
40-
<5> The name of the cluster the new node is joining
41-
<6> A list of transport addresses in the form of `host:port` for the nodes that are already
40+
<5> A list of transport addresses in the form of `host:port` for the nodes that are already
4241
members of the cluster.
4342

4443

x-pack/docs/en/rest-api/security/enroll-node.asciidoc

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ The API returns a response such as
3939
"http_ca_cert" : "MIIJlAIBAzCCCVoGCSqGSIb3DQEHAaCCCUsEgglHMIIJQzCCA98GCSqGSIb3DQ....vsDfsA3UZBAjEPfhubpQysAICCAA=", <2>
4040
"transport_key" : "MIIEJgIBAzCCA98GCSqGSIb3DQEHAaCCA9AEggPMMIIDyDCCA8QGCSqGSIb3....YuEiOXvqZ6jxuVSQ0CAwGGoA==", <3>
4141
"transport_cert" : "MIIEJgIBAzCCA98GCSqGSIb3DQEHAaCCA9AEggPMMIIDyDCCA8QGCSqGSIb3....YuEiOXvqZ6jxuVSQ0CAwGGoA==", <4>
42-
"cluster_name" : "cluster-name", <5>
43-
"nodes_addresses" : [ <6>
42+
"nodes_addresses" : [ <5>
4443
"192.168.1.2:9300"
4544
]
4645
}
@@ -53,6 +52,5 @@ The API returns a response such as
5352
string of the ASN.1 DER encoding of the key.
5453
<4> The certificate that the node can use for TLS for its transport layer, as a Base64 encoded
5554
string of the ASN.1 DER encoding of the certificate.
56-
<5> The name of the cluster the new node is joining
57-
<6> A list of transport addresses in the form of `host:port` for the nodes that are already
55+
<5> A list of transport addresses in the form of `host:port` for the nodes that are already
5856
members of the cluster.

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/action/enrollment/NodeEnrollmentResponse.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,12 @@ public final class NodeEnrollmentResponse extends ActionResponse implements ToXC
2525
private static final ParseField HTTP_CA_CERT = new ParseField("http_ca_cert");
2626
private static final ParseField TRANSPORT_KEY = new ParseField("transport_key");
2727
private static final ParseField TRANSPORT_CERT = new ParseField("transport_cert");
28-
private static final ParseField CLUSTER_NAME = new ParseField("cluster_name");
2928
private static final ParseField NODES_ADDRESSES = new ParseField("nodes_addresses");
3029

3130
private final String httpCaKey;
3231
private final String httpCaCert;
3332
private final String transportKey;
3433
private final String transportCert;
35-
private final String clusterName;
3634
private final List<String> nodesAddresses;
3735

3836
public NodeEnrollmentResponse(StreamInput in) throws IOException {
@@ -41,17 +39,15 @@ public NodeEnrollmentResponse(StreamInput in) throws IOException {
4139
httpCaCert = in.readString();
4240
transportKey = in.readString();
4341
transportCert = in.readString();
44-
clusterName = in.readString();
4542
nodesAddresses = in.readStringList();
4643
}
4744

48-
public NodeEnrollmentResponse(String httpCaKey, String httpCaCert, String transportKey, String transportCert, String clusterName,
45+
public NodeEnrollmentResponse(String httpCaKey, String httpCaCert, String transportKey, String transportCert,
4946
List<String> nodesAddresses) {
5047
this.httpCaKey = httpCaKey;
5148
this.httpCaCert = httpCaCert;
5249
this.transportKey = transportKey;
5350
this.transportCert = transportCert;
54-
this.clusterName = clusterName;
5551
this.nodesAddresses = nodesAddresses;
5652
}
5753

@@ -71,10 +67,6 @@ public String getTransportCert() {
7167
return transportCert;
7268
}
7369

74-
public String getClusterName() {
75-
return clusterName;
76-
}
77-
7870
public List<String> getNodesAddresses() {
7971
return nodesAddresses;
8072
}
@@ -84,7 +76,6 @@ public List<String> getNodesAddresses() {
8476
out.writeString(httpCaCert);
8577
out.writeString(transportKey);
8678
out.writeString(transportCert);
87-
out.writeString(clusterName);
8879
out.writeStringCollection(nodesAddresses);
8980
}
9081

@@ -94,7 +85,6 @@ public List<String> getNodesAddresses() {
9485
builder.field(HTTP_CA_CERT.getPreferredName(), httpCaCert);
9586
builder.field(TRANSPORT_KEY.getPreferredName(), transportKey);
9687
builder.field(TRANSPORT_CERT.getPreferredName(), transportCert);
97-
builder.field(CLUSTER_NAME.getPreferredName(), clusterName);
9888
builder.field(NODES_ADDRESSES.getPreferredName(), nodesAddresses);
9989
return builder.endObject();
10090
}
@@ -104,11 +94,11 @@ public List<String> getNodesAddresses() {
10494
if (o == null || getClass() != o.getClass()) return false;
10595
NodeEnrollmentResponse that = (NodeEnrollmentResponse) o;
10696
return httpCaKey.equals(that.httpCaKey) && httpCaCert.equals(that.httpCaCert) && transportKey.equals(that.transportKey)
107-
&& transportCert.equals(that.transportCert) && clusterName.equals(that.clusterName)
97+
&& transportCert.equals(that.transportCert)
10898
&& nodesAddresses.equals(that.nodesAddresses);
10999
}
110100

111101
@Override public int hashCode() {
112-
return Objects.hash(httpCaKey, httpCaCert, transportKey, transportCert, clusterName, nodesAddresses);
102+
return Objects.hash(httpCaKey, httpCaCert, transportKey, transportCert, nodesAddresses);
113103
}
114104
}

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/action/enrollment/NodeEnrollementResponseTests.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public void testSerialization() throws Exception {
3131
assertThat(response.getHttpCaCert(), is(serialized.getHttpCaCert()));
3232
assertThat(response.getTransportKey(), is(serialized.getTransportKey()));
3333
assertThat(response.getTransportCert(), is(serialized.getTransportCert()));
34-
assertThat(response.getClusterName(), is(serialized.getClusterName()));
3534
assertThat(response.getNodesAddresses(), is(serialized.getNodesAddresses()));
3635
}
3736
}
@@ -43,7 +42,6 @@ public void testSerialization() throws Exception {
4342
randomAlphaOfLengthBetween(50, 100),
4443
randomAlphaOfLengthBetween(50, 100),
4544
randomAlphaOfLengthBetween(50, 100),
46-
randomAlphaOfLength(10),
4745
randomList(10, () -> buildNewFakeTransportAddress().toString()));
4846
}
4947

@@ -59,7 +57,6 @@ public void testSerialization() throws Exception {
5957
private static final ParseField HTTP_CA_CERT = new ParseField("http_ca_cert");
6058
private static final ParseField TRANSPORT_KEY = new ParseField("transport_key");
6159
private static final ParseField TRANSPORT_CERT = new ParseField("transport_cert");
62-
private static final ParseField CLUSTER_NAME = new ParseField("cluster_name");
6360
private static final ParseField NODES_ADDRESSES = new ParseField("nodes_addresses");
6461

6562
@SuppressWarnings("unchecked")
@@ -70,17 +67,15 @@ public void testSerialization() throws Exception {
7067
final String httpCaCert = (String) a[1];
7168
final String transportKey = (String) a[2];
7269
final String transportCert = (String) a[3];
73-
final String clusterName = (String) a[4];
74-
final List<String> nodesAddresses = (List<String>) a[5];
75-
return new NodeEnrollmentResponse(httpCaKey, httpCaCert, transportKey, transportCert, clusterName, nodesAddresses);
70+
final List<String> nodesAddresses = (List<String>) a[4];
71+
return new NodeEnrollmentResponse(httpCaKey, httpCaCert, transportKey, transportCert, nodesAddresses);
7672
});
7773

7874
static {
7975
PARSER.declareString(ConstructingObjectParser.constructorArg(), HTTP_CA_KEY);
8076
PARSER.declareString(ConstructingObjectParser.constructorArg(), HTTP_CA_CERT);
8177
PARSER.declareString(ConstructingObjectParser.constructorArg(), TRANSPORT_KEY);
8278
PARSER.declareString(ConstructingObjectParser.constructorArg(), TRANSPORT_CERT);
83-
PARSER.declareString(ConstructingObjectParser.constructorArg(), CLUSTER_NAME);
8479
PARSER.declareStringArray(ConstructingObjectParser.constructorArg(), NODES_ADDRESSES);
8580
}
8681
}

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/action/enrollment/TransportNodeEnrollmentAction.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.elasticsearch.action.support.ActionFilters;
1616
import org.elasticsearch.action.support.HandledTransportAction;
1717
import org.elasticsearch.client.Client;
18-
import org.elasticsearch.cluster.service.ClusterService;
1918
import org.elasticsearch.core.Tuple;
2019
import org.elasticsearch.common.inject.Inject;
2120
import org.elasticsearch.transport.TransportInfo;
@@ -42,16 +41,14 @@
4241

4342
public class TransportNodeEnrollmentAction extends HandledTransportAction<NodeEnrollmentRequest, NodeEnrollmentResponse> {
4443
private final Environment environment;
45-
private final ClusterService clusterService;
4644
private final SSLService sslService;
4745
private final Client client;
4846

4947
@Inject
50-
public TransportNodeEnrollmentAction(TransportService transportService, ClusterService clusterService, SSLService sslService,
51-
Client client, ActionFilters actionFilters, Environment environment) {
48+
public TransportNodeEnrollmentAction(TransportService transportService, SSLService sslService, Client client,
49+
ActionFilters actionFilters, Environment environment) {
5250
super(NodeEnrollmentAction.NAME, transportService, actionFilters, NodeEnrollmentRequest::new);
5351
this.environment = environment;
54-
this.clusterService = clusterService;
5552
this.sslService = sslService;
5653
this.client = client;
5754
}
@@ -115,7 +112,6 @@ protected void doExecute(Task task, NodeEnrollmentRequest request, ActionListene
115112
httpCaCert,
116113
transportKey,
117114
transportCert,
118-
clusterService.getClusterName().value(),
119115
nodeList));
120116
} catch (CertificateEncodingException e) {
121117
listener.onFailure(new ElasticsearchException("Unable to enroll node", e));

x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/action/enrollment/TransportNodeEnrollmentActionTests.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.elasticsearch.client.Client;
1919
import org.elasticsearch.cluster.ClusterName;
2020
import org.elasticsearch.cluster.node.DiscoveryNode;
21-
import org.elasticsearch.cluster.service.ClusterService;
21+
import org.elasticsearch.common.settings.MockSecureSettings;
2222
import org.elasticsearch.common.settings.Settings;
2323
import org.elasticsearch.common.transport.BoundTransportAddress;
2424
import org.elasticsearch.common.transport.TransportAddress;
@@ -75,21 +75,20 @@ public void testDoExecute() throws Exception {
7575
Files.copy(getDataPath("/org/elasticsearch/xpack/security/action/enrollment/transport.p12"), transportPath);
7676
when(env.configFile()).thenReturn(tempDir);
7777
final SSLService sslService = mock(SSLService.class);
78+
final MockSecureSettings secureSettings = new MockSecureSettings();
79+
secureSettings.setString("keystore.secure_password", "password");
7880
final Settings httpSettings = Settings.builder()
79-
.put("keystore.path", "httpCa.p12")
80-
.put("keystore.password", "password")
81+
.put("keystore.path", httpCaPath)
82+
.setSecureSettings(secureSettings)
8183
.build();
8284
final SSLConfiguration httpSslConfiguration = new SSLConfiguration(httpSettings);
8385
when(sslService.getHttpTransportSSLConfiguration()).thenReturn(httpSslConfiguration);
8486
final Settings transportSettings = Settings.builder()
85-
.put("keystore.path", "transport.p12")
87+
.put("keystore.path", transportPath)
8688
.put("keystore.password", "password")
8789
.build();
8890
final SSLConfiguration transportSslConfiguration = new SSLConfiguration(transportSettings);
8991
when(sslService.getTransportSSLConfiguration()).thenReturn(transportSslConfiguration);
90-
final ClusterService clusterService = mock(ClusterService.class);
91-
final String clusterName = randomAlphaOfLengthBetween(6, 10);
92-
when(clusterService.getClusterName()).thenReturn(new ClusterName(clusterName));
9392
final ThreadContext threadContext = new ThreadContext(Settings.EMPTY);
9493
final ThreadPool threadPool = mock(ThreadPool.class);
9594
when(threadPool.getThreadContext()).thenReturn(threadContext);
@@ -132,12 +131,11 @@ public void testDoExecute() throws Exception {
132131
Collections.emptySet());
133132

134133
final TransportNodeEnrollmentAction action =
135-
new TransportNodeEnrollmentAction(transportService, clusterService, sslService, client, mock(ActionFilters.class), env);
134+
new TransportNodeEnrollmentAction(transportService, sslService, client, mock(ActionFilters.class), env);
136135
final NodeEnrollmentRequest request = new NodeEnrollmentRequest();
137136
final PlainActionFuture<NodeEnrollmentResponse> future = new PlainActionFuture<>();
138137
action.doExecute(mock(Task.class), request, future);
139138
final NodeEnrollmentResponse response = future.get();
140-
assertThat(response.getClusterName(), equalTo(clusterName));
141139
assertSameCertificate(response.getHttpCaCert(), httpCaPath, "password".toCharArray(), true);
142140
assertSameCertificate(response.getTransportCert(), transportPath, "password".toCharArray(), false);
143141
assertThat(response.getNodesAddresses().size(), equalTo(numberOfNodes));

0 commit comments

Comments
 (0)