Skip to content

Commit df50252

Browse files
Added support for version >= 8.0.0 (#46)
Co-authored-by: Martijn Laarman <[email protected]>
1 parent 5fd0c20 commit df50252

File tree

4 files changed

+61
-19
lines changed

4 files changed

+61
-19
lines changed

examples/Elastic.Ephemeral.Example/Program.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,17 @@
33
// See the LICENSE file in the project root for more information
44

55
using Elastic.Elasticsearch.Ephemeral;
6+
using static Elastic.Elasticsearch.Ephemeral.ClusterFeatures;
67

7-
var config = new EphemeralClusterConfiguration("8.7.0");
8-
var cluster = new EphemeralCluster(config);
8+
9+
var config = new EphemeralClusterConfiguration("8.7.0", XPack | Security | SSL);
10+
using var cluster = new EphemeralCluster(config);
11+
12+
var exitEvent = new ManualResetEvent(false);
13+
Console.CancelKeyPress += (sender, eventArgs) => {
14+
cluster.Dispose();
15+
eventArgs.Cancel = true;
16+
exitEvent.Set();
17+
};
918
using var started = cluster.Start();
19+
exitEvent.WaitOne();

src/Elastic.Elasticsearch.Ephemeral/EphemeralFileSystem.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public EphemeralFileSystem(ElasticVersion version, string clusterName) : base(ve
3232
public string CertificatesPath => Path.Combine(ConfigPath, CertificateFolderName);
3333

3434
public string CaCertificate => Path.Combine(CertificatesPath, "ca", "ca") + ".crt";
35+
public string CaPrivateKey => Path.Combine(CertificatesPath, "ca", "ca") + ".key";
3536

3637
public string NodePrivateKey =>
3738
Path.Combine(CertificatesPath, CertificateNodeName, CertificateNodeName) + ".key";

src/Elastic.Elasticsearch.Ephemeral/Tasks/BeforeStartNodeTasks/XPack/GenerateCertificatesTask.cs

Lines changed: 47 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
33
// See the LICENSE file in the project root for more information
44

5+
using System;
56
using System.IO;
67
using System.IO.Compression;
78
using System.Linq;
@@ -39,6 +40,12 @@ public override void Run(IEphemeralCluster<EphemeralClusterConfiguration> cluste
3940
if (!cluster.ClusterConfiguration.EnableSsl) return;
4041

4142
var config = cluster.ClusterConfiguration;
43+
44+
if (Directory.Exists(config.FileSystem.CertificatesPath))
45+
{
46+
cluster.Writer.WriteDiagnostic($"{{{nameof(GenerateCertificatesTask)}}} Skipping certificate generation as ${{{config.FileSystem.CertificatesPath}}} already exists");
47+
return;
48+
}
4249

4350
var fileSystem = cluster.FileSystem;
4451
//due to a bug in certgen this file needs to live in two places
@@ -80,7 +87,12 @@ private static void GenerateCertificates(IEphemeralCluster<EphemeralClusterConfi
8087
var config = cluster.ClusterConfiguration;
8188
var name = config.FileSystem.CertificateFolderName;
8289
var path = config.FileSystem.CertificatesPath;
83-
NewOrCachedCertificates(cluster, name, path, silentModeConfigFile, writer);
90+
NewOrCachedCertificates(cluster, "ca-certificates", path, writer,
91+
zipLocation => GenerateCaCertificate(config, zipLocation, writer),
92+
"8.0.0");
93+
NewOrCachedCertificates(cluster, name, path, writer,
94+
zipLocation => GenerateCertificate(config, name, path, zipLocation, silentModeConfigFile, writer)
95+
);
8496
}
8597

8698
private static void GenerateUnusedCertificates(IEphemeralCluster<EphemeralClusterConfiguration> cluster,
@@ -89,16 +101,23 @@ private static void GenerateUnusedCertificates(IEphemeralCluster<EphemeralCluste
89101
var config = cluster.ClusterConfiguration;
90102
var name = config.FileSystem.UnusedCertificateFolderName;
91103
var path = config.FileSystem.UnusedCertificatesPath;
92-
NewOrCachedCertificates(cluster, name, path, silentModeConfigFile, writer);
104+
NewOrCachedCertificates(cluster, "unused-ca-certificates", path, writer,
105+
zipLocation => GenerateCaCertificate(config, zipLocation, writer),
106+
"8.0.0");
107+
NewOrCachedCertificates(cluster, name, path, writer,
108+
zipLocation => GenerateCertificate(config, name, path, zipLocation, silentModeConfigFile, writer)
109+
);
93110
}
94111

95112
private static void NewOrCachedCertificates(IEphemeralCluster<EphemeralClusterConfiguration> cluster,
96-
string name, string path, string silentModeConfigFile, IConsoleLineHandler writer)
113+
string name, string path, IConsoleLineHandler writer, Action<string> generateCertificateAction, string minVersion = null)
97114
{
98115
var config = cluster.ClusterConfiguration;
99116
var cachedEsHomeFolder = Path.Combine(config.FileSystem.LocalFolder, cluster.GetCacheFolderName());
100117
var zipLocationCache = Path.Combine(cachedEsHomeFolder, name) + ".zip";
101118

119+
if (minVersion != null && config.Version < minVersion) return;
120+
102121
if (File.Exists(zipLocationCache))
103122
{
104123
writer.WriteDiagnostic(
@@ -110,7 +129,7 @@ private static void NewOrCachedCertificates(IEphemeralCluster<EphemeralClusterCo
110129
var zipLocation = config.Version >= "6.3.0"
111130
? Path.Combine(config.FileSystem.ConfigPath, name) + ".zip"
112131
: Path.Combine(config.FileSystem.ConfigPath, "x-pack", name) + ".zip";
113-
GenerateCertificate(config, name, path, zipLocation, silentModeConfigFile, writer);
132+
generateCertificateAction(zipLocation);
114133

115134
if (!File.Exists(zipLocationCache))
116135
{
@@ -133,17 +152,17 @@ private static void GenerateCertificate(EphemeralClusterConfiguration config, st
133152
: Path.Combine(fs.ElasticsearchHome, "bin", "elasticsearch-certutil") + BinarySuffix
134153
: Path.Combine(fs.ElasticsearchHome, "bin", "x-pack", "certgen") + BinarySuffix;
135154

136-
137-
if (!Directory.Exists(path))
138-
{
139-
if (config.Version < "7.0.0")
140-
ExecuteBinary(config, writer, binary, "generating ssl certificates for this session",
141-
"-in", silentModeConfigFile, "-out", @out);
142-
else
143-
ExecuteBinary(config, writer, binary, "generating ssl certificates for this session",
144-
"cert",
145-
"-in", silentModeConfigFile, "-out", @out);
146-
}
155+
if (config.Version < "7.0.0")
156+
ExecuteBinary(config, writer, binary, "generating ssl certificates for this session",
157+
"-in", silentModeConfigFile, "-out", @out);
158+
else if (config.Version < "8.0.0")
159+
ExecuteBinary(config, writer, binary, "generating ssl certificates for this session",
160+
"cert",
161+
"--in", silentModeConfigFile, "--out", @out);
162+
else
163+
ExecuteBinary(config, writer, binary, "generating ssl certificates for this session",
164+
"cert", "--pem",
165+
"--in", silentModeConfigFile, "--out", @out, "--ca-cert", fs.CaCertificate, "--ca-key", fs.CaPrivateKey);
147166

148167
var badLocation = Path.Combine(config.FileSystem.ElasticsearchHome, "config", "x-pack", @out);
149168
//not necessary anymore now that we patch .in.bat i think
@@ -154,14 +173,25 @@ private static void GenerateCertificate(EphemeralClusterConfiguration config, st
154173
}
155174
}
156175

176+
private static void GenerateCaCertificate(EphemeralClusterConfiguration config,
177+
string zipLocation, IConsoleLineHandler writer)
178+
{
179+
if (config.Version < "8.0.0") return;
180+
181+
var binary = Path.Combine(config.FileSystem.ElasticsearchHome, "bin", "elasticsearch-certutil") + BinarySuffix;
182+
183+
ExecuteBinary(config, writer, binary, "generating CA certificate for this session",
184+
"ca", "--pem", "--out", zipLocation);
185+
}
186+
157187

158188
private static void UnpackCertificatesZip(string zipLocation, string outFolder, IConsoleLineHandler writer)
159189
{
160-
if (Directory.Exists(outFolder)) return;
161-
162190
writer.WriteDiagnostic($"{{{nameof(GenerateCertificatesTask)}}} unzipping certificates to {outFolder}");
163191
Directory.CreateDirectory(outFolder);
192+
164193
ZipFile.ExtractToDirectory(zipLocation, outFolder);
194+
165195
}
166196
}
167197
}

src/Elastic.Elasticsearch.Ephemeral/Tasks/IClusterComposeTask.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ private static void ExecuteBinaryInternal(EphemeralClusterConfiguration config,
187187
errorOut = errorOut
188188
.Where(e => !string.IsNullOrWhiteSpace(e.Line))
189189
.Where(e => !e.Line.Contains("usage of JAVA_HOME is deprecated"))
190+
.Where(e => !e.Line.Contains("using ES_JAVA_HOME"))
190191
.Where(e => !e.Line.Trim().StartsWith("warning:"))
191192
.ToList();
192193

0 commit comments

Comments
 (0)