diff --git a/src/Nest/Descriptors.Indices.cs b/src/Nest/Descriptors.Indices.cs
index 50b6db4f9d0..1050627ca48 100644
--- a/src/Nest/Descriptors.Indices.cs
+++ b/src/Nest/Descriptors.Indices.cs
@@ -1000,6 +1000,27 @@ public GetIndexTemplateDescriptor(Names name): base(r => r.Optional("name", name
public GetIndexTemplateDescriptor MasterTimeout(Time mastertimeout) => Qs("master_timeout", mastertimeout);
}
+ ///Descriptor for MigrateToDataStream https://www.elastic.co/guide/en/elasticsearch/reference/master/data-streams.html
+ public partial class MigrateToDataStreamDescriptor : RequestDescriptorBase, IMigrateToDataStreamRequest
+ {
+ internal override ApiUrls ApiUrls => ApiUrlsLookups.IndicesMigrateToDataStream;
+ ////_data_stream/_migrate/{name}
+ ///this parameter is required
+ public MigrateToDataStreamDescriptor(Name name): base(r => r.Required("name", name))
+ {
+ }
+
+ ///Used for serialization purposes, making sure we have a parameterless constructor
+ [SerializationConstructor]
+ protected MigrateToDataStreamDescriptor(): base()
+ {
+ }
+
+ // values part of the url path
+ Name IMigrateToDataStreamRequest.Name => Self.RouteValues.Get("name");
+ // Request parameters
+ }
+
///Descriptor for Open https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-open-close.html
public partial class OpenIndexDescriptor : RequestDescriptorBase, IOpenIndexRequest
{
diff --git a/src/Nest/ElasticClient.Indices.cs b/src/Nest/ElasticClient.Indices.cs
index 23b2868f67c..3c8c0a05667 100644
--- a/src/Nest/ElasticClient.Indices.cs
+++ b/src/Nest/ElasticClient.Indices.cs
@@ -689,6 +689,30 @@ public Task GetMappingAsync(Func
public Task GetTemplateAsync(IGetIndexTemplateRequest request, CancellationToken ct = default) => DoRequestAsync(request, request.RequestParameters, ct);
///
+ /// POST request to the indices.migrate_to_data_stream API, read more about this API online:
+ ///
+ /// https://www.elastic.co/guide/en/elasticsearch/reference/master/data-streams.html
+ ///
+ public MigrateToDataStreamResponse MigrateToDataStream(Name name, Func selector = null) => MigrateToDataStream(selector.InvokeOrDefault(new MigrateToDataStreamDescriptor(name: name)));
+ ///
+ /// POST request to the indices.migrate_to_data_stream API, read more about this API online:
+ ///
+ /// https://www.elastic.co/guide/en/elasticsearch/reference/master/data-streams.html
+ ///
+ public Task MigrateToDataStreamAsync(Name name, Func selector = null, CancellationToken ct = default) => MigrateToDataStreamAsync(selector.InvokeOrDefault(new MigrateToDataStreamDescriptor(name: name)), ct);
+ ///
+ /// POST request to the indices.migrate_to_data_stream API, read more about this API online:
+ ///
+ /// https://www.elastic.co/guide/en/elasticsearch/reference/master/data-streams.html
+ ///
+ public MigrateToDataStreamResponse MigrateToDataStream(IMigrateToDataStreamRequest request) => DoRequest(request, request.RequestParameters);
+ ///
+ /// POST request to the indices.migrate_to_data_stream API, read more about this API online:
+ ///
+ /// https://www.elastic.co/guide/en/elasticsearch/reference/master/data-streams.html
+ ///
+ public Task MigrateToDataStreamAsync(IMigrateToDataStreamRequest request, CancellationToken ct = default) => DoRequestAsync(request, request.RequestParameters, ct);
+ ///
/// POST request to the indices.open API, read more about this API online:
///
/// https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-open-close.html
diff --git a/src/Nest/Requests.Indices.cs b/src/Nest/Requests.Indices.cs
index f203ae483b9..bc68fecdebc 100644
--- a/src/Nest/Requests.Indices.cs
+++ b/src/Nest/Requests.Indices.cs
@@ -1800,6 +1800,39 @@ public Time MasterTimeout
}
}
+ [InterfaceDataContract]
+ public partial interface IMigrateToDataStreamRequest : IRequest
+ {
+ [IgnoreDataMember]
+ Name Name
+ {
+ get;
+ }
+ }
+
+ ///Request for MigrateToDataStream https://www.elastic.co/guide/en/elasticsearch/reference/master/data-streams.html
+ public partial class MigrateToDataStreamRequest : PlainRequestBase, IMigrateToDataStreamRequest
+ {
+ protected IMigrateToDataStreamRequest Self => this;
+ internal override ApiUrls ApiUrls => ApiUrlsLookups.IndicesMigrateToDataStream;
+ ////_data_stream/_migrate/{name}
+ ///this parameter is required
+ public MigrateToDataStreamRequest(Name name): base(r => r.Required("name", name))
+ {
+ }
+
+ ///Used for serialization purposes, making sure we have a parameterless constructor
+ [SerializationConstructor]
+ protected MigrateToDataStreamRequest(): base()
+ {
+ }
+
+ // values part of the url path
+ [IgnoreDataMember]
+ Name IMigrateToDataStreamRequest.Name => Self.RouteValues.Get("name");
+ // Request parameters
+ }
+
[InterfaceDataContract]
public partial interface IOpenIndexRequest : IRequest
{
diff --git a/src/Nest/XPack/DataStreams/Migrate/MigrateToDataStreamRequest.cs b/src/Nest/XPack/DataStreams/Migrate/MigrateToDataStreamRequest.cs
new file mode 100644
index 00000000000..5ac1c7c03ea
--- /dev/null
+++ b/src/Nest/XPack/DataStreams/Migrate/MigrateToDataStreamRequest.cs
@@ -0,0 +1,25 @@
+// Licensed to Elasticsearch B.V under one or more agreements.
+// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
+// See the LICENSE file in the project root for more information
+
+namespace Nest
+{
+ ///
+ /// Converts an index alias to a data stream.
+ ///
+ [MapsApi("indices.migrate_to_data_stream.json")]
+ [ReadAs(typeof(MigrateToDataStreamRequest))]
+ public partial interface IMigrateToDataStreamRequest
+ {
+ }
+
+ ///
+ public partial class MigrateToDataStreamRequest : IMigrateToDataStreamRequest
+ {
+ }
+
+ ///
+ public partial class MigrateToDataStreamDescriptor
+ {
+ }
+}
diff --git a/src/Nest/XPack/DataStreams/Migrate/MigrateToDataStreamResponse.cs b/src/Nest/XPack/DataStreams/Migrate/MigrateToDataStreamResponse.cs
new file mode 100644
index 00000000000..d2e38117604
--- /dev/null
+++ b/src/Nest/XPack/DataStreams/Migrate/MigrateToDataStreamResponse.cs
@@ -0,0 +1,8 @@
+// Licensed to Elasticsearch B.V under one or more agreements.
+// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
+// See the LICENSE file in the project root for more information
+
+ namespace Nest
+{
+ public class MigrateToDataStreamResponse : AcknowledgedResponseBase { }
+}
diff --git a/src/Nest/_Generated/ApiUrlsLookup.generated.cs b/src/Nest/_Generated/ApiUrlsLookup.generated.cs
index d7e433dfc28..4949d38971d 100644
--- a/src/Nest/_Generated/ApiUrlsLookup.generated.cs
+++ b/src/Nest/_Generated/ApiUrlsLookup.generated.cs
@@ -134,6 +134,7 @@ internal static class ApiUrlsLookups
internal static ApiUrls IndicesGetMapping = new ApiUrls(new[]{"_mapping", "{index}/_mapping"});
internal static ApiUrls IndicesGetSettings = new ApiUrls(new[]{"_settings", "{index}/_settings", "{index}/_settings/{name}", "_settings/{name}"});
internal static ApiUrls IndicesGetTemplate = new ApiUrls(new[]{"_template", "_template/{name}"});
+ internal static ApiUrls IndicesMigrateToDataStream = new ApiUrls(new[]{"_data_stream/_migrate/{name}"});
internal static ApiUrls IndicesOpen = new ApiUrls(new[]{"{index}/_open"});
internal static ApiUrls IndicesPutAlias = new ApiUrls(new[]{"{index}/_alias/{name}"});
internal static ApiUrls IndicesPutMapping = new ApiUrls(new[]{"{index}/_mapping"});
diff --git a/tests/Tests/XPack/DataStreams/DataStreamsApiTests.cs b/tests/Tests/XPack/DataStreams/DataStreamsApiTests.cs
index 39d6bc0bb9b..3c7db126d15 100644
--- a/tests/Tests/XPack/DataStreams/DataStreamsApiTests.cs
+++ b/tests/Tests/XPack/DataStreams/DataStreamsApiTests.cs
@@ -17,7 +17,7 @@ namespace Tests.XPack.DataStreams
[SkipVersion("<7.9.0", "Introduced in 7.9.0")]
public class DataStreamsApiTests : CoordinatedIntegrationTestBase
{
- private static readonly Metric Document = new Metric
+ private static readonly Metric Document = new()
{
Timestamp = new DateTime(2020, 8, 3, 14, 0, 0, DateTimeKind.Utc),
Accept = 3,
@@ -27,13 +27,16 @@ public class DataStreamsApiTests : CoordinatedIntegrationTestBase d.Index(v).Refresh(Refresh.WaitFor),
- (v, c, f) => c.Index(Document, f),
- (v, c, f) => c.IndexAsync(Document, f),
- (v, c, r) => c.Index(r),
- (v, c, r) => c.IndexAsync(r)
+ (v, c, f) => c.Index(Document, f),
+ (v, c, f) => c.IndexAsync(Document, f),
+ (v, c, r) => c.Index(r),
+ (v, c, r) => c.IndexAsync(r)
)
},
{GetDataStreamStep, u =>
@@ -125,6 +128,48 @@ public DataStreamsApiTests(WritableCluster cluster, EndpointUsage usage) : base(
(v, c, r) => c.Indices.DeleteDataStreamAsync(r)
)
},
+ // Used for migrate step
+ {PrepareIndexStep, ">= 7.13.0", u =>
+ u.Calls(
+ v => new CreateIndexRequest($"my-index{v}-test")
+ {
+ Mappings = new TypeMapping
+ {
+ Properties = new Properties
+ {
+ { "@timestamp", new DateNanosProperty() }
+ }
+ }
+ },
+ (v, d) => d.Map(m=> m.Properties(p=> p.DateNanos(dn => dn.Name("@timestamp")))),
+ (v, c, f) => c.Indices.Create($"my-index{v}-test", f),
+ (v, c, f) => c.Indices.CreateAsync($"my-index{v}-test", f),
+ (v, c, r) => c.Indices.Create(r),
+ (v, c, r) => c.Indices.CreateAsync(r)
+ )
+ },
+ // Used for migrate step
+ {PrepareAliasStep,">= 7.13.0", u =>
+ u.Calls(
+ v => new PutAliasRequest($"my-index{v}-test", $"{v}-alias"),
+ (v, d) => d,
+ (v, c, f) => c.Indices.PutAlias($"my-index{v}-test", $"{v}-alias", f),
+ (v, c, f) => c.Indices.PutAliasAsync($"my-index{v}-test", $"{v}-alias", f),
+ (v, c, r) => c.Indices.PutAlias(r),
+ (v, c, r) => c.Indices.PutAliasAsync(r)
+ )
+ },
+ // Migrate to data stream added in 7.13.0
+ {MigrateToDataStreamStep,">= 7.13.0", u =>
+ u.Calls(
+ v => new MigrateToDataStreamRequest($"{v}-alias"),
+ (v, d) => d,
+ (v, c, f) => c.Indices.MigrateToDataStream($"{v}-alias", f),
+ (v, c, f) => c.Indices.MigrateToDataStreamAsync($"{v}-alias", f),
+ (v, c, r) => c.Indices.MigrateToDataStream(r),
+ (v, c, r) => c.Indices.MigrateToDataStreamAsync(r)
+ )
+ },
}) { }
[I] public async Task CreateDataStreamResponse() => await Assert(CreateDataStreamStep, (v, r) =>
@@ -179,5 +224,11 @@ [I] public async Task DeleteDataStreamResponse() => await Assert await Assert(MigrateToDataStreamStep, r =>
+ {
+ r.ShouldBeValid();
+ r.Acknowledged.Should().BeTrue();
+ });
}
}
diff --git a/tests/Tests/XPack/DataStreams/Migrate/MigrateToDataStreamUrlTests.cs b/tests/Tests/XPack/DataStreams/Migrate/MigrateToDataStreamUrlTests.cs
new file mode 100644
index 00000000000..38097a29ad9
--- /dev/null
+++ b/tests/Tests/XPack/DataStreams/Migrate/MigrateToDataStreamUrlTests.cs
@@ -0,0 +1,18 @@
+using System.Threading.Tasks;
+using Elastic.Elasticsearch.Xunit.XunitPlumbing;
+using Nest;
+using Tests.Framework.EndpointTests;
+using static Tests.Framework.EndpointTests.UrlTester;
+
+namespace Tests.XPack.DataStreams.Migrate
+{
+ public class MigrateToDataStreamUrlTests : UrlTestsBase
+ {
+ [U]
+ public override async Task Urls() => await POST("/_data_stream/_migrate/stream")
+ .Fluent(c => c.Indices.MigrateToDataStream("stream", f => f))
+ .Request(c => c.Indices.MigrateToDataStream(new MigrateToDataStreamRequest("stream")))
+ .FluentAsync(c => c.Indices.MigrateToDataStreamAsync("stream", f => f))
+ .RequestAsync(c => c.Indices.MigrateToDataStreamAsync(new MigrateToDataStreamRequest("stream")));
+ }
+}