dotnet / aspire

An opinionated, cloud ready stack for building observable, production ready, distributed applications in .NET
https://learn.microsoft.com/dotnet/aspire
MIT License
3.36k stars 347 forks source link

"Watch task over kubernetes Container resources terminated unexpectedly. Check to ensure dcpd process is running." #4582

Open atrauzzi opened 1 week ago

atrauzzi commented 1 week ago

Running with podman on Fedora 40:

var minio = builder
    .AddContainer("minio", "minio/minio")
    .WithEnvironment("MINIO_ROOT_USER", "blah")
    .WithEnvironment("MINIO_ROOT_PASSWORD", "blah")
    .WithVolume("storage", "/minio")
    .WithArgs(["server", "--console-address", "0.0.0.0:8075", "--address", "0.0.0.0:8078", "--compat", "/minio"])
    .WithHttpsEndpoint(8075, 8075)
    .WithHttpsEndpoint(8078, 8078)
;

I end up getting this exception:

crit: Aspire.Hosting.Dcp.ApplicationExecutor[0]
      Watch task over kubernetes Service resources terminated unexpectedly. Check to ensure dcpd process is running.
      System.InvalidOperationException: Sequence contains more than one matching element
         at System.Linq.ThrowHelper.ThrowMoreThanOneMatchException()
         at System.Linq.Enumerable.TryGetSingle[TSource](IEnumerable`1 source, Func`2 predicate, Boolean& found)
         at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
         at Aspire.Hosting.ApplicationModel.EndpointReference.GetEndpointAnnotation() in /_/src/Aspire.Hosting/ApplicationModel/EndpointReference.cs:line 111
         at Aspire.Hosting.ApplicationModel.EndpointReference.get_EndpointAnnotation() in /_/src/Aspire.Hosting/ApplicationModel/EndpointReference.cs:line 18
         at Aspire.Hosting.Dcp.ApplicationExecutor.GetUrls(CustomResource resource) in /_/src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 644
         at Aspire.Hosting.Dcp.ApplicationExecutor.ToSnapshot(Container container, CustomResourceSnapshot previous) in /_/src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 527
         at Aspire.Hosting.Dcp.ApplicationExecutor.<>c__DisplayClass37_0.<TryRefreshResource>b__0(CustomResourceSnapshot s) in /_/src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 511
         at Aspire.Hosting.ApplicationModel.ResourceNotificationService.PublishUpdateAsync(IResource resource, String resourceId, Func`2 stateFactory) in /_/src/Aspire.Hosting/ApplicationModel/ResourceNotificationService.cs:line 75
         at Aspire.Hosting.Dcp.ApplicationExecutor.TryRefreshResource(String resourceKind, String resourceName) in /_/src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 507
         at Aspire.Hosting.Dcp.ApplicationExecutor.ProcessServiceChange(WatchEventType watchEventType, Service service) in /_/src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 487
         at Aspire.Hosting.Dcp.ApplicationExecutor.<>c__DisplayClass32_1`1.<<WatchResourceChanges>b__10>d.MoveNext() in /_/src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 291
      --- End of stack trace from previous location ---
         at Aspire.Hosting.Dcp.ApplicationExecutor.<>c__DisplayClass32_1`1.<<WatchResourceChanges>b__10>d.MoveNext() in /_/src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 285
      --- End of stack trace from previous location ---
         at Polly.ResiliencePipeline.<>c.<<ExecuteAsync>b__3_0>d.MoveNext()
      --- End of stack trace from previous location ---
         at Polly.Outcome`1.GetResultOrRethrow()
         at Polly.ResiliencePipeline.ExecuteAsync(Func`2 callback, CancellationToken cancellationToken)
         at Aspire.Hosting.Dcp.ApplicationExecutor.<>c__DisplayClass32_0.<<WatchResourceChanges>g__WatchKubernetesResource|3>d`1.MoveNext() in /_/src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 281

Looks like this happens when I don't give the port mappings names? Might be useful to trap that and return an explicit message to be more informative here-ish?

mitchdenny commented 1 week ago

@atrauzzi thanks for reporting this. Smells like either a bug or a usability issue (at the least). Will add it to the backlog for now. Just want to confirm that if you name the endpoints it works as expected?

davidfowl commented 1 week ago

This is because the endpoint name is ambiguous.

atrauzzi commented 1 week ago

@mitchdenny - Yup!

mitchdenny commented 1 week ago

Yeah it's expected. The bug is that the error should be more helpful