@@ -203,18 +203,18 @@ public static IResourceBuilder<T> WithPgAdmin<T>(this IResourceBuilder<T> builde
203203
204204 pgAdminContainerBuilder . WithContainerFiles (
205205 destinationPath : "/pgadmin4" ,
206- callback : ( context , _ ) =>
206+ callback : async ( context , cancellationToken ) =>
207207 {
208208 var appModel = context . ServiceProvider . GetRequiredService < DistributedApplicationModel > ( ) ;
209209 var postgresInstances = builder . ApplicationBuilder . Resources . OfType < PostgresServerResource > ( ) ;
210210
211- return Task . FromResult < IEnumerable < ContainerFileSystemItem > > ( [
211+ return [
212212 new ContainerFile
213213 {
214214 Name = "servers.json" ,
215- Contents = WritePgAdminServerJson ( postgresInstances ) ,
215+ Contents = await WritePgAdminServerJson ( postgresInstances , cancellationToken ) . ConfigureAwait ( false ) ,
216216 } ,
217- ] ) ;
217+ ] ;
218218 } ) ;
219219
220220 configureContainer ? . Invoke ( pgAdminContainerBuilder ) ;
@@ -313,25 +313,25 @@ public static IResourceBuilder<PostgresServerResource> WithPgWeb(this IResourceB
313313
314314 pgwebContainerBuilder . WithContainerFiles (
315315 destinationPath : "/" ,
316- callback : ( context , _ ) =>
316+ callback : async ( context , ct ) =>
317317 {
318318 var appModel = context . ServiceProvider . GetRequiredService < DistributedApplicationModel > ( ) ;
319319 var postgresInstances = builder . ApplicationBuilder . Resources . OfType < PostgresDatabaseResource > ( ) ;
320320
321321 // Add the bookmarks to the pgweb container
322- return Task . FromResult < IEnumerable < ContainerFileSystemItem > > ( [
322+ return [
323323 new ContainerDirectory
324324 {
325325 Name = ".pgweb" ,
326326 Entries = [
327327 new ContainerDirectory
328328 {
329329 Name = "bookmarks" ,
330- Entries = WritePgWebBookmarks ( postgresInstances ) ,
330+ Entries = await WritePgWebBookmarks ( postgresInstances , ct ) . ConfigureAwait ( false )
331331 } ,
332332 ] ,
333333 } ,
334- ] ) ;
334+ ] ;
335335 } ) ;
336336
337337 return builder ;
@@ -489,21 +489,25 @@ public static IResourceBuilder<PostgresServerResource> WithHostPort(this IResour
489489 } ) ;
490490 }
491491
492- private static IEnumerable < ContainerFileSystemItem > WritePgWebBookmarks ( IEnumerable < PostgresDatabaseResource > postgresInstances )
492+ private static async Task < IEnumerable < ContainerFileSystemItem > > WritePgWebBookmarks ( IEnumerable < PostgresDatabaseResource > postgresInstances , CancellationToken cancellationToken )
493493 {
494494 var bookmarkFiles = new List < ContainerFileSystemItem > ( ) ;
495495
496496 foreach ( var postgresDatabase in postgresInstances )
497497 {
498- var user = postgresDatabase . Parent . UserNameParameter ? . Value ?? "postgres" ;
498+ var user = postgresDatabase . Parent . UserNameParameter is null
499+ ? "postgres"
500+ : await postgresDatabase . Parent . UserNameParameter . GetValueAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
501+
502+ var password = await postgresDatabase . Parent . PasswordParameter . GetValueAsync ( cancellationToken ) . ConfigureAwait ( false ) ?? "password" ;
499503
500504 // PgAdmin assumes Postgres is being accessed over a default Aspire container network and hardcodes the resource address
501505 // This will need to be refactored once updated service discovery APIs are available
502506 var fileContent = $ """
503507 host = "{ postgresDatabase . Parent . Name } "
504508 port = { postgresDatabase . Parent . PrimaryEndpoint . TargetPort }
505509 user = "{ user } "
506- password = "{ postgresDatabase . Parent . PasswordParameter . Value } "
510+ password = "{ password } "
507511 database = "{ postgresDatabase . DatabaseName } "
508512 sslmode = "disable"
509513 """ ;
@@ -518,7 +522,7 @@ private static IEnumerable<ContainerFileSystemItem> WritePgWebBookmarks(IEnumera
518522 return bookmarkFiles ;
519523 }
520524
521- private static string WritePgAdminServerJson ( IEnumerable < PostgresServerResource > postgresInstances )
525+ private static async Task < string > WritePgAdminServerJson ( IEnumerable < PostgresServerResource > postgresInstances , CancellationToken cancellationToken )
522526 {
523527 using var stream = new MemoryStream ( ) ;
524528 using var writer = new Utf8JsonWriter ( stream , new JsonWriterOptions { Indented = true } ) ;
@@ -531,6 +535,10 @@ private static string WritePgAdminServerJson(IEnumerable<PostgresServerResource>
531535 foreach ( var postgresInstance in postgresInstances )
532536 {
533537 var endpoint = postgresInstance . PrimaryEndpoint ;
538+ var userName = postgresInstance . UserNameParameter is null
539+ ? "postgres"
540+ : await postgresInstance . UserNameParameter . GetValueAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
541+ var password = await postgresInstance . PasswordParameter . GetValueAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
534542
535543 writer . WriteStartObject ( $ "{ serverIndex } ") ;
536544 writer . WriteString ( "Name" , postgresInstance . Name ) ;
@@ -539,10 +547,10 @@ private static string WritePgAdminServerJson(IEnumerable<PostgresServerResource>
539547 // This will need to be refactored once updated service discovery APIs are available
540548 writer . WriteString ( "Host" , endpoint . Resource . Name ) ;
541549 writer . WriteNumber ( "Port" , ( int ) endpoint . TargetPort ! ) ;
542- writer . WriteString ( "Username" , postgresInstance . UserNameParameter ? . Value ?? "postgres" ) ;
550+ writer . WriteString ( "Username" , userName ) ;
543551 writer . WriteString ( "SSLMode" , "prefer" ) ;
544552 writer . WriteString ( "MaintenanceDB" , "postgres" ) ;
545- writer . WriteString ( "PasswordExecCommand" , $ "echo '{ postgresInstance . PasswordParameter . Value } '") ; // HACK: Generating a pass file and playing around with chmod is too painful.
553+ writer . WriteString ( "PasswordExecCommand" , $ "echo '{ password } '") ; // HACK: Generating a pass file and playing around with chmod is too painful.
546554 writer . WriteEndObject ( ) ;
547555
548556 serverIndex ++ ;
0 commit comments