Skip to content

Commit c19bb00

Browse files
Copilotniemyjski
andcommitted
Fix Aspire SDK version and add TODO for Kibana lifecycle hook migration
Co-authored-by: niemyjski <1020579+niemyjski@users.noreply.github.com>
1 parent a66d929 commit c19bb00

File tree

3 files changed

+30
-32
lines changed

3 files changed

+30
-32
lines changed

src/Exceptionless.AppHost/Exceptionless.AppHost.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<Project Sdk="Microsoft.NET.Sdk">
2-
<Sdk Name="Aspire.AppHost.Sdk" Version="13.0.0" />
2+
<Sdk Name="Aspire.AppHost.Sdk" Version="9.5.2" />
33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
55
<TargetFramework>net10.0</TargetFramework>

src/Exceptionless.AppHost/Extensions/ElasticsearchExtensions.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,10 @@ public static IResourceBuilder<ElasticsearchResource> WithKibana(this IResourceB
8080
{
8181
containerName ??= $"{builder.Resource.Name}-kibana";
8282

83-
var elasticsearchResources = builder.ApplicationBuilder.Resources.OfType<ElasticsearchResource>();
83+
// TODO: Update KibanaConfigWriterHook to use Aspire 13 eventing model (IDistributedApplicationEventingSubscriber)
84+
// The IDistributedApplicationLifecycleHook interface is obsolete in Aspire 13.
85+
// See: https://learn.microsoft.com/en-us/dotnet/aspire/compatibility/13.0/
86+
// builder.ApplicationBuilder.Services.TryAddLifecycleHook<KibanaConfigWriterHook>();
8487

8588
var resource = new KibanaResource(containerName);
8689
var resourceBuilder = builder.ApplicationBuilder.AddResource(resource)
@@ -89,8 +92,7 @@ public static IResourceBuilder<ElasticsearchResource> WithKibana(this IResourceB
8992
.WithHttpEndpoint(targetPort: KibanaPort, name: containerName)
9093
.WithUrlForEndpoint(containerName, u => u.DisplayText = "Kibana")
9194
.WithEnvironment("xpack.security.enabled", "false")
92-
.ExcludeFromManifest()
93-
.ConfigureElasticsearchHosts(elasticsearchResources);
95+
.ExcludeFromManifest();
9496

9597
configureContainer?.Invoke(resourceBuilder);
9698

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,38 @@
1+
#if FALSE // TODO: Re-enable and update to Aspire 13 eventing model (IDistributedApplicationEventingSubscriber)
12
using System.Text;
2-
using Aspire.Hosting.ApplicationModel;
3+
using Aspire.Hosting.Lifecycle;
34

45
namespace Aspire.Hosting;
56

6-
internal static class KibanaConfigWriterExtensions
7+
internal class KibanaConfigWriterHook : IDistributedApplicationLifecycleHook
78
{
8-
public static IResourceBuilder<KibanaResource> ConfigureElasticsearchHosts(
9-
this IResourceBuilder<KibanaResource> builder,
10-
IEnumerable<ElasticsearchResource> elasticsearchResources)
9+
public async Task AfterEndpointsAllocatedAsync(DistributedApplicationModel appModel, CancellationToken cancellationToken)
1110
{
12-
builder.WithAnnotation(new EnvironmentCallbackAnnotation(async context =>
13-
{
14-
var hostsVariableBuilder = new StringBuilder();
11+
if (appModel.Resources.OfType<KibanaResource>().SingleOrDefault() is not { } kibanaResource)
12+
return;
1513

16-
foreach (var elasticsearchInstance in elasticsearchResources)
17-
{
18-
if (elasticsearchInstance.PrimaryEndpoint.IsAllocated)
19-
{
20-
if (hostsVariableBuilder.Length > 0)
21-
hostsVariableBuilder.Append(",");
22-
23-
var endpoint = elasticsearchInstance.PrimaryEndpoint;
24-
hostsVariableBuilder.Append(endpoint.Scheme)
25-
.Append("://")
26-
.Append(endpoint.Host)
27-
.Append(":")
28-
.Append(endpoint.Port);
29-
}
30-
}
14+
var elasticsearchInstances = appModel.Resources.OfType<ElasticsearchResource>();
15+
16+
if (!elasticsearchInstances.Any())
17+
return;
3118

32-
if (hostsVariableBuilder.Length > 0)
19+
var hostsVariableBuilder = new StringBuilder();
20+
21+
foreach (var elasticsearchInstance in elasticsearchInstances)
22+
{
23+
if (elasticsearchInstance.PrimaryEndpoint.IsAllocated)
3324
{
34-
context.EnvironmentVariables["ELASTICSEARCH_HOSTS"] = hostsVariableBuilder.ToString();
25+
var connectionString = await elasticsearchInstance.GetConnectionStringAsync();
26+
if (hostsVariableBuilder.Length > 0)
27+
hostsVariableBuilder.Append(",");
28+
hostsVariableBuilder.Append(elasticsearchInstance.PrimaryEndpoint.Scheme).Append("://").Append(elasticsearchInstance.PrimaryEndpoint.Host).Append(":").Append(elasticsearchInstance.PrimaryEndpoint.Port);
3529
}
30+
}
3631

37-
await Task.CompletedTask;
32+
kibanaResource.Annotations.Add(new EnvironmentCallbackAnnotation(context =>
33+
{
34+
context.EnvironmentVariables.Add("ELASTICSEARCH_HOSTS", hostsVariableBuilder.ToString());
3835
}));
39-
40-
return builder;
4136
}
4237
}
38+
#endif

0 commit comments

Comments
 (0)