Configuration
WhatIF uses JSON configuration files injected at deploy time by the release pipeline.
Environment configuration
The following values must be confirmed before any configuration files are prepared.
- Source SQL Server connection values and authentication method
- Secret references, including Key Vault URLs and secret names
- Rating API endpoint and header requirements
Web Application Configuration
The web application reads runtime configuration from server-computed.json. All values are injected by the release pipeline at deploy time.
{
"baseurl_Configuration": {
"name": "baseurl_Configuration",
"code": "baseurl_Configuration",
"baseurl": "[ConfigurationApiEndpoint]"
},
"baseurl_Initiatives": {
"name": "baseurl_Initiatives",
"code": "baseurl_Initiatives",
"baseurl": "[InitiativesApiEndpoint]"
},
"baseurl_WhatIf": {
"name": "baseurl_WhatIf",
"code": "baseurl_WhatIf",
"baseurl": "[WhatIfApiEndpoint]"
},
"baseurl_Model": {
"name": "baseurl_Model",
"code": "baseurl_Model",
"baseurl": "[ModelApiEndpoint]"
},
"logging": {
"enabled": true,
"level": "[LogLevel]"
},
"appSettings": {
"pollIntervalMs": "[PollIntervalMilliseconds]",
"ensureCapacitiesEnabled": "[EnsureCapacitiesEnabled]",
"isForcePublishEnabled": "[IsForcePublishEnabled]",
"isDeletePipelineEnabled": "[IsDeletePipelineEnabled]",
"isConfigSyncPipelineEnabled": "[IsConfigSyncPipelineEnabled]",
"planDeterminationFactor": "[PlanDeterminationFactor]"
},
"fabric": {
"workspaceId": "[FabricWorkspaceId]",
"itemId": "[FabricItemId]",
"jobType": "Pipeline"
},
"fabricDeletePipeline": {
"workspaceId": "[FabricDeleteWorkspaceId]",
"itemId": "[FabricDeleteItemId]",
"jobType": "Pipeline"
},
"fabricConfigSyncPipeline": {
"workspaceId": "[FabricConfigSyncWorkspaceId]",
"itemId": "[FabricConfigSyncItemId]",
"jobType": "Pipeline"
},
"powerbi": {
"baseUrl": "[PowerBiBaseUrl]",
"scenarioCompareUrl": "[PowerBiScenarioCompareUrl]",
"scenarioFilterTemplate": "[PowerBiScenarioFilterTemplate]",
"customStyleTemplate": "[PowerBiCustomStyleTemplate]",
"pages": {
"premiumDisplacement": "[PowerBiPagePremiumDisplacement]",
"winnerLoser": "[PowerBiPageWinnerLoser]",
"segmentAnalysis": "[PowerBiPageSegmentAnalysis]",
"rateCompare": "[PowerBiPageRateCompare]",
"coverageUtilization": "[PowerBiPageCoverageUtilization]"
}
}
}
API Configuration
The API reads runtime configuration from appsettings.json. Sensitive values are stored in Azure Key Vault and referenced by secret name.
{
"LogSettings": {
"Enabled": true,
"LoggingLevel": "[LoggingLevel]",
"LogTo": "[LogTo]",
"Cloud": {
"ConnectionString": "[LogCloudConnectionString]"
}
},
"ConnectionStrings": {
"DefaultConnection": "[DefaultConnection]",
"BookDataLakehouseConnection": "[BookDataLakehouseConnection]",
"DashboardSummaryLakehouseConnection": "[DashboardSummaryLakehouseConnection]",
"RatingOutputLakeHouseConnection": "[RatingOutputLakeHouseConnection]"
},
"CorsSettings": {
"AllowedOrigins": [ "[CorsAllowedOrigins]" ]
},
"JwtSettings": {
"Secret": "[JwtSecret]",
"Issuer": "[JwtIssuer]",
"Audience": "[JwtAudience]",
"ExpirationMinutes": "[JwtExpirationMinutes]",
"RefreshTokenExpirationDays": "[JwtRefreshTokenExpirationDays]"
},
"Fabric": {
"TenantId": "[FabricTenantId]",
"ClientId": "[FabricClientId]",
"ClientSecret": "[FabricClientSecret]",
"UseKeyVault": "[FabricUseKeyVault]",
"KeyVaultUrl": "[FabricKeyVaultUrl]",
"ClientIdSecretName": "[FabricClientIdSecretName]",
"ClientKeySecretName": "[FabricClientKeySecretName]",
"TenantIdSecretName": "[FabricTenantIdSecretName]",
"EnableCapacityResume": "[FabricEnableCapacityResume]",
"EnableCapacitySuspend": "[FabricEnableCapacitySuspend]",
"SubscriptionId": "[FabricSubscriptionId]",
"ResourceGroupName": "[FabricResourceGroupName]",
"ApiVersion": "[FabricApiVersion]",
"CapacityResumeDelayMs": "[FabricCapacityResumeDelayMs]"
},
"MailConfig": {
"SmtpServer": "[MailSmtpServer]",
"MailId": "[MailId]",
"MailPassword": "[MailPassword]",
"MailFrom": "[MailFrom]",
"Subject": "[MailSubject]",
"Port": "[MailPort]"
},
"AppSettings": {
"BaseUrl": "[AppBaseUrl]"
}
}
Variable substitution
For nested properties, use dot notation:
ObjectName.PropertyName = Value
Example:
WhatIf.ClientId = your-client-id
WhatIf.ApiEndpoint = https://api.example.com
Variable sources
Embedded variables
Embedded variables are defined directly in the pipeline definition and are carried automatically on export and import. They are the recommended approach for environment-specific values such as resource names, endpoints, and workspace IDs.
Variable groups
Variable groups are stored separately in ADO and are not included in pipeline exports. They must be created independently in each target environment and are appropriate for sensitive values such as connection strings and service principal credentials. Required groups must be documented to ensure consistent configuration across environments.