@@ -38,6 +38,7 @@ import org.gradle.api.tasks.Copy
3838import org.gradle.api.tasks.Delete
3939import org.gradle.api.tasks.Exec
4040
41+ import java.nio.charset.StandardCharsets
4142import java.nio.file.Paths
4243import java.util.concurrent.TimeUnit
4344
@@ -157,10 +158,14 @@ class ClusterFormationTasks {
157158 node. cwd. mkdirs()
158159 }
159160 }
161+
160162 setup = configureCheckPreviousTask(taskName(prefix, node, ' checkPrevious' ), project, setup, node)
161163 setup = configureStopTask(taskName(prefix, node, ' stopPrevious' ), project, setup, node)
162164 setup = configureExtractTask(taskName(prefix, node, ' extract' ), project, setup, node, configuration)
163165 setup = configureWriteConfigTask(taskName(prefix, node, ' configure' ), project, setup, node, seedNode)
166+ setup = configureCreateKeystoreTask(taskName(prefix, node, ' createKeystore' ), project, setup, node)
167+ setup = configureAddKeystoreSettingTasks(prefix, project, setup, node)
168+
164169 if (node. config. plugins. isEmpty() == false ) {
165170 if (node. nodeVersion == VersionProperties . elasticsearch) {
166171 setup = configureCopyPluginsTask(taskName(prefix, node, ' copyPlugins' ), project, setup, node)
@@ -303,6 +308,33 @@ class ClusterFormationTasks {
303308 }
304309 }
305310
311+ /* * Adds a task to create keystore */
312+ static Task configureCreateKeystoreTask (String name , Project project , Task setup , NodeInfo node ) {
313+ if (node. config. keystoreSettings. isEmpty()) {
314+ return setup
315+ } else {
316+ File esKeystoreUtil = Paths . get(node. homeDir. toString(), " bin/" + " elasticsearch-keystore" ). toFile()
317+ return configureExecTask(name, project, setup, node, esKeystoreUtil, ' create' )
318+ }
319+ }
320+
321+ /* * Adds tasks to add settings to the keystore */
322+ static Task configureAddKeystoreSettingTasks (String parent , Project project , Task setup , NodeInfo node ) {
323+ Map kvs = node. config. keystoreSettings
324+ File esKeystoreUtil = Paths . get(node. homeDir. toString(), " bin/" + " elasticsearch-keystore" ). toFile()
325+ Task parentTask = setup
326+ for (Map.Entry < String , String > entry in kvs) {
327+ String key = entry. getKey()
328+ String name = taskName(parent, node, ' addToKeystore#' + key)
329+ Task t = configureExecTask(name, project, parentTask, node, esKeystoreUtil, ' add' , key, ' -x' )
330+ t. doFirst {
331+ standardInput = new ByteArrayInputStream (entry. getValue(). getBytes(StandardCharsets . UTF_8 ))
332+ }
333+ parentTask = t
334+ }
335+ return parentTask
336+ }
337+
306338 static Task configureExtraConfigFilesTask (String name , Project project , Task setup , NodeInfo node ) {
307339 if (node. config. extraConfigFiles. isEmpty()) {
308340 return setup
0 commit comments