public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { var configFile = Path.Combine(fileSystem.ElasticsearchHome, "config", "elasticsearch.yml"); var lines = File.ReadAllLines(configFile).ToList(); var saveFile = false; // set up for Watcher HipChat action if (!lines.Any(line => line.Contains("file1"))) { lines.AddRange(new[] { string.Empty, "xpack:", " security:", " authc:", " realms:", $" {SecurityRealms.FileRealm}:", " type: file", " order: 0", $" {SecurityRealms.PkiRealm}:", " type: pki", " order: 1", string.Empty }); saveFile = true; } if (saveFile) { File.WriteAllLines(configFile, lines); } }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { if (!Directory.Exists(fileSystem.RoamingFolder)) { Directory.CreateDirectory(fileSystem.RoamingFolder); } }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { var to = Path.Combine(config.FileSystem.RoamingFolder, "server_metrics.tar.gz"); if (!File.Exists(to)) { var from = "https://download.elasticsearch.org/demos/machine_learning/gettingstarted/server_metrics.tar.gz"; Console.WriteLine($"Download machine learning sample data from: {from}"); this.DownloadFile(from, to); Console.WriteLine($"Downloaded machine learning sample data to: {to}"); } var directoryTarget = Path.Combine(config.FileSystem.RoamingFolder, "server_metrics"); if (Directory.Exists(directoryTarget)) { return; } Directory.CreateDirectory(directoryTarget); Console.WriteLine($"Unzipping machine learning sample data: {to} ..."); using (var inStream = File.OpenRead(to)) using (var gzipStream = new GZipInputStream(inStream)) using (var tarArchive = TarArchive.CreateInputTarArchive(gzipStream)) { tarArchive.ExtractContents(directoryTarget); tarArchive.Close(); } }
private string DownloadSnapshotIfNeeded(NodeFileSystem fileSystem, ElasticsearchPluginConfiguration plugin, ElasticsearchVersion v) { var downloadLocation = Path.Combine(fileSystem.RoamingFolder, plugin.SnapshotZip(v)); this.DownloadPluginSnapshot(downloadLocation, plugin, v); //transform downloadLocation to file uri and use that to install from return(new Uri(downloadLocation).AbsoluteUri); }
private static bool AlreadyInstalled(ElasticsearchPlugin plugin, NodeFileSystem fileSystem) { var folder = plugin.Moniker; var pluginFolder = Path.Combine(fileSystem.ElasticsearchHome, "plugins", folder); // assume plugin already installed return(Directory.Exists(pluginFolder)); }
private string UseHttpPluginLocation(NodeFileSystem fileSystem, ElasticsearchPluginConfiguration plugin, ElasticsearchVersion v) { var downloadLocation = Path.Combine(fileSystem.RoamingFolder, $"{plugin.Moniker}-{v}.zip"); this.DownloadPluginSnapshot(downloadLocation, plugin, v); //transform downloadLocation to file uri and use that to install from return(new Uri(downloadLocation).AbsoluteUri); }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { var javaHome = Environment.GetEnvironmentVariable("JAVA_HOME"); if (string.IsNullOrWhiteSpace(javaHome)) { throw new Exception("The elasticsearch bat files are resillient to JAVA_HOME not being set, however the shield tooling is not"); } }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { var v = config.ElasticsearchVersion; if (Directory.Exists(fileSystem.ElasticsearchHome)) { return; } Console.WriteLine($"Unzipping elasticsearch: {v} ..."); ZipFile.ExtractToDirectory(fileSystem.DownloadZipLocation, fileSystem.RoamingFolder); }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { #if DOTNETCORE var javaHome = Environment.GetEnvironmentVariable("JAVA_HOME"); #else var javaHome = Environment.GetEnvironmentVariable("JAVA_HOME", EnvironmentVariableTarget.Machine) ?? Environment.GetEnvironmentVariable("JAVA_HOME", EnvironmentVariableTarget.User); #endif if (string.IsNullOrWhiteSpace(javaHome)) { throw new Exception("The elasticsearch bat files are resillient to JAVA_HOME not being set, however the shield tooling is not"); } }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { var v = config.ElasticsearchVersion; var folder = v.Major >= 5 ? "x-pack" : "shield"; var plugin = v.Major >= 5 ? "users" : "esusers"; var pluginBat = Path.Combine(fileSystem.ElasticsearchHome, "bin", folder, plugin) + ".bat"; foreach (var cred in ShieldInformation.AllUsers) { this.ExecuteBinary(pluginBat, $"adding user {cred.Username}", $"useradd {cred.Username} -p {cred.Password} -r {cred.Role}"); } }
private void AddClientCertificateUser(NodeFileSystem fileSystem, ElasticsearchVersion version) { var file = Path.Combine(fileSystem.ConfigPath, "x-pack", "role_mapping") + ".yml"; var name = fileSystem.ClientCertificateName; if (!File.Exists(file) || !File.ReadAllLines(file).Any(f => f.Contains(name))) { File.WriteAllLines(file, new [] { "admin:", $" - \"{name}\"" }); } }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { var analysisPath = fileSystem.AnalysisFolder; if (!Directory.Exists(analysisPath)) { Directory.CreateDirectory(analysisPath); } SetupHunspellFiles(fileSystem.ConfigPath); SetupIcuFiles(fileSystem.ConfigPath); SetupCompoundTokenFilterFopFile(analysisPath); SetupCustomStemming(analysisPath); SetupStopwordsFile(analysisPath); }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { var v = config.ElasticsearchVersion; var from = v.ElasticsearchDownloadUrl; var to = fileSystem.DownloadZipLocation; if (File.Exists(to)) { return; } Console.WriteLine($"Download elasticsearch: {v} from {from}"); this.DownloadFile(from, to); Console.WriteLine($"Downloaded elasticsearch: {v}"); }
public override void Run(NodeConfiguration config, NodeFileSystem fs, string[] serverSettings) { var clusterMoniker = config.ClusterMoniker; var v = config.ElasticsearchVersion; var easyRunBat = Path.Combine(fs.RoamingFolder, $"run-{clusterMoniker}.bat"); if (File.Exists(easyRunBat)) { return; } var badSettings = new[] { "node.name", "cluster.name" }; var batSettings = string.Join(" ", serverSettings.Where(s => !badSettings.Any(s.Contains))); File.WriteAllText(easyRunBat, $@"elasticsearch-{v}\bin\elasticsearch.bat {batSettings}"); }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { var v = config.ElasticsearchVersion; var plugins = from plugin in ElasticsearchPluginCollection.Supported let validForCurrentVersion = plugin.IsValid(v) let alreadyInstalled = AlreadyInstalled(plugin, fileSystem) where !alreadyInstalled && validForCurrentVersion select plugin; foreach (var plugin in plugins) { var installParameter = v.State == ElasticsearchVersion.ReleaseState.Released ? plugin.Moniker : this.UseHttpPluginLocation(fileSystem, plugin, v); this.ExecuteBinary(fileSystem.PluginBinary, $"install elasticsearch plugin: {plugin.Moniker}", "install --batch", installParameter); } }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { var v = config.ElasticsearchVersion; var folder = v.Major >= 5 ? "x-pack" : "shield"; var plugin = v.Major >= 5 ? "users" : "esusers"; if (v.Major == 6 && !File.Exists(fileSystem.XPackEnvBinary)) { File.WriteAllText(fileSystem.XPackEnvBinary, "set ES_CLASSPATH=!ES_CLASSPATH!;!ES_HOME!/plugins/x-pack/*"); } var pluginBat = Path.Combine(fileSystem.ElasticsearchHome, "bin", folder, plugin) + BinarySuffix; foreach (var cred in ShieldInformation.AllUsers) { this.ExecuteBinary(pluginBat, $"adding user {cred.Username}", $"useradd {cred.Username} -p {cred.Password} -r {cred.Role}"); } }
private void GenerateUnusedCertificates(NodeFileSystem fileSystem, string silentModeConfigFile, ElasticsearchVersion version) { var name = fileSystem.UnusedCertificateFolderName; var zipLocation = Path.Combine(fileSystem.ConfigPath, "x-pack", name) + ".zip"; var @out = version.Major < 6 ? $"{name}.zip" : zipLocation; if (!File.Exists(fileSystem.UnusedCaCertificate)) { this.ExecuteBinary(fileSystem.CertGenBinary, "generating ssl certificates for this session", "-in", silentModeConfigFile, "-out", @out); } if (Directory.Exists(fileSystem.UnusedCertificatesPath)) { return; } Directory.CreateDirectory(fileSystem.UnusedCertificatesPath); ZipFile.ExtractToDirectory(zipLocation, fileSystem.UnusedCertificatesPath); }
private void GenerateCertificates(NodeFileSystem fileSystem, string silentModeConfigFile) { var name = fileSystem.CertificateFolderName; if (!File.Exists(fileSystem.CaCertificate)) { this.ExecuteBinary(fileSystem.CertGenBinary, "generating ssl certificates for this session", "-in", silentModeConfigFile, "-out", $"{name}.zip"); } if (Directory.Exists(fileSystem.CertificatesPath)) { return; } Directory.CreateDirectory(fileSystem.CertificatesPath); var zipLocation = Path.Combine(fileSystem.ConfigPath, "x-pack", name) + ".zip"; ZipFile.ExtractToDirectory(zipLocation, fileSystem.CertificatesPath); }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { if (config.ElasticsearchVersion < _sixTwoZero || config.ElasticsearchVersion >= _sixThreeZero) { return; } var batFile = Path.Combine(fileSystem.ElasticsearchHome, "bin", "elasticsearch.bat"); var contents = File.ReadAllLines(batFile); for (var i = 0; i < contents.Length; i++) { if (contents[i] == "cd \"%ES_HOME%\"") { contents[i] = "cd /d \"%ES_HOME%\""; break; } } File.WriteAllLines(batFile, contents); }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { var v = config.ElasticsearchVersion; //on 2.x we so not support tests requiring plugins for 2.x since we can not reliably install them if (v.IsSnapshot && v.Major == 2) { return; } var plugins = from plugin in ElasticsearchPluginCollection.Supported let validForCurrentVersion = plugin.IsValid(v) let alreadyInstalled = AlreadyInstalled(plugin, fileSystem) where !alreadyInstalled && validForCurrentVersion select plugin; foreach (var plugin in plugins) { var installParameter = !v.IsSnapshot ? plugin.Moniker : this.DownloadSnapshotIfNeeded(fileSystem, plugin, v); this.ExecuteBinary(fileSystem.PluginBinary, $"install elasticsearch plugin: {plugin.Moniker}", "install --batch", installParameter); } }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { //due to a bug in certgen this file needs to live in two places var silentModeConfigFile = Path.Combine(fileSystem.ElasticsearchHome, "certgen") + ".yml"; var silentModeConfigFileDuplicate = Path.Combine(fileSystem.ConfigPath, "x-pack", "certgen") + ".yml"; foreach (var file in new [] { silentModeConfigFile, silentModeConfigFileDuplicate }) { if (!File.Exists(file)) { File.WriteAllLines(file, new [] { "instances:", $" - name : \"{fileSystem.CertificateNodeName}\"", $" - name : \"{fileSystem.ClientCertificateName}\"", $" filename : \"{fileSystem.ClientCertificateFilename}\"", }); } } this.GenerateCertificates(fileSystem, silentModeConfigFile, config.ElasticsearchVersion); this.GenerateUnusedCertificates(fileSystem, silentModeConfigFile, config.ElasticsearchVersion); this.AddClientCertificateUser(fileSystem, config.ElasticsearchVersion); }
public override void Run(NodeConfiguration config, NodeFileSystem fs) { if (Directory.Exists(fs.DataPath)) { Console.WriteLine($"attempting to delete cluster data: {fs.DataPath}"); Directory.Delete(fs.DataPath, true); } if (Directory.Exists(fs.LogsPath)) { var files = Directory.GetFiles(fs.LogsPath, config.ClusterName + "*.log"); foreach (var f in files) { Console.WriteLine($"attempting to delete log file: {f}"); File.Delete(f); } } if (Directory.Exists(fs.RepositoryPath)) { Console.WriteLine("attempting to delete repositories"); Directory.Delete(fs.RepositoryPath, true); } }
public abstract void Run(NodeConfiguration config, NodeFileSystem fileSystem);
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { var rolesConfig = Path.Combine(fileSystem.ElasticsearchHome, "config", "elasticsearch.yml"); var lines = File.ReadAllLines(rolesConfig).ToList(); var saveFile = false; var prefix = config.ElasticsearchVersion.Major >= 5 ? "xpack.notification" : "watcher.actions"; var postfix = config.ElasticsearchVersion.Major >= 5 ? string.Empty : ".service"; // set up for Watcher HipChat action if (!lines.Any(line => line.StartsWith($"{prefix}.hipchat{postfix}:"))) { lines.AddRange(new[] { string.Empty, $"{prefix}.hipchat{postfix}:", " account:", " notify-monitoring:", " profile: user", " auth_token: hipchat_auth_token", string.Empty }); saveFile = true; } // set up for Watcher Slack action if (!lines.Any(line => line.StartsWith($"{prefix}.slack{postfix}:"))) { lines.AddRange(new[] { string.Empty, $"{prefix}.slack{postfix}:", " account:", " monitoring:", " url: https://hooks.slack.com/services/foo/bar/baz", string.Empty }); saveFile = true; } // set up for Watcher PagerDuty action if (!lines.Any(line => line.StartsWith($"{prefix}.pagerduty{postfix}:"))) { lines.AddRange(new[] { string.Empty, $"{prefix}.pagerduty{postfix}:", " account:", " my_pagerduty_account:", " service_api_key: pager_duty_service_api_key", string.Empty }); saveFile = true; } if (saveFile) { File.WriteAllLines(rolesConfig, lines); } }
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) => WriteFileIfNotExist(Path.Combine(fileSystem.ElasticsearchHome, "run.bat"), @"bin\elasticsearch.bat");
public override void Run(NodeConfiguration config, NodeFileSystem fileSystem) { //2.x tests only use prebaked roles if (config.ElasticsearchVersion.Major < 5) { return; } var folder = config.ElasticsearchVersion.Major >= 5 ? "x-pack" : "shield"; var rolesConfig = Path.Combine(fileSystem.ElasticsearchHome, "config", folder, "roles.yml"); if (!File.Exists(rolesConfig)) { Directory.CreateDirectory(Path.Combine(fileSystem.ElasticsearchHome, "config", folder)); File.WriteAllText(rolesConfig, string.Empty); } var lines = File.ReadAllLines(rolesConfig).ToList(); var saveFile = false; if (!lines.Any(line => line.StartsWith("user:"******"# Read-only operations on indices", "user:"******" indices:", " - names: '*'", " privileges:", " - read", string.Empty }); saveFile = true; } if (!lines.Any(line => line.StartsWith("power_user:"******"# monitoring cluster privileges", "# All operations on all indices", "power_user:"******" cluster:", " - monitor", " indices:", " - names: '*'", " privileges:", " - all", string.Empty }); saveFile = true; } if (!lines.Any(line => line.StartsWith("admin:"))) { lines.InsertRange(0, new [] { "# All cluster rights", "# All operations on all indices", "admin:", " cluster:", " - all", " indices:", " - names: '*'", " privileges:", " - all", string.Empty }); saveFile = true; } if (saveFile) { File.WriteAllLines(rolesConfig, lines); } }
public abstract void Run(NodeConfiguration config, NodeFileSystem fileSystem, string[] serverSettings);