private static void ResolveVersions()
        {
            var versions = new[]
            {
                "8.0.0-SNAPSHOT", "7.0.0-beta1", "6.6.1", "latest-7", "latest", "7.0.0", "7.4.0-SNAPSHOT",
                "957e3089:7.2.0", "latest-6"
            };
            //versions = new[] {"latest-7"};
            var products = new Product[]
            {
                Product.Elasticsearch, Product.Kibana, Product.ElasticsearchPlugin(ElasticsearchPlugin.AnalysisIcu)
            };
            var x = SnapshotApiResolver.AvailableVersions.Value;

            foreach (var v in versions)
            {
                foreach (var p in products)
                {
                    var r = ElasticVersion.From(v);
                    var a = r.Artifact(p);
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write(v);
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.Write($"\t{p.Moniker}");
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.Write($"\t\t{r.ArtifactBuildState.GetStringValue()}");
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.WriteLine($"\t{a?.BuildHash}");
                    Console.ForegroundColor = ConsoleColor.Blue;
//                    Console.WriteLine($"\t{a.Archive}");
//                    Console.WriteLine($"\t{r.ArtifactBuildState}");
//                    Console.WriteLine($"\t{a.FolderInZip}");
//                    Console.WriteLine($"\tfolder: {a.LocalFolderName}");
                    if (a == null)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("\tArtifact not resolved");
                        continue;
                    }

                    Console.WriteLine($"\t{a.DownloadUrl}");
                    var found = false;
                    try
                    {
                        found = HeadReturns200OnDownloadUrl(a.DownloadUrl);
                    }
                    catch
                    {
                        // ignored, best effort but does not take into account proxies or other bits that might prevent the check
                    }

                    if (found)
                    {
                        continue;
                    }
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("\tArtifact not found");
                }
            }
        }
        private static void DownloadPluginSnapshot(IConsoleLineHandler writer, string downloadLocation,
                                                   ElasticsearchPlugin plugin, ElasticVersion v)
        {
            if (File.Exists(downloadLocation))
            {
                return;
            }
            var artifact    = v.Artifact(Product.ElasticsearchPlugin(plugin));
            var downloadUrl = artifact.DownloadUrl;

            writer?.WriteDiagnostic(
                $"{{{nameof(DownloadPluginSnapshot)}}} downloading [{plugin.SubProductName}] from {{{downloadUrl}}}");
            try
            {
                DownloadFile(downloadUrl, downloadLocation);
                writer?.WriteDiagnostic(
                    $"{{{nameof(DownloadPluginSnapshot)}}} downloaded [{plugin.SubProductName}] to {{{downloadLocation}}}");
            }
            catch (Exception)
            {
                writer?.WriteDiagnostic(
                    $"{{{nameof(DownloadPluginSnapshot)}}} download failed! [{plugin.SubProductName}] from {{{downloadUrl}}}");
                throw;
            }
        }
        private static string UseHttpPluginLocation(IConsoleLineHandler writer, INodeFileSystem fileSystem,
                                                    ElasticsearchPlugin plugin, ElasticVersion v)
        {
            var downloadLocation = Path.Combine(fileSystem.LocalFolder, $"{plugin.SubProductName}-{v}.zip");

            DownloadPluginSnapshot(writer, downloadLocation, plugin, v);
            //transform downloadLocation to file uri and use that to install from
            return(new Uri(new Uri("file://"), downloadLocation).AbsoluteUri);
        }
Beispiel #4
0
        private static void PatchPlugin(ElasticVersion v, INodeFileSystem fileSystem)
        {
            var h        = fileSystem.ElasticsearchHome;
            var file     = Path.Combine(h, "bin", "x-pack", ".in.bat");
            var contents = File.ReadAllText(file);

            contents = contents.Replace("set ES_PARAMS=-Des.path.home=\"%ES_HOME%\"", "set ES_PARAMS=-Des.path.home=\"%ES_HOME%\" -Des.path.conf=\"%CONF_DIR%\"");
            File.WriteAllText(file, contents);
        }
Beispiel #5
0
        public NodeFileSystem(ElasticVersion version, string elasticsearchHome = null)
        {
            this.Version           = version;
            this.Artifact          = version.Artifact(Product.Elasticsearch);
            this.LocalFolder       = AppDataFolder(version);
            this.ElasticsearchHome = elasticsearchHome ?? GetEsHomeVariable() ?? throw new ArgumentNullException(nameof(elasticsearchHome));

            this.ConfigEnvironmentVariableName = version.Major >= 6 ? "ES_PATH_CONF" : "CONF_DIR";
        }
Beispiel #6
0
 public XunitClusterConfiguration(
     ElasticVersion version,
     ClusterFeatures features     = ClusterFeatures.None,
     ElasticsearchPlugins plugins = null,
     int numberOfNodes            = 1)
     : base(version, features, plugins, numberOfNodes)
 {
     this.AdditionalAfterStartedTasks.Add(new PrintXunitAfterStartedTask());
 }
Beispiel #7
0
        private static void ManualConfigRun()
        {
            ElasticVersion version = "latest";

            var plugins =
                new ElasticsearchPlugins(ElasticsearchPlugin.IngestGeoIp, ElasticsearchPlugin.IngestAttachment);
            var features = Security | XPack | SSL;
            var config   = new EphemeralClusterConfiguration(version, features, plugins, numberOfNodes: 1)
            {
                HttpFiddlerAware = true,
                ShowElasticsearchOutputAfterStarted = true,
                CacheEsHomeInstallation             = false,
                TrialMode = XPackTrialMode.Trial,
                NoCleanupAfterNodeStopped = false,
            };

            using (var cluster = new EphemeralCluster(config))
            {
                cluster.Start();

                var nodes          = cluster.NodesUris();
                var connectionPool = new StaticConnectionPool(nodes);
                var settings       = new ConnectionSettings(connectionPool).EnableDebugMode();
                if (config.EnableSecurity)
                {
                    settings = settings.BasicAuthentication(ClusterAuthentication.Admin.Username,
                                                            ClusterAuthentication.Admin.Password);
                }
                if (config.EnableSsl)
                {
                    settings = settings.ServerCertificateValidationCallback(CertificateValidations.AllowAll);
                }

                var client = new ElasticClient(settings);

                var clusterConfiguration = new Dictionary <string, object>()
                {
                    { "cluster.routing.use_adaptive_replica_selection", true },
                    { "cluster.remote.remote-cluster.seeds", "127.0.0.1:9300" }
                };


                var putSettingsResponse = client.ClusterPutSettings(new ClusterPutSettingsRequest
                {
                    Transient = clusterConfiguration
                });


                Console.Write(client.XPackInfo().DebugInformation);
                Console.WriteLine("Press any key to exit");
                Console.ReadKey();
                Console.WriteLine("Exitting..");
            }

            Console.WriteLine("Done!");
        }
        public string[] ToCommandLineArguments(ElasticVersion version)
        {
            var settingsPrefix  = version > LastVersionWithoutPrefixForSettings ? "" : "es.";
            var settingArgument = version.Major >= 5 ? "-E " : "-D";

            return(this
                   //if a node setting is only applicable for a certain version make sure its filtered out
                   .Where(s => string.IsNullOrEmpty(s.VersionRange) || version.InRange(s.VersionRange))
                   //allow additional settings to take precedence over already DefaultNodeSettings
                   //without relying on elasticsearch to dedup, 5.4.0 no longer allows passing the same setting twice
                   //on the command with the latter taking precedence
                   .GroupBy(setting => setting.Key)
                   .Select(g => g.Last())
                   .Select(s => s.Key.StartsWith(settingArgument) ? s.ToString() : $"{settingArgument}{settingsPrefix}{s}")
                   .ToArray());
        }
        public EphemeralClusterConfiguration(ElasticVersion version, ClusterFeatures features, ElasticsearchPlugins plugins = null, int numberOfNodes = 1)
            : base(version, (v, s) => new EphemeralFileSystem(v, s), numberOfNodes, EphemeralClusterName)
        {
            this.TrialMode = XPackTrialMode.None;
            this.Features  = features;

            var pluginsList = plugins?.ToList() ?? new List <ElasticsearchPlugin>();

            if (this.Features.HasFlag(ClusterFeatures.XPack) && pluginsList.All(p => p.SubProductName != "x-pack"))
            {
                pluginsList.Add(ElasticsearchPlugin.XPack);
            }

            this.Plugins = new ElasticsearchPlugins(pluginsList);

            AddDefaultXPackSettings();
        }
        private static void ManualConfigRun()
        {
            ElasticVersion version = "latest-7";

            var plugins =
                new ElasticsearchPlugins(ElasticsearchPlugin.IngestGeoIp, ElasticsearchPlugin.AnalysisKuromoji);
            var features = Security | XPack | SSL;
            var config   = new EphemeralClusterConfiguration(version, features, null, numberOfNodes: 1)
            {
                HttpFiddlerAware = true,
                ShowElasticsearchOutputAfterStarted = true,
                CacheEsHomeInstallation             = true,
                TrialMode = XPackTrialMode.Trial,
                NoCleanupAfterNodeStopped = false,
            };

            using (var cluster = new EphemeralCluster(config))
            {
                cluster.Start();

                var nodes          = cluster.NodesUris();
                var connectionPool = new StaticConnectionPool(nodes);
                var settings       = new ConnectionSettings(connectionPool).EnableDebugMode();
                if (config.EnableSecurity)
                {
                    settings = settings.BasicAuthentication(ClusterAuthentication.Admin.Username,
                                                            ClusterAuthentication.Admin.Password);
                }
                if (config.EnableSsl)
                {
                    settings = settings.ServerCertificateValidationCallback(CertificateValidations.AllowAll);
                }

                var client = new ElasticClient(settings);

                Console.Write(client.XPackInfo().DebugInformation);
                Console.WriteLine("Press any key to exit");
                Console.ReadKey();
                Console.WriteLine("Exitting..");
            }

            Console.WriteLine("Done!");
        }
Beispiel #11
0
        private static ClientTestClusterConfiguration CreateConfiguration()
        {
            var plugins = new List <ElasticsearchPlugin>
            {
                IngestGeoIp,
                IngestAttachment,
                AnalysisKuromoji,
                AnalysisIcu,
                AnalysisPhonetic,
                MapperMurmur3,
            };

            // TODO: temporary until https://github.com/elastic/elasticsearch-net-abstractions/commit/3977ccb6449870fb4f1e6059be960e12ec5e5125 is released
            if (ElasticVersion.From(TestClient.Configuration.ElasticsearchVersion) >= "6.4.0")
            {
                plugins.Add(new ElasticsearchPlugin("analysis-nori", v => v >= "6.4.0"));
            }

            return(new ClientTestClusterConfiguration(plugins.ToArray())
            {
                MaxConcurrency = 4
            });
        }
 public ElasticsearchNode(ElasticVersion version, string elasticsearchHome = null)
     : this(new NodeConfiguration(new ClusterConfiguration(version,
                                                           (v, s) => new NodeFileSystem(v, elasticsearchHome))))
 {
 }
Beispiel #13
0
        protected static string AppDataFolder(ElasticVersion version)
        {
            var appData = GetApplicationDataDirectory();

            return(Path.Combine(appData, SubFolder, version.Artifact(Product.Elasticsearch).LocalFolderName));
        }
Beispiel #14
0
 public EphemeralFileSystem(ElasticVersion version, string clusterName) : base(version,
                                                                               EphemeralHome(version, clusterName)) => ClusterName = clusterName;
Beispiel #15
0
 public MockApmServerInfo(ElasticVersion version) => Version = version;
Beispiel #16
0
 /// <summary>Whether the sub project is included in the distribution out of the box for the given version</summary>
 public bool IsIncludedOutOfTheBox(ElasticVersion version) =>
 ShippedByDefaultAsOf != null && version >= ShippedByDefaultAsOf;
 public EphemeralCluster(ElasticVersion version, int numberOfNodes = 1)
     : base(new EphemeralClusterConfiguration(version, ClusterFeatures.None, numberOfNodes: numberOfNodes))
 {
 }
 public EphemeralClusterConfiguration(ElasticVersion version, ElasticsearchPlugins plugins = null,
                                      int numberOfNodes = 1)
     : this(version, ClusterFeatures.None, plugins, numberOfNodes)
 {
 }
 public NodeConfiguration(ElasticVersion version, int?port = null) : this(new ClusterConfiguration(version), port)
 {
 }
        protected static string EphemeralHome(ElasticVersion version, string clusterName)
        {
            var temp = Path.Combine(Path.GetTempPath(), SubFolder, version.Artifact(Product.Elasticsearch).LocalFolderName, clusterName);

            return(Path.Combine(temp, "home"));
        }
Beispiel #21
0
		private static bool InRange(string range) => ElasticVersion.From(TestConfiguration.Instance.ElasticsearchVersion).InRange(range);
Beispiel #22
0
 /// <summary>Whether the subProject is valid for the given version</summary>
 public bool IsValid(ElasticVersion version) => IsIncludedOutOfTheBox(version) || _isValid(version);
Beispiel #23
0
 public ClusterConfiguration(ElasticVersion version, string esHome, int numberOfNodes = 1)
     : base(version, (v, s) => new NodeFileSystem(v, esHome), numberOfNodes, null)
 {
 }
 public static bool InRange(this TestConfigurationBase configuration, string range) =>
 ElasticVersion.From(configuration.ElasticsearchVersion).InRange(range);
Beispiel #25
0
 public ClusterConfiguration(ElasticVersion version, Func <ElasticVersion, string, NodeFileSystem> fileSystem = null, int numberOfNodes = 1, string clusterName = null)
     : base(version, fileSystem ?? ((v, s) => new NodeFileSystem(v, s)), numberOfNodes, clusterName)
 {
 }
Beispiel #26
0
 /// <summary> what moniker to use when asserting the sub product is already present</summary>
 public string GetExistsMoniker(ElasticVersion version) => _getExistsMoniker(version);
 public static Product From(string product, SubProduct subProduct = null, ElasticVersion platformInZipAfter = null) =>
 CachedProducts.GetOrAdd($"{product}/{subProduct}", k => new Product(product, subProduct, platformInZipAfter));
Beispiel #28
0
 public XunitClusterConfiguration(
     ElasticVersion version,
     ClusterFeatures features     = ClusterFeatures.None,
     ElasticsearchPlugins plugins = null,
     int numberOfNodes            = 1)
     : base(version, features, plugins, numberOfNodes) =>