Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions playground/AspireEventHub/EventHubs.AppHost/Program.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureProvisioning();

// required for the event processor client which will use the connectionName to get the connectionString.
var blob = builder.AddAzureStorage("ehstorage")
.AddBlobs("checkpoints");
Expand Down
2 changes: 0 additions & 2 deletions playground/AzureSearchEndToEnd/AzureSearch.AppHost/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureProvisioning();

var azureSearch = builder.AddAzureSearch("search");

builder.AddProject<Projects.AzureSearch_ApiService>("api")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,32 @@
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:16155",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:17037"
},
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:15288",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:16155",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:17038",
"ASPIRE_ALLOW_UNSECURED_TRANSPORT": "true"
},
"generate-manifest": {
"commandName": "Project",
"launchBrowser": true,
"dotnetRunMessages": true,
"commandLineArgs": "--publisher manifest --output-path aspire-manifest.json",
"applicationUrl": "http://localhost:15288",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:16155"
}
}
}
},
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:15288",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:16155",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:17038",
"ASPIRE_ALLOW_UNSECURED_TRANSPORT": "true"
}
},
"generate-manifest": {
"commandName": "Project",
"launchBrowser": true,
"dotnetRunMessages": true,
"commandLineArgs": "--publisher manifest --output-path aspire-manifest.json",
"applicationUrl": "http://localhost:15288",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:16155"
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// The .NET Foundation licenses this file to you under the MIT license.
var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureProvisioning();

var storage = builder.AddAzureStorage("storage").RunAsEmulator(container =>
{
container.WithDataBindMount();
Expand Down
2 changes: 0 additions & 2 deletions playground/CosmosEndToEnd/CosmosEndToEnd.AppHost/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureProvisioning();

var db = builder.AddAzureCosmosDB("cosmos")
.AddDatabase("db")
.RunAsEmulator();
Expand Down
2 changes: 0 additions & 2 deletions playground/OpenAIEndToEnd/OpenAIEndToEnd.AppHost/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureProvisioning();

var deploymentAndModelName = "gpt-35-turbo";
var openai = builder.AddAzureOpenAI("openai").AddDeployment(
new(deploymentAndModelName, deploymentAndModelName, "0613")
Expand Down
2 changes: 0 additions & 2 deletions playground/bicep/BicepSample.AppHost/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureProvisioning();

var parameter = builder.AddParameter("val");

AzureBicepResource? temp00 = null;
Expand Down
1 change: 0 additions & 1 deletion playground/cdk/CdkSample.AppHost/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
using Azure.ResourceManager.OperationalInsights.Models;

var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureProvisioning();

var cosmosdb = builder.AddAzureCosmosDB("cosmos").AddDatabase("cosmosdb");

Expand Down
1 change: 0 additions & 1 deletion playground/signalr/SignalRAppHost/Program.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureProvisioning();
var signalr = builder.AddAzureSignalR("signalr1");

builder.AddProject<Projects.SignalRWeb>("webfrontend")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public static IResourceBuilder<AzureAppConfigurationResource> AddAzureAppConfigu
[Experimental("ASPIRE0001", UrlFormat = "https://aka.ms/dotnet/aspire/diagnostics#{0}")]
public static IResourceBuilder<AzureAppConfigurationResource> AddAzureAppConfiguration(this IDistributedApplicationBuilder builder, string name, Action<IResourceBuilder<AzureAppConfigurationResource>, ResourceModuleConstruct, AppConfigurationStore>? configureResource)
{
builder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var store = new AppConfigurationStore(construct, name: name, skuName: "standard");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public static IResourceBuilder<AzureApplicationInsightsResource> AddAzureApplica
[Experimental("ASPIRE0001", UrlFormat = "https://aka.ms/dotnet/aspire/diagnostics#{0}")]
public static IResourceBuilder<AzureApplicationInsightsResource> AddAzureApplicationInsights(this IDistributedApplicationBuilder builder, string name, Action<IResourceBuilder<AzureApplicationInsightsResource>, ResourceModuleConstruct, ApplicationInsightsComponent>? configureResource)
{
builder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var appInsights = new ApplicationInsightsComponent(construct, name: name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public static IResourceBuilder<AzureOpenAIResource> AddAzureOpenAI(this IDistrib
[Experimental("ASPIRE0001", UrlFormat = "https://aka.ms/dotnet/aspire/diagnostics#{0}")]
public static IResourceBuilder<AzureOpenAIResource> AddAzureOpenAI(this IDistributedApplicationBuilder builder, string name, Action<IResourceBuilder<AzureOpenAIResource>, ResourceModuleConstruct, CognitiveServicesAccount, IEnumerable<CognitiveServicesAccountDeployment>>? configureResource)
{
builder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var cogServicesAccount = new CognitiveServicesAccount(construct, "OpenAI", name: name);
Expand Down
2 changes: 2 additions & 0 deletions src/Aspire.Hosting.Azure.CosmosDB/AzureCosmosDBExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public static IResourceBuilder<AzureCosmosDBResource> AddAzureCosmosDB(this IDis
[Experimental("ASPIRE0001", UrlFormat = "https://aka.ms/dotnet/aspire/diagnostics#{0}")]
public static IResourceBuilder<AzureCosmosDBResource> AddAzureCosmosDB(this IDistributedApplicationBuilder builder, string name, Action<IResourceBuilder<AzureCosmosDBResource>, ResourceModuleConstruct, CosmosDBAccount, IEnumerable<CosmosDBSqlDatabase>>? configureResource)
{
builder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var cosmosAccount = new CosmosDBAccount(construct, CosmosDBAccountKind.GlobalDocumentDB, name: name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ public static IResourceBuilder<AzureEventHubsResource> AddAzureEventHubs(
public static IResourceBuilder<AzureEventHubsResource> AddAzureEventHubs(this IDistributedApplicationBuilder builder, string name,
Action<IResourceBuilder<AzureEventHubsResource>, ResourceModuleConstruct, EventHubsNamespace>? configureResource)
{
builder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var eventHubsNamespace = new EventHubsNamespace(construct, name: name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public static IResourceBuilder<AzureKeyVaultResource> AddAzureKeyVault(this IDis
[Experimental("ASPIRE0001", UrlFormat = "https://aka.ms/dotnet/aspire/diagnostics#{0}")]
public static IResourceBuilder<AzureKeyVaultResource> AddAzureKeyVault(this IDistributedApplicationBuilder builder, string name, Action<IResourceBuilder<AzureKeyVaultResource>, ResourceModuleConstruct, KeyVault>? configureResource)
{
builder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var keyVault = construct.AddKeyVault(name: construct.Resource.Name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public static IResourceBuilder<AzureLogAnalyticsWorkspaceResource> AddAzureLogAn
[Experimental("ASPIRE0001", UrlFormat = "https://aka.ms/dotnet/aspire/diagnostics#{0}")]
public static IResourceBuilder<AzureLogAnalyticsWorkspaceResource> AddAzureLogAnalyticsWorkspace(this IDistributedApplicationBuilder builder, string name, Action<IResourceBuilder<AzureLogAnalyticsWorkspaceResource>, ResourceModuleConstruct, OperationalInsightsWorkspace>? configureResource)
{
builder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var workspace = new OperationalInsightsWorkspace(construct, name: name, sku: new OperationalInsightsWorkspaceSku(OperationalInsightsWorkspaceSkuName.PerGB2018));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ internal static IResourceBuilder<PostgresServerResource> PublishAsAzurePostgresF
Action<IResourceBuilder<AzurePostgresResource>, ResourceModuleConstruct, PostgreSqlFlexibleServer>? configureResource,
bool useProvisioner = false)
{
builder.ApplicationBuilder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var administratorLogin = new Parameter("administratorLogin");
Expand Down
2 changes: 2 additions & 0 deletions src/Aspire.Hosting.Azure.Redis/AzureRedisExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ public static IResourceBuilder<RedisResource> PublishAsAzureRedis(this IResource

internal static IResourceBuilder<RedisResource> PublishAsAzureRedisInternal(this IResourceBuilder<RedisResource> builder, Action<IResourceBuilder<AzureRedisResource>, ResourceModuleConstruct, RedisCache>? configureResource, bool useProvisioner = false)
{
builder.ApplicationBuilder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var redisCache = new RedisCache(construct, name: builder.Resource.Name);
Expand Down
2 changes: 2 additions & 0 deletions src/Aspire.Hosting.Azure.Search/AzureSearchExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ public static IResourceBuilder<AzureSearchResource> AddAzureSearch(
string name,
Action<IResourceBuilder<AzureSearchResource>, ResourceModuleConstruct, SearchService>? configureResource)
{
builder.AddAzureProvisioning();

AzureSearchResource resource = new(name, ConfigureSearch);
return builder.AddResource(resource)
.WithParameter(AzureBicepResource.KnownParameters.PrincipalId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public static IResourceBuilder<AzureServiceBusResource> AddAzureServiceBus(this
[Experimental("ASPIRE0001", UrlFormat = "https://aka.ms/dotnet/aspire/diagnostics#{0}")]
public static IResourceBuilder<AzureServiceBusResource> AddAzureServiceBus(this IDistributedApplicationBuilder builder, string name, Action<IResourceBuilder<AzureServiceBusResource>, ResourceModuleConstruct, ServiceBusNamespace>? configureResource)
{
builder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var serviceBusNamespace = new ServiceBusNamespace(construct, name: name);
Expand Down
2 changes: 2 additions & 0 deletions src/Aspire.Hosting.Azure.SignalR/AzureSignalRExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public static IResourceBuilder<AzureSignalRResource> AddAzureSignalR(this IDistr
[Experimental("ASPIRE0001", UrlFormat = "https://aka.ms/dotnet/aspire/diagnostics#{0}")]
public static IResourceBuilder<AzureSignalRResource> AddAzureSignalR(this IDistributedApplicationBuilder builder, string name, Action<IResourceBuilder<AzureSignalRResource>, ResourceModuleConstruct, SignalRService>? configureResource)
{
builder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var service = new SignalRService(construct, name: name);
Expand Down
2 changes: 2 additions & 0 deletions src/Aspire.Hosting.Azure.Sql/AzureSqlExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ public static class AzureSqlExtensions
{
internal static IResourceBuilder<SqlServerServerResource> PublishAsAzureSqlDatabase(this IResourceBuilder<SqlServerServerResource> builder, Action<IResourceBuilder<AzureSqlServerResource>, ResourceModuleConstruct, SqlServer, IEnumerable<SqlDatabase>>? configureResource, bool useProvisioner = false)
{
builder.ApplicationBuilder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var sqlServer = new SqlServer(construct, builder.Resource.Name);
Expand Down
2 changes: 2 additions & 0 deletions src/Aspire.Hosting.Azure.Storage/AzureStorageExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ public static IResourceBuilder<AzureStorageResource> AddAzureStorage(this IDistr
[Experimental("ASPIRE0001", UrlFormat = "https://aka.ms/dotnet/aspire/diagnostics#{0}")]
public static IResourceBuilder<AzureStorageResource> AddAzureStorage(this IDistributedApplicationBuilder builder, string name, Action<IResourceBuilder<AzureStorageResource>, ResourceModuleConstruct, StorageAccount>? configureResource)
{
builder.AddAzureProvisioning();

var configureConstruct = (ResourceModuleConstruct construct) =>
{
var storageAccount = construct.AddStorageAccount(
Expand Down
4 changes: 4 additions & 0 deletions src/Aspire.Hosting.Azure/AzureBicepResourceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ public static class AzureBicepResourceExtensions
/// <returns>An <see cref="IResourceBuilder{T}"/>.</returns>
public static IResourceBuilder<AzureBicepResource> AddBicepTemplate(this IDistributedApplicationBuilder builder, string name, string bicepFile)
{
builder.AddAzureProvisioning();

var path = Path.GetFullPath(Path.Combine(builder.AppHostDirectory, bicepFile));
var resource = new AzureBicepResource(name, templateFile: path, templateString: null);
return builder.AddResource(resource)
Expand All @@ -37,6 +39,8 @@ public static IResourceBuilder<AzureBicepResource> AddBicepTemplate(this IDistri
/// <returns>An <see cref="IResourceBuilder{T}"/>.</returns>
public static IResourceBuilder<AzureBicepResource> AddBicepTemplateString(this IDistributedApplicationBuilder builder, string name, string bicepContent)
{
builder.AddAzureProvisioning();

var resource = new AzureBicepResource(name, templateFile: null, templateString: bicepContent);
return builder.AddResource(resource)
.WithManifestPublishingCallback(resource.WriteToManifest);
Expand Down
2 changes: 2 additions & 0 deletions src/Aspire.Hosting.Azure/AzureConstructResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ public static class AzureConstructResourceExtensions
/// <returns></returns>
public static IResourceBuilder<AzureConstructResource> AddAzureConstruct(this IDistributedApplicationBuilder builder, string name, Action<ResourceModuleConstruct> configureConstruct)
{
builder.AddAzureProvisioning();

var resource = new AzureConstructResource(name, configureConstruct);
return builder.AddResource(resource)
.WithManifestPublishingCallback(resource.WriteToManifest);
Expand Down
19 changes: 19 additions & 0 deletions src/Aspire.Hosting.Azure/Exceptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Aspire.Hosting.Azure;

internal class AzureCliNotOnPathException : DistributedApplicationException
{
public AzureCliNotOnPathException() { }
public AzureCliNotOnPathException(string message) : base(message) { }
public AzureCliNotOnPathException(string message, Exception inner) : base(message, inner) { }
}

internal class FailedToApplyEnvironmentException : DistributedApplicationException
{
public FailedToApplyEnvironmentException() { }
public FailedToApplyEnvironmentException(string message) : base(message) { }
public FailedToApplyEnvironmentException(string message, Exception inner) : base(message, inner) { }
}

Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,14 @@ await UpdateStateAsync(resource, s => s with
})
.ConfigureAwait(false);
}
catch (MissingConfigurationException)
{
await UpdateStateAsync(resource, s => s with
{
State = new("Missing subscription configuration", KnownResourceStateStyles.Error)
})
.ConfigureAwait(false);
}
catch (Exception)
{
await UpdateStateAsync(resource, s => s with
Expand Down Expand Up @@ -263,6 +271,16 @@ await provisioner.GetOrCreateResourceAsync(

resource.ProvisioningTaskCompletionSource?.TrySetResult();
}
catch (AzureCliNotOnPathException ex)
{
resourceLogger.LogCritical("Using Azure resources during local development requires the installation of the Azure CLI. See https://aka.ms/dotnet/aspire/azcli for instructions.");
resource.ProvisioningTaskCompletionSource?.TrySetException(ex);
}
catch (MissingConfigurationException ex)
{
resourceLogger.LogCritical("Resource could not be provisioned because Azure subscription, location, and resource group information is missing. See https://aka.ms/dotnet/aspire/azure/provisioning for more details.");
resource.ProvisioningTaskCompletionSource?.TrySetException(ex);
}
catch (JsonException ex)
{
resourceLogger.LogError(ex, "Error provisioning {ResourceName} because user secrets file is not well-formed JSON.", resource.Name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,10 @@ await notificationService.PublishUpdateAsync(resource, state => state with

PopulateWellKnownParameters(resource, context);

var azPath = FindFullPathFromPath("az") ??
throw new InvalidOperationException("Azure CLI not found in PATH");
if (FindFullPathFromPath("az") is not { } azPath)
{
throw new AzureCliNotOnPathException();
}

var template = resource.GetBicepTemplateFile();

Expand Down
Loading