Přeskočit na hlavní obsah

Configuration

Overview

Configuration management for AVA applications combining default and application-specific settings.

Install

Changelog

  • 0.0.1.47856-dev
    • BREAKING CHANGE: Dependency on ASOL.Core.Identity.Abstractions of the version 0.0.1.47819-dev

Application and Default Configuration

../images/configuration-01.png

The configuration is managed by the Configuration API described below. Configuration API manages two types of configuration:

Configuration TypePurposeResponsibility
Default ConfigurationCommon configuration for all applications, e.g., URLs to shared AVA services.Managed by internal AVA team
Application ConfigurationA configuration specific to a particular application code.Managed by application developers

Build Number

The DevOps pipeline builds, from both the application and default configuration, a configuration tied to a specific build number. The configuration with a build number is immutable and is strictly tied to the deployed version of the application with the same build number value.

.NET Configuration documentation

Learn more about how configuration works in .NET: Configuration - .NET.

Application configuration management

Application configuration management is provided by the ASOL.Customization.API service.

Swagger: https://{environment}.avaplace.com/api/asol/customization/swagger/index.html

Application configuration endpoints

MethodEndpointDescription
GET/api/v1/Configuration/application/{applicationCode}Get application configuration
GET/api/v1/Configuration/application/{applicationCode}/simplifiedGet application configuration - simplified
GET/api/v1/Configuration/application/{applicationCode}/formattedGet application configuration - formatted
POST/api/v1/Configuration/application/{applicationCode}Create new application configuration
PUT/api/v1/Configuration/application/{applicationCode}/code/{code}Update application configuration
DELETE/api/v1/Configuration/application/{applicationCode}/code/{code}Delete application configuration
GET/api/v1/ConfigurationProvider?applicationCode={applicationCode}&buildNumber={buildNumber}&accessLevel=PublicGet currently used application configuration for the specified buildNumber

The application configuration that is retrieved from the application configuration endpoints already contains the common default configuration. So even if no application configuration has been created yet, GET endpoints will return the default and common configuration.

Hierarchy configuration is explained in this chapter - Binding hierarchies

Important:

  • Any application configuration changes will take effect after the next application deployment.
  • Do not store any passwords or secret information to Configuration API. The data is not encrypted.

Authorization

  • The user must be assigned the ASOLEU-Product-AP-.Developer role
  • For a concrete application and non-production stages the user must be assigned the {applicationCode}.User role or the {applicationCode}.Owner role
  • For a concrete application and production stages the user must be assigned the {applicationCode}.Owner role

Create application configuration

POST https://{environment}.avaplace.com/api/asol/customization/api/v1/configuration/application/{applicationCode}
Content-Type: application/json

{
"code": "MyOptions:MyTestFrequency",
"value": "1"
}

Update application configuration

PUT https://{environment}.avaplace.com/api/asol/customization/api/v1/configuration/application/{applicationCode}/code/MyOptions:MyTestFrequency
Content-Type: application/json

{
"value": "5"
}

Get application configuration - basic response

GET https://{environment}.avaplace.com/api/asol/customization/api/v1/configuration/application/{applicationCode}
{
"totalCount": 99,
"items": [
// Default configuration
{
"code": "AuthorizationServiceOptions:BaseUrl",
"value": "https://avaplace.com/api/asol/idm",
"isDefault": true
},
// ... other default configuration ...

// Application configuration
{
"code": "MyOptions:MyTestFrequency",
"value": "5",
"isDefault": false
},
// ... other application configuration ...
]
}

Get application configuration - simplified response

Endpoint providing simplified application configuration: key-value format.

GET https://{environment}.avaplace.com/api/asol/customization/api/v1/configuration/application/{applicationCode}/simplified
{
// Default configuration
"AuthorizationServiceOptions:BaseUrl": "https://avaplace.com/api/asol/idm",
// ... other default configuration ...

// Application configuration
"MyOptions:MyTestFrequency": "5",
// ... other application configuration ...
}

Get application configuration - formatted response

Retrieves a preview of JSON formatted application configuration. EXPERIMENTAL FEATURE - do not copy to appsettings.json

GET https://{environment}.avaplace.com/api/asol/customization/api/v1/configuration/application/{applicationCode}/formatted
{
// Default configuration
"AuthorizationServiceOptions": {
"BaseUrl": "https://avaplace.com/api/asol/idm",
"ServiceRoleStrictMode": "Exception"
},
// ... other default configuration ...

// Application configuration
"MyOptions": {
"MyTestFrequency": "5"
}
// ... other application configuration ...
}

Implement and consume application configuration

The implementation for obtaining remote application configuration from the ASOL.Customization.API service is implemented in the NuGet package ASOL.Core.Configuration.

Register ASOL Configuration Source

using ASOL.Core.Configuration.Extensions;

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostBuilderContext, configurationBuilder) => {
configurationBuilder.AddAsolConfiguration(hostBuilderContext.HostingEnvironment);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.AddTelemetryLogger();

or

using ASOL.Core.Configuration.Extensions;

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddAsolConfiguration(builder.Environment);

Configuration file appsettings.ava-dev.json for DEV environment

Use the appsettings.ava-dev.json configuration file to store your DEV stage shared secrets.

{
"SsoAuth": {
"Authority": "https://dev.avaplace.com/api/asol/idp",
"ClientId": "ASxOL-MyOwnProject-AP-",
"ClientSecret": "<ADD YOUR DEV STAGE SSO SECRET>"
},
"Messaging": {
"RabbitMq": {
"UserName": "ASxOL-MyOwnProject-AP-",
"Password": "<ADD YOUR DEV STAGE MESSAGING SECRET>"
}
}
}

IsAsolDevStaging and IsAsolDemoStaging

  • IsAsolBetaStaging extension method determines whether the application is running in the BETA environment.
  • IsAsolDevelopStaging extension method determines whether the application is running in the DEVELOP environment.
  • IsAsolDevStaging extension method determines whether the application is running in the DEV environment.
  • IsAsolDemoStaging extension method determines whether the application is running in the DEMO environment.
  • IsAsolNonProductionStaging extension method determines whether the application is running in the BETA or DEVELOP or DEV or DEMO environment.
// example - show swagger on localhost, beta, develop, dev and demo stage
app.MapWhen(r => r.Request.Path.StartsWithSegments("/swagger")
&& (env.IsDevelopment() || env.IsAsolNonProductionStaging()), cfgPath =>
{
...
});