Skip to content

Commit 08ca05f

Browse files
JerryNixonJerry NixonCopilotAniruddh25Copilot
authored
Added aspire sample (#2977)
This is a simple sample that demonstrates how to use DAB in Aspire. I will add it to our docs/quick-starts when this is merged. Please note there is no /src code change, just /samples. --------- Co-authored-by: Jerry Nixon <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: Aniruddh Munde <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: Aniruddh25 <[email protected]>
1 parent 12e5ccf commit 08ca05f

File tree

8 files changed

+1219
-0
lines changed

8 files changed

+1219
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"appHostPath": "../apphost.cs",
3+
"features.minimumSdkCheckEnabled": true,
4+
"features.singleFileAppHostEnabled": true
5+
}

samples/aspire/.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Do not ignore anything in this folder
2+
!*
3+
4+
# Explicitly include dab-config.json
5+
!dab-config.json

samples/aspire/apphost.cs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
#:sdk Aspire.AppHost.Sdk@13.0.0
5+
#:package Aspire.Hosting.SqlServer@13.0.0
6+
#:package CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects@9.8.1-beta.420
7+
#:package CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder@9.8.1-beta.420
8+
#:package CommunityToolkit.Aspire.Hosting.McpInspector@9.8.0
9+
10+
var builder = DistributedApplication.CreateBuilder(args);
11+
12+
var options = new
13+
{
14+
SqlScript = "database.sql",
15+
SqlDatabase = "StarTrek",
16+
DabConfig = "dab-config.json",
17+
DabImage = "1.7.81-rc",
18+
SqlCmdrImage = "latest"
19+
};
20+
21+
var sqlServer = builder
22+
.AddSqlServer("sql-server")
23+
.WithDataVolume("sql-data-volume")
24+
.WithLifetime(ContainerLifetime.Persistent);
25+
26+
var sqlDatabase = sqlServer
27+
.AddDatabase("sql-database", options.SqlDatabase)
28+
.WithCreationScript(File.ReadAllText(new FileInfo(options.SqlScript).FullName));
29+
30+
var dabServer = builder
31+
.AddContainer("data-api", image: "azure-databases/data-api-builder", tag: options.DabImage)
32+
.WithImageRegistry("mcr.microsoft.com")
33+
.WithBindMount(source: new FileInfo(options.DabConfig).FullName, target: "/App/dab-config.json", isReadOnly: true)
34+
.WithHttpEndpoint(targetPort: 5000, name: "http")
35+
.WithEnvironment("MSSQL_CONNECTION_STRING", sqlDatabase)
36+
.WithUrls(context =>
37+
{
38+
context.Urls.Clear();
39+
context.Urls.Add(new() { Url = "/graphql", DisplayText = "Nitro", Endpoint = context.GetEndpoint("http") });
40+
context.Urls.Add(new() { Url = "/swagger", DisplayText = "Swagger", Endpoint = context.GetEndpoint("http") });
41+
context.Urls.Add(new() { Url = "/health", DisplayText = "Health", Endpoint = context.GetEndpoint("http") });
42+
})
43+
.WithOtlpExporter()
44+
.WithParentRelationship(sqlDatabase)
45+
.WithHttpHealthCheck("/health")
46+
.WaitFor(sqlDatabase);
47+
48+
var sqlCommander = builder
49+
.AddContainer("sql-cmdr", "jerrynixon/sql-commander", options.SqlCmdrImage)
50+
.WithImageRegistry("docker.io")
51+
.WithHttpEndpoint(targetPort: 8080, name: "http")
52+
.WithEnvironment("ConnectionStrings__db", sqlDatabase)
53+
.WithUrls(context =>
54+
{
55+
context.Urls.Clear();
56+
context.Urls.Add(new() { Url = "/", DisplayText = "Commander", Endpoint = context.GetEndpoint("http") });
57+
})
58+
.WithParentRelationship(sqlDatabase)
59+
.WithHttpHealthCheck("/health")
60+
.WaitFor(sqlDatabase);
61+
62+
var mcpInspector = builder
63+
.AddMcpInspector("mcp-inspector")
64+
.WithMcpServer(dabServer)
65+
.WithParentRelationship(dabServer)
66+
.WithEnvironment("NODE_TLS_REJECT_UNAUTHORIZED", "0")
67+
.WaitFor(dabServer)
68+
.WithUrls(context =>
69+
{
70+
context.Urls.First().DisplayText = "Inspector";
71+
});
72+
73+
await builder.Build().RunAsync();

samples/aspire/dab-config.cmd

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
@echo off
2+
3+
del /q dab-config.json 2>nul
4+
5+
set MSSQL_CONNECTION_STRING=%MSSQL_CONNECTION_STRING%
6+
7+
dab init --database-type mssql --connection-string "@env('MSSQL_CONNECTION_STRING')" --config dab-config.json --host-mode development
8+
9+
dab add Series --source dbo.Series --source.type table --permissions "anonymous:*" --description "Star Trek series"
10+
dab update Series --fields.name Id --fields.description "Primary key" --fields.primary-key true
11+
dab update Series --fields.name Name --fields.description "Series name" --fields.primary-key false
12+
13+
dab add Actor --source dbo.Actor --source.type table --permissions "anonymous:*" --description "An actor in the franchise"
14+
dab update Actor --fields.name Id --fields.description "Primary key" --fields.primary-key true
15+
dab update Actor --fields.name FirstName --fields.description "Given name" --fields.primary-key false
16+
dab update Actor --fields.name LastName --fields.description "Family name" --fields.primary-key false
17+
dab update Actor --fields.name BirthYear --fields.description "Year of birth" --fields.primary-key false
18+
dab update Actor --fields.name FullName --fields.description "Computed full name" --fields.primary-key false
19+
20+
dab add Species --source dbo.Species --source.type table --permissions "anonymous:*" --description "Alien species in Star Trek"
21+
dab update Species --fields.name Id --fields.description "Primary key" --fields.primary-key true
22+
dab update Species --fields.name Name --fields.description "Species name" --fields.primary-key false
23+
24+
dab add Character --source dbo.Character --source.type table --permissions "anonymous:*" --description "A fictional character portrayed by an actor"
25+
dab update Character --fields.name Id --fields.description "Primary key" --fields.primary-key true
26+
dab update Character --fields.name Name --fields.description "Character name" --fields.primary-key false
27+
dab update Character --fields.name ActorId --fields.description "Foreign key to Actor" --fields.primary-key false
28+
dab update Character --fields.name Stardate --fields.description "Birth stardate" --fields.primary-key false
29+
30+
dab add Series_Character --source dbo.Series_Character --source.type table --permissions "anonymous:*" --description "Characters appearing in series"
31+
dab update Series_Character --fields.name SeriesId --fields.description "Foreign key to Series" --fields.primary-key true
32+
dab update Series_Character --fields.name CharacterId --fields.description "Foreign key to Character" --fields.primary-key true
33+
dab update Series_Character --fields.name Role --fields.description "Character role in series" --fields.primary-key false
34+
35+
dab add Character_Species --source dbo.Character_Species --source.type table --permissions "anonymous:*" --description "Species composition of characters"
36+
dab update Character_Species --fields.name CharacterId --fields.description "Foreign key to Character" --fields.primary-key true
37+
dab update Character_Species --fields.name SpeciesId --fields.description "Foreign key to Species" --fields.primary-key true
38+
39+
dab update Character --relationship Character_Actor --target.entity Actor --cardinality one --relationship.fields "ActorId:Id"
40+
dab update Character --relationship Character_Series --cardinality many --target.entity Series_Character --relationship.fields "Id:CharacterId"
41+
dab update Character --relationship Character_Species --cardinality many --target.entity Character_Species --relationship.fields "Id:CharacterId"
42+
43+
dab update Actor --relationship Actor_Characters --cardinality many --target.entity Character --relationship.fields "Id:ActorId"
44+
45+
dab update Species --relationship Species_Characters --cardinality many --target.entity Character_Species --relationship.fields "Id:SpeciesId"
46+
47+
dab update Series --relationship Series_Characters --cardinality many --target.entity Series_Character --relationship.fields "Id:SeriesId"
48+
49+
dab update Series_Character --relationship SeriesCharacter_Series --cardinality one --target.entity Series --relationship.fields "SeriesId:Id"
50+
dab update Series_Character --relationship SeriesCharacter_Character --cardinality one --target.entity Character --relationship.fields "CharacterId:Id"
51+
52+
dab update Character_Species --relationship CharacterSpecies_Character --cardinality one --target.entity Character --relationship.fields "CharacterId:Id"
53+
dab update Character_Species --relationship CharacterSpecies_Species --cardinality one --target.entity Species --relationship.fields "SpeciesId:Id"
54+
55+
dab add SeriesActors --source dbo.SeriesActors --source.type view --source.key-fields "Id,SeriesId" --permissions "anonymous:*" --description "Actors appearing in each series"
56+
dab update SeriesActors --fields.name Id --fields.description "Actor id" --fields.primary-key true
57+
dab update SeriesActors --fields.name SeriesId --fields.description "Series id" --fields.primary-key true
58+
dab update SeriesActors --fields.name Actor --fields.description "Actor name" --fields.primary-key false
59+
dab update SeriesActors --fields.name BirthYear --fields.description "Year of birth" --fields.primary-key false
60+
dab update SeriesActors --fields.name Series --fields.description "Series name" --fields.primary-key false
61+
62+
dab add GetSeriesActors --source dbo.GetSeriesActors --source.type stored-procedure --permissions "anonymous:*" --description "Return actors in a series"
63+
dab update GetSeriesActors --parameters.name seriesId --parameters.description "Series identifier" --parameters.required false --parameters.default 1
64+
dab update GetSeriesActors --parameters.name top --parameters.description "Limit rows" --parameters.required false --parameters.default 5
65+
66+
echo DAB configuration complete!

0 commit comments

Comments
 (0)